diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/Antarchy.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/Antarchy.java index ea6644dd..64ce493a 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/Antarchy.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/Antarchy.java @@ -1,6 +1,9 @@ package com.craisinlord.antarchy; +import com.craisinlord.antarchy.content.computer.AntarchyArchiveLocators; +import com.craisinlord.antarchy.content.AntarchyAnthologyHooks; import com.craisinlord.antarchy.content.util.AttributeRangeInit; +import com.craisinlord.antarchy.content.worldgen.VillagePoolAdditions; import com.craisinlord.integrated_api.events.lifecycle.ServerGoingToStartEvent; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -8,12 +11,17 @@ import org.apache.logging.log4j.Logger; public class Antarchy { public static final String MODID = "antarchy"; + public static final String MOD_VERSION = "2.0.0"; public static final Logger LOGGER = LogManager.getLogger(); + public static volatile boolean physicalClient; public static void init() { AttributeRangeInit.apply(); + AntarchyArchiveLocators.register(); + AntarchyAnthologyHooks.register(); ServerGoingToStartEvent.EVENT.addListener(Antarchy::serverAboutToStart); } private static void serverAboutToStart(final ServerGoingToStartEvent event) { + VillagePoolAdditions.apply(event.getServer()); } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/entity/EntityReach.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/entity/EntityReach.java new file mode 100644 index 00000000..5c407674 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/entity/EntityReach.java @@ -0,0 +1,77 @@ +package com.craisinlord.antarchy.compat.entity; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.google.common.collect.ImmutableMultimap; +import com.google.common.collect.Multimap; +import java.nio.charset.StandardCharsets; +import java.util.UUID; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeInstance; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.player.Player; +import org.jetbrains.annotations.Nullable; + +public final class EntityReach { + public static final double DEFAULT_ENTITY_INTERACTION_RANGE = 3.0D; + public static final double DEFAULT_BLOCK_INTERACTION_RANGE = 4.5D; + private static final double CREATIVE_ENTITY_BONUS = 2.0D; + private static final double CREATIVE_BLOCK_BONUS = 0.5D; + + private EntityReach() { + } + + @Nullable + public static Attribute attribute() { + java.util.function.Supplier supplier = AntarchyObjects.ENTITY_REACH; + return supplier == null ? null : supplier.get(); + } + + @Nullable + public static AttributeInstance instance(LivingEntity entity) { + Attribute attribute = attribute(); + return attribute == null ? null : entity.getAttribute(attribute); + } + + public static double entityInteractionRange(LivingEntity entity) { + AttributeInstance instance = instance(entity); + double range = instance != null ? instance.getValue() : DEFAULT_ENTITY_INTERACTION_RANGE; + if (entity instanceof Player player && player.isCreative()) { + range += CREATIVE_ENTITY_BONUS; + } + return range; + } + + public static double blockInteractionRange(Player player) { + return DEFAULT_BLOCK_INTERACTION_RANGE + (player.isCreative() ? CREATIVE_BLOCK_BONUS : 0.0D); + } + + public static UUID modifierId(ResourceLocation id) { + return UUID.nameUUIDFromBytes(id.toString().getBytes(StandardCharsets.UTF_8)); + } + + public static AttributeModifier modifier(ResourceLocation id, double amount, AttributeModifier.Operation operation) { + return new AttributeModifier(modifierId(id), id.toString(), amount, operation); + } + + public static void addModifier(ImmutableMultimap.Builder builder, ResourceLocation id, double amount) { + Attribute attribute = attribute(); + if (attribute != null) { + builder.put(attribute, modifier(id, amount, AttributeModifier.Operation.ADDITION)); + } + } + + public static Multimap withMainhandModifier(Multimap base, EquipmentSlot slot, + ResourceLocation id, double amount) { + Attribute attribute = attribute(); + if (slot != EquipmentSlot.MAINHAND || attribute == null) { + return base; + } + ImmutableMultimap.Builder builder = ImmutableMultimap.builder(); + builder.putAll(base); + builder.put(attribute, modifier(id, amount, AttributeModifier.Operation.ADDITION)); + return builder.build(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/infinity/InfinityCompatBridge.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/infinity/InfinityCompatBridge.java index 73a35c87..85dc9177 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/infinity/InfinityCompatBridge.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/infinity/InfinityCompatBridge.java @@ -4,6 +4,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.MinecraftServer; import net.minecraft.util.RandomSource; public interface InfinityCompatBridge { @@ -22,15 +23,14 @@ public interface InfinityCompatBridge { return getRandomDimensionId(random); } - default boolean requestWarp(ServerPlayer player, ResourceLocation dimensionId) { - return false; + default InfinityWarpResult requestWarp(ServerPlayer player, ResourceLocation dimensionId) { + return InfinityWarpResult.REJECTED; + } + + default InfinityWarpResult requestDimensionCreation(MinecraftServer server, ResourceLocation dimensionId) { + return InfinityWarpResult.REJECTED; } - /** - * Converts an already-ignited vanilla Nether portal frame at {@code anyPortalBlockPos} into a real, permanent - * Infinite Dimensions portal to {@code dimensionId}, generating the dimension first if it doesn't exist yet. - * Mirrors what Infinity itself does when a written book is thrown into a lit portal. - */ default boolean createPhysicalPortal(ServerLevel level, BlockPos anyPortalBlockPos, ResourceLocation dimensionId) { return false; } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/infinity/InfinityConfigRefresh.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/infinity/InfinityConfigRefresh.java new file mode 100644 index 00000000..c0f91f7b --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/infinity/InfinityConfigRefresh.java @@ -0,0 +1,82 @@ +package com.craisinlord.antarchy.compat.infinity; + +import com.craisinlord.antarchy.Antarchy; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import net.minecraft.core.Registry; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; + +import java.io.Reader; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public final class InfinityConfigRefresh { + private static final Map> CHECKED_FILES = Map.of( + "mobs.json", BuiltInRegistries.ENTITY_TYPE, + "items.json", BuiltInRegistries.ITEM, + "effects.json", BuiltInRegistries.MOB_EFFECT + ); + + private InfinityConfigRefresh() { + } + + public static void refreshIfStale(Path configDir) { + Path modularDir = configDir.resolve("infinity").resolve("modular"); + Path invocationLock = modularDir.resolve("invocation.lock"); + if (!Files.exists(invocationLock)) { + return; + } + + Path antarchyDir = modularDir.resolve(Antarchy.MODID); + List staleIds = new ArrayList<>(); + CHECKED_FILES.forEach((fileName, registry) -> collectStaleIds(antarchyDir.resolve(fileName), registry, staleIds)); + if (staleIds.isEmpty()) { + return; + } + + try { + Files.delete(invocationLock); + Antarchy.LOGGER.info( + "[Antarchy] Infinite Dimensions config lists unregistered Antarchy content {}; its config will regenerate on next world join", + staleIds + ); + } catch (Exception exception) { + Antarchy.LOGGER.warn("[Antarchy] Failed to reset stale Infinite Dimensions config at {}", invocationLock, exception); + } + } + + private static void collectStaleIds(Path file, Registry registry, List staleIds) { + if (!Files.exists(file)) { + return; + } + + try (Reader reader = Files.newBufferedReader(file, StandardCharsets.UTF_8)) { + JsonElement root = JsonParser.parseReader(reader); + if (!root.isJsonObject() || !root.getAsJsonObject().has("elements")) { + return; + } + for (JsonElement element : root.getAsJsonObject().getAsJsonArray("elements")) { + if (!element.isJsonObject()) { + continue; + } + JsonObject entry = element.getAsJsonObject(); + if (!entry.has("key")) { + continue; + } + String key = entry.get("key").getAsString(); + ResourceLocation id = ResourceLocation.tryParse(key); + if (id != null && Antarchy.MODID.equals(id.getNamespace()) && !registry.containsKey(id)) { + staleIds.add(key); + } + } + } catch (Exception exception) { + Antarchy.LOGGER.warn("[Antarchy] Failed to read Infinite Dimensions config {}", file, exception); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/infinity/InfinityWarpResult.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/infinity/InfinityWarpResult.java index 524a4696..096a3832 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/infinity/InfinityWarpResult.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/infinity/InfinityWarpResult.java @@ -1,6 +1,5 @@ package com.craisinlord.antarchy.compat.infinity; -/** Shared result vocabulary for future asynchronous Infinity dimension integrations. */ public enum InfinityWarpResult { REJECTED, PENDING, diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/item/AntarchyItemComponent.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/item/AntarchyItemComponent.java index 6e2e7443..9568086c 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/item/AntarchyItemComponent.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/item/AntarchyItemComponent.java @@ -2,10 +2,8 @@ package com.craisinlord.antarchy.compat.item; import java.util.function.Function; import net.minecraft.nbt.CompoundTag; -import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; -/** NBT-backed stand-in for the 1.20.1 port of Minecraft's 1.20.5+ item components. */ public final class AntarchyItemComponent { private final String key; private final Function reader; @@ -22,14 +20,22 @@ public final class AntarchyItemComponent { } public T get(ItemStack stack) { + if (!this.has(stack)) { + return null; + } return this.reader.apply(stack.getTag()); } public T getOrDefault(ItemStack stack, T fallback) { - return this.has(stack) ? this.get(stack) : fallback; + T value = this.get(stack); + return value != null ? value : fallback; } public void set(ItemStack stack, T value) { + if (value == null) { + this.remove(stack); + return; + } Object encoded = this.writer.apply(value); CompoundTag tag = stack.getOrCreateTag(); if (encoded instanceof Integer integer) tag.putInt(this.key, integer); @@ -49,7 +55,7 @@ public final class AntarchyItemComponent { return new AntarchyItemComponent<>(key, tag -> tag.getInt(key), value -> value); } - public static AntarchyItemComponent marker(String key) { - return new AntarchyItemComponent<>(key, tag -> null, value -> true); + public static AntarchyItemComponent marker(String key) { + return new AntarchyItemComponent<>(key, tag -> net.minecraft.util.Unit.INSTANCE, value -> true); } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/item/ArmorDurability.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/item/ArmorDurability.java new file mode 100644 index 00000000..3e8e681f --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/item/ArmorDurability.java @@ -0,0 +1,17 @@ +package com.craisinlord.antarchy.compat.item; + +import net.minecraft.world.item.ArmorItem; + +public final class ArmorDurability { + private ArmorDurability() { + } + + public static int forType(ArmorItem.Type type, int multiplier) { + return switch (type) { + case HELMET -> 11 * multiplier; + case CHESTPLATE -> 16 * multiplier; + case LEGGINGS -> 15 * multiplier; + case BOOTS -> 13 * multiplier; + }; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/item/WeaponAttributes.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/item/WeaponAttributes.java new file mode 100644 index 00000000..3da75f2b --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/item/WeaponAttributes.java @@ -0,0 +1,46 @@ +package com.craisinlord.antarchy.compat.item; + +import com.craisinlord.antarchy.compat.entity.EntityReach; +import com.google.common.collect.ImmutableMultimap; +import java.util.UUID; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.Tier; + +public final class WeaponAttributes { + private WeaponAttributes() { + } + + public static ImmutableMultimap.Builder base(Tier tier, float attackDamage, float attackSpeed) { + ImmutableMultimap.Builder builder = ImmutableMultimap.builder(); + builder.put(Attributes.ATTACK_DAMAGE, new AttributeModifier(Ids.ATTACK_DAMAGE, "Weapon modifier", + attackDamage + tier.getAttackDamageBonus(), AttributeModifier.Operation.ADDITION)); + builder.put(Attributes.ATTACK_SPEED, new AttributeModifier(Ids.ATTACK_SPEED, "Weapon modifier", + attackSpeed, AttributeModifier.Operation.ADDITION)); + return builder; + } + + public static void add(ImmutableMultimap.Builder builder, Attribute attribute, ResourceLocation id, double amount) { + builder.put(attribute, EntityReach.modifier(id, amount, AttributeModifier.Operation.ADDITION)); + } + + public static UUID baseAttackDamageId() { + return Ids.ATTACK_DAMAGE; + } + + public static UUID baseAttackSpeedId() { + return Ids.ATTACK_SPEED; + } + + private static final class Ids extends Item { + static final UUID ATTACK_DAMAGE = BASE_ATTACK_DAMAGE_UUID; + static final UUID ATTACK_SPEED = BASE_ATTACK_SPEED_UUID; + + private Ids() { + super(new Item.Properties()); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/network/ByteBufCodecs.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/network/ByteBufCodecs.java deleted file mode 100644 index 9a914c8b..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/network/ByteBufCodecs.java +++ /dev/null @@ -1,93 +0,0 @@ -package com.craisinlord.antarchy.compat.network; - -import io.netty.buffer.ByteBuf; -import net.minecraft.network.FriendlyByteBuf; - -public final class ByteBufCodecs { - private ByteBufCodecs() { - } - - public static final StreamCodec VAR_INT = new StreamCodec<>() { - @Override - public Integer decode(ByteBuf buf) { - return ((FriendlyByteBuf) buf).readVarInt(); - } - - @Override - public void encode(ByteBuf buf, Integer value) { - ((FriendlyByteBuf) buf).writeVarInt(value); - } - }; - - public static final StreamCodec VAR_LONG = new StreamCodec<>() { - @Override - public Long decode(ByteBuf buf) { - return ((FriendlyByteBuf) buf).readVarLong(); - } - - @Override - public void encode(ByteBuf buf, Long value) { - ((FriendlyByteBuf) buf).writeVarLong(value); - } - }; - - public static final StreamCodec BOOL = new StreamCodec<>() { - @Override - public Boolean decode(ByteBuf buf) { - return ((FriendlyByteBuf) buf).readBoolean(); - } - - @Override - public void encode(ByteBuf buf, Boolean value) { - ((FriendlyByteBuf) buf).writeBoolean(value); - } - }; - - public static final StreamCodec BYTE = new StreamCodec<>() { - @Override - public Byte decode(ByteBuf buf) { - return ((FriendlyByteBuf) buf).readByte(); - } - - @Override - public void encode(ByteBuf buf, Byte value) { - ((FriendlyByteBuf) buf).writeByte(value); - } - }; - - public static final StreamCodec FLOAT = new StreamCodec<>() { - @Override - public Float decode(ByteBuf buf) { - return ((FriendlyByteBuf) buf).readFloat(); - } - - @Override - public void encode(ByteBuf buf, Float value) { - ((FriendlyByteBuf) buf).writeFloat(value); - } - }; - - public static final StreamCodec DOUBLE = new StreamCodec<>() { - @Override - public Double decode(ByteBuf buf) { - return ((FriendlyByteBuf) buf).readDouble(); - } - - @Override - public void encode(ByteBuf buf, Double value) { - ((FriendlyByteBuf) buf).writeDouble(value); - } - }; - - public static final StreamCodec STRING_UTF8 = new StreamCodec<>() { - @Override - public String decode(ByteBuf buf) { - return ((FriendlyByteBuf) buf).readUtf(); - } - - @Override - public void encode(ByteBuf buf, String value) { - ((FriendlyByteBuf) buf).writeUtf(value); - } - }; -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/network/CustomPacketPayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/network/CustomPacketPayload.java deleted file mode 100644 index ebd93786..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/network/CustomPacketPayload.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.craisinlord.antarchy.compat.network; - -import net.minecraft.resources.ResourceLocation; - -public interface CustomPacketPayload { - Type type(); - - record Type(ResourceLocation id) { - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/network/StreamCodec.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/network/StreamCodec.java deleted file mode 100644 index 724069cd..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/network/StreamCodec.java +++ /dev/null @@ -1,204 +0,0 @@ -package com.craisinlord.antarchy.compat.network; - -import java.util.function.Function; - -public interface StreamCodec { - V decode(B buf); - - void encode(B buf, V value); - - default StreamCodec map(Function to, Function from) { - StreamCodec self = this; - return new StreamCodec<>() { - @Override - public O decode(B buf) { - return to.apply(self.decode(buf)); - } - - @Override - public void encode(B buf, O value) { - self.encode(buf, from.apply(value)); - } - }; - } - - static StreamCodec unit(V value) { - return new StreamCodec<>() { - @Override - public V decode(B buf) { - return value; - } - - @Override - public void encode(B buf, V value2) { - } - }; - } - - static StreamCodec composite( - StreamCodec codec1, Function getter1, - Function factory) { - return new StreamCodec<>() { - @Override - public V decode(B buf) { - C1 v1 = codec1.decode(buf); - return factory.apply(v1); - } - - @Override - public void encode(B buf, V value) { - codec1.encode(buf, getter1.apply(value)); - } - }; - } - - interface Factory2 { - V create(C1 c1, C2 c2); - } - - static StreamCodec composite( - StreamCodec codec1, Function getter1, - StreamCodec codec2, Function getter2, - Factory2 factory) { - return new StreamCodec<>() { - @Override - public V decode(B buf) { - C1 v1 = codec1.decode(buf); - C2 v2 = codec2.decode(buf); - return factory.create(v1, v2); - } - - @Override - public void encode(B buf, V value) { - codec1.encode(buf, getter1.apply(value)); - codec2.encode(buf, getter2.apply(value)); - } - }; - } - - interface Factory3 { - V create(C1 c1, C2 c2, C3 c3); - } - - static StreamCodec composite( - StreamCodec codec1, Function getter1, - StreamCodec codec2, Function getter2, - StreamCodec codec3, Function getter3, - Factory3 factory) { - return new StreamCodec<>() { - @Override - public V decode(B buf) { - C1 v1 = codec1.decode(buf); - C2 v2 = codec2.decode(buf); - C3 v3 = codec3.decode(buf); - return factory.create(v1, v2, v3); - } - - @Override - public void encode(B buf, V value) { - codec1.encode(buf, getter1.apply(value)); - codec2.encode(buf, getter2.apply(value)); - codec3.encode(buf, getter3.apply(value)); - } - }; - } - - interface Factory4 { - V create(C1 c1, C2 c2, C3 c3, C4 c4); - } - - static StreamCodec composite( - StreamCodec codec1, Function getter1, - StreamCodec codec2, Function getter2, - StreamCodec codec3, Function getter3, - StreamCodec codec4, Function getter4, - Factory4 factory) { - return new StreamCodec<>() { - @Override - public V decode(B buf) { - C1 v1 = codec1.decode(buf); - C2 v2 = codec2.decode(buf); - C3 v3 = codec3.decode(buf); - C4 v4 = codec4.decode(buf); - return factory.create(v1, v2, v3, v4); - } - - @Override - public void encode(B buf, V value) { - codec1.encode(buf, getter1.apply(value)); - codec2.encode(buf, getter2.apply(value)); - codec3.encode(buf, getter3.apply(value)); - codec4.encode(buf, getter4.apply(value)); - } - }; - } - - interface Factory5 { - V create(C1 c1, C2 c2, C3 c3, C4 c4, C5 c5); - } - - static StreamCodec composite( - StreamCodec codec1, Function getter1, - StreamCodec codec2, Function getter2, - StreamCodec codec3, Function getter3, - StreamCodec codec4, Function getter4, - StreamCodec codec5, Function getter5, - Factory5 factory) { - return new StreamCodec<>() { - @Override - public V decode(B buf) { - C1 v1 = codec1.decode(buf); - C2 v2 = codec2.decode(buf); - C3 v3 = codec3.decode(buf); - C4 v4 = codec4.decode(buf); - C5 v5 = codec5.decode(buf); - return factory.create(v1, v2, v3, v4, v5); - } - - @Override - public void encode(B buf, V value) { - codec1.encode(buf, getter1.apply(value)); - codec2.encode(buf, getter2.apply(value)); - codec3.encode(buf, getter3.apply(value)); - codec4.encode(buf, getter4.apply(value)); - codec5.encode(buf, getter5.apply(value)); - } - }; - } - - interface Factory6 { - V create(C1 c1, C2 c2, C3 c3, C4 c4, C5 c5, C6 c6); - } - - static StreamCodec composite( - StreamCodec codec1, Function getter1, - StreamCodec codec2, Function getter2, - StreamCodec codec3, Function getter3, - StreamCodec codec4, Function getter4, - StreamCodec codec5, Function getter5, - StreamCodec codec6, Function getter6, - Factory6 factory) { - return new StreamCodec<>() { - @Override - public V decode(B buf) { - C1 v1 = codec1.decode(buf); - C2 v2 = codec2.decode(buf); - C3 v3 = codec3.decode(buf); - C4 v4 = codec4.decode(buf); - C5 v5 = codec5.decode(buf); - C6 v6 = codec6.decode(buf); - return factory.create(v1, v2, v3, v4, v5, v6); - } - - @Override - public void encode(B buf, V value) { - codec1.encode(buf, getter1.apply(value)); - codec2.encode(buf, getter2.apply(value)); - codec3.encode(buf, getter3.apply(value)); - codec4.encode(buf, getter4.apply(value)); - codec5.encode(buf, getter5.apply(value)); - codec6.encode(buf, getter6.apply(value)); - } - }; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/config/AntarchyConfigCatalog.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/config/AntarchyConfigCatalog.java index cda374f1..c1e8e88a 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/config/AntarchyConfigCatalog.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/config/AntarchyConfigCatalog.java @@ -9,17 +9,35 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -/** Shared reflection metadata for presenting the Antarchy settings consistently. */ public final class AntarchyConfigCatalog { - public enum Section { MOBS, TOOLS, MISC } - public enum ValueType { BOOLEAN, INTEGER, DOUBLE, FLOAT, STRING } + public enum Section { + MOBS, + TOOLS, + MISC + } - public record Definition(String name, Section section, ValueType valueType, - Class setterType, Method getter, Method setter) {} + public enum ValueType { + BOOLEAN, + INTEGER, + DOUBLE, + FLOAT, + STRING + } + + public record Definition( + String name, + Section section, + ValueType valueType, + Class setterType, + Method getter, + Method setter + ) { + } private static final List DEFINITIONS = buildDefinitions(); - private AntarchyConfigCatalog() {} + private AntarchyConfigCatalog() { + } public static List definitions() { return DEFINITIONS; @@ -38,8 +56,11 @@ public final class AntarchyConfigCatalog { .filter(AntarchyConfigCatalog::isPublicStatic) .filter(method -> method.getParameterCount() == 0) .filter(method -> method.getReturnType() != Void.TYPE) - .collect(java.util.stream.Collectors.toMap(Method::getName, method -> method, - (first, ignored) -> first, LinkedHashMap::new)); + .collect(java.util.stream.Collectors.toMap( + Method::getName, + method -> method, + (first, ignored) -> first, + LinkedHashMap::new)); return Arrays.stream(AntarchySettings.class.getMethods()) .filter(AntarchyConfigCatalog::isPublicStatic) @@ -54,18 +75,35 @@ public final class AntarchyConfigCatalog { private static Definition definitionFor(Method setter, Map getters) { String name = decapitalize(setter.getName().substring(3)); Method getter = getters.get(name); - if (getter == null) return null; + if (getter == null) { + return null; + } + Class setterType = setter.getParameterTypes()[0]; ValueType valueType = valueTypeFor(setterType, getter.getReturnType()); - return valueType == null ? null : new Definition(name, sectionFor(name), valueType, setterType, getter, setter); + if (valueType == null) { + return null; + } + + return new Definition(name, sectionFor(name), valueType, setterType, getter, setter); } private static ValueType valueTypeFor(Class setterType, Class getterType) { - if (setterType == boolean.class && getterType == boolean.class) return ValueType.BOOLEAN; - if (setterType == int.class && getterType == int.class) return ValueType.INTEGER; - if (setterType == double.class && getterType == double.class) return ValueType.DOUBLE; - if (setterType == float.class && getterType == float.class) return ValueType.FLOAT; - if (setterType == String.class && ResourceKey.class.isAssignableFrom(getterType)) return ValueType.STRING; + if (setterType == boolean.class && getterType == boolean.class) { + return ValueType.BOOLEAN; + } + if (setterType == int.class && getterType == int.class) { + return ValueType.INTEGER; + } + if (setterType == double.class && getterType == double.class) { + return ValueType.DOUBLE; + } + if (setterType == float.class && getterType == float.class) { + return ValueType.FLOAT; + } + if (setterType == String.class && ResourceKey.class.isAssignableFrom(getterType)) { + return ValueType.STRING; + } return null; } @@ -75,11 +113,20 @@ public final class AntarchyConfigCatalog { } private static String decapitalize(String value) { - return value.isEmpty() ? value : Character.toLowerCase(value.charAt(0)) + value.substring(1); + if (value.isEmpty()) { + return value; + } + return Character.toLowerCase(value.charAt(0)) + value.substring(1); } private static Section sectionFor(String name) { - return isMiscSetting(name) ? Section.MISC : isToolSetting(name) ? Section.TOOLS : Section.MOBS; + if (isMiscSetting(name)) { + return Section.MISC; + } + if (isToolSetting(name)) { + return Section.TOOLS; + } + return Section.MOBS; } private static boolean isMiscSetting(String name) { @@ -87,32 +134,66 @@ public final class AntarchyConfigCatalog { || name.equals("rainbowAntsLeadToInfinityDimensions") || name.equals("permanentPortalsEnabled") || name.equals("permanentPortalsFlintAndSteelEnabled") - || name.equals("elythiaPortalEnabled") || name.equals("thoraxisPortalEnabled") - || name.equals("cavarynPortalEnabled") || name.equals("hushweedSporeLifetimeSeconds") - || name.equals("elythiaFireflyParticlesEnabled") || name.equals("duplicatorTreeEnabled") - || name.equals("glowVinesUnderLeaves") || name.equals("swingThroughGrassEnabled") + || name.equals("elythiaPortalEnabled") + || name.equals("thoraxisPortalEnabled") + || name.equals("cavarynPortalEnabled") + || name.startsWith("portalGunCanFireThrough") + || name.startsWith("portalGunSeeThrough") + || name.startsWith("portalGunFancy") + || name.equals("portalGunCanPortalsResizeWhenCreated") + || name.equals("portalGunCanPortalProjectilesChunkload") + || name.equals("portalGunMaxShootDistance") + || name.equals("portalGunMinFloorExitSpeed") + || name.equals("portalGunMaxLiveViews") + || name.equals("portalGunMaxExitSpeed") + || name.startsWith("portalGunMoon") + || name.equals("hushweedSporeLifetimeSeconds") + || name.equals("elythiaFireflyParticlesEnabled") + || name.equals("duplicatorTreeEnabled") + || name.equals("glowVinesUnderLeaves") + || name.equals("swingThroughGrassEnabled") || name.equals("fabricKeybindingConflictFixEnabled") - || name.equals("experimentalSettingsPopupDisabled") || name.equals("unlockAllArchives") - || name.equals("entitySpecificFireOverlayEnabled") || name.equals("dreamSandEnabled") - || name.startsWith("dreamSand") || name.equals("ichorWitherEnabled") - || name.startsWith("diamondMinecart") || name.startsWith("hoverboard"); + || name.equals("experimentalSettingsPopupDisabled") + || name.equals("unlockAllArchives") + || name.equals("entitySpecificFireOverlayEnabled") + || name.startsWith("dreamSand") + || name.equals("ichorWitherEnabled") + || name.startsWith("diamondMinecart") + || name.startsWith("hoverboard"); } private static boolean isToolSetting(String name) { - return name.equals("sizeChangingRaysEnabled") || name.startsWith("sizeRay") - || name.equals("shrinkingPotionDelta") || name.equals("growthPotionDelta") - || name.startsWith("ultimate") || name.startsWith("battleAxe") - || name.startsWith("bigBertha") || name.startsWith("attitudeAdjuster") - || name.startsWith("scorpionWhip") || name.startsWith("bloodCrystal") - || name.startsWith("nightmareHelmet") || name.startsWith("nightmareChestplate") - || name.startsWith("nightmareLeggings") || name.startsWith("nightmareBoots") - || name.startsWith("nightmareArmorDreadAura") || name.startsWith("primordialArmor") - || name.startsWith("nightmareSword") || name.startsWith("basiliskDagger") - || name.startsWith("squidzooka") || name.equals("invertProjectilesFromInvertedPlayers") - || name.startsWith("gravityGun") || name.startsWith("critterCage") + return name.equals("sizeChangingRaysEnabled") + || name.startsWith("sizeRay") + || name.startsWith("temporalTuner") + || name.equals("shrinkingPotionDelta") + || name.equals("growthPotionDelta") + || name.startsWith("ultimate") + || name.startsWith("battleAxe") + || name.startsWith("bigBertha") + || name.startsWith("attitudeAdjuster") + || name.startsWith("scorpionWhip") + || name.startsWith("bloodCrystal") + || name.startsWith("nightmareHelmet") + || name.startsWith("nightmareChestplate") + || name.startsWith("nightmareLeggings") + || name.startsWith("nightmareBoots") + || name.startsWith("nightmareArmorDreadAura") + || name.startsWith("primordialArmor") + || name.startsWith("nightmareSword") + || name.startsWith("basiliskDagger") + || name.startsWith("squidzooka") + || name.startsWith("gravityGun") + || name.startsWith("critterCage") || name.equals("potentNyxiteInvertedDurationSeconds") - || name.equals("corneaEarNightVisionSeconds") || name.startsWith("american") - || name.startsWith("mogglesVision") || name.equals("ductTapeRepairPercentPerUse") - || name.startsWith("fallenKingCrown"); + || name.equals("corneaEarNightVisionSeconds") + || name.startsWith("american") + || name.startsWith("mogglesVision") + || name.equals("ductTapeRepairPercentPerUse") + || name.startsWith("fallenKingCrown") + || name.startsWith("royalArmor") + || name.startsWith("royalGuardian") + || name.startsWith("royalAssailant") + || name.startsWith("royalWeapon"); } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java index df4311b1..d8a8f572 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java @@ -17,6 +17,7 @@ public final class AntarchySettings { private static boolean rainbowAntRequiresReagent = true; private static boolean rainbowAntRightClickDimension = true; private static boolean termiteRequiresReagent = false; + private static boolean termitesFearBlockLight = true; private static boolean termiteRightClickDimension = true; private static boolean antsStealFromChests = true; private static boolean duplicatorTreeEnabled = true; @@ -24,10 +25,13 @@ public final class AntarchySettings { private static boolean swingThroughGrassEnabled = true; private static boolean fabricKeybindingConflictFixEnabled = true; private static boolean experimentalSettingsPopupDisabled = true; + private static boolean unlockAllArchives = true; private static boolean sizeChangingRaysEnabled = true; private static double sizeRayMinScale = 0.1D; private static double sizeRayMaxScale = 10.0D; private static double sizeRayDeltaPerHit = 0.25D; + private static double temporalTunerMinRate = 0.1D; + private static double temporalTunerMaxRate = 3.0D; private static double shrinkingPotionDelta = 0.3D; private static double growthPotionDelta = 0.5D; private static double antDanceRadius = 5.0D; @@ -152,7 +156,6 @@ public final class AntarchySettings { private static double rpoLauncherExplosionDamage = 34.0D; private static double rpoLauncherExplosionRadius = 14.0D; private static double sizeRayCooldownSeconds = 1.0D; - private static boolean invertProjectilesFromInvertedPlayers = false; private static boolean gravityGunEnabled = true; private static boolean gravityGunBlocksEnabled = true; private static boolean gravityGunEntitiesEnabled = true; @@ -171,11 +174,7 @@ public final class AntarchySettings { private static double americanBonusSaturation = 1.0D; private static int americanRegenerationDurationTicks = 60; private static int americanRegenerationAmplifier = 0; - private static boolean dreamSandEnabled = true; private static boolean entitySpecificFireOverlayEnabled = true; - private static double dreamSandJumpVelocityMultiplier = 1.3D; - private static double dreamSandGravityMultiplier = 0.45D; - private static double dreamSandEffectDurationSeconds = 7.0D; private static double dreamSandFallingBlockGravityMultiplier = 0.4D; private static boolean ichorWitherEnabled = true; private static int nightmareHelmetArmorValue = 4; @@ -206,6 +205,11 @@ public final class AntarchySettings { private static int royalGuardianBootsArmorValue = 5; private static double royalGuardianArmorToughness = 4.0D; private static double royalGuardianArmorKnockbackResistance = 0.15D; + private static double royalGuardianHelmetJudgmentBonus = 0.06D; + private static double royalGuardianChestplateJudgmentBonus = 0.08D; + private static double royalGuardianLeggingsJudgmentBonus = 0.07D; + private static double royalGuardianBootsJudgmentBonus = 0.05D; + private static int royalGuardianJudgmentDurationTicks = 160; private static int royalAssailantHelmetArmorValue = 5; private static int royalAssailantChestplateArmorValue = 10; private static int royalAssailantLeggingsArmorValue = 8; @@ -217,43 +221,69 @@ public final class AntarchySettings { private static double royalAssailantLeggingsDoubleDamageChance = 0.07D; private static double royalAssailantBootsDoubleDamageChance = 0.05D; private static double royalGuardianSwordAttackDamage = 111.0D; + private static double giantFryingPanAttackDamage = 50.0D; + private static int giantFryingPanCookTimeTicks = 200; private static double royalGuardianSwordAttackSpeed = -2.5D; + private static int royalGuardianSwordElementalCooldownTicks = 120; + private static double royalGuardianSwordFirePrimaryDamage = 22.0D; + private static double royalGuardianSwordFireSplashDamage = 14.0D; + private static double royalGuardianSwordFrostSpikeDamage = 9.0D; + private static double royalGuardianSwordStormPrimaryDamage = 16.0D; + private static double royalGuardianSwordStormJumpDamage = 14.0D; + private static int royalGuardianSwordStormMaxJumps = 4; + private static double royalGuardianSwordStormJumpRange = 9.0D; private static double royalAssailantBattleAxeAttackDamage = 151.0D; private static double royalAssailantBattleAxeAttackSpeed = -2.9D; - private static double royalWeaponAttackReachBonus = 1.0D; + private static double royalWeaponAttackReachBonus = 3.2D; private static double royalWeaponAttackKnockbackBonus = 1.0D; private static int royalWeaponDurability = 4608; private static int royalWeaponEnchantability = 30; private static int royalGuardianShieldDurability = 1008; + private static double royalGuardianMusterRange = 16.0D; + private static int royalGuardianMusterDurationTicks = 1200; + private static int royalGuardianMusterCooldownTicks = 500; + private static int royalGuardianMusterMobCap = 3; + private static double royalGuardianMusterDamageReduction = 0.40D; + private static double royalGuardianMusterAttackBonus = 0.50D; + private static double royalGuardianMusterSpeedBonus = 0.25D; + private static double royalGuardianMusterPassiveDamageFloor = 3.0D; + private static double royalGuardianBoundaryRadius = 9.0D; + private static int royalGuardianBoundaryDurationTicks = 120; + private static int royalGuardianBoundaryCooldownTicks = 700; + private static int royalGuardianBoundaryStrengthAmplifier = 1; + private static int royalGuardianBoundaryArrestTicks = 20; + private static int royalGuardianBoundaryDropTicks = 8; + private static int royalGuardianBoundaryProjectileCap = 64; private static double royalBoltDamage = 6.0D; private static int royalEggHatchChance = 3; - private static double princeHealth = 120.0D; + private static double princeHealth = 360.0D; private static double princeAttackDamage = 14.0D; private static double princeMovementSpeed = 0.28D; private static double princeFlyingSpeed = 0.9D; private static double princeArmor = 10.0D; private static double princeKnockbackResistance = 0.6D; private static double princeFollowRange = 48.0D; - private static double princessHealth = 110.0D; + private static double princessHealth = 330.0D; private static double princessAttackDamage = 10.0D; private static double princessMovementSpeed = 0.28D; private static double princessFlyingSpeed = 0.95D; private static double princessArmor = 8.0D; private static double princessKnockbackResistance = 0.5D; private static double princessFollowRange = 48.0D; - private static double kingHealth = 6000.0D; - private static double queenHealth = 6000.0D; + private static double kingHealth = 3400.0D; + private static double queenHealth = 4300.0D; private static double kingAttackDamage = 50.0D; private static double queenAttackDamage = 45.0D; private static double royalBossSoundVolume = 4.5D; private static double queenBlackHoleRadius = 14.0D; private static int queenBlackHoleActiveTicks = 120; private static double queenBlackHolePullStrength = 0.16D; - private static double queenFinalTimeFieldRadius = 20.0D; - private static double queenFinalTimeFieldRate = 0.05D; - private static int queenFinalTimeFieldDurationTicks = 45; - private static int queenFinalTimeFieldCooldownTicks = 80; - private static double kingFireballDamage = 32.0D; + private static int queenBlackHoleBlockSuctionCap = 160; + private static double axeBlackHoleRadius = 28.0D; + private static int axeBlackHoleActiveTicks = 120; + private static double axeBlackHolePullStrength = 0.16D; + private static int axeBlackHoleBlockSuctionCap = 160; + private static double kingFireballDamage = 48.0D; private static double kingFireballRadius = 4.5D; private static int kingFireballCooldownTicks = 150; private static double kingIceballDamage = 18.0D; @@ -263,14 +293,22 @@ public final class AntarchySettings { private static int kingIceSpikeCooldownTicks = 240; private static int kingElementalTerrainCap = 256; private static double royalBossArmor = 20.0D; + private static double kingArmor = 30.0D; private static double royalBossFollowRange = 128.0D; private static double royalBossMovementSpeed = 0.22D; private static double royalBossKnockbackResistance = 1.0D; private static double royalBossStepHeight = 3.0D; private static double royalBossMaxSingleHitDamage = 250.0D; - private static double royalBossBiteReach = 10.0D; + private static double royalBossBiteReach = 12.0D; private static double royalBossBiteDamageMultiplier = 1.6D; private static int royalBossBiteCooldownTicks = 45; + private static boolean royalBossMultiplayerScalingEnabled = true; + private static int royalBossScalingMaxPlayers = 4; + private static double royalBossHealthPerAdditionalPlayer = 0.35D; + private static double royalBossDamagePerAdditionalPlayer = 0.10D; + private static double royalBoundaryRadius = 192.0D; + private static double royalBoundaryWarningRadius = 160.0D; + private static int royalBoundaryGraceTicks = 60; private static boolean basiliskPetrifyingGazeEnabled = true; private static int basiliskSpawnMaxLightLevel = 5; private static double basiliskHealth = 320.0D; @@ -379,19 +417,19 @@ public final class AntarchySettings { private static double bedBugAttackDamage = 4.0D; private static double bedBugMovementSpeed = 0.24D; private static double bedBugArmor = 2.0D; - private static double jumpyBugHealth = 100.0D; - private static double jumpyBugPounceDamage = 12.0D; - private static double jumpyBugCamouflageAlpha = 0.18D; + private static double springbugHealth = 100.0D; + private static double springbugPounceDamage = 12.0D; + private static double springbugCamouflageAlpha = 0.18D; private static double brutalflyArmor = 10.0D; private static double brutalflyArmorToughness = 5.0D; private static double brutalflyKnockbackResistance = 0.7D; private static double brutalflyMovementSpeed = 0.34D; private static double brutalflyFlyingSpeed = 0.55D; - private static double cloudSharkHealth = 40.0D; - private static double cloudSharkAttackDamage = 5.0D; - private static double cloudSharkMovementSpeed = 0.34D; - private static double cloudSharkFlyingSpeed = 0.5D; - private static double cloudSharkKnockbackResistance = 0.2D; + private static double stratosharkHealth = 40.0D; + private static double stratosharkAttackDamage = 5.0D; + private static double stratosharkMovementSpeed = 0.34D; + private static double stratosharkFlyingSpeed = 0.5D; + private static double stratosharkKnockbackResistance = 0.2D; private static double krakenMovementSpeed = 0.24D; private static double krakenFlyingSpeed = 0.24D; private static double krakenKnockbackResistance = 0.8D; @@ -446,10 +484,10 @@ public final class AntarchySettings { private static double molewormHealth = 8.0D; private static double molewormAttackDamage = 1.0D; private static double molewormMovementSpeed = 0.25D; - private static double triffidHealth = 160.0D; - private static double triffidAttackDamage = 10.0D; - private static double triffidGrabDamage = 15.0D; - private static int triffidSweepHitCooldownTicks = 10; + private static double flytrapHealth = 160.0D; + private static double flytrapAttackDamage = 10.0D; + private static double flytrapGrabDamage = 15.0D; + private static int flytrapSweepHitCooldownTicks = 10; private static double molevoreHealth = 140.0D; private static double molevoreAttackDamage = 10.0D; private static double molevoreMovementSpeed = 0.27D; @@ -463,9 +501,6 @@ public final class AntarchySettings { private static double molevoreBreakRange = 1.8D; private static double molevoreBreakVerticalRange = 2.2D; private static double molevoreBreakHalfWidth = 1.1D; - private static double jumpyBugLatchDamage = 2.0D; - private static double waterCannonCooldownSeconds = 4.0D; - private static double toreterrorRangedWaterBombChance = 0.35D; private static double nightmareHealth = 380.0D; private static double nightmareAttackDamage = 16.0D; private static double nightmareMovementSpeed = 0.28D; @@ -509,22 +544,34 @@ public final class AntarchySettings { private static boolean elythiaPortalEnabled = true; private static boolean thoraxisPortalEnabled = true; private static boolean cavarynPortalEnabled = true; + private static boolean portalGunCanFireThroughGlass = false; + private static boolean portalGunCanFireThroughLiquid = false; + private static boolean portalGunCanPortalsResizeWhenCreated = true; + private static boolean portalGunCanPortalProjectilesChunkload = true; + private static boolean portalGunSeeThroughPortals = true; + private static boolean portalGunFancyPortals = true; + private static int portalGunMaxShootDistance = 10000; + private static double portalGunMinFloorExitSpeed = 0.6D; + private static int portalGunMaxLiveViews = 8; + private static double portalGunMaxExitSpeed = 0.0D; + private static boolean portalGunMoonPullsBlocks = true; + private static int portalGunMoonPortalSeconds = 10; + private static int portalGunMoonBlockCap = 500; private static boolean elythiaFireflyParticlesEnabled = true; private static int bloodCrystalArmorShieldRechargeTicks = 600; private static int bloodCrystalAppleShieldCount = 2; private static int bloodCrystalAppleDurationTicks = 2400; private static int bloodCrystalAppleShieldRechargeTicks = 600; private static int bloodCrystalHardMaxShields = 10; - // Armor stats (iron defense, gold durability, 0 toughness by default) private static int bloodCrystalHelmetDefense = 3; private static int bloodCrystalChestplateDefense = 7; private static int bloodCrystalLeggingsDefense = 6; private static int bloodCrystalBootsDefense = 3; private static double bloodCrystalArmorToughness = 2.0D; - private static int bloodCrystalHelmetDurability = 77; - private static int bloodCrystalChestplateDurability = 112; - private static int bloodCrystalLeggingsDurability = 105; - private static int bloodCrystalBootsDurability = 91; + private static int bloodCrystalHelmetDurability = 92; + private static int bloodCrystalChestplateDurability = 134; + private static int bloodCrystalLeggingsDurability = 126; + private static int bloodCrystalBootsDurability = 109; private static double toreterrorHealth = 450.0D; private static double toreterrorJumpAttackDamage = 14.0D; private static double toreterrorJumpAttackKnockback = 2.5D; @@ -535,19 +582,20 @@ public final class AntarchySettings { private static int waterBombLifetimeTicks = 120; private static double waterBombGravity = 0.12D; private static double waterBombKnockback = 1.2D; - private static double creepingHorrorHealth = 15.0D; - private static double creepingHorrorAttackDamage = 6.0D; - private static double lurkingTerrorHealth = 15.0D; - private static double lurkingTerrorAttackDamage = 6.0D; - private static double manticoreHealth = 40.0D; - private static double manticoreAttackDamage = 7.0D; + private static double crawlingBlightHealth = 15.0D; + private static double crawlingBlightAttackDamage = 6.0D; + private static double skulkingFrightHealth = 15.0D; + private static double skulkingFrightAttackDamage = 6.0D; + private static double manticoreHealth = 60.0D; + private static double manticoreAttackDamage = 11.0D; private static int manticoreStingPoisonTicks = 100; private static int queenManticoreCap = 15; - private static int queenManticoreSummonCooldownTicks = 600; - private static int queenManticoreSummonCount = 3; + private static int queenManticoreSummonCooldownTicks = 800; + private static int queenManticoreSummonCount = 2; private static double queenManticoreSummonRange = 24.0D; private static double queenBeamDamage = 45.0D; private static double queenBeamRange = 100.0D; + private static double queenBeamMinimumRange = 22.0D; private static int queenBeamDurationTicks = 30; private static int queenBeamWindupTicks = 20; private static int queenBeamTravelTicks = 12; @@ -555,8 +603,13 @@ public final class AntarchySettings { private static double queenBeamTracking = 0.1D; private static double queenBeamTerrainRadius = 5.0D; private static int queenBeamTerrainCap = 192; + private static int queenBeamPhaseOneCap = 1; + private static int queenBeamPhaseTwoCap = 2; + private static int queenBeamPhaseThreeCap = 3; + private static double queenBeamPhaseThreeMaxVolleyChance = 0.2D; private static double kingBeamDamage = 50.0D; private static double kingBeamRange = 100.0D; + private static double kingBeamMinimumRange = 32.0D; private static int kingBeamDurationTicks = 30; private static int kingBeamWindupTicks = 20; private static int kingBeamTravelTicks = 12; @@ -564,7 +617,7 @@ public final class AntarchySettings { private static double kingBeamTracking = 0.1D; private static double kingBeamTerrainRadius = 5.0D; private static int kingBeamTerrainCap = 192; - private static int royalDecreeCooldownTicks = 1200; + private static int royalDecreeCooldownTicks = 700; private static int kingRoyalMusterCooldownTicks = 500; private static int kingRoyalMusterWindupTicks = 30; private static int kingRoyalMusterDurationTicks = 600; @@ -588,7 +641,7 @@ public final class AntarchySettings { private static double glimmerHealth = 20.0D; private static double lucidArmorToughness = 2.0D; - private static double triffidArmorToughness = 3.0D; + private static double flytrapArmorToughness = 3.0D; private static double basiliskArmorToughness = 5.0D; private static double nightmareMobArmorToughness = 5.0D; private static double alphaMantisArmorToughness = 4.0D; @@ -663,6 +716,10 @@ public final class AntarchySettings { return termiteRequiresReagent; } + public static boolean termitesFearBlockLight() { + return termitesFearBlockLight; + } + public static boolean antsStealFromChests() { return antsStealFromChests; } @@ -687,6 +744,10 @@ public final class AntarchySettings { return experimentalSettingsPopupDisabled; } + public static boolean unlockAllArchives() { + return unlockAllArchives; + } + public static boolean sizeChangingRaysEnabled() { return sizeChangingRaysEnabled; } @@ -703,6 +764,14 @@ public final class AntarchySettings { return sizeRayDeltaPerHit; } + public static double temporalTunerMinRate() { + return temporalTunerMinRate; + } + + public static double temporalTunerMaxRate() { + return temporalTunerMaxRate; + } + public static double shrinkingPotionDelta() { return shrinkingPotionDelta; } @@ -1140,10 +1209,6 @@ public final class AntarchySettings { return sizeRayCooldownSeconds; } - public static boolean invertProjectilesFromInvertedPlayers() { - return invertProjectilesFromInvertedPlayers; - } - public static boolean gravityGunEnabled() { return gravityGunEnabled; } @@ -1240,11 +1305,76 @@ public final class AntarchySettings { cavarynPortalEnabled = value; } + public static void setPortalGunCanFireThroughGlass(boolean value) { + portalGunCanFireThroughGlass = value; + } + + public static void setPortalGunCanFireThroughLiquid(boolean value) { + portalGunCanFireThroughLiquid = value; + } + + public static void setPortalGunCanPortalsResizeWhenCreated(boolean value) { + portalGunCanPortalsResizeWhenCreated = value; + } + + public static void setPortalGunCanPortalProjectilesChunkload(boolean value) { + portalGunCanPortalProjectilesChunkload = value; + } + + public static void setPortalGunSeeThroughPortals(boolean value) { + portalGunSeeThroughPortals = value; + } + + public static void setPortalGunFancyPortals(boolean value) { + portalGunFancyPortals = value; + } + + public static void setPortalGunMaxShootDistance(int value) { + portalGunMaxShootDistance = Math.max(1, value); + } + + public static void setPortalGunMaxLiveViews(int value) { + portalGunMaxLiveViews = Math.max(0, Math.min(32, value)); + } + + public static void setPortalGunMinFloorExitSpeed(double value) { + portalGunMinFloorExitSpeed = Math.max(0.0D, Math.min(4.0D, value)); + } + + public static void setPortalGunMoonPullsBlocks(boolean value) { + portalGunMoonPullsBlocks = value; + } + + public static void setPortalGunMoonPortalSeconds(int value) { + portalGunMoonPortalSeconds = Math.max(1, Math.min(120, value)); + } + + public static void setPortalGunMoonBlockCap(int value) { + portalGunMoonBlockCap = Math.max(0, Math.min(2000, value)); + } + + public static void setPortalGunMaxExitSpeed(double value) { + portalGunMaxExitSpeed = Math.max(0.0D, Math.min(100.0D, value)); + } + public static boolean permanentPortalsEnabled() { return permanentPortalsEnabled; } public static boolean permanentPortalsFlintAndSteelEnabled() { return permanentPortalsFlintAndSteelEnabled; } public static boolean elythiaPortalEnabled() { return elythiaPortalEnabled; } public static boolean thoraxisPortalEnabled() { return thoraxisPortalEnabled; } public static boolean cavarynPortalEnabled() { return cavarynPortalEnabled; } + public static boolean portalGunCanFireThroughGlass() { return portalGunCanFireThroughGlass; } + public static boolean portalGunCanFireThroughLiquid() { return portalGunCanFireThroughLiquid; } + public static boolean portalGunCanPortalsResizeWhenCreated() { return portalGunCanPortalsResizeWhenCreated; } + public static boolean portalGunCanPortalProjectilesChunkload() { return portalGunCanPortalProjectilesChunkload; } + public static boolean portalGunSeeThroughPortals() { return portalGunSeeThroughPortals; } + public static boolean portalGunFancyPortals() { return portalGunFancyPortals; } + public static int portalGunMaxShootDistance() { return portalGunMaxShootDistance; } + public static double portalGunMinFloorExitSpeed() { return portalGunMinFloorExitSpeed; } + public static int portalGunMaxLiveViews() { return portalGunMaxLiveViews; } + public static double portalGunMaxExitSpeed() { return portalGunMaxExitSpeed; } + public static boolean portalGunMoonPullsBlocks() { return portalGunMoonPullsBlocks; } + public static int portalGunMoonPortalSeconds() { return portalGunMoonPortalSeconds; } + public static int portalGunMoonBlockCap() { return portalGunMoonBlockCap; } public static void setBrownAntRequiresReagent(boolean value) { brownAntRequiresReagent = value; @@ -1262,6 +1392,10 @@ public final class AntarchySettings { termiteRequiresReagent = value; } + public static void setTermitesFearBlockLight(boolean value) { + termitesFearBlockLight = value; + } + public static void setAntsStealFromChests(boolean value) { antsStealFromChests = value; } @@ -1286,6 +1420,10 @@ public final class AntarchySettings { experimentalSettingsPopupDisabled = value; } + public static void setUnlockAllArchives(boolean value) { + unlockAllArchives = value; + } + public static void setSizeChangingRaysEnabled(boolean value) { sizeChangingRaysEnabled = value; } @@ -1302,6 +1440,14 @@ public final class AntarchySettings { sizeRayDeltaPerHit = value; } + public static void setTemporalTunerMinRate(double value) { + temporalTunerMinRate = value; + } + + public static void setTemporalTunerMaxRate(double value) { + temporalTunerMaxRate = value; + } + public static void setShrinkingPotionDelta(double value) { shrinkingPotionDelta = value; } @@ -1662,10 +1808,6 @@ public final class AntarchySettings { sizeRayCooldownSeconds = value; } - public static void setInvertProjectilesFromInvertedPlayers(boolean value) { - invertProjectilesFromInvertedPlayers = value; - } - public static void setGravityGunEnabled(boolean value) { gravityGunEnabled = value; } @@ -1770,46 +1912,14 @@ public final class AntarchySettings { americanRegenerationAmplifier = value; } - public static boolean dreamSandEnabled() { - return dreamSandEnabled; - } - public static boolean entitySpecificFireOverlayEnabled() { return entitySpecificFireOverlayEnabled; } - public static void setDreamSandEnabled(boolean value) { - dreamSandEnabled = value; - } - public static void setEntitySpecificFireOverlayEnabled(boolean value) { entitySpecificFireOverlayEnabled = value; } - public static double dreamSandJumpVelocityMultiplier() { - return dreamSandJumpVelocityMultiplier; - } - - public static void setDreamSandJumpVelocityMultiplier(double value) { - dreamSandJumpVelocityMultiplier = value; - } - - public static double dreamSandGravityMultiplier() { - return dreamSandGravityMultiplier; - } - - public static void setDreamSandGravityMultiplier(double value) { - dreamSandGravityMultiplier = value; - } - - public static double dreamSandEffectDurationSeconds() { - return dreamSandEffectDurationSeconds; - } - - public static void setDreamSandEffectDurationSeconds(double value) { - dreamSandEffectDurationSeconds = value; - } - public static double dreamSandFallingBlockGravityMultiplier() { return dreamSandFallingBlockGravityMultiplier; } @@ -1895,6 +2005,17 @@ public final class AntarchySettings { public static double royalGuardianArmorKnockbackResistance() { return royalGuardianArmorKnockbackResistance; } public static void setRoyalGuardianArmorKnockbackResistance(double v) { royalGuardianArmorKnockbackResistance = v; } + public static double royalGuardianHelmetJudgmentBonus() { return royalGuardianHelmetJudgmentBonus; } + public static void setRoyalGuardianHelmetJudgmentBonus(double v) { royalGuardianHelmetJudgmentBonus = v; } + public static double royalGuardianChestplateJudgmentBonus() { return royalGuardianChestplateJudgmentBonus; } + public static void setRoyalGuardianChestplateJudgmentBonus(double v) { royalGuardianChestplateJudgmentBonus = v; } + public static double royalGuardianLeggingsJudgmentBonus() { return royalGuardianLeggingsJudgmentBonus; } + public static void setRoyalGuardianLeggingsJudgmentBonus(double v) { royalGuardianLeggingsJudgmentBonus = v; } + public static double royalGuardianBootsJudgmentBonus() { return royalGuardianBootsJudgmentBonus; } + public static void setRoyalGuardianBootsJudgmentBonus(double v) { royalGuardianBootsJudgmentBonus = v; } + public static int royalGuardianJudgmentDurationTicks() { return royalGuardianJudgmentDurationTicks; } + public static void setRoyalGuardianJudgmentDurationTicks(int v) { royalGuardianJudgmentDurationTicks = v; } + public static int royalAssailantHelmetArmorValue() { return royalAssailantHelmetArmorValue; } public static void setRoyalAssailantHelmetArmorValue(int v) { royalAssailantHelmetArmorValue = v; } @@ -1927,10 +2048,31 @@ public final class AntarchySettings { public static double royalGuardianSwordAttackDamage() { return royalGuardianSwordAttackDamage; } public static void setRoyalGuardianSwordAttackDamage(double v) { royalGuardianSwordAttackDamage = v; } + public static double giantFryingPanAttackDamage() { return giantFryingPanAttackDamage; } + public static void setGiantFryingPanAttackDamage(double v) { giantFryingPanAttackDamage = v; } + public static int giantFryingPanCookTimeTicks() { return giantFryingPanCookTimeTicks; } + public static void setGiantFryingPanCookTimeTicks(int v) { giantFryingPanCookTimeTicks = v; } public static double royalGuardianSwordAttackSpeed() { return royalGuardianSwordAttackSpeed; } public static void setRoyalGuardianSwordAttackSpeed(double v) { royalGuardianSwordAttackSpeed = v; } + public static int royalGuardianSwordElementalCooldownTicks() { return royalGuardianSwordElementalCooldownTicks; } + public static void setRoyalGuardianSwordElementalCooldownTicks(int v) { royalGuardianSwordElementalCooldownTicks = v; } + public static double royalGuardianSwordFirePrimaryDamage() { return royalGuardianSwordFirePrimaryDamage; } + public static void setRoyalGuardianSwordFirePrimaryDamage(double v) { royalGuardianSwordFirePrimaryDamage = v; } + public static double royalGuardianSwordFireSplashDamage() { return royalGuardianSwordFireSplashDamage; } + public static void setRoyalGuardianSwordFireSplashDamage(double v) { royalGuardianSwordFireSplashDamage = v; } + public static double royalGuardianSwordFrostSpikeDamage() { return royalGuardianSwordFrostSpikeDamage; } + public static void setRoyalGuardianSwordFrostSpikeDamage(double v) { royalGuardianSwordFrostSpikeDamage = v; } + public static double royalGuardianSwordStormPrimaryDamage() { return royalGuardianSwordStormPrimaryDamage; } + public static void setRoyalGuardianSwordStormPrimaryDamage(double v) { royalGuardianSwordStormPrimaryDamage = v; } + public static double royalGuardianSwordStormJumpDamage() { return royalGuardianSwordStormJumpDamage; } + public static void setRoyalGuardianSwordStormJumpDamage(double v) { royalGuardianSwordStormJumpDamage = v; } + public static int royalGuardianSwordStormMaxJumps() { return royalGuardianSwordStormMaxJumps; } + public static void setRoyalGuardianSwordStormMaxJumps(int v) { royalGuardianSwordStormMaxJumps = v; } + public static double royalGuardianSwordStormJumpRange() { return royalGuardianSwordStormJumpRange; } + public static void setRoyalGuardianSwordStormJumpRange(double v) { royalGuardianSwordStormJumpRange = v; } + public static double royalAssailantBattleAxeAttackDamage() { return royalAssailantBattleAxeAttackDamage; } public static void setRoyalAssailantBattleAxeAttackDamage(double v) { royalAssailantBattleAxeAttackDamage = v; } @@ -1952,6 +2094,37 @@ public final class AntarchySettings { public static int royalGuardianShieldDurability() { return royalGuardianShieldDurability; } public static void setRoyalGuardianShieldDurability(int v) { royalGuardianShieldDurability = v; } + public static double royalGuardianMusterRange() { return royalGuardianMusterRange; } + public static void setRoyalGuardianMusterRange(double v) { royalGuardianMusterRange = v; } + public static int royalGuardianMusterDurationTicks() { return royalGuardianMusterDurationTicks; } + public static void setRoyalGuardianMusterDurationTicks(int v) { royalGuardianMusterDurationTicks = v; } + public static int royalGuardianMusterCooldownTicks() { return royalGuardianMusterCooldownTicks; } + public static void setRoyalGuardianMusterCooldownTicks(int v) { royalGuardianMusterCooldownTicks = v; } + public static int royalGuardianMusterMobCap() { return royalGuardianMusterMobCap; } + public static void setRoyalGuardianMusterMobCap(int v) { royalGuardianMusterMobCap = v; } + public static double royalGuardianMusterDamageReduction() { return royalGuardianMusterDamageReduction; } + public static void setRoyalGuardianMusterDamageReduction(double v) { royalGuardianMusterDamageReduction = v; } + public static double royalGuardianMusterAttackBonus() { return royalGuardianMusterAttackBonus; } + public static void setRoyalGuardianMusterAttackBonus(double v) { royalGuardianMusterAttackBonus = v; } + public static double royalGuardianMusterSpeedBonus() { return royalGuardianMusterSpeedBonus; } + public static void setRoyalGuardianMusterSpeedBonus(double v) { royalGuardianMusterSpeedBonus = v; } + public static double royalGuardianMusterPassiveDamageFloor() { return royalGuardianMusterPassiveDamageFloor; } + public static void setRoyalGuardianMusterPassiveDamageFloor(double v) { royalGuardianMusterPassiveDamageFloor = v; } + public static double royalGuardianBoundaryRadius() { return royalGuardianBoundaryRadius; } + public static void setRoyalGuardianBoundaryRadius(double v) { royalGuardianBoundaryRadius = v; } + public static int royalGuardianBoundaryDurationTicks() { return royalGuardianBoundaryDurationTicks; } + public static void setRoyalGuardianBoundaryDurationTicks(int v) { royalGuardianBoundaryDurationTicks = v; } + public static int royalGuardianBoundaryCooldownTicks() { return royalGuardianBoundaryCooldownTicks; } + public static void setRoyalGuardianBoundaryCooldownTicks(int v) { royalGuardianBoundaryCooldownTicks = v; } + public static int royalGuardianBoundaryStrengthAmplifier() { return royalGuardianBoundaryStrengthAmplifier; } + public static void setRoyalGuardianBoundaryStrengthAmplifier(int v) { royalGuardianBoundaryStrengthAmplifier = v; } + public static int royalGuardianBoundaryArrestTicks() { return royalGuardianBoundaryArrestTicks; } + public static void setRoyalGuardianBoundaryArrestTicks(int v) { royalGuardianBoundaryArrestTicks = v; } + public static int royalGuardianBoundaryDropTicks() { return royalGuardianBoundaryDropTicks; } + public static void setRoyalGuardianBoundaryDropTicks(int v) { royalGuardianBoundaryDropTicks = v; } + public static int royalGuardianBoundaryProjectileCap() { return royalGuardianBoundaryProjectileCap; } + public static void setRoyalGuardianBoundaryProjectileCap(int v) { royalGuardianBoundaryProjectileCap = v; } + public static double royalBoltDamage() { return royalBoltDamage; } public static void setRoyalBoltDamage(double v) { royalBoltDamage = v; } @@ -2007,14 +2180,16 @@ public final class AntarchySettings { public static void setQueenBlackHoleActiveTicks(int v) { queenBlackHoleActiveTicks = v; } public static double queenBlackHolePullStrength() { return queenBlackHolePullStrength; } public static void setQueenBlackHolePullStrength(double v) { queenBlackHolePullStrength = v; } - public static double queenFinalTimeFieldRadius() { return queenFinalTimeFieldRadius; } - public static void setQueenFinalTimeFieldRadius(double v) { queenFinalTimeFieldRadius = v; } - public static double queenFinalTimeFieldRate() { return queenFinalTimeFieldRate; } - public static void setQueenFinalTimeFieldRate(double v) { queenFinalTimeFieldRate = v; } - public static int queenFinalTimeFieldDurationTicks() { return queenFinalTimeFieldDurationTicks; } - public static void setQueenFinalTimeFieldDurationTicks(int v) { queenFinalTimeFieldDurationTicks = v; } - public static int queenFinalTimeFieldCooldownTicks() { return queenFinalTimeFieldCooldownTicks; } - public static void setQueenFinalTimeFieldCooldownTicks(int v) { queenFinalTimeFieldCooldownTicks = v; } + public static int queenBlackHoleBlockSuctionCap() { return queenBlackHoleBlockSuctionCap; } + public static void setQueenBlackHoleBlockSuctionCap(int v) { queenBlackHoleBlockSuctionCap = v; } + public static double axeBlackHoleRadius() { return axeBlackHoleRadius; } + public static void setAxeBlackHoleRadius(double v) { axeBlackHoleRadius = v; } + public static int axeBlackHoleActiveTicks() { return axeBlackHoleActiveTicks; } + public static void setAxeBlackHoleActiveTicks(int v) { axeBlackHoleActiveTicks = v; } + public static double axeBlackHolePullStrength() { return axeBlackHolePullStrength; } + public static void setAxeBlackHolePullStrength(double v) { axeBlackHolePullStrength = v; } + public static int axeBlackHoleBlockSuctionCap() { return axeBlackHoleBlockSuctionCap; } + public static void setAxeBlackHoleBlockSuctionCap(int v) { axeBlackHoleBlockSuctionCap = v; } public static double kingFireballDamage() { return kingFireballDamage; } public static void setKingFireballDamage(double v) { kingFireballDamage = v; } public static double kingFireballRadius() { return kingFireballRadius; } @@ -2036,6 +2211,8 @@ public final class AntarchySettings { public static double royalBossArmor() { return royalBossArmor; } public static void setRoyalBossArmor(double v) { royalBossArmor = v; } + public static double kingArmor() { return kingArmor; } + public static void setKingArmor(double v) { kingArmor = v; } public static double royalBossFollowRange() { return royalBossFollowRange; } public static void setRoyalBossFollowRange(double v) { royalBossFollowRange = v; } @@ -2060,6 +2237,20 @@ public final class AntarchySettings { public static int royalBossBiteCooldownTicks() { return royalBossBiteCooldownTicks; } public static void setRoyalBossBiteCooldownTicks(int v) { royalBossBiteCooldownTicks = v; } + public static boolean royalBossMultiplayerScalingEnabled() { return royalBossMultiplayerScalingEnabled; } + public static void setRoyalBossMultiplayerScalingEnabled(boolean v) { royalBossMultiplayerScalingEnabled = v; } + public static int royalBossScalingMaxPlayers() { return royalBossScalingMaxPlayers; } + public static void setRoyalBossScalingMaxPlayers(int v) { royalBossScalingMaxPlayers = v; } + public static double royalBossHealthPerAdditionalPlayer() { return royalBossHealthPerAdditionalPlayer; } + public static void setRoyalBossHealthPerAdditionalPlayer(double v) { royalBossHealthPerAdditionalPlayer = v; } + public static double royalBossDamagePerAdditionalPlayer() { return royalBossDamagePerAdditionalPlayer; } + public static void setRoyalBossDamagePerAdditionalPlayer(double v) { royalBossDamagePerAdditionalPlayer = v; } + public static double royalBoundaryRadius() { return royalBoundaryRadius; } + public static void setRoyalBoundaryRadius(double v) { royalBoundaryRadius = v; } + public static double royalBoundaryWarningRadius() { return royalBoundaryWarningRadius; } + public static void setRoyalBoundaryWarningRadius(double v) { royalBoundaryWarningRadius = v; } + public static int royalBoundaryGraceTicks() { return royalBoundaryGraceTicks; } + public static void setRoyalBoundaryGraceTicks(int v) { royalBoundaryGraceTicks = v; } public static double nightmareSwordBaseDamage() { return nightmareSwordBaseDamage; } public static void setNightmareSwordBaseDamage(double v) { nightmareSwordBaseDamage = v; } @@ -2307,7 +2498,6 @@ public final class AntarchySettings { public static int reverieDuplicationCooldownTicks() { return reverieDuplicationCooldownTicks; } public static void setReverieDuplicationCooldownTicks(int v){ reverieDuplicationCooldownTicks = v; } - // Hardcoded AI tuning — getters only, no config wiring public static double reveriePreferredFollowMinDistance() { return reveriePreferredFollowMinDistance; } public static double reveriePreferredFollowMaxDistance() { return reveriePreferredFollowMaxDistance; } public static double reverieCatchUpDistance() { return reverieCatchUpDistance; } @@ -2454,14 +2644,14 @@ public final class AntarchySettings { public static double bedBugArmor() { return bedBugArmor; } public static void setBedBugArmor(double value) { bedBugArmor = value; } - public static double jumpyBugHealth() { return jumpyBugHealth; } - public static void setJumpyBugHealth(double value) { jumpyBugHealth = value; } + public static double springbugHealth() { return springbugHealth; } + public static void setSpringbugHealth(double value) { springbugHealth = value; } - public static double jumpyBugPounceDamage() { return jumpyBugPounceDamage; } - public static void setJumpyBugPounceDamage(double value) { jumpyBugPounceDamage = value; } + public static double springbugPounceDamage() { return springbugPounceDamage; } + public static void setSpringbugPounceDamage(double value) { springbugPounceDamage = value; } - public static double jumpyBugCamouflageAlpha() { return jumpyBugCamouflageAlpha; } - public static void setJumpyBugCamouflageAlpha(double value) { jumpyBugCamouflageAlpha = value; } + public static double springbugCamouflageAlpha() { return springbugCamouflageAlpha; } + public static void setSpringbugCamouflageAlpha(double value) { springbugCamouflageAlpha = value; } public static double brutalflyArmor() { return brutalflyArmor; } public static void setBrutalflyArmor(double value) { brutalflyArmor = value; } @@ -2478,20 +2668,20 @@ public final class AntarchySettings { public static double brutalflyFlyingSpeed() { return brutalflyFlyingSpeed; } public static void setBrutalflyFlyingSpeed(double value) { brutalflyFlyingSpeed = value; } - public static double cloudSharkHealth() { return cloudSharkHealth; } - public static void setCloudSharkHealth(double value) { cloudSharkHealth = value; } + public static double stratosharkHealth() { return stratosharkHealth; } + public static void setStratosharkHealth(double value) { stratosharkHealth = value; } - public static double cloudSharkAttackDamage() { return cloudSharkAttackDamage; } - public static void setCloudSharkAttackDamage(double value) { cloudSharkAttackDamage = value; } + public static double stratosharkAttackDamage() { return stratosharkAttackDamage; } + public static void setStratosharkAttackDamage(double value) { stratosharkAttackDamage = value; } - public static double cloudSharkMovementSpeed() { return cloudSharkMovementSpeed; } - public static void setCloudSharkMovementSpeed(double value) { cloudSharkMovementSpeed = value; } + public static double stratosharkMovementSpeed() { return stratosharkMovementSpeed; } + public static void setStratosharkMovementSpeed(double value) { stratosharkMovementSpeed = value; } - public static double cloudSharkFlyingSpeed() { return cloudSharkFlyingSpeed; } - public static void setCloudSharkFlyingSpeed(double value) { cloudSharkFlyingSpeed = value; } + public static double stratosharkFlyingSpeed() { return stratosharkFlyingSpeed; } + public static void setStratosharkFlyingSpeed(double value) { stratosharkFlyingSpeed = value; } - public static double cloudSharkKnockbackResistance() { return cloudSharkKnockbackResistance; } - public static void setCloudSharkKnockbackResistance(double value) { cloudSharkKnockbackResistance = value; } + public static double stratosharkKnockbackResistance() { return stratosharkKnockbackResistance; } + public static void setStratosharkKnockbackResistance(double value) { stratosharkKnockbackResistance = value; } public static double krakenMovementSpeed() { return krakenMovementSpeed; } public static void setKrakenMovementSpeed(double value) { krakenMovementSpeed = value; } @@ -2655,17 +2845,17 @@ public final class AntarchySettings { public static double molewormMovementSpeed() { return molewormMovementSpeed; } public static void setMolewormMovementSpeed(double value) { molewormMovementSpeed = value; } - public static double triffidHealth() { return triffidHealth; } - public static void setTriffidHealth(double value) { triffidHealth = value; } + public static double flytrapHealth() { return flytrapHealth; } + public static void setFlytrapHealth(double value) { flytrapHealth = value; } - public static double triffidAttackDamage() { return triffidAttackDamage; } - public static void setTriffidAttackDamage(double value) { triffidAttackDamage = value; } + public static double flytrapAttackDamage() { return flytrapAttackDamage; } + public static void setFlytrapAttackDamage(double value) { flytrapAttackDamage = value; } - public static double triffidGrabDamage() { return triffidGrabDamage; } - public static void setTriffidGrabDamage(double value) { triffidGrabDamage = value; } + public static double flytrapGrabDamage() { return flytrapGrabDamage; } + public static void setFlytrapGrabDamage(double value) { flytrapGrabDamage = value; } - public static int triffidSweepHitCooldownTicks() { return triffidSweepHitCooldownTicks; } - public static void setTriffidSweepHitCooldownTicks(int value) { triffidSweepHitCooldownTicks = value; } + public static int flytrapSweepHitCooldownTicks() { return flytrapSweepHitCooldownTicks; } + public static void setFlytrapSweepHitCooldownTicks(int value) { flytrapSweepHitCooldownTicks = value; } public static double molevoreHealth() { return molevoreHealth; } public static void setMolevoreHealth(double value) { molevoreHealth = value; } @@ -2673,21 +2863,6 @@ public final class AntarchySettings { public static double molevoreAttackDamage() { return molevoreAttackDamage; } public static void setMolevoreAttackDamage(double value) { molevoreAttackDamage = value; } - public static double molevoreMovementSpeed() { return molevoreMovementSpeed; } - public static void setMolevoreMovementSpeed(double value) { molevoreMovementSpeed = value; } - - public static double molevoreArmor() { return molevoreArmor; } - public static void setMolevoreArmor(double value) { molevoreArmor = value; } - - public static double molevoreKnockbackResistance() { return molevoreKnockbackResistance; } - public static void setMolevoreKnockbackResistance(double value) { molevoreKnockbackResistance = value; } - - public static double molevoreFollowRange() { return molevoreFollowRange; } - public static void setMolevoreFollowRange(double value) { molevoreFollowRange = value; } - - public static int molevoreXpReward() { return molevoreXpReward; } - public static void setMolevoreXpReward(int value) { molevoreXpReward = value; } - public static int molevoreSpinTicks() { return molevoreSpinTicks; } public static void setMolevoreSpinTicks(int value) { molevoreSpinTicks = value; } @@ -2839,14 +3014,14 @@ public final class AntarchySettings { public static double waterBombKnockback() { return waterBombKnockback; } public static void setWaterBombKnockback(double v) { waterBombKnockback = v; } - public static double creepingHorrorHealth() { return creepingHorrorHealth; } - public static void setCreepingHorrorHealth(double v) { creepingHorrorHealth = v; } - public static double creepingHorrorAttackDamage() { return creepingHorrorAttackDamage; } - public static void setCreepingHorrorAttackDamage(double v) { creepingHorrorAttackDamage = v; } - public static double lurkingTerrorHealth() { return lurkingTerrorHealth; } - public static void setLurkingTerrorHealth(double v) { lurkingTerrorHealth = v; } - public static double lurkingTerrorAttackDamage() { return lurkingTerrorAttackDamage; } - public static void setLurkingTerrorAttackDamage(double v) { lurkingTerrorAttackDamage = v; } + public static double crawlingBlightHealth() { return crawlingBlightHealth; } + public static void setCrawlingBlightHealth(double v) { crawlingBlightHealth = v; } + public static double crawlingBlightAttackDamage() { return crawlingBlightAttackDamage; } + public static void setCrawlingBlightAttackDamage(double v) { crawlingBlightAttackDamage = v; } + public static double skulkingFrightHealth() { return skulkingFrightHealth; } + public static void setSkulkingFrightHealth(double v) { skulkingFrightHealth = v; } + public static double skulkingFrightAttackDamage() { return skulkingFrightAttackDamage; } + public static void setSkulkingFrightAttackDamage(double v) { skulkingFrightAttackDamage = v; } public static double manticoreHealth() { return manticoreHealth; } public static void setManticoreHealth(double v) { manticoreHealth = v; } public static double manticoreAttackDamage() { return manticoreAttackDamage; } @@ -2865,6 +3040,8 @@ public final class AntarchySettings { public static void setQueenBeamDamage(double v) { queenBeamDamage = v; } public static double queenBeamRange() { return queenBeamRange; } public static void setQueenBeamRange(double v) { queenBeamRange = v; } + public static double queenBeamMinimumRange() { return queenBeamMinimumRange; } + public static void setQueenBeamMinimumRange(double v) { queenBeamMinimumRange = v; } public static int queenBeamDurationTicks() { return queenBeamDurationTicks; } public static void setQueenBeamDurationTicks(int v) { queenBeamDurationTicks = v; } public static int queenBeamWindupTicks() { return queenBeamWindupTicks; } @@ -2879,10 +3056,20 @@ public final class AntarchySettings { public static void setQueenBeamTerrainRadius(double v) { queenBeamTerrainRadius = v; } public static int queenBeamTerrainCap() { return queenBeamTerrainCap; } public static void setQueenBeamTerrainCap(int v) { queenBeamTerrainCap = v; } + public static int queenBeamPhaseOneCap() { return queenBeamPhaseOneCap; } + public static void setQueenBeamPhaseOneCap(int v) { queenBeamPhaseOneCap = v; } + public static int queenBeamPhaseTwoCap() { return queenBeamPhaseTwoCap; } + public static void setQueenBeamPhaseTwoCap(int v) { queenBeamPhaseTwoCap = v; } + public static int queenBeamPhaseThreeCap() { return queenBeamPhaseThreeCap; } + public static void setQueenBeamPhaseThreeCap(int v) { queenBeamPhaseThreeCap = v; } + public static double queenBeamPhaseThreeMaxVolleyChance() { return queenBeamPhaseThreeMaxVolleyChance; } + public static void setQueenBeamPhaseThreeMaxVolleyChance(double v) { queenBeamPhaseThreeMaxVolleyChance = v; } public static double kingBeamDamage() { return kingBeamDamage; } public static void setKingBeamDamage(double v) { kingBeamDamage = v; } public static double kingBeamRange() { return kingBeamRange; } public static void setKingBeamRange(double v) { kingBeamRange = v; } + public static double kingBeamMinimumRange() { return kingBeamMinimumRange; } + public static void setKingBeamMinimumRange(double v) { kingBeamMinimumRange = v; } public static int kingBeamDurationTicks() { return kingBeamDurationTicks; } public static void setKingBeamDurationTicks(int v) { kingBeamDurationTicks = v; } public static int kingBeamWindupTicks() { return kingBeamWindupTicks; } @@ -2943,7 +3130,7 @@ public final class AntarchySettings { public static void setGlimmerHealth(double v) { glimmerHealth = v; } public static double lucidArmorToughness() { return lucidArmorToughness; } - public static double triffidArmorToughness() { return triffidArmorToughness; } + public static double flytrapArmorToughness() { return flytrapArmorToughness; } public static double basiliskArmorToughness() { return basiliskArmorToughness; } public static double nightmareMobArmorToughness() { return nightmareMobArmorToughness; } public static double alphaMantisArmorToughness() { return alphaMantisArmorToughness; } @@ -2958,10 +3145,4 @@ public final class AntarchySettings { public static int bossMagicWardDurationTicks() { return bossMagicWardDurationTicks; } public static int bossMagicWardTriggerBreaches() { return bossMagicWardTriggerBreaches; } public static java.util.List magicBurstDamageNamespaces() { return magicBurstDamageNamespaces; } - public static double jumpyBugLatchDamage() { return jumpyBugLatchDamage; } - public static void setJumpyBugLatchDamage(double value) { jumpyBugLatchDamage = value; } - public static double waterCannonCooldownSeconds() { return waterCannonCooldownSeconds; } - public static void setWaterCannonCooldownSeconds(double value) { waterCannonCooldownSeconds = value; } - public static double toreterrorRangedWaterBombChance() { return toreterrorRangedWaterBombChance; } - public static void setToreterrorRangedWaterBombChance(double value) { toreterrorRangedWaterBombChance = value; } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/config/ConfigResetGuard.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/config/ConfigResetGuard.java index c81fd12d..f8c30c61 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/config/ConfigResetGuard.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/config/ConfigResetGuard.java @@ -6,31 +6,32 @@ import java.nio.file.Files; import java.nio.file.Path; public final class ConfigResetGuard { - public static final int RESET_GENERATION = 6; + public static final int RESET_GENERATION = 9; private static final String MARKER_FILE_NAME = ".config_generation"; private ConfigResetGuard() { } - public static void wipeIfNeeded(Path configDir, Path... configFiles) { + public static void migrateIfNeeded(Path configDir, Path... configFiles) { Path markerPath = configDir.resolve(MARKER_FILE_NAME); if (readGeneration(markerPath) >= RESET_GENERATION) { return; } for (Path configFile : configFiles) { - try { - if (Files.deleteIfExists(configFile)) { - Antarchy.LOGGER.info("Reset config file {} to defaults (config generation {})", configFile, RESET_GENERATION); - } - } catch (IOException e) { - Antarchy.LOGGER.warn("Failed to delete config file {} during config reset", configFile, e); + if (Files.exists(configFile)) { + Antarchy.LOGGER.info("Preserving config file {} during config migration (config generation {})", configFile, RESET_GENERATION); } } writeGeneration(markerPath); } + @Deprecated + public static void wipeIfNeeded(Path configDir, Path... configFiles) { + migrateIfNeeded(configDir, configFiles); + } + private static int readGeneration(Path markerPath) { if (!Files.exists(markerPath)) { return 0; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/AntarchyAnthologyHooks.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/AntarchyAnthologyHooks.java new file mode 100644 index 00000000..56b2f0fc --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/AntarchyAnthologyHooks.java @@ -0,0 +1,199 @@ +package com.craisinlord.antarchy.content; + +import net.minecraft.world.item.ItemStack; +import net.minecraft.client.player.LocalPlayer; +import java.util.UUID; +import com.craisinlord.anthology.portal.client.PortalClientHooks; +import com.craisinlord.anthology.portal.PortalSettings; +import com.craisinlord.anthology.portal.PortalHooks; +import com.craisinlord.anthology.portal.PortalEntity; +import com.craisinlord.antarchy.content.portalgun.PortalGunProjectileEntity; +import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; +import com.craisinlord.antarchy.content.item.PortalGunItem; +import com.craisinlord.antarchy.content.client.renderer.PortalGunMoonViewRenderer; +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.item.BigBerthaItem; +import com.craisinlord.antarchy.content.client.HerculesBeetleImpactShakeClientState; +import com.craisinlord.anthology.shake.client.CameraShake; +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.effect.RoyalEffectEligibility; +import com.craisinlord.antarchy.content.enchantment.AntarchyEnchantments; +import com.craisinlord.antarchy.content.entity.BedBugEntity; +import com.craisinlord.antarchy.content.entity.portal.DimensionalTearEntity; +import com.craisinlord.antarchy.content.entity.royal.QueenEntity; +import com.craisinlord.antarchy.content.entity.royal.RoyalBlackHoleEntity; +import com.craisinlord.antarchy.content.fluid.AntarchyFluidChecks; +import com.craisinlord.antarchy.content.item.TemporalTunerAccess; +import com.craisinlord.antarchy.content.item.TemporalTunerItem; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; +import com.craisinlord.anthology.effect.AnthologyEffects; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityHooks; +import com.craisinlord.anthology.time.TimeDilationApi; +import com.craisinlord.anthology.time.TimeDilationFieldEntity; +import com.craisinlord.anthology.time.TimeDilationHooks; +import com.craisinlord.anthology.time.TimeDilationMath; +import com.craisinlord.anthology.time.client.ContractionAfterimages; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.player.Player; + +public final class AntarchyAnthologyHooks { + private AntarchyAnthologyHooks() { + } + + public static void register() { + GravityHooks.addInvertedRegion(ThoraxisUndersideManager::isInUnderside); + GravityHooks.addInvertedFluid(AntarchyFluidChecks::isAntiwater); + GravityHooks.addLoadListener(AntarchyAnthologyHooks::clearStaleUndersideInversion); + TimeDilationHooks.addTrackedPredicate(entity -> entity instanceof Player player && TemporalTunerItem.isAvailable(player)); + TimeDilationHooks.addRateSource(AntarchyAnthologyHooks::temporalTunerRate); + TimeDilationHooks.addFieldExclusion(AntarchyAnthologyHooks::excludedFromField); + TimeDilationHooks.addChronosphereLevelSource(AntarchyEnchantments::chronosphereLevel); + PortalHooks.setSettings(new AntarchyPortalSettings()); + PortalHooks.addTransitExclusion(entity -> entity instanceof PortalGunProjectileEntity); + } + + public static void registerClient() { + PortalClientHooks.registerCustomView(portal -> portal instanceof PortalGunPortalEntity gunPortal && gunPortal.isMoonPortal(), PortalGunMoonViewRenderer::render); + PortalClientHooks.setOutlinePolicy(AntarchyAnthologyHooks::outlinesPortal); + CameraShake.addStrengthSource(cameraPos -> HerculesBeetleImpactShakeClientState.getTicks() / 25.0F * 2.0F); + CameraShake.addStrengthSource(cameraPos -> BigBerthaItem.clientShakeTicks / 25.0F * 2.0F); + ContractionAfterimages.addActivator(living -> living instanceof Player player + && TemporalTunerItem.isAvailable(player) + && TimeDilationApi.getRate(living) > 1.0D); + } + + private static boolean outlinesPortal(PortalEntity portal, LocalPlayer viewer) { + if (!(portal instanceof PortalGunPortalEntity gunPortal) || gunPortal.getOwnerId() == null) { + return false; + } + UUID owner = gunPortal.getOwnerId(); + return owner.equals(viewer.getUUID()) + || owner.equals(heldGunOwner(viewer.getMainHandItem(), viewer.getUUID())) + || owner.equals(heldGunOwner(viewer.getOffhandItem(), viewer.getUUID())); + } + + private static UUID heldGunOwner(ItemStack stack, UUID fallback) { + return stack.getItem() instanceof PortalGunItem ? PortalGunItem.getPortalOwnerId(stack, fallback) : null; + } + + private static final class AntarchyPortalSettings implements PortalSettings { + @Override + public boolean seeThroughEnabled() { + return AntarchySettings.portalGunSeeThroughPortals(); + } + + @Override + public int maxLiveViews() { + return AntarchySettings.portalGunMaxLiveViews(); + } + + @Override + public double minFloorExitSpeed() { + return AntarchySettings.portalGunMinFloorExitSpeed(); + } + + @Override + public double maxExitSpeed() { + return AntarchySettings.portalGunMaxExitSpeed(); + } + + @Override + public boolean fancySurfaces() { + return AntarchySettings.portalGunFancyPortals(); + } + } + + private static double temporalTunerRate(Entity entity) { + if (!(entity instanceof Player player) || !(player instanceof TemporalTunerAccess access)) { + return TimeDilationMath.NORMAL_RATE; + } + if (TemporalTunerItem.isAvailable(player)) { + return TemporalTunerItem.getRate(player); + } + access.antarchy$setTemporalTunerRate(TimeDilationMath.NORMAL_RATE); + TemporalTunerItem.syncTooltipRate(player, TimeDilationMath.NORMAL_RATE); + return TimeDilationMath.NORMAL_RATE; + } + + private static boolean excludedFromField(TimeDilationFieldEntity field, Entity entity) { + if (!field.isOwnerAnchored() && entity instanceof RoyalBlackHoleEntity) { + return true; + } + if (!(field.owner() instanceof QueenEntity)) { + return false; + } + if (entity instanceof LivingEntity living && !RoyalEffectEligibility.canApplyDilated(living)) { + return true; + } + return !field.isOwnerAnchored() && entity.getType().is(AntarchyTags.Entities.QUEEN_DOES_NOT_ATTACK); + } + + private static void clearStaleUndersideInversion(Entity entity) { + if (!(entity instanceof Mob mob) + || !GravityApi.isGravityInverted(mob) + || !GravityApi.isGravityForced(mob)) { + return; + } + MobEffectInstance invertedEffect = mob.getEffect(AnthologyEffects.inverted()); + boolean aboveUndersideExit = ThoraxisUndersideManager.isAboveUndersideExit(mob); + int nearbyDimensionalTears = countNearbyDimensionalTears(mob); + if (invertedEffect != null + && invertedEffect.isAmbient() + && !invertedEffect.isVisible() + && aboveUndersideExit) { + clearInversion(mob); + Antarchy.LOGGER.warn( + "[antarchy-gravity] cleared stale underside inversion from loaded mob type={} uuid={} pos=({}, {}, {}) dim={} effectDuration={} nearbyDimensionalTears={}", + mob.getType(), mob.getUUID(), mob.getX(), mob.getY(), mob.getZ(), + mob.level() != null ? mob.level().dimension().location() : "?", + invertedEffect.getDuration(), nearbyDimensionalTears + ); + return; + } + if (invertedEffect != null + && mob instanceof BedBugEntity + && aboveUndersideExit + && ThoraxisUndersideManager.isThoraxis(mob.level())) { + clearInversion(mob); + Antarchy.LOGGER.warn( + "[antarchy-gravity] cleared loaded inverted bed bug above underside exit type={} uuid={} pos=({}, {}, {}) dim={} effectDuration={} effectAmbient={} effectVisible={} nearbyDimensionalTears={}", + mob.getType(), mob.getUUID(), mob.getX(), mob.getY(), mob.getZ(), + mob.level() != null ? mob.level().dimension().location() : "?", + invertedEffect.getDuration(), invertedEffect.isAmbient(), invertedEffect.isVisible(), nearbyDimensionalTears + ); + return; + } + Antarchy.LOGGER.info( + "[antarchy-gravity] loaded inverted mob type={} uuid={} pos=({}, {}, {}) dim={} hasInvertedEffect={} effectDuration={} effectAmbient={} effectVisible={} aboveUndersideExit={} nearbyDimensionalTears={}", + mob.getType(), mob.getUUID(), mob.getX(), mob.getY(), mob.getZ(), + mob.level() != null ? mob.level().dimension().location() : "?", + invertedEffect != null, + invertedEffect != null ? invertedEffect.getDuration() : -1, + invertedEffect != null && invertedEffect.isAmbient(), + invertedEffect != null && invertedEffect.isVisible(), + aboveUndersideExit, + nearbyDimensionalTears + ); + } + + private static void clearInversion(Mob mob) { + mob.removeEffect(AnthologyEffects.inverted()); + GravityApi.resetGravityState(mob); + } + + private static int countNearbyDimensionalTears(Mob mob) { + if (!(mob.level() instanceof ServerLevel serverLevel)) { + return -1; + } + return serverLevel.getEntitiesOfClass( + DimensionalTearEntity.class, + mob.getBoundingBox().inflate(48.0D), + Entity::isAlive + ).size(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java index a837a731..a0ace782 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java @@ -10,9 +10,9 @@ import com.craisinlord.antarchy.content.entity.HerculesBeetleEntity; import com.craisinlord.antarchy.content.entity.HushProjectileEntity; import com.craisinlord.antarchy.content.entity.StinkBugEntity; import com.craisinlord.antarchy.content.entity.WaterBombEntity; -import com.craisinlord.antarchy.content.entity.TriffidEntity; -import com.craisinlord.antarchy.content.entity.CreepingHorrorEntity; -import com.craisinlord.antarchy.content.entity.LurkingTerrorEntity; +import com.craisinlord.antarchy.content.entity.FlytrapEntity; +import com.craisinlord.antarchy.content.entity.CrawlingBlightEntity; +import com.craisinlord.antarchy.content.entity.SkulkingFrightEntity; import com.craisinlord.antarchy.content.entity.ToreterrorEntity; import com.craisinlord.antarchy.content.entity.WaspEntity; import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; @@ -33,7 +33,6 @@ import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; import com.craisinlord.antarchy.content.entity.vortex.VortexChargeProjectileEntity; import com.craisinlord.antarchy.content.entity.vortex.VortexEntity; import com.craisinlord.antarchy.content.entity.vortex.WindVortexEntity; -import com.craisinlord.antarchy.content.time.TimeDilationFieldEntity; import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity; import com.craisinlord.antarchy.content.entity.nightmare.NightmareBiteEntity; import com.craisinlord.antarchy.content.entity.nightmare.NightmarePortalEntity; @@ -99,8 +98,6 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier> VORTEX_CHARGE_PROJECTILE = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") - public static Supplier> TIME_DILATION_FIELD = (Supplier>) UNBOUND; - @SuppressWarnings("unchecked") public static Supplier> ROYAL_BLACK_HOLE = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") public static Supplier> ROYAL_ASSAILANT_BLACK_HOLE = (Supplier>) UNBOUND; @@ -127,7 +124,7 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier> REVERIE = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") - public static Supplier> TRIFFID = (Supplier>) UNBOUND; + public static Supplier> FLYTRAP = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") public static Supplier> BRUTALFLY = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") @@ -139,9 +136,9 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier> WATER_BOMB = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") - public static Supplier> CREEPING_HORROR = (Supplier>) UNBOUND; + public static Supplier> CRAWLING_BLIGHT = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") - public static Supplier> LURKING_TERROR = (Supplier>) UNBOUND; + public static Supplier> SKULKING_FRIGHT = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") public static Supplier> MANTICORE = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") @@ -215,6 +212,8 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier> ROYAL_JUDGMENT_MENU = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") + public static Supplier> GIANT_FRYING_PAN_MENU = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") public static Supplier CHEEP_ITEM = (Supplier) UNBOUND; @SuppressWarnings("unchecked") public static Supplier DUPLICATOR_LOG = (Supplier) UNBOUND; @@ -267,7 +266,7 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier CLOUD_BLOCK = (Supplier) UNBOUND; @SuppressWarnings("unchecked") - public static Supplier TRIFFID_GOO_BLOCK = (Supplier) UNBOUND; + public static Supplier FLYTRAP_GOO_BLOCK = (Supplier) UNBOUND; @SuppressWarnings("unchecked") public static Supplier PALE_NYXITE = (Supplier) UNBOUND; @SuppressWarnings("unchecked") @@ -314,6 +313,7 @@ public final class AntarchyObjects { public static Supplier> DOUBLE_DAMAGE_CHANCE = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") public static Supplier> BLOODGLASS_MAX_HEARTS = (Supplier>) UNBOUND; + public static Supplier ENTITY_REACH = () -> null; @SuppressWarnings("unchecked") public static Supplier BLOODGLASS_WARD = (Supplier) UNBOUND; @SuppressWarnings("unchecked") @@ -324,9 +324,11 @@ public final class AntarchyObjects { public static Supplier STINKY_EFFECT = (Supplier) UNBOUND; @SuppressWarnings("unchecked") public static Supplier GLIMMERING_EFFECT = (Supplier) UNBOUND; - public static Supplier DILATED_EFFECT = (Supplier) UNBOUND; + public static Supplier ROYAL_VITALITY_PENALTY_EFFECT = (Supplier) UNBOUND; @SuppressWarnings("unchecked") - public static Supplier CONTRACTED_EFFECT = (Supplier) UNBOUND; + public static Supplier BLEEDING_EFFECT = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier BLOOD_MOON_EFFECT = (Supplier) UNBOUND; @SuppressWarnings("unchecked") public static Supplier LUMEN = (Supplier) UNBOUND; @SuppressWarnings("unchecked") @@ -352,9 +354,9 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier BED_BUG_EGG = (Supplier) UNBOUND; @SuppressWarnings("unchecked") - public static Supplier CREEPING_HORROR_EGGS = (Supplier) UNBOUND; + public static Supplier CRAWLING_BLIGHT_EGGS = (Supplier) UNBOUND; @SuppressWarnings("unchecked") - public static Supplier LURKING_TERROR_EGGS = (Supplier) UNBOUND; + public static Supplier SKULKING_FRIGHT_EGGS = (Supplier) UNBOUND; @SuppressWarnings("unchecked") public static Supplier WASP_NEST = (Supplier) UNBOUND; @SuppressWarnings("unchecked") @@ -400,6 +402,8 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier STINKY_GAS = (Supplier) UNBOUND; @SuppressWarnings("unchecked") + public static Supplier BUG_SPRAY_PARTICLE = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") public static Supplier NIGHTMARE_FIRE_FLAME = (Supplier) UNBOUND; @SuppressWarnings("unchecked") public static Supplier STINKY_FLY = (Supplier) UNBOUND; @@ -432,11 +436,6 @@ public final class AntarchyObjects { private AntarchyObjects() { } - /** Compatibility entry point for loader registries that bind the expanded 1.21 object set. */ - public static void bind(Supplier... ignored) { - // Loader-specific registrations populate the fields through the explicit setters below. - } - public static void bind( Supplier> easterBunny, Supplier> flyingSquirrel, @@ -451,14 +450,14 @@ public final class AntarchyObjects { Supplier> caterpillar, Supplier> butterfly, Supplier> reverie, - Supplier> triffid, + Supplier> flytrap, Supplier> brutalfly, Supplier> brutalflyOrb, Supplier> hushProjectile, Supplier> toreterror, Supplier> waterBomb, - Supplier> creepingHorror, - Supplier> lurkingTerror, + Supplier> crawlingBlight, + Supplier> skulkingFright, Supplier> stinkBug, Supplier> cheep, Supplier> dorrie, @@ -487,7 +486,7 @@ public final class AntarchyObjects { Supplier shellstoneBrickSlab, Supplier shellstoneBrickWall, Supplier cloudBlock, - Supplier triffidGooBlock, + Supplier flytrapGooBlock, Supplier paleNyxite, Supplier nyxiteSpike, Supplier chitinBlock, @@ -519,8 +518,8 @@ public final class AntarchyObjects { Supplier orangeMilkweed, Supplier pinkMilkweed, Supplier bedBugEggs, - Supplier creepingHorrorEggs, - Supplier lurkingTerrorEggs, + Supplier crawlingBlightEggs, + Supplier skulkingFrightEggs, Supplier waspNest, Supplier hushweed, Supplier squirrelNestBlock, @@ -552,14 +551,14 @@ public final class AntarchyObjects { CATERPILLAR = caterpillar; BUTTERFLY = butterfly; REVERIE = reverie; - TRIFFID = triffid; + FLYTRAP = flytrap; BRUTALFLY = brutalfly; BRUTALFLY_ORB = brutalflyOrb; HUSH_PROJECTILE = hushProjectile; TORETERROR = toreterror; WATER_BOMB = waterBomb; - CREEPING_HORROR = creepingHorror; - LURKING_TERROR = lurkingTerror; + CRAWLING_BLIGHT = crawlingBlight; + SKULKING_FRIGHT = skulkingFright; STINK_BUG = stinkBug; CHEEP = cheep; DORRIE = dorrie; @@ -588,7 +587,7 @@ public final class AntarchyObjects { SHELLSTONE_BRICK_SLAB = shellstoneBrickSlab; SHELLSTONE_BRICK_WALL = shellstoneBrickWall; CLOUD_BLOCK = cloudBlock; - TRIFFID_GOO_BLOCK = triffidGooBlock; + FLYTRAP_GOO_BLOCK = flytrapGooBlock; PALE_NYXITE = paleNyxite; NYXITE_SPIKE = nyxiteSpike; CHITIN_BLOCK = chitinBlock; @@ -620,8 +619,8 @@ public final class AntarchyObjects { ORANGE_MILKWEED = orangeMilkweed; PINK_MILKWEED = pinkMilkweed; BED_BUG_EGG = bedBugEggs; - CREEPING_HORROR_EGGS = creepingHorrorEggs; - LURKING_TERROR_EGGS = lurkingTerrorEggs; + CRAWLING_BLIGHT_EGGS = crawlingBlightEggs; + SKULKING_FRIGHT_EGGS = skulkingFrightEggs; WASP_NEST = waspNest; HUSHWEED = hushweed; SQUIRREL_NEST_BLOCK = squirrelNestBlock; @@ -649,6 +648,10 @@ public final class AntarchyObjects { OCTOPUS_BOMB = supplier; } + public static void setBugSprayParticle(Supplier supplier) { + BUG_SPRAY_PARTICLE = supplier; + } + public static void setTentacle(Supplier> supplier) { TENTACLE = supplier; } @@ -695,10 +698,6 @@ public final class AntarchyObjects { VORTEX_CHARGE_PROJECTILE = supplier; } - public static void setTimeDilationField(Supplier> supplier) { - TIME_DILATION_FIELD = supplier; - } - public static void setRoyalBlackHole(Supplier> supplier) { ROYAL_BLACK_HOLE = supplier; } @@ -823,12 +822,16 @@ public final class AntarchyObjects { GLIMMERING_EFFECT = supplier; } - public static void setDilatedEffect(Supplier supplier) { - DILATED_EFFECT = supplier; + public static void setRoyalVitalityPenaltyEffect(Supplier supplier) { + ROYAL_VITALITY_PENALTY_EFFECT = supplier; } - public static void setContractedEffect(Supplier supplier) { - CONTRACTED_EFFECT = supplier; + public static void setBleedingEffect(Supplier supplier) { + BLEEDING_EFFECT = supplier; + } + + public static void setBloodMoonEffect(Supplier supplier) { + BLOOD_MOON_EFFECT = supplier; } public static void setElka(Supplier> supplier) { @@ -907,6 +910,10 @@ public final class AntarchyObjects { LUCID_BOLT_IMPACT_LARGE = supplier; } + public static void setEntityReach(Supplier supplier) { + ENTITY_REACH = supplier; + } + public static void setPeachLeavesParticle(Supplier supplier) { PEACH_LEAVES_PARTICLE = supplier; } @@ -923,6 +930,10 @@ public final class AntarchyObjects { ROYAL_JUDGMENT_MENU = supplier; } + public static void setGiantFryingPanMenu(Supplier> supplier) { + GIANT_FRYING_PAN_MENU = supplier; + } + public static void setAmericanComponent(Supplier> supplier) { AMERICAN_COMPONENT = supplier.get(); } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/AntarchySoundEvents.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/AntarchySoundEvents.java index 3fb4bdf2..025c88c0 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/AntarchySoundEvents.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/AntarchySoundEvents.java @@ -26,11 +26,11 @@ public final class AntarchySoundEvents { public static Supplier ANT_BITE = (Supplier) UNBOUND; public static Supplier ANT_GATHER = (Supplier) UNBOUND; public static Supplier ANT_NEST = (Supplier) UNBOUND; - public static Supplier CLOUD_SHARK_BITE = (Supplier) UNBOUND; - public static Supplier CLOUD_SHARK_IDLE = (Supplier) UNBOUND; - public static Supplier CLOUD_SHARK_HURT = (Supplier) UNBOUND; - public static Supplier CLOUD_SHARK_DEATH = (Supplier) UNBOUND; - public static Supplier CLOUD_SHARK_FLY = (Supplier) UNBOUND; + public static Supplier STRATOSHARK_BITE = (Supplier) UNBOUND; + public static Supplier STRATOSHARK_IDLE = (Supplier) UNBOUND; + public static Supplier STRATOSHARK_HURT = (Supplier) UNBOUND; + public static Supplier STRATOSHARK_DEATH = (Supplier) UNBOUND; + public static Supplier STRATOSHARK_FLY = (Supplier) UNBOUND; public static Supplier CATERPILLAR_IDLE = (Supplier) UNBOUND; public static Supplier CATERPILLAR_HURT = (Supplier) UNBOUND; public static Supplier CATERPILLAR_CRAWL = (Supplier) UNBOUND; @@ -94,16 +94,20 @@ public final class AntarchySoundEvents { public static Supplier NIGHTMARE_DEATH = (Supplier) UNBOUND; public static Supplier NIGHTMARE_BITE = (Supplier) UNBOUND; public static Supplier NIGHTMARE_FLAP = (Supplier) UNBOUND; - public static Supplier TRIFFID_ATTACK = (Supplier) UNBOUND; - public static Supplier TRIFFID_GRAB = (Supplier) UNBOUND; - public static Supplier TRIFFID_HURT = (Supplier) UNBOUND; - public static Supplier TRIFFID_DEATH = (Supplier) UNBOUND; - public static Supplier TRIFFID_HISS = (Supplier) UNBOUND; - public static Supplier TRIFFID_GROWL = (Supplier) UNBOUND; + public static Supplier FLYTRAP_ATTACK = (Supplier) UNBOUND; + public static Supplier FLYTRAP_GRAB = (Supplier) UNBOUND; + public static Supplier FLYTRAP_HURT = (Supplier) UNBOUND; + public static Supplier FLYTRAP_DEATH = (Supplier) UNBOUND; + public static Supplier FLYTRAP_HISS = (Supplier) UNBOUND; + public static Supplier FLYTRAP_GROWL = (Supplier) UNBOUND; public static Supplier MANTIS_AMBIENT = (Supplier) UNBOUND; public static Supplier MANTIS_HURT = (Supplier) UNBOUND; public static Supplier MANTIS_ATTACK = (Supplier) UNBOUND; public static Supplier MANTIS_FLY_LOOP = (Supplier) UNBOUND; + public static Supplier MANTICORE_IDLE = (Supplier) UNBOUND; + public static Supplier MANTICORE_WALK = (Supplier) UNBOUND; + public static Supplier MANTICORE_FLY = (Supplier) UNBOUND; + public static Supplier MANTICORE_BITE = (Supplier) UNBOUND; public static Supplier GRAVITY_GUN_PICKUP = (Supplier) UNBOUND; public static Supplier GRAVITY_GUN_DROP = (Supplier) UNBOUND; public static Supplier GRAVITY_GUN_HOLD_LOOP = (Supplier) UNBOUND; @@ -148,13 +152,13 @@ public final class AntarchySoundEvents { public static Supplier STINK_BUG_IDLE = (Supplier) UNBOUND; public static Supplier CAVARYN_HEARTBEAT = (Supplier) UNBOUND; public static Supplier ROLLY_POLLY_IDLE = (Supplier) UNBOUND; - public static Supplier CREEPING_HORROR_GROWL = (Supplier) UNBOUND; - public static Supplier CREEPING_HORROR_HURT = (Supplier) UNBOUND; - public static Supplier CREEPING_HORROR_BITE = (Supplier) UNBOUND; - public static Supplier LURKING_TERROR_SNARL = (Supplier) UNBOUND; - public static Supplier LURKING_TERROR_HURT = (Supplier) UNBOUND; - public static Supplier LURKING_TERROR_BITE = (Supplier) UNBOUND; - public static Supplier LURKING_TERROR_FLY_LOOP = (Supplier) UNBOUND; + public static Supplier CRAWLING_BLIGHT_GROWL = (Supplier) UNBOUND; + public static Supplier CRAWLING_BLIGHT_HURT = (Supplier) UNBOUND; + public static Supplier CRAWLING_BLIGHT_BITE = (Supplier) UNBOUND; + public static Supplier SKULKING_FRIGHT_SNARL = (Supplier) UNBOUND; + public static Supplier SKULKING_FRIGHT_HURT = (Supplier) UNBOUND; + public static Supplier SKULKING_FRIGHT_BITE = (Supplier) UNBOUND; + public static Supplier SKULKING_FRIGHT_FLY_LOOP = (Supplier) UNBOUND; public static Supplier DUCT_TAPE_USE = (Supplier) UNBOUND; public static Supplier HERCULES_BEETLE_IDLE = (Supplier) UNBOUND; public static Supplier HERCULES_BEETLE_HURT = (Supplier) UNBOUND; @@ -162,10 +166,10 @@ public final class AntarchySoundEvents { public static Supplier HERCULES_BEETLE_CRY = (Supplier) UNBOUND; public static Supplier HERCULES_BEETLE_CHARGE_START = (Supplier) UNBOUND; public static Supplier HERCULES_BEETLE_KNOCKED_DOWN = (Supplier) UNBOUND; - public static Supplier JUMPY_BUG_IDLE = (Supplier) UNBOUND; + public static Supplier SPRINGBUG_IDLE = (Supplier) UNBOUND; public static Supplier SPIT_BUG_IDLE = (Supplier) UNBOUND; - public static Supplier JUMPY_BUG_HURT = (Supplier) UNBOUND; - public static Supplier JUMPY_BUG_JUMP = (Supplier) UNBOUND; + public static Supplier SPRINGBUG_HURT = (Supplier) UNBOUND; + public static Supplier SPRINGBUG_JUMP = (Supplier) UNBOUND; public static Supplier SPIT_BUG_HURT = (Supplier) UNBOUND; public static Supplier SPIT_BUG_SPIT = (Supplier) UNBOUND; public static Supplier BRUTALFLY_SPIT = (Supplier) UNBOUND; @@ -196,6 +200,7 @@ public final class AntarchySoundEvents { public static Supplier QUEEN_ROAR = (Supplier) UNBOUND; public static Supplier KING_BEAM_SHOOT = (Supplier) UNBOUND; public static Supplier KING_FIREBALL_SHOOT = (Supplier) UNBOUND; + public static Supplier KING_ICE_SPIKES = (Supplier) UNBOUND; public static Supplier KING_DECREE_CAST = (Supplier) UNBOUND; public static Supplier QUEEN_BEAM_SHOOT = (Supplier) UNBOUND; public static Supplier QUEEN_BEAM_START = (Supplier) UNBOUND; @@ -216,6 +221,12 @@ public final class AntarchySoundEvents { public static Supplier PRINCESS_SHOOT = (Supplier) UNBOUND; public static Supplier PRINCESS_FLY = (Supplier) UNBOUND; public static Supplier PRINCESS_STEP = (Supplier) UNBOUND; + public static Supplier KING_DECREE = (Supplier) UNBOUND; + public static Supplier KING_SUCCESS = (Supplier) UNBOUND; + public static Supplier KING_JUDGEMENT = (Supplier) UNBOUND; + public static Supplier HOVERBOARD_MOUNT = (Supplier) UNBOUND; + public static Supplier HOVERBOARD_DISMOUNT = (Supplier) UNBOUND; + public static Supplier HOVERBOARD_IDLE = (Supplier) UNBOUND; private AntarchySoundEvents() { } @@ -238,11 +249,11 @@ public final class AntarchySoundEvents { Supplier antBite, Supplier antGather, Supplier antNest, - Supplier cloudSharkBite, - Supplier cloudSharkIdle, - Supplier cloudSharkHurt, - Supplier cloudSharkDeath, - Supplier cloudSharkFly, + Supplier stratosharkBite, + Supplier stratosharkIdle, + Supplier stratosharkHurt, + Supplier stratosharkDeath, + Supplier stratosharkFly, Supplier caterpillarIdle, Supplier caterpillarHurt, Supplier caterpillarCrawl, @@ -302,16 +313,20 @@ public final class AntarchySoundEvents { Supplier nightmareDeath, Supplier nightmareBite, Supplier nightmareFlap, - Supplier triffidAttack, - Supplier triffidGrab, - Supplier triffidHurt, - Supplier triffidDeath, - Supplier triffidHiss, - Supplier triffidGrowl, + Supplier flytrapAttack, + Supplier flytrapGrab, + Supplier flytrapHurt, + Supplier flytrapDeath, + Supplier flytrapHiss, + Supplier flytrapGrowl, Supplier mantisAmbient, Supplier mantisHurt, Supplier mantisAttack, Supplier mantisFlyLoop, + Supplier manticoreIdle, + Supplier manticoreWalk, + Supplier manticoreFly, + Supplier manticoreBite, Supplier gravityGunPickup, Supplier gravityGunDrop, Supplier gravityGunHoldLoop, @@ -356,13 +371,13 @@ public final class AntarchySoundEvents { Supplier stinkBugIdle, Supplier cavarynHeartbeat, Supplier rollyPollyIdle, - Supplier creepingHorrorGrowl, - Supplier creepingHorrorHurt, - Supplier creepingHorrorBite, - Supplier lurkingTerrorSnarl, - Supplier lurkingTerrorHurt, - Supplier lurkingTerrorBite, - Supplier lurkingTerrorFlyLoop, + Supplier crawlingBlightGrowl, + Supplier crawlingBlightHurt, + Supplier crawlingBlightBite, + Supplier skulkingFrightSnarl, + Supplier skulkingFrightHurt, + Supplier skulkingFrightBite, + Supplier skulkingFrightFlyLoop, Supplier ductTapeUse, Supplier herculesBeetleIdle, Supplier herculesBeetleHurt, @@ -370,10 +385,10 @@ public final class AntarchySoundEvents { Supplier herculesBeetleCry, Supplier herculesBeetleChargeStart, Supplier herculesBeetleKnockedDown, - Supplier jumpyBugIdle, + Supplier springbugIdle, Supplier spitBugIdle, - Supplier jumpyBugHurt, - Supplier jumpyBugJump, + Supplier springbugHurt, + Supplier springbugJump, Supplier spitBugHurt, Supplier spitBugSpit, Supplier brutalflySpit, @@ -404,6 +419,7 @@ public final class AntarchySoundEvents { Supplier queenRoar, Supplier kingBeamShoot, Supplier kingFireballShoot, + Supplier kingIceSpikes, Supplier kingDecreeCast, Supplier queenBeamShoot, Supplier queenBeamStart, @@ -423,7 +439,10 @@ public final class AntarchySoundEvents { Supplier princessBite, Supplier princessShoot, Supplier princessFly, - Supplier princessStep + Supplier princessStep, + Supplier kingDecree, + Supplier kingSuccess, + Supplier kingJudgement ) { SQUIDZOOKA_FIRE = squidzookaFire; SHRINK_RAY_CHARGE = shrinkRayCharge; @@ -439,11 +458,11 @@ public final class AntarchySoundEvents { ANT_BITE = antBite; ANT_GATHER = antGather; ANT_NEST = antNest; - CLOUD_SHARK_BITE = cloudSharkBite; - CLOUD_SHARK_IDLE = cloudSharkIdle; - CLOUD_SHARK_HURT = cloudSharkHurt; - CLOUD_SHARK_DEATH = cloudSharkDeath; - CLOUD_SHARK_FLY = cloudSharkFly; + STRATOSHARK_BITE = stratosharkBite; + STRATOSHARK_IDLE = stratosharkIdle; + STRATOSHARK_HURT = stratosharkHurt; + STRATOSHARK_DEATH = stratosharkDeath; + STRATOSHARK_FLY = stratosharkFly; CATERPILLAR_IDLE = caterpillarIdle; CATERPILLAR_HURT = caterpillarHurt; CATERPILLAR_CRAWL = caterpillarCrawl; @@ -503,16 +522,20 @@ public final class AntarchySoundEvents { NIGHTMARE_DEATH = nightmareDeath; NIGHTMARE_BITE = nightmareBite; NIGHTMARE_FLAP = nightmareFlap; - TRIFFID_ATTACK = triffidAttack; - TRIFFID_GRAB = triffidGrab; - TRIFFID_HURT = triffidHurt; - TRIFFID_DEATH = triffidDeath; - TRIFFID_HISS = triffidHiss; - TRIFFID_GROWL = triffidGrowl; + FLYTRAP_ATTACK = flytrapAttack; + FLYTRAP_GRAB = flytrapGrab; + FLYTRAP_HURT = flytrapHurt; + FLYTRAP_DEATH = flytrapDeath; + FLYTRAP_HISS = flytrapHiss; + FLYTRAP_GROWL = flytrapGrowl; MANTIS_AMBIENT = mantisAmbient; MANTIS_HURT = mantisHurt; MANTIS_ATTACK = mantisAttack; MANTIS_FLY_LOOP = mantisFlyLoop; + MANTICORE_IDLE = manticoreIdle; + MANTICORE_WALK = manticoreWalk; + MANTICORE_FLY = manticoreFly; + MANTICORE_BITE = manticoreBite; GRAVITY_GUN_PICKUP = gravityGunPickup; GRAVITY_GUN_DROP = gravityGunDrop; GRAVITY_GUN_HOLD_LOOP = gravityGunHoldLoop; @@ -557,13 +580,13 @@ public final class AntarchySoundEvents { STINK_BUG_IDLE = stinkBugIdle; CAVARYN_HEARTBEAT = cavarynHeartbeat; ROLLY_POLLY_IDLE = rollyPollyIdle; - CREEPING_HORROR_GROWL = creepingHorrorGrowl; - CREEPING_HORROR_HURT = creepingHorrorHurt; - CREEPING_HORROR_BITE = creepingHorrorBite; - LURKING_TERROR_SNARL = lurkingTerrorSnarl; - LURKING_TERROR_HURT = lurkingTerrorHurt; - LURKING_TERROR_BITE = lurkingTerrorBite; - LURKING_TERROR_FLY_LOOP = lurkingTerrorFlyLoop; + CRAWLING_BLIGHT_GROWL = crawlingBlightGrowl; + CRAWLING_BLIGHT_HURT = crawlingBlightHurt; + CRAWLING_BLIGHT_BITE = crawlingBlightBite; + SKULKING_FRIGHT_SNARL = skulkingFrightSnarl; + SKULKING_FRIGHT_HURT = skulkingFrightHurt; + SKULKING_FRIGHT_BITE = skulkingFrightBite; + SKULKING_FRIGHT_FLY_LOOP = skulkingFrightFlyLoop; DUCT_TAPE_USE = ductTapeUse; HERCULES_BEETLE_IDLE = herculesBeetleIdle; HERCULES_BEETLE_HURT = herculesBeetleHurt; @@ -571,10 +594,10 @@ public final class AntarchySoundEvents { HERCULES_BEETLE_CRY = herculesBeetleCry; HERCULES_BEETLE_CHARGE_START = herculesBeetleChargeStart; HERCULES_BEETLE_KNOCKED_DOWN = herculesBeetleKnockedDown; - JUMPY_BUG_IDLE = jumpyBugIdle; + SPRINGBUG_IDLE = springbugIdle; SPIT_BUG_IDLE = spitBugIdle; - JUMPY_BUG_HURT = jumpyBugHurt; - JUMPY_BUG_JUMP = jumpyBugJump; + SPRINGBUG_HURT = springbugHurt; + SPRINGBUG_JUMP = springbugJump; SPIT_BUG_HURT = spitBugHurt; SPIT_BUG_SPIT = spitBugSpit; BRUTALFLY_SPIT = brutalflySpit; @@ -605,6 +628,7 @@ public final class AntarchySoundEvents { QUEEN_ROAR = queenRoar; KING_BEAM_SHOOT = kingBeamShoot; KING_FIREBALL_SHOOT = kingFireballShoot; + KING_ICE_SPIKES = kingIceSpikes; KING_DECREE_CAST = kingDecreeCast; QUEEN_BEAM_SHOOT = queenBeamShoot; QUEEN_BEAM_START = queenBeamStart; @@ -625,6 +649,9 @@ public final class AntarchySoundEvents { PRINCESS_SHOOT = princessShoot; PRINCESS_FLY = princessFly; PRINCESS_STEP = princessStep; + KING_DECREE = kingDecree; + KING_SUCCESS = kingSuccess; + KING_JUDGEMENT = kingJudgement; } public static void bindDimensionalTearSounds( @@ -638,4 +665,10 @@ public final class AntarchySoundEvents { DIMENSIONAL_TEAR_CREATURE_LEAVES = dimensionalTearCreatureLeaves; DIMENSIONAL_TEAR_CLOSE = dimensionalTearClose; } + + public static void bindHoverboardSounds(Supplier mount, Supplier dismount, Supplier idle) { + HOVERBOARD_MOUNT = mount; + HOVERBOARD_DISMOUNT = dismount; + HOVERBOARD_IDLE = idle; + } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java index 07474827..4a54dc63 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java @@ -1,5 +1,6 @@ package com.craisinlord.antarchy.content; +import com.craisinlord.anthology.time.TimeDilationTags; import com.craisinlord.antarchy.Antarchy; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceLocation; @@ -23,6 +24,7 @@ public final class AntarchyTags { public static final class Blocks { public static final TagKey DUPLICATOR_TREE_BLACKLIST = TagKey.create(Registries.BLOCK, id("duplicator_tree_blacklist")); public static final TagKey GRAVITY_GUN_BLACKLIST = TagKey.create(Registries.BLOCK, id("gravity_gun_blacklist")); + public static final TagKey QUEEN_GRABBABLE_BLOCKS = TagKey.create(Registries.BLOCK, id("queen_grabbable_blocks")); public static final TagKey DREAM_FIRE_BASE_BLOCKS = TagKey.create(Registries.BLOCK, id("dream_fire_base_blocks")); public static final TagKey POTENT_NYXITE_ACTIVATION_BLOCKS = TagKey.create(Registries.BLOCK, id("potent_nyxite_activation_blocks")); public static final TagKey CORNEA_STALK_PLANTABLE = TagKey.create(Registries.BLOCK, id("cornea_stalk_plantable")); @@ -43,8 +45,8 @@ public final class AntarchyTags { public static final TagKey BLUESTONE_COMPONENTS = TagKey.create(Registries.BLOCK, id("bluestone_components")); public static final TagKey BLUESTONE_CONNECTABLE = TagKey.create(Registries.BLOCK, id("bluestone_connectable")); public static final TagKey ANTIMETAL_INVERSION_BLOCKS = TagKey.create(Registries.BLOCK, id("antimetal_inversion_blocks")); - public static final TagKey LUCID_ANCHOR_BASE_BLOCKS = TagKey.create(Registries.BLOCK, id("lucid_anchor_base_blocks")); public static final TagKey TIGER_EYE_CAMOUFLAGE_BLACKLIST = TagKey.create(Registries.BLOCK, id("tiger_eye_camouflage_blacklist")); + public static final TagKey LUCID_ANCHOR_BASE_BLOCKS = TagKey.create(Registries.BLOCK, id("lucid_anchor_base_blocks")); public static final TagKey NYXIUM = TagKey.create(Registries.BLOCK, id("nyxium")); private Blocks() { @@ -54,6 +56,8 @@ public final class AntarchyTags { public static final class DamageType { public static final TagKey BYPASSES_BLOODGLASS = TagKey.create(net.minecraft.core.registries.Registries.DAMAGE_TYPE, new ResourceLocation("antarchy", "bypasses_bloodglass")); + public static final TagKey ANTARCHY_MAGIC_BURST = + TagKey.create(net.minecraft.core.registries.Registries.DAMAGE_TYPE, new ResourceLocation("antarchy", "antarchy_magic_burst")); private DamageType() { } @@ -61,28 +65,32 @@ public final class AntarchyTags { public static final class Entities { public static final TagKey> BASILISK_PREY = TagKey.create(Registries.ENTITY_TYPE, id("basilisk_prey")); + public static final TagKey> SPELL_RESISTANT_BOSS = TagKey.create(Registries.ENTITY_TYPE, id("spell_resistant_boss")); public static final TagKey> DREAM_SAND_LOW_GRAVITY_BLACKLIST = TagKey.create(Registries.ENTITY_TYPE, id("dream_sand_low_gravity_blacklist")); public static final TagKey> GRAVITY_GUN_BLACKLIST = TagKey.create(Registries.ENTITY_TYPE, id("gravity_gun_blacklist")); public static final TagKey> INVERTED_IMMUNE = TagKey.create(Registries.ENTITY_TYPE, id("inverted_immune")); public static final TagKey> LUCID_BOLT_IMMUNE = TagKey.create(Registries.ENTITY_TYPE, id("lucid_bolt_immune")); + public static final TagKey> WIND_VORTEX_IMMUNE = TagKey.create(Registries.ENTITY_TYPE, id("wind_vortex_immune")); public static final TagKey> DUCT_TAPE_STICK_BLACKLIST = TagKey.create(Registries.ENTITY_TYPE, id("duct_tape_stick_blacklist")); public static final TagKey> NIGHTMARE_NO_ATTACK = TagKey.create(Registries.ENTITY_TYPE, id("nightmare_no_attack")); public static final TagKey> SIZE_CHANGING_IMMUNE = TagKey.create(Registries.ENTITY_TYPE, id("size_changing_immune")); public static final TagKey> CRITTER_CAGE_BLACKLIST = TagKey.create(Registries.ENTITY_TYPE, id("critter_cage_blacklist")); public static final TagKey> PARALYSIS_IMMUNE = TagKey.create(Registries.ENTITY_TYPE, id("paralysis_immune")); + public static final TagKey> UNDERSIDE_CEILING_SPAWNERS = TagKey.create(Registries.ENTITY_TYPE, id("underside_ceiling_spawners")); + public static final TagKey> UNDERSIDE_CEILING_SHORT_GAP = TagKey.create(Registries.ENTITY_TYPE, id("underside_ceiling_short_gap")); public static final TagKey> HUSHWEED_TARGETS = TagKey.create(Registries.ENTITY_TYPE, id("hushweed_targets")); - public static final TagKey> TRIFFID_PREY = TagKey.create(Registries.ENTITY_TYPE, id("triffid_prey")); + public static final TagKey> FLYTRAP_PREY = TagKey.create(Registries.ENTITY_TYPE, id("flytrap_prey")); public static final TagKey> STINKY_REPELLED_HOSTILES = TagKey.create(Registries.ENTITY_TYPE, id("stinky_repelled_hostiles")); public static final TagKey> SCORPION_WHIP_IMMUNE = TagKey.create(Registries.ENTITY_TYPE, id("scorpion_whip_immune")); public static final TagKey> SCORPION_WHIP_BLACKLIST = TagKey.create(Registries.ENTITY_TYPE, id("scorpion_whip_blacklist")); - public static final TagKey> LUCID_ANCHOR_IMMUNE = TagKey.create(Registries.ENTITY_TYPE, id("lucid_anchor_immune")); public static final TagKey> TIGER_EYE_DETECTION_IMMUNE = TagKey.create(Registries.ENTITY_TYPE, id("tiger_eye_detection_immune")); + public static final TagKey> LUCID_ANCHOR_IMMUNE = TagKey.create(Registries.ENTITY_TYPE, id("lucid_anchor_immune")); public static final TagKey> DIMENSIONAL_TEAR_COMMON_SPAWNS = TagKey.create(Registries.ENTITY_TYPE, id("dimensional_tear_common_spawns")); public static final TagKey> DIMENSIONAL_TEAR_RARE_SPAWNS = TagKey.create(Registries.ENTITY_TYPE, id("dimensional_tear_rare_spawns")); - public static final TagKey> TIME_DILATION_IMMUNE = TagKey.create(Registries.ENTITY_TYPE, id("time_dilation_immune")); + public static final TagKey> TIME_DILATION_IMMUNE = TimeDilationTags.TIME_DILATION_IMMUNE; + public static final TagKey> QUEEN_DOES_NOT_ATTACK = TagKey.create(Registries.ENTITY_TYPE, id("queen_does_not_attack")); public static final TagKey> COMMANDED_BLACKLIST = TagKey.create(Registries.ENTITY_TYPE, id("commanded_blacklist")); public static final TagKey> DILATED_BLACKLIST = TagKey.create(Registries.ENTITY_TYPE, id("dilated_blacklist")); - public static final TagKey> WIND_VORTEX_IMMUNE = TagKey.create(Registries.ENTITY_TYPE, id("wind_vortex_immune")); private Entities() { } @@ -124,6 +132,7 @@ public final class AntarchyTags { public static final TagKey GLIMMER_AUGMENT_ELKA = TagKey.create(Registries.ITEM, id("glimmer_augment_elka")); public static final TagKey HFCS_CANNOT_AMERICANIZE = TagKey.create(Registries.ITEM, id("hfcs_cannot_americanize")); public static final TagKey TIGER_EYE_ARMOR = TagKey.create(Registries.ITEM, id("tigers_eye_armor")); + public static final TagKey BIG_BERTHA_INGREDIENT = TagKey.create(Registries.ITEM, id("big_bertha_ingredient")); private Items() { } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/advancement/AntarchyAdvancementTriggers.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/advancement/AntarchyAdvancementTriggers.java new file mode 100644 index 00000000..7d619196 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/advancement/AntarchyAdvancementTriggers.java @@ -0,0 +1,132 @@ +package com.craisinlord.antarchy.content.advancement; + +import com.craisinlord.antarchy.mixins.CriteriaTriggersAccessor; +import com.google.gson.JsonObject; +import java.util.Optional; +import java.util.function.BiConsumer; +import net.minecraft.advancements.CriterionTrigger; +import net.minecraft.advancements.critereon.AbstractCriterionTriggerInstance; +import net.minecraft.advancements.critereon.ContextAwarePredicate; +import net.minecraft.advancements.critereon.DeserializationContext; +import net.minecraft.advancements.critereon.SerializationContext; +import net.minecraft.advancements.critereon.SimpleCriterionTrigger; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.util.GsonHelper; + +public final class AntarchyAdvancementTriggers { + private static final CrossedGravityThroat CROSSING = new CrossedGravityThroat(new ResourceLocation("antarchy", "crossed_gravity_throat")); + private static final HordePhaseChanged HORDE_PHASE = new HordePhaseChanged(new ResourceLocation("antarchy", "horde_phase_changed")); + private static final TamedGlimmer TAMED_GLIMMER = new TamedGlimmer(new ResourceLocation("antarchy", "tamed_glimmer")); + + private AntarchyAdvancementTriggers() { + } + + public static void register() { + register((id, trigger) -> CriteriaTriggersAccessor.antarchy$register(trigger)); + } + + public static void register(BiConsumer> registrar) { + registrar.accept(CROSSING.getId(), CROSSING); + registrar.accept(HORDE_PHASE.getId(), HORDE_PHASE); + registrar.accept(TAMED_GLIMMER.getId(), TAMED_GLIMMER); + } + + public static void crossedGravityThroat(ServerPlayer player, String direction) { + CROSSING.fire(player, direction); + } + + public static void hordePhaseChanged(ServerPlayer player, String phase) { + HORDE_PHASE.fire(player, phase); + } + + public static void tamedGlimmer(ServerPlayer player, String variant) { + TAMED_GLIMMER.fire(player, variant); + } + + private static Optional optionalString(JsonObject json, String key) { + return json.has(key) ? Optional.of(GsonHelper.getAsString(json, key)) : Optional.empty(); + } + + private static final class EventInstance extends AbstractCriterionTriggerInstance { + private final Optional direction; + private final Optional phase; + private final Optional variant; + + private EventInstance(ResourceLocation id, ContextAwarePredicate player, Optional direction, Optional phase, Optional variant) { + super(id, player); + this.direction = direction; + this.phase = phase; + this.variant = variant; + } + + Optional direction() { + return this.direction; + } + + Optional phase() { + return this.phase; + } + + Optional variant() { + return this.variant; + } + + @Override + public JsonObject serializeToJson(SerializationContext context) { + JsonObject json = super.serializeToJson(context); + this.direction.ifPresent(value -> json.addProperty("direction", value)); + this.phase.ifPresent(value -> json.addProperty("phase", value)); + this.variant.ifPresent(value -> json.addProperty("variant", value)); + return json; + } + } + + private abstract static class EventTrigger extends SimpleCriterionTrigger { + private final ResourceLocation id; + + EventTrigger(ResourceLocation id) { + this.id = id; + } + + @Override + public ResourceLocation getId() { + return this.id; + } + + @Override + protected EventInstance createInstance(JsonObject json, ContextAwarePredicate player, DeserializationContext context) { + return new EventInstance(this.id, player, optionalString(json, "direction"), optionalString(json, "phase"), optionalString(json, "variant")); + } + } + + private static final class CrossedGravityThroat extends EventTrigger { + CrossedGravityThroat(ResourceLocation id) { + super(id); + } + + private void fire(ServerPlayer player, String direction) { + trigger(player, instance -> instance.direction().map(direction::equals).orElse(true)); + } + } + + private static final class HordePhaseChanged extends EventTrigger { + HordePhaseChanged(ResourceLocation id) { + super(id); + } + + private void fire(ServerPlayer player, String phase) { + trigger(player, instance -> instance.phase().map(phase::equals).orElse(true)); + } + } + + private static final class TamedGlimmer extends EventTrigger { + TamedGlimmer(ResourceLocation id) { + super(id); + } + + private void fire(ServerPlayer player, String variant) { + trigger(player, instance -> instance.variant().map(variant::equals).orElse(true)); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AntDimensionPortalBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AntDimensionPortalBlock.java index 2d1ced8a..dcfb6163 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AntDimensionPortalBlock.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AntDimensionPortalBlock.java @@ -85,7 +85,7 @@ public final class AntDimensionPortalBlock extends Block { if (level.isClientSide() || !entity.isAlive() || !entity.canChangeDimensions() || entity.isOnPortalCooldown()) { return; } - if (!(level instanceof ServerLevel serverLevel)) { + if (!(level instanceof ServerLevel)) { return; } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AntTrapBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AntTrapBlock.java new file mode 100644 index 00000000..7534f2b4 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AntTrapBlock.java @@ -0,0 +1,52 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.block.entity.AntNestBlockEntity; +import com.craisinlord.antarchy.content.entity.ant.BaseAntEntity; +import java.util.List; +import java.util.function.Supplier; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.world.level.BlockGetter; + +public final class AntTrapBlock extends AntNestBlock { + private static final VoxelShape SHAPE = Block.box(3.0D, 0.0D, 3.0D, 13.0D, 5.0D, 13.0D); + + public AntTrapBlock(Supplier>> antTypesSupplier, + Supplier> blockEntityTypeSupplier, + BlockBehaviour.Properties properties) { + super(antTypesSupplier, blockEntityTypeSupplier, 10, false, false, properties); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return SHAPE; + } + + @Override + public void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) { + if (!state.is(newState.getBlock()) && level instanceof ServerLevel serverLevel + && level.getBlockEntity(pos) instanceof AntNestBlockEntity trap) { + trap.releaseAll(serverLevel); + } + super.onRemove(state, level, pos, newState, movedByPiston); + } + + @Override + public void playerDestroy(Level level, Player player, BlockPos pos, BlockState state, BlockEntity blockEntity, ItemStack stack) { + if (blockEntity instanceof AntNestBlockEntity trap && level instanceof ServerLevel serverLevel) { + trap.releaseAll(serverLevel); + } + super.playerDestroy(level, player, pos, state, blockEntity, stack); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AntigravelBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AntigravelBlock.java index 174fb5c2..09027921 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AntigravelBlock.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AntigravelBlock.java @@ -12,6 +12,8 @@ import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; public class AntigravelBlock extends Block { + private static final int SETTLE_DELAY = 2; + public AntigravelBlock(BlockBehaviour.Properties properties) { super(properties); } @@ -20,13 +22,13 @@ public class AntigravelBlock extends Block { public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { super.onPlace(state, level, pos, oldState, movedByPiston); if (!level.isClientSide) { - level.scheduleTick(pos, this, 2); + level.scheduleTick(pos, this, SETTLE_DELAY); } } @Override public BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { - level.scheduleTick(pos, this, 2); + level.scheduleTick(pos, this, SETTLE_DELAY); return super.updateShape(state, direction, neighborState, level, pos, neighborPos); } @@ -38,8 +40,9 @@ public class AntigravelBlock extends Block { BlockPos abovePos = pos.above(); BlockState above = level.getBlockState(abovePos); boolean passable = above.isAir() || above.getCollisionShape(level, abovePos).isEmpty(); - if (passable) { - UpwardFallingBlockEntity.fallUp(level, pos, state); + if (!passable) { + return; } + UpwardFallingBlockEntity.fallUp(level, pos, state, false); } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AntimetalScaffoldingBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AntimetalScaffoldingBlock.java index 64c03be0..6bcda59d 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AntimetalScaffoldingBlock.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AntimetalScaffoldingBlock.java @@ -1,7 +1,7 @@ package com.craisinlord.antarchy.content.block; import com.craisinlord.antarchy.content.entity.UpwardFallingBlockEntity; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; +import com.craisinlord.anthology.gravity.GravityApi; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; @@ -64,7 +64,7 @@ public class AntimetalScaffoldingBlock extends ScaffoldingBlock { public BlockState getStateForPlacement(BlockPlaceContext context) { BlockPos pos = context.getClickedPos(); Level level = context.getLevel(); - boolean inverted = context.getPlayer() != null && AntarchyGravityApi.isGravityInverted(context.getPlayer()); + boolean inverted = context.getPlayer() != null && GravityApi.isGravityInverted(context.getPlayer()); int distance = getDistance(level, pos, inverted); if (inverted && distance >= 7) { return null; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BluestoneComparatorBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BluestoneComparatorBlock.java index ad81ae8e..7a024823 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BluestoneComparatorBlock.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BluestoneComparatorBlock.java @@ -31,7 +31,7 @@ import net.minecraft.util.RandomSource; import net.minecraft.world.ticks.TickPriority; import org.joml.Vector3f; -public class BluestoneComparatorBlock extends ComparatorBlock { +public class BluestoneComparatorBlock extends ComparatorBlock implements BluestoneSignalSource { private static final VoxelShape SHAPE = Block.box(0.0D, 14.0D, 0.0D, 16.0D, 16.0D, 16.0D); private static final DustParticleOptions BLUESTONE_PARTICLE = new DustParticleOptions(new Vector3f(0.18F, 0.54F, 1.0F), 1.0F); private final Supplier> blockEntityTypeSupplier; @@ -127,6 +127,11 @@ public class BluestoneComparatorBlock extends ComparatorBlock { return true; } + @Override + public int getBluestoneSignal(LevelReader level, BlockPos pos, BlockState state, Direction direction) { + return level == null ? 0 : state.getSignal(level, pos, direction); + } + @Override public void checkTickOnNeighbor(Level level, BlockPos pos, BlockState state) { if (level.getBlockTicks().willTickThisTick(pos, this)) { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BluestoneRepeaterBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BluestoneRepeaterBlock.java index b376d456..1a41b7ea 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BluestoneRepeaterBlock.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BluestoneRepeaterBlock.java @@ -19,7 +19,7 @@ import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraft.util.RandomSource; import org.joml.Vector3f; -public class BluestoneRepeaterBlock extends RepeaterBlock { +public class BluestoneRepeaterBlock extends RepeaterBlock implements BluestoneSignalSource { private static final VoxelShape SHAPE = Block.box(0.0D, 14.0D, 0.0D, 16.0D, 16.0D, 16.0D); private static final DustParticleOptions BLUESTONE_PARTICLE = new DustParticleOptions(new Vector3f(0.18F, 0.54F, 1.0F), 1.0F); @@ -95,6 +95,11 @@ public class BluestoneRepeaterBlock extends RepeaterBlock { return true; } + @Override + public int getBluestoneSignal(LevelReader level, BlockPos pos, BlockState state, Direction direction) { + return level == null ? 0 : state.getSignal(level, pos, direction); + } + @Override public void animateTick(BlockState state, net.minecraft.world.level.Level level, BlockPos pos, RandomSource random) { if (!state.getValue(POWERED)) { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/CloudBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/CloudBlock.java index bf7b49b0..8d607a73 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/CloudBlock.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/CloudBlock.java @@ -1,11 +1,11 @@ package com.craisinlord.antarchy.content.block; +import com.craisinlord.antarchy.content.entity.royal.KingEntity; import java.util.Optional; import java.util.function.Supplier; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; @@ -40,7 +40,8 @@ public final class CloudBlock extends Block implements BucketPickup { public VoxelShape getCollisionShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { if (context instanceof EntityCollisionContext ecc) { Entity entity = ecc.getEntity(); - if (entity instanceof net.minecraft.world.entity.LivingEntity le && le.isShiftKeyDown()) { + if (entity instanceof KingEntity + || entity instanceof net.minecraft.world.entity.LivingEntity le && le.isShiftKeyDown()) { return EMPTY; } } @@ -73,6 +74,9 @@ public final class CloudBlock extends Block implements BucketPickup { } public void entityInside(BlockState state, Level level, BlockPos pos, Entity entity) { + if (entity instanceof KingEntity) { + return; + } Vec3 motion = entity.getDeltaMovement(); double slowedY = motion.y < 0.0D ? Math.max(motion.y * 0.4D, -0.08D) : motion.y; entity.setDeltaMovement(motion.x * 0.92D, slowedY, motion.z * 0.92D); diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/CrawlingBlightEggBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/CrawlingBlightEggBlock.java new file mode 100644 index 00000000..875af505 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/CrawlingBlightEggBlock.java @@ -0,0 +1,244 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.entity.CrawlingBlightEntity; +import com.craisinlord.antarchy.content.block.AmberMossBlock; +import com.craisinlord.antarchy.content.block.SkulkingFrightEggBlock; +import com.craisinlord.antarchy.content.horde.CavarynHordeManager; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.tags.BlockTags; +import net.minecraft.util.RandomSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.ambient.Bat; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.GameRules; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.IntegerProperty; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class CrawlingBlightEggBlock extends Block { + public static final IntegerProperty HATCH = BlockStateProperties.HATCH; + public static final IntegerProperty EGGS = BlockStateProperties.EGGS; + private static final float PANIC_HATCH_CHANCE = 0.25F; + private static final double HORDE_ACCELERATION_RADIUS = 5.0D; + private static final int MAX_HATCH = 2; + private static final int MAX_EGGS = 4; + private static final VoxelShape SINGLE_SHAPE = Block.box(3.0D, 0.0D, 3.0D, 13.0D, 7.0D, 13.0D); + private static final VoxelShape MULTI_SHAPE = Block.box(1.0D, 0.0D, 1.0D, 15.0D, 7.0D, 15.0D); + + public CrawlingBlightEggBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any().setValue(HATCH, 0).setValue(EGGS, 1)); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return state.getValue(EGGS) > 1 ? MULTI_SHAPE : SINGLE_SHAPE; + } + + @Override + public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + return level.getBlockState(pos.below()).isFaceSturdy(level, pos.below(), Direction.UP); + } + + @Override + public BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { + return state.canSurvive(level, pos) ? super.updateShape(state, direction, neighborState, level, pos, neighborPos) : Blocks.AIR.defaultBlockState(); + } + + @Override + public boolean canBeReplaced(BlockState state, BlockPlaceContext context) { + return !context.isSecondaryUseActive() + && context.getItemInHand().is(this.asItem()) + && state.getValue(EGGS) < MAX_EGGS; + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + BlockState existingState = context.getLevel().getBlockState(context.getClickedPos()); + if (existingState.is(this)) { + return existingState.setValue(EGGS, Math.min(MAX_EGGS, existingState.getValue(EGGS) + 1)); + } + return this.defaultBlockState(); + } + + @Override + public boolean isRandomlyTicking(BlockState state) { + return true; + } + + @Override + public void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (!this.shouldUpdateHatchLevel(level, pos)) { + return; + } + + int hatch = state.getValue(HATCH); + if (hatch < MAX_HATCH) { + level.setBlock(pos, state.setValue(HATCH, hatch + 1), 2); + level.playSound(null, pos, SoundEvents.TURTLE_EGG_CRACK, SoundSource.BLOCKS, 0.7F, 0.95F + random.nextFloat() * 0.1F); + return; + } + + this.hatchEggs(level, pos, state, random, state.getValue(EGGS)); + } + + @Override + public void stepOn(Level level, BlockPos pos, BlockState state, Entity entity) { + if (entity instanceof Player && !entity.isSteppingCarefully() && this.destroyEgg(level, state, pos, entity, 100)) { + if (level instanceof ServerLevel serverLevel) { + panicHatchNearby(serverLevel, pos); + } + } + super.stepOn(level, pos, state, entity); + } + + @Override + public void fallOn(Level level, BlockState state, BlockPos pos, Entity entity, float fallDistance) { + this.destroyEgg(level, state, pos, entity, 3); + super.fallOn(level, state, pos, entity, fallDistance); + } + + @Override + public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean isMoving) { + if (hasHatchSupport(level, pos) && !level.isClientSide) { + level.levelEvent(2012, pos, 15); + } + } + + @Override + public void playerDestroy(Level level, Player player, BlockPos pos, BlockState state, BlockEntity blockEntity, net.minecraft.world.item.ItemStack stack) { + super.playerDestroy(level, player, pos, state, blockEntity, stack); + this.decreaseEggs(level, pos, state); + } + + private static void panicHatchNearby(ServerLevel level, BlockPos origin) { + int radius = 6; + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int dx = -radius; dx <= radius; dx++) { + for (int dy = -radius; dy <= radius; dy++) { + for (int dz = -radius; dz <= radius; dz++) { + if (dx == 0 && dy == 0 && dz == 0) continue; + mutable.set(origin.getX() + dx, origin.getY() + dy, origin.getZ() + dz); + BlockState nearby = level.getBlockState(mutable); + BlockPos immutable = mutable.immutable(); + if (nearby.getBlock() instanceof CrawlingBlightEggBlock b) { + b.hatchPanickedEggs(level, immutable, nearby, level.random); + } else if (nearby.getBlock() instanceof SkulkingFrightEggBlock b) { + b.hatchPanickedEggs(level, immutable, nearby, level.random); + } + } + } + } + } + + @Override + public void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(HATCH, EGGS); + } + + public static boolean hasHatchSupport(BlockGetter level, BlockPos pos) { + return isSupportedGround(level, pos.below()); + } + + public static boolean isSupportedGround(BlockGetter level, BlockPos pos) { + return level.getBlockState(pos).is(BlockTags.SAND) || level.getBlockState(pos).blocksMotion(); + } + + private boolean destroyEgg(Level level, BlockState state, BlockPos pos, Entity entity, int chance) { + if (level.isClientSide || !this.canDestroyEgg(level, entity) || level.random.nextInt(chance) != 0) { + return false; + } + level.playSound(null, pos, SoundEvents.TURTLE_EGG_BREAK, SoundSource.BLOCKS, 0.7F, 0.9F + level.random.nextFloat() * 0.2F); + this.decreaseEggs(level, pos, state); + return true; + } + + void hatchPanickedEggs(ServerLevel level, BlockPos pos, BlockState state, RandomSource random) { + int hatchedEggs = rollPanickedEggs(state.getValue(EGGS), random); + if (hatchedEggs <= 0) { + return; + } + + this.hatchEggs(level, pos, state, random, hatchedEggs); + } + + void hatchEggs(ServerLevel level, BlockPos pos, BlockState state, RandomSource random, int eggsToHatch) { + if (eggsToHatch >= state.getValue(EGGS)) { + level.removeBlock(pos, false); + } else { + level.setBlock(pos, state.setValue(EGGS, state.getValue(EGGS) - eggsToHatch), 2); + } + level.playSound(null, pos, SoundEvents.TURTLE_EGG_HATCH, SoundSource.BLOCKS, 0.75F, 0.95F + random.nextFloat() * 0.1F); + + for (int i = 0; i < eggsToHatch; i++) { + CrawlingBlightEntity entity = AntarchyObjects.CRAWLING_BLIGHT.get().create(level); + if (entity == null) { + continue; + } + double spawnX = pos.getX() + 0.25D + random.nextDouble() * 0.5D; + double spawnZ = pos.getZ() + 0.25D + random.nextDouble() * 0.5D; + entity.moveTo(spawnX, pos.getY() + 0.1D, spawnZ, random.nextFloat() * 360.0F, 0.0F); + level.addFreshEntity(entity); + } + } + + public void hatchWithNucleus(ServerLevel level, BlockPos pos, BlockState state) { + this.hatchEggs(level, pos, state, level.random, state.getValue(EGGS)); + } + + private static int rollPanickedEggs(int eggs, RandomSource random) { + int hatchedEggs = 0; + for (int i = 0; i < eggs; i++) { + if (random.nextFloat() < PANIC_HATCH_CHANCE) { + hatchedEggs++; + } + } + return hatchedEggs; + } + + private void decreaseEggs(Level level, BlockPos pos, BlockState state) { + int eggs = state.getValue(EGGS); + if (eggs <= 1) { + level.destroyBlock(pos, false); + return; + } + level.setBlock(pos, state.setValue(EGGS, eggs - 1), 2); + } + + private boolean shouldUpdateHatchLevel(Level level, BlockPos pos) { + if (level instanceof ServerLevel serverLevel + && CavarynHordeManager.shouldAccelerateNearbyEggHatching(serverLevel, pos, HORDE_ACCELERATION_RADIUS, level.random)) { + return true; + } + + boolean onAmberMoss = level.getBlockState(pos.below()).getBlock() instanceof AmberMossBlock; + return level.random.nextInt(onAmberMoss ? 150 : 500) == 0; + } + + private boolean canDestroyEgg(Level level, Entity entity) { + if (entity instanceof CrawlingBlightEntity || entity instanceof Bat) { + return false; + } + if (entity instanceof net.minecraft.world.entity.LivingEntity) { + return entity instanceof Player || level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); + } + return false; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/CreepingHorrorEggBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/CreepingHorrorEggBlock.java deleted file mode 100644 index 91655ead..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/CreepingHorrorEggBlock.java +++ /dev/null @@ -1,244 +0,0 @@ -package com.craisinlord.antarchy.content.block; - -import com.craisinlord.antarchy.content.AntarchyObjects; -import com.craisinlord.antarchy.content.entity.CreepingHorrorEntity; -import com.craisinlord.antarchy.content.block.AmberMossBlock; -import com.craisinlord.antarchy.content.block.LurkingTerrorEggBlock; -import com.craisinlord.antarchy.content.horde.CavarynHordeManager; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.sounds.SoundEvents; -import net.minecraft.sounds.SoundSource; -import net.minecraft.tags.BlockTags; -import net.minecraft.util.RandomSource; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.ambient.Bat; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.context.BlockPlaceContext; -import net.minecraft.world.level.BlockGetter; -import net.minecraft.world.level.GameRules; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.LevelAccessor; -import net.minecraft.world.level.LevelReader; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.state.BlockBehaviour; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.StateDefinition; -import net.minecraft.world.level.block.state.properties.BlockStateProperties; -import net.minecraft.world.level.block.state.properties.IntegerProperty; -import net.minecraft.world.phys.shapes.CollisionContext; -import net.minecraft.world.phys.shapes.VoxelShape; - -public class CreepingHorrorEggBlock extends Block { - public static final IntegerProperty HATCH = BlockStateProperties.HATCH; - public static final IntegerProperty EGGS = BlockStateProperties.EGGS; - private static final float PANIC_HATCH_CHANCE = 0.25F; - private static final double HORDE_ACCELERATION_RADIUS = 5.0D; - private static final int MAX_HATCH = 2; - private static final int MAX_EGGS = 4; - private static final VoxelShape SINGLE_SHAPE = Block.box(3.0D, 0.0D, 3.0D, 13.0D, 7.0D, 13.0D); - private static final VoxelShape MULTI_SHAPE = Block.box(1.0D, 0.0D, 1.0D, 15.0D, 7.0D, 15.0D); - - public CreepingHorrorEggBlock(BlockBehaviour.Properties properties) { - super(properties); - this.registerDefaultState(this.stateDefinition.any().setValue(HATCH, 0).setValue(EGGS, 1)); - } - - @Override - public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { - return state.getValue(EGGS) > 1 ? MULTI_SHAPE : SINGLE_SHAPE; - } - - @Override - public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { - return level.getBlockState(pos.below()).isFaceSturdy(level, pos.below(), Direction.UP); - } - - @Override - public BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { - return state.canSurvive(level, pos) ? super.updateShape(state, direction, neighborState, level, pos, neighborPos) : Blocks.AIR.defaultBlockState(); - } - - @Override - public boolean canBeReplaced(BlockState state, BlockPlaceContext context) { - return !context.isSecondaryUseActive() - && context.getItemInHand().is(this.asItem()) - && state.getValue(EGGS) < MAX_EGGS; - } - - @Override - public BlockState getStateForPlacement(BlockPlaceContext context) { - BlockState existingState = context.getLevel().getBlockState(context.getClickedPos()); - if (existingState.is(this)) { - return existingState.setValue(EGGS, Math.min(MAX_EGGS, existingState.getValue(EGGS) + 1)); - } - return this.defaultBlockState(); - } - - @Override - public boolean isRandomlyTicking(BlockState state) { - return true; - } - - @Override - public void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { - if (!this.shouldUpdateHatchLevel(level, pos)) { - return; - } - - int hatch = state.getValue(HATCH); - if (hatch < MAX_HATCH) { - level.setBlock(pos, state.setValue(HATCH, hatch + 1), 2); - level.playSound(null, pos, SoundEvents.TURTLE_EGG_CRACK, SoundSource.BLOCKS, 0.7F, 0.95F + random.nextFloat() * 0.1F); - return; - } - - this.hatchEggs(level, pos, state, random, state.getValue(EGGS)); - } - - @Override - public void stepOn(Level level, BlockPos pos, BlockState state, Entity entity) { - if (entity instanceof Player && !entity.isSteppingCarefully() && this.destroyEgg(level, state, pos, entity, 100)) { - if (level instanceof ServerLevel serverLevel) { - panicHatchNearby(serverLevel, pos); - } - } - super.stepOn(level, pos, state, entity); - } - - @Override - public void fallOn(Level level, BlockState state, BlockPos pos, Entity entity, float fallDistance) { - this.destroyEgg(level, state, pos, entity, 3); - super.fallOn(level, state, pos, entity, fallDistance); - } - - @Override - public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean isMoving) { - if (hasHatchSupport(level, pos) && !level.isClientSide) { - level.levelEvent(2012, pos, 15); - } - } - - @Override - public void playerDestroy(Level level, Player player, BlockPos pos, BlockState state, BlockEntity blockEntity, net.minecraft.world.item.ItemStack stack) { - super.playerDestroy(level, player, pos, state, blockEntity, stack); - this.decreaseEggs(level, pos, state); - } - - private static void panicHatchNearby(ServerLevel level, BlockPos origin) { - int radius = 6; - BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); - for (int dx = -radius; dx <= radius; dx++) { - for (int dy = -radius; dy <= radius; dy++) { - for (int dz = -radius; dz <= radius; dz++) { - if (dx == 0 && dy == 0 && dz == 0) continue; - mutable.set(origin.getX() + dx, origin.getY() + dy, origin.getZ() + dz); - BlockState nearby = level.getBlockState(mutable); - BlockPos immutable = mutable.immutable(); - if (nearby.getBlock() instanceof CreepingHorrorEggBlock b) { - b.hatchPanickedEggs(level, immutable, nearby, level.random); - } else if (nearby.getBlock() instanceof LurkingTerrorEggBlock b) { - b.hatchPanickedEggs(level, immutable, nearby, level.random); - } - } - } - } - } - - @Override - public void createBlockStateDefinition(StateDefinition.Builder builder) { - builder.add(HATCH, EGGS); - } - - public static boolean hasHatchSupport(BlockGetter level, BlockPos pos) { - return isSupportedGround(level, pos.below()); - } - - public static boolean isSupportedGround(BlockGetter level, BlockPos pos) { - return level.getBlockState(pos).is(BlockTags.SAND) || level.getBlockState(pos).blocksMotion(); - } - - private boolean destroyEgg(Level level, BlockState state, BlockPos pos, Entity entity, int chance) { - if (level.isClientSide || !this.canDestroyEgg(level, entity) || level.random.nextInt(chance) != 0) { - return false; - } - level.playSound(null, pos, SoundEvents.TURTLE_EGG_BREAK, SoundSource.BLOCKS, 0.7F, 0.9F + level.random.nextFloat() * 0.2F); - this.decreaseEggs(level, pos, state); - return true; - } - - void hatchPanickedEggs(ServerLevel level, BlockPos pos, BlockState state, RandomSource random) { - int hatchedEggs = rollPanickedEggs(state.getValue(EGGS), random); - if (hatchedEggs <= 0) { - return; - } - - this.hatchEggs(level, pos, state, random, hatchedEggs); - } - - void hatchEggs(ServerLevel level, BlockPos pos, BlockState state, RandomSource random, int eggsToHatch) { - if (eggsToHatch >= state.getValue(EGGS)) { - level.removeBlock(pos, false); - } else { - level.setBlock(pos, state.setValue(EGGS, state.getValue(EGGS) - eggsToHatch), 2); - } - level.playSound(null, pos, SoundEvents.TURTLE_EGG_HATCH, SoundSource.BLOCKS, 0.75F, 0.95F + random.nextFloat() * 0.1F); - - for (int i = 0; i < eggsToHatch; i++) { - CreepingHorrorEntity entity = AntarchyObjects.CREEPING_HORROR.get().create(level); - if (entity == null) { - continue; - } - double spawnX = pos.getX() + 0.25D + random.nextDouble() * 0.5D; - double spawnZ = pos.getZ() + 0.25D + random.nextDouble() * 0.5D; - entity.moveTo(spawnX, pos.getY() + 0.1D, spawnZ, random.nextFloat() * 360.0F, 0.0F); - level.addFreshEntity(entity); - } - } - - public void hatchWithNucleus(ServerLevel level, BlockPos pos, BlockState state) { - this.hatchEggs(level, pos, state, level.random, state.getValue(EGGS)); - } - - private static int rollPanickedEggs(int eggs, RandomSource random) { - int hatchedEggs = 0; - for (int i = 0; i < eggs; i++) { - if (random.nextFloat() < PANIC_HATCH_CHANCE) { - hatchedEggs++; - } - } - return hatchedEggs; - } - - private void decreaseEggs(Level level, BlockPos pos, BlockState state) { - int eggs = state.getValue(EGGS); - if (eggs <= 1) { - level.destroyBlock(pos, false); - return; - } - level.setBlock(pos, state.setValue(EGGS, eggs - 1), 2); - } - - private boolean shouldUpdateHatchLevel(Level level, BlockPos pos) { - if (level instanceof ServerLevel serverLevel - && CavarynHordeManager.shouldAccelerateNearbyEggHatching(serverLevel, pos, HORDE_ACCELERATION_RADIUS, level.random)) { - return true; - } - - boolean onAmberMoss = level.getBlockState(pos.below()).getBlock() instanceof AmberMossBlock; - return level.random.nextInt(onAmberMoss ? 150 : 500) == 0; - } - - private boolean canDestroyEgg(Level level, Entity entity) { - if (entity instanceof CreepingHorrorEntity || entity instanceof Bat) { - return false; - } - if (entity instanceof net.minecraft.world.entity.LivingEntity) { - return entity instanceof Player || level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); - } - return false; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DreamFireBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DreamFireBlock.java index 4677bc7e..200eea8f 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DreamFireBlock.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DreamFireBlock.java @@ -4,6 +4,8 @@ import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.mixins.AccessorFireBlock; import it.unimi.dsi.fastutil.objects.Object2IntMap; import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.FireBlock; import net.minecraft.world.level.block.state.BlockBehaviour; @@ -17,6 +19,21 @@ public class DreamFireBlock extends FireBlock { this.copyVanillaFlammability(); } + @Override + public void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (level.getBlockState(pos.below()).is(AntarchyTags.Blocks.DREAM_FIRE_BASE_BLOCKS)) { + if (!this.canSurvive(state, level, pos)) { + level.removeBlock(pos, false); + return; + } + + level.scheduleTick(pos, this, 30 + random.nextInt(10)); + return; + } + + super.tick(state, level, pos, random); + } + @Override public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { return level.getBlockState(pos.below()).is(AntarchyTags.Blocks.DREAM_FIRE_BASE_BLOCKS) diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DreamSandBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DreamSandBlock.java index 224411f4..786a19a4 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DreamSandBlock.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DreamSandBlock.java @@ -1,15 +1,18 @@ package com.craisinlord.antarchy.content.block; +import com.craisinlord.antarchy.content.entity.UpwardFallingBlockEntity; import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.FallingBlock; import net.minecraft.world.level.block.state.BlockBehaviour; public class DreamSandBlock extends FallingBlock { - @SuppressWarnings("rawtypes") - public DreamSandBlock(BlockBehaviour.Properties properties) { super(properties); } @@ -18,4 +21,30 @@ public class DreamSandBlock extends FallingBlock { public void fallOn(Level level, BlockState state, BlockPos pos, Entity entity, float fallDistance) { entity.causeFallDamage(fallDistance, 0.0F, level.damageSources().fall()); } + + @Override + public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { + if (!level.isClientSide) { + level.scheduleTick(pos, this, 2); + } + } + + @Override + public BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { + level.scheduleTick(pos, this, 2); + return state; + } + + @Override + public void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (!level.getBlockState(pos).is(this)) { + return; + } + BlockPos abovePos = pos.above(); + BlockState above = level.getBlockState(abovePos); + boolean passable = above.isAir() || above.getCollisionShape(level, abovePos).isEmpty(); + if (passable) { + UpwardFallingBlockEntity.fallUp(level, pos, state, false); + } + } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DuctTapeBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DuctTapeBlock.java index c9549fa4..410a13f0 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DuctTapeBlock.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DuctTapeBlock.java @@ -5,23 +5,14 @@ import com.craisinlord.antarchy.content.advancement.AntarchyAdvancements; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.AntarchyTags; -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.DiggerItem; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.ShearsItem; -import net.minecraft.world.item.SwordItem; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; @@ -37,9 +28,7 @@ import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.DirectionProperty; import net.minecraft.world.level.block.state.properties.EnumProperty; import net.minecraft.world.level.block.state.properties.IntegerProperty; -import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.BlockHitResult; -import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; @@ -52,24 +41,6 @@ public class DuctTapeBlock extends Block { public static final DirectionProperty FACING = BlockStateProperties.HORIZONTAL_FACING; private static final int TAPE_HEIGHT = 2; - private static final long STICK_SOUND_COOLDOWN_TICKS = 10L; - private static final long TAPE_DECAY_INTERVAL_TICKS = 30L; - private static final double FLOOR_TRIGGER_HEIGHT = 0.30D; - private static final double WALL_TRIGGER_DEPTH = 0.25D; - private static final double TRIGGER_PAD = 0.12D; - private static final double WALL_Y_PAD = 0.12D; - private static final double WALL_SIDE_PAD = 0.08D; - private static final double WALL_INNER_INSET = 0.03D; - private static final double TRIGGER_INFLATE_DEFAULT = 0.15D; - private static final int SEARCH_INTERVAL_TICKS = 4; - private static final double SEARCH_MOTION_THRESHOLD_SQR = 1.0E-8D; - private static final double SEARCH_PAD_XZ = Math.max(WALL_TRIGGER_DEPTH, TRIGGER_PAD); - private static final double SEARCH_PAD_Y = FLOOR_TRIGGER_HEIGHT; - - private static final Map STICK_SOUND_TIMES = new HashMap<>(); - private static final Map STICK_CONTACT_KEYS = new HashMap<>(); - private static final Map TAPE_DECAY_TIMES = new HashMap<>(); - private static final Map STUCK_ENTITIES = new HashMap<>(); public DuctTapeBlock(BlockBehaviour.Properties properties) { super(properties); @@ -131,14 +102,6 @@ public class DuctTapeBlock extends Block { return state.canSurvive(context.getLevel(), context.getClickedPos()) ? state : null; } - @Override - public void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) { - if (!state.is(newState.getBlock())) { - releaseEntitiesForTape(level, pos); - } - super.onRemove(state, level, pos, newState, movedByPiston); - } - @Override public InteractionResult use( BlockState state, @@ -153,14 +116,6 @@ public class DuctTapeBlock extends Block { return InteractionResult.PASS; } - if (isReleaseTool(stack) && (isStuckToTape(player) || isTouchingTape(level, player))) { - if (!level.isClientSide) { - consumeTapeUse(level, pos, state); - level.playSound(null, pos, SoundEvents.WOOL_BREAK, SoundSource.BLOCKS, 0.8F, 0.9F + level.random.nextFloat() * 0.2F); - } - return InteractionResult.sidedSuccess(level.isClientSide); - } - if (!stack.isDamageableItem() || !stack.isDamaged() || stack.is(AntarchyTags.Items.DUCT_TAPE_BLACKLIST)) { return InteractionResult.PASS; } @@ -187,24 +142,6 @@ public class DuctTapeBlock extends Block { return InteractionResult.sidedSuccess(level.isClientSide); } - @Override - public void entityInside(BlockState state, Level level, BlockPos pos, Entity entity) { - if (level.isClientSide || entity.isSpectator() || !touchesTape(level, entity, pos, state)) { - return; - } - - rememberStuckContact(level, pos, entity); - if (!(entity instanceof ItemEntity)) { - maybeConsumeTapeDecay(level, pos, state); - } - long gameTime = level.getGameTime(); - String tapeKey = tapeKey(level, pos); - if (shouldPlayStickSound(entity.getUUID(), tapeKey, gameTime)) { - level.playSound(null, pos, AntarchySoundEvents.DUCT_TAPE_USE.get(), SoundSource.BLOCKS, 0.85F, 0.9F + level.random.nextFloat() * 0.15F); - } - applyStick(state, pos, entity); - } - @Override public void createBlockStateDefinition(StateDefinition.Builder builder) { builder.add(USES, FACE, FACING); @@ -237,12 +174,6 @@ public class DuctTapeBlock extends Block { }; } - private static boolean isReleaseTool(ItemStack stack) { - return stack.getItem() instanceof DiggerItem - || stack.getItem() instanceof SwordItem - || stack.getItem() instanceof ShearsItem; - } - private static void consumeTapeUse(Level level, BlockPos pos, BlockState state) { int remainingUses = state.getValue(USES) - 1; if (remainingUses > 0) { @@ -250,322 +181,6 @@ public class DuctTapeBlock extends Block { return; } - releaseEntitiesForTape(level, pos); - TAPE_DECAY_TIMES.remove(tapeDecayKey(level, pos)); level.removeBlock(pos, false); } - - private static void removeTape(Level level, BlockPos pos, BlockState state) { - releaseEntitiesForTape(level, pos); - TAPE_DECAY_TIMES.remove(tapeDecayKey(level, pos)); - level.removeBlock(pos, false); - } - - private static void maybeConsumeTapeDecay(Level level, BlockPos pos, BlockState state) { - long gameTime = level.getGameTime(); - String key = tapeDecayKey(level, pos); - Long lastConsumed = TAPE_DECAY_TIMES.get(key); - if (lastConsumed == null) { - TAPE_DECAY_TIMES.put(key, gameTime); - return; - } - - if (gameTime - lastConsumed < TAPE_DECAY_INTERVAL_TICKS) { - return; - } - - TAPE_DECAY_TIMES.put(key, gameTime); - consumeTapeUse(level, pos, state); - } - - public static void tickStuckEntity(Entity entity) { - if (entity == null || entity.level().isClientSide() || isStickyBlacklist(entity)) { - return; - } - - if (!entity.isAlive() || entity.isRemoved()) { - releaseEntity(entity); - return; - } - - StuckContact contact = STUCK_ENTITIES.get(entity.getUUID()); - if (contact != null && isContactValid(entity.level(), contact)) { - BlockPos pos = BlockPos.of(contact.blockPos()); - BlockState state = entity.level().getBlockState(pos); - applyStick(state, pos, entity); - if (!(entity instanceof ItemEntity)) { - maybeConsumeTapeDecay(entity.level(), pos, state); - } - return; - } - - if (contact != null) { - releaseEntity(entity); - } - - if (!shouldSearchForTape(entity)) { - return; - } - - TapeHit hit = findTouchedTape(entity.level(), entity); - if (hit == null) { - if (entity.isNoGravity()) { - entity.setNoGravity(false); - } - return; - } - - rememberStuckContact(entity.level(), hit.pos(), entity); - applyStick(hit.state(), hit.pos(), entity); - if (!(entity instanceof ItemEntity)) { - maybeConsumeTapeDecay(entity.level(), hit.pos(), hit.state()); - } - } - - public static boolean isStuckToTape(Entity entity) { - if (entity == null || entity.level().isClientSide() || isStickyBlacklist(entity)) { - return false; - } - - StuckContact contact = STUCK_ENTITIES.get(entity.getUUID()); - return contact != null && isContactValid(entity.level(), contact); - } - - public static boolean isTouchingTape(Entity entity) { - return entity != null && isTouchingTape(entity.level(), entity); - } - - public static boolean isTouchingTape(Level level, Entity entity) { - if (isStickyBlacklist(entity)) { - return false; - } - - return findTouchedTape(level, entity) != null; - } - - public static boolean shouldTickStuckEntity(Entity entity) { - if (entity == null || entity.level().isClientSide() || isStickyBlacklist(entity)) { - return false; - } - - if (!entity.isAlive() || entity.isRemoved()) { - return true; - } - - StuckContact contact = STUCK_ENTITIES.get(entity.getUUID()); - if (contact != null) { - return true; - } - - return shouldSearchForTape(entity); - } - - private static boolean isStickyBlacklist(Entity entity) { - return entity != null && entity.getType().is(AntarchyTags.Entities.DUCT_TAPE_STICK_BLACKLIST); - } - - private static void applyStick(BlockState state, BlockPos pos, Entity entity) { - entity.setDeltaMovement(Vec3.ZERO); - entity.resetFallDistance(); - entity.hasImpulse = true; - entity.setNoGravity(true); - - Vec3 anchor = getTapeAnchor(state, pos, entity); - entity.setPos(anchor.x, anchor.y, anchor.z); - - if (state.getValue(FACE) == AttachFace.FLOOR) { - entity.setOnGround(true); - } - } - - private static void rememberStuckContact(Level level, BlockPos pos, Entity entity) { - UUID entityId = entity.getUUID(); - String key = tapeKey(level, pos); - StuckContact existing = STUCK_ENTITIES.get(entityId); - if (existing != null && existing.tapeKey().equals(key)) { - return; - } - - double offsetX = entity.getX() - pos.getX(); - double offsetY = entity.getY() - pos.getY(); - double offsetZ = entity.getZ() - pos.getZ(); - STUCK_ENTITIES.put(entityId, new StuckContact( - key, - level.dimension().location().toString(), - pos.asLong(), - clamp(offsetX, 0.05D, 0.95D), - clamp(offsetY, 0.0D, 0.98D), - clamp(offsetZ, 0.05D, 0.95D) - )); - } - - private static Vec3 getTapeAnchor(BlockState state, BlockPos pos, Entity entity) { - StuckContact contact = STUCK_ENTITIES.get(entity.getUUID()); - double offsetX = contact != null ? contact.offsetX() : 0.5D; - double offsetY = contact != null ? contact.offsetY() : 0.0D; - double offsetZ = contact != null ? contact.offsetZ() : 0.5D; - double wallOffset = entity instanceof Player ? 0.06D : -0.28D; - double centerX = pos.getX() + 0.5D; - double centerZ = pos.getZ() + 0.5D; - - return switch (state.getValue(FACE)) { - case FLOOR -> new Vec3( - pos.getX() + offsetX, - pos.getY() + 0.01D, - pos.getZ() + offsetZ - ); - case WALL -> switch (state.getValue(FACING)) { - case NORTH -> new Vec3(centerX, pos.getY() + offsetY, pos.getZ() - wallOffset); - case SOUTH -> new Vec3(centerX, pos.getY() + offsetY, pos.getZ() + 1.0D + wallOffset); - case EAST -> new Vec3(pos.getX() + 1.0D + wallOffset, pos.getY() + offsetY, centerZ); - case WEST -> new Vec3(pos.getX() - wallOffset, pos.getY() + offsetY, centerZ); - default -> new Vec3(centerX, pos.getY() + offsetY, centerZ); - }; - default -> new Vec3(pos.getX() + offsetX, pos.getY() + 0.01D, pos.getZ() + offsetZ); - }; - } - - private static boolean isContactValid(Level level, StuckContact contact) { - if (!level.dimension().location().toString().equals(contact.dimensionId())) { - return false; - } - - BlockPos pos = BlockPos.of(contact.blockPos()); - BlockState state = level.getBlockState(pos); - return state.getBlock() instanceof DuctTapeBlock - && tapeKey(level, pos).equals(contact.tapeKey()); - } - - private static boolean shouldSearchForTape(Entity entity) { - Vec3 velocity = entity.getDeltaMovement(); - if (velocity.lengthSqr() < SEARCH_MOTION_THRESHOLD_SQR) { - return false; - } - - return (entity.tickCount + entity.getId()) % SEARCH_INTERVAL_TICKS == 0; - } - - private static TapeHit findTouchedTape(Level level, Entity entity) { - AABB box = entity.getBoundingBox().inflate(SEARCH_PAD_XZ, SEARCH_PAD_Y, SEARCH_PAD_XZ); - BlockPos min = BlockPos.containing(box.minX, box.minY, box.minZ); - BlockPos max = BlockPos.containing(box.maxX, box.maxY, box.maxZ); - if (!level.hasChunksAt(min, max)) { - return null; - } - BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(); - for (int x = min.getX(); x <= max.getX(); x++) { - for (int y = min.getY(); y <= max.getY(); y++) { - for (int z = min.getZ(); z <= max.getZ(); z++) { - cursor.set(x, y, z); - BlockState state = level.getBlockState(cursor); - if (state.isAir()) { - continue; - } - if (state.getBlock() instanceof DuctTapeBlock && touchesTape(level, entity, cursor, state)) { - return new TapeHit(cursor.immutable(), state); - } - } - } - } - return null; - } - - private static boolean touchesTape(Level level, Entity entity, BlockPos pos, BlockState state) { - return entity.getBoundingBox().intersects(getStickyTriggerBounds(state, pos)); - } - - private static AABB getStickyTriggerBounds(BlockState state, BlockPos pos) { - AABB bounds = getShapeFor(state).bounds().move(pos); - return switch (state.getValue(FACE)) { - case FLOOR -> new AABB( - bounds.minX - TRIGGER_PAD, - pos.getY() - 0.02D, - bounds.minZ - TRIGGER_PAD, - bounds.maxX + TRIGGER_PAD, - pos.getY() + FLOOR_TRIGGER_HEIGHT, - bounds.maxZ + TRIGGER_PAD - ); - case WALL -> { - yield switch (state.getValue(FACING)) { - case NORTH -> new AABB(bounds.minX - WALL_SIDE_PAD, bounds.minY - WALL_Y_PAD, bounds.minZ - WALL_TRIGGER_DEPTH, bounds.maxX + WALL_SIDE_PAD, bounds.maxY + WALL_Y_PAD, bounds.maxZ + WALL_INNER_INSET); - case SOUTH -> new AABB(bounds.minX - WALL_SIDE_PAD, bounds.minY - WALL_Y_PAD, bounds.minZ - WALL_INNER_INSET, bounds.maxX + WALL_SIDE_PAD, bounds.maxY + WALL_Y_PAD, bounds.maxZ + WALL_TRIGGER_DEPTH); - case EAST -> new AABB(bounds.minX - WALL_TRIGGER_DEPTH, bounds.minY - WALL_Y_PAD, bounds.minZ - WALL_SIDE_PAD, bounds.maxX + WALL_INNER_INSET, bounds.maxY + WALL_Y_PAD, bounds.maxZ + WALL_SIDE_PAD); - case WEST -> new AABB(bounds.minX - WALL_INNER_INSET, bounds.minY - WALL_Y_PAD, bounds.minZ - WALL_SIDE_PAD, bounds.maxX + WALL_TRIGGER_DEPTH, bounds.maxY + WALL_Y_PAD, bounds.maxZ + WALL_SIDE_PAD); - default -> bounds.inflate(TRIGGER_INFLATE_DEFAULT); - }; - } - default -> bounds.inflate(TRIGGER_INFLATE_DEFAULT); - }; - } - - private static void releaseEntitiesForTape(Level level, BlockPos pos) { - String key = tapeKey(level, pos); - AABB searchBox = AABB.unitCubeFromLowerCorner(Vec3.atLowerCornerOf(pos)).inflate(2.0D); - STUCK_ENTITIES.entrySet().removeIf(entry -> { - StuckContact contact = entry.getValue(); - if (!key.equals(contact.tapeKey())) { - return false; - } - - level.getEntitiesOfClass(Entity.class, searchBox, candidate -> candidate.getUUID().equals(entry.getKey())) - .forEach(candidate -> candidate.setNoGravity(false)); - - STICK_SOUND_TIMES.remove(entry.getKey()); - STICK_CONTACT_KEYS.remove(entry.getKey()); - return true; - }); - } - - private static void releaseEntity(Entity entity) { - if (entity == null) { - return; - } - - STUCK_ENTITIES.remove(entity.getUUID()); - STICK_SOUND_TIMES.remove(entity.getUUID()); - STICK_CONTACT_KEYS.remove(entity.getUUID()); - entity.setNoGravity(false); - } - - private static String tapeDecayKey(Level level, BlockPos pos) { - return level.dimension().location() + ":" + pos.asLong(); - } - - private static String tapeKey(Level level, BlockPos pos) { - return level.dimension().location() + ":" + pos.asLong(); - } - - private static boolean shouldPlayStickSound(UUID entityId, String tapeKey, long gameTime) { - String lastKey = STICK_CONTACT_KEYS.get(entityId); - Long lastContact = STICK_SOUND_TIMES.get(entityId); - if (lastKey == null || !tapeKey.equals(lastKey)) { - STICK_CONTACT_KEYS.put(entityId, tapeKey); - STICK_SOUND_TIMES.put(entityId, gameTime); - return true; - } - - if (lastContact == null || gameTime - lastContact > STICK_SOUND_COOLDOWN_TICKS) { - STICK_SOUND_TIMES.put(entityId, gameTime); - return true; - } - - return false; - } - - private static double clamp(double value, double min, double max) { - return Math.max(min, Math.min(max, value)); - } - - private record StuckContact( - String tapeKey, - String dimensionId, - long blockPos, - double offsetX, - double offsetY, - double offsetZ - ) { - } - - private record TapeHit(BlockPos pos, BlockState state) { - } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DuplicatorTreeLogic.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DuplicatorTreeLogic.java index 49cced4e..6ed83453 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DuplicatorTreeLogic.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DuplicatorTreeLogic.java @@ -25,7 +25,6 @@ public final class DuplicatorTreeLogic { private static final int LOG_SEARCH_BELOW = 5; private static final int LOG_SEARCH_ABOVE = 1; - // Cache center log pos per chunk. WeakHashMap lets levels be GC'd when unloaded. private static final WeakHashMap> CENTER_LOG_CACHE = new WeakHashMap<>(); private DuplicatorTreeLogic() { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/FlytrapGooBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/FlytrapGooBlock.java new file mode 100644 index 00000000..b4530429 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/FlytrapGooBlock.java @@ -0,0 +1,76 @@ +package com.craisinlord.antarchy.content.block; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.Vec3; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.EntityCollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class FlytrapGooBlock extends Block { + + private static final double BOUNCE_VELOCITY_THRESHOLD = 0.6; + private static final double MAX_SINK_SPEED = 0.05; + private static final double SPRINT_VELOCITY_THRESHOLD = 0.1; + + public FlytrapGooBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + public boolean isStickyBlock(BlockState state) { + return true; + } + + public boolean canStickTo(BlockState state, BlockState other) { + return !other.is(Blocks.SLIME_BLOCK) && !other.is(Blocks.HONEY_BLOCK); + } + + @Override + public VoxelShape getCollisionShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + if (context instanceof EntityCollisionContext ecc) { + Entity entity = ecc.getEntity(); + if (entity != null) { + Vec3 delta = entity.getDeltaMovement(); + double vy = delta.y; + double hSpeed = Math.sqrt(delta.x * delta.x + delta.z * delta.z); + if (vy <= 0.0 && vy > -BOUNCE_VELOCITY_THRESHOLD && hSpeed < SPRINT_VELOCITY_THRESHOLD) { + return Shapes.empty(); + } + } + } + return super.getCollisionShape(state, level, pos, context); + } + + @Override + public void entityInside(BlockState state, Level level, BlockPos pos, Entity entity) { + Vec3 delta = entity.getDeltaMovement(); + if (delta.y < -MAX_SINK_SPEED) { + entity.setDeltaMovement(delta.x * 0.9, -MAX_SINK_SPEED, delta.z * 0.9); + } else { + entity.setDeltaMovement(delta.x * 0.9, delta.y, delta.z * 0.9); + } + entity.fallDistance = 0.0F; + } + + @Override + public void fallOn(Level level, BlockState state, BlockPos pos, Entity entity, float fallDistance) { + entity.causeFallDamage(fallDistance, 0.0F, level.damageSources().fall()); + } + + @Override + public void updateEntityAfterFallOn(BlockGetter level, Entity entity) { + Vec3 delta = entity.getDeltaMovement(); + if (delta.y < 0.0) { + double coefficient = entity instanceof LivingEntity ? 1.0 : 0.8; + entity.setDeltaMovement(delta.x, -delta.y * coefficient, delta.z); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/GlimmeringReedBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/GlimmeringReedBlock.java index bbcdfb8d..805dde4b 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/GlimmeringReedBlock.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/GlimmeringReedBlock.java @@ -19,7 +19,6 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.DoubleBlockHalf; import net.minecraft.world.phys.BlockHitResult; -/** A two-block-tall, light-emitting reed found around Lumen pools. */ public final class GlimmeringReedBlock extends DoublePlantBlock implements BonemealableBlock { public GlimmeringReedBlock(BlockBehaviour.Properties properties) { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/JumpyBugEggBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/JumpyBugEggBlock.java deleted file mode 100644 index 89380c3c..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/JumpyBugEggBlock.java +++ /dev/null @@ -1,160 +0,0 @@ -package com.craisinlord.antarchy.content.block; - -import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.entity.JumpyBugEntity; -import com.craisinlord.antarchy.content.horde.CavarynHordeManager; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.entity.EntityType; -import net.minecraft.sounds.SoundEvents; -import net.minecraft.sounds.SoundSource; -import net.minecraft.util.RandomSource; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.context.BlockPlaceContext; -import net.minecraft.world.level.BlockGetter; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.LevelAccessor; -import net.minecraft.world.level.LevelReader; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.Mirror; -import net.minecraft.world.level.block.Rotation; -import net.minecraft.world.level.block.state.BlockBehaviour; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.StateDefinition; -import net.minecraft.world.level.block.state.properties.BlockStateProperties; -import net.minecraft.world.level.block.state.properties.BooleanProperty; -import net.minecraft.world.level.block.state.properties.IntegerProperty; -import net.minecraft.world.phys.shapes.CollisionContext; -import net.minecraft.world.phys.shapes.VoxelShape; - -public class JumpyBugEggBlock extends Block { - public static final IntegerProperty HATCH = BlockStateProperties.HATCH; - public static final BooleanProperty HANGING = BlockStateProperties.HANGING; - public static final BooleanProperty ROTATED = BooleanProperty.create("rotated"); - private static final int MAX_HATCH = 2; - private static final double PLAYER_PROXIMITY_RADIUS = 12.0D; - private static final double HORDE_ACCELERATION_RADIUS = 5.0D; - private static final float PLAYER_PROXIMITY_HATCH_CHANCE = 0.25F; - private static final int PLAYER_PROXIMITY_CHECK_INTERVAL = 200; - private static final VoxelShape FLOOR_SHAPE = Block.box(1.5D, 0.0D, 1.5D, 14.5D, 16.0D, 14.5D); - private static final VoxelShape CEILING_SHAPE = Block.box(1.5D, 0.0D, 1.5D, 14.5D, 16.0D, 14.5D); - private static final ResourceLocation JUMPY_BUG_ID = new ResourceLocation(Antarchy.MODID, "jumpy_bug"); - - public JumpyBugEggBlock(BlockBehaviour.Properties properties) { - super(properties); - this.registerDefaultState(this.stateDefinition.any().setValue(HATCH, 0).setValue(HANGING, false).setValue(ROTATED, false)); - } - - @Override - public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { - return state.getValue(HANGING) ? CEILING_SHAPE : FLOOR_SHAPE; - } - - @Override - public BlockState getStateForPlacement(BlockPlaceContext context) { - boolean hanging = context.getClickedFace() == Direction.DOWN - || (context.getClickedFace() != Direction.UP && !canSupportFloor(context.getLevel(), context.getClickedPos()) && canSupportCeiling(context.getLevel(), context.getClickedPos())); - boolean rotated = context.getHorizontalDirection().getAxis() == Direction.Axis.X; - return this.defaultBlockState().setValue(HANGING, hanging).setValue(ROTATED, rotated); - } - - @Override - public BlockState rotate(BlockState state, Rotation rotation) { - return rotation == Rotation.CLOCKWISE_90 || rotation == Rotation.COUNTERCLOCKWISE_90 - ? state.setValue(ROTATED, !state.getValue(ROTATED)) - : state; - } - - @Override - public BlockState mirror(BlockState state, Mirror mirror) { - return state; - } - - @Override - public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { - return state.getValue(HANGING) ? canSupportCeiling(level, pos) : canSupportFloor(level, pos); - } - - @Override - public BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { - return state.canSurvive(level, pos) ? super.updateShape(state, direction, neighborState, level, pos, neighborPos) : Blocks.AIR.defaultBlockState(); - } - - private static boolean canSupportFloor(LevelReader level, BlockPos pos) { - return level.getBlockState(pos.below()).isFaceSturdy(level, pos.below(), Direction.UP); - } - - private static boolean canSupportCeiling(LevelReader level, BlockPos pos) { - return level.getBlockState(pos.above()).isFaceSturdy(level, pos.above(), Direction.DOWN); - } - - @Override - public boolean isRandomlyTicking(BlockState state) { - return true; - } - - @Override - public void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { - if (!this.shouldUpdateHatchLevel(level, pos, state)) { - return; - } - - int hatch = state.getValue(HATCH); - if (hatch < MAX_HATCH) { - level.setBlock(pos, state.setValue(HATCH, hatch + 1), 2); - level.playSound(null, pos, SoundEvents.TURTLE_EGG_CRACK, SoundSource.BLOCKS, 0.7F, 0.95F + random.nextFloat() * 0.1F); - return; - } - - this.hatch(level, pos, random); - } - - private boolean shouldUpdateHatchLevel(Level level, BlockPos pos, BlockState state) { - if (level instanceof ServerLevel serverLevel - && CavarynHordeManager.shouldAccelerateNearbyEggHatching(serverLevel, pos, HORDE_ACCELERATION_RADIUS, level.random)) { - return true; - } - - if (level.random.nextInt(PLAYER_PROXIMITY_CHECK_INTERVAL) == 0) { - Player nearbyPlayer = level.getNearestPlayer(pos.getX() + 0.5D, pos.getY() + 0.5D, pos.getZ() + 0.5D, PLAYER_PROXIMITY_RADIUS, false); - if (nearbyPlayer != null && level.random.nextFloat() < PLAYER_PROXIMITY_HATCH_CHANCE) { - return true; - } - } - - BlockPos checkPos = state.getValue(HANGING) ? pos.above() : pos.below(); - boolean onAmberMoss = level.getBlockState(checkPos).getBlock() instanceof AmberMossBlock; - return level.random.nextInt(onAmberMoss ? 150 : 500) == 0; - } - - private void hatch(ServerLevel level, BlockPos pos, RandomSource random) { - level.removeBlock(pos, false); - level.playSound(null, pos, SoundEvents.TURTLE_EGG_HATCH, SoundSource.BLOCKS, 0.75F, 0.95F + random.nextFloat() * 0.1F); - @SuppressWarnings("unchecked") - EntityType jumpyBugType = (EntityType) (EntityType) BuiltInRegistries.ENTITY_TYPE.getOptional(JUMPY_BUG_ID).orElse(null); - if (jumpyBugType == null) { - return; - } - JumpyBugEntity entity = jumpyBugType.create(level); - if (entity == null) { - return; - } - double spawnX = pos.getX() + 0.25D + random.nextDouble() * 0.5D; - double spawnZ = pos.getZ() + 0.25D + random.nextDouble() * 0.5D; - entity.moveTo(spawnX, pos.getY() + 0.1D, spawnZ, random.nextFloat() * 360.0F, 0.0F); - level.addFreshEntity(entity); - } - - public void hatchWithNucleus(ServerLevel level, BlockPos pos) { - this.hatch(level, pos, level.random); - } - - @Override - public void createBlockStateDefinition(StateDefinition.Builder builder) { - builder.add(HATCH, HANGING, ROTATED); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/LurkingTerrorEggBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/LurkingTerrorEggBlock.java deleted file mode 100644 index a8fd6fff..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/LurkingTerrorEggBlock.java +++ /dev/null @@ -1,244 +0,0 @@ -package com.craisinlord.antarchy.content.block; - -import com.craisinlord.antarchy.content.AntarchyObjects; -import com.craisinlord.antarchy.content.entity.LurkingTerrorEntity; -import com.craisinlord.antarchy.content.block.AmberMossBlock; -import com.craisinlord.antarchy.content.block.CreepingHorrorEggBlock; -import com.craisinlord.antarchy.content.horde.CavarynHordeManager; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.sounds.SoundEvents; -import net.minecraft.sounds.SoundSource; -import net.minecraft.tags.BlockTags; -import net.minecraft.util.RandomSource; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.ambient.Bat; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.context.BlockPlaceContext; -import net.minecraft.world.level.BlockGetter; -import net.minecraft.world.level.GameRules; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.LevelAccessor; -import net.minecraft.world.level.LevelReader; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.state.BlockBehaviour; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.StateDefinition; -import net.minecraft.world.level.block.state.properties.BlockStateProperties; -import net.minecraft.world.level.block.state.properties.IntegerProperty; -import net.minecraft.world.phys.shapes.CollisionContext; -import net.minecraft.world.phys.shapes.VoxelShape; - -public class LurkingTerrorEggBlock extends Block { - public static final IntegerProperty HATCH = BlockStateProperties.HATCH; - public static final IntegerProperty EGGS = BlockStateProperties.EGGS; - private static final float PANIC_HATCH_CHANCE = 0.25F; - private static final double HORDE_ACCELERATION_RADIUS = 5.0D; - private static final int MAX_HATCH = 2; - private static final int MAX_EGGS = 4; - private static final VoxelShape SINGLE_SHAPE = Block.box(3.0D, 0.0D, 3.0D, 13.0D, 7.0D, 13.0D); - private static final VoxelShape MULTI_SHAPE = Block.box(1.0D, 0.0D, 1.0D, 15.0D, 7.0D, 15.0D); - - public LurkingTerrorEggBlock(BlockBehaviour.Properties properties) { - super(properties); - this.registerDefaultState(this.stateDefinition.any().setValue(HATCH, 0).setValue(EGGS, 1)); - } - - @Override - public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { - return state.getValue(EGGS) > 1 ? MULTI_SHAPE : SINGLE_SHAPE; - } - - @Override - public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { - return level.getBlockState(pos.below()).isFaceSturdy(level, pos.below(), Direction.UP); - } - - @Override - public BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { - return state.canSurvive(level, pos) ? super.updateShape(state, direction, neighborState, level, pos, neighborPos) : Blocks.AIR.defaultBlockState(); - } - - @Override - public boolean canBeReplaced(BlockState state, BlockPlaceContext context) { - return !context.isSecondaryUseActive() - && context.getItemInHand().is(this.asItem()) - && state.getValue(EGGS) < MAX_EGGS; - } - - @Override - public BlockState getStateForPlacement(BlockPlaceContext context) { - BlockState existingState = context.getLevel().getBlockState(context.getClickedPos()); - if (existingState.is(this)) { - return existingState.setValue(EGGS, Math.min(MAX_EGGS, existingState.getValue(EGGS) + 1)); - } - return this.defaultBlockState(); - } - - @Override - public boolean isRandomlyTicking(BlockState state) { - return true; - } - - @Override - public void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { - if (!this.shouldUpdateHatchLevel(level, pos)) { - return; - } - - int hatch = state.getValue(HATCH); - if (hatch < MAX_HATCH) { - level.setBlock(pos, state.setValue(HATCH, hatch + 1), 2); - level.playSound(null, pos, SoundEvents.TURTLE_EGG_CRACK, SoundSource.BLOCKS, 0.7F, 0.95F + random.nextFloat() * 0.1F); - return; - } - - this.hatchEggs(level, pos, state, random, state.getValue(EGGS)); - } - - @Override - public void stepOn(Level level, BlockPos pos, BlockState state, Entity entity) { - if (entity instanceof Player && !entity.isSteppingCarefully() && this.destroyEgg(level, state, pos, entity, 100)) { - if (level instanceof ServerLevel serverLevel) { - panicHatchNearby(serverLevel, pos); - } - } - super.stepOn(level, pos, state, entity); - } - - @Override - public void fallOn(Level level, BlockState state, BlockPos pos, Entity entity, float fallDistance) { - this.destroyEgg(level, state, pos, entity, 3); - super.fallOn(level, state, pos, entity, fallDistance); - } - - @Override - public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean isMoving) { - if (hasHatchSupport(level, pos) && !level.isClientSide) { - level.levelEvent(2012, pos, 15); - } - } - - @Override - public void playerDestroy(Level level, Player player, BlockPos pos, BlockState state, BlockEntity blockEntity, net.minecraft.world.item.ItemStack stack) { - super.playerDestroy(level, player, pos, state, blockEntity, stack); - this.decreaseEggs(level, pos, state); - } - - private static void panicHatchNearby(ServerLevel level, BlockPos origin) { - int radius = 6; - BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); - for (int dx = -radius; dx <= radius; dx++) { - for (int dy = -radius; dy <= radius; dy++) { - for (int dz = -radius; dz <= radius; dz++) { - if (dx == 0 && dy == 0 && dz == 0) continue; - mutable.set(origin.getX() + dx, origin.getY() + dy, origin.getZ() + dz); - BlockState nearby = level.getBlockState(mutable); - BlockPos immutable = mutable.immutable(); - if (nearby.getBlock() instanceof LurkingTerrorEggBlock b) { - b.hatchPanickedEggs(level, immutable, nearby, level.random); - } else if (nearby.getBlock() instanceof CreepingHorrorEggBlock b) { - b.hatchPanickedEggs(level, immutable, nearby, level.random); - } - } - } - } - } - - @Override - public void createBlockStateDefinition(StateDefinition.Builder builder) { - builder.add(HATCH, EGGS); - } - - public static boolean hasHatchSupport(BlockGetter level, BlockPos pos) { - return isSupportedGround(level, pos.below()); - } - - public static boolean isSupportedGround(BlockGetter level, BlockPos pos) { - return level.getBlockState(pos).is(BlockTags.SAND) || level.getBlockState(pos).blocksMotion(); - } - - private boolean destroyEgg(Level level, BlockState state, BlockPos pos, Entity entity, int chance) { - if (level.isClientSide || !this.canDestroyEgg(level, entity) || level.random.nextInt(chance) != 0) { - return false; - } - level.playSound(null, pos, SoundEvents.TURTLE_EGG_BREAK, SoundSource.BLOCKS, 0.7F, 0.9F + level.random.nextFloat() * 0.2F); - this.decreaseEggs(level, pos, state); - return true; - } - - void hatchPanickedEggs(ServerLevel level, BlockPos pos, BlockState state, RandomSource random) { - int hatchedEggs = rollPanickedEggs(state.getValue(EGGS), random); - if (hatchedEggs <= 0) { - return; - } - - this.hatchEggs(level, pos, state, random, hatchedEggs); - } - - void hatchEggs(ServerLevel level, BlockPos pos, BlockState state, RandomSource random, int eggsToHatch) { - if (eggsToHatch >= state.getValue(EGGS)) { - level.removeBlock(pos, false); - } else { - level.setBlock(pos, state.setValue(EGGS, state.getValue(EGGS) - eggsToHatch), 2); - } - level.playSound(null, pos, SoundEvents.TURTLE_EGG_HATCH, SoundSource.BLOCKS, 0.75F, 0.95F + random.nextFloat() * 0.1F); - - for (int i = 0; i < eggsToHatch; i++) { - LurkingTerrorEntity entity = AntarchyObjects.LURKING_TERROR.get().create(level); - if (entity == null) { - continue; - } - double spawnX = pos.getX() + 0.25D + random.nextDouble() * 0.5D; - double spawnZ = pos.getZ() + 0.25D + random.nextDouble() * 0.5D; - entity.moveTo(spawnX, pos.getY() + 0.1D, spawnZ, random.nextFloat() * 360.0F, 0.0F); - level.addFreshEntity(entity); - } - } - - public void hatchWithNucleus(ServerLevel level, BlockPos pos, BlockState state) { - this.hatchEggs(level, pos, state, level.random, state.getValue(EGGS)); - } - - private static int rollPanickedEggs(int eggs, RandomSource random) { - int hatchedEggs = 0; - for (int i = 0; i < eggs; i++) { - if (random.nextFloat() < PANIC_HATCH_CHANCE) { - hatchedEggs++; - } - } - return hatchedEggs; - } - - private void decreaseEggs(Level level, BlockPos pos, BlockState state) { - int eggs = state.getValue(EGGS); - if (eggs <= 1) { - level.destroyBlock(pos, false); - return; - } - level.setBlock(pos, state.setValue(EGGS, eggs - 1), 2); - } - - private boolean shouldUpdateHatchLevel(Level level, BlockPos pos) { - if (level instanceof ServerLevel serverLevel - && CavarynHordeManager.shouldAccelerateNearbyEggHatching(serverLevel, pos, HORDE_ACCELERATION_RADIUS, level.random)) { - return true; - } - - boolean onAmberMoss = level.getBlockState(pos.below()).getBlock() instanceof AmberMossBlock; - return level.random.nextInt(onAmberMoss ? 150 : 500) == 0; - } - - private boolean canDestroyEgg(Level level, Entity entity) { - if (entity instanceof LurkingTerrorEntity || entity instanceof Bat) { - return false; - } - if (entity instanceof net.minecraft.world.entity.LivingEntity) { - return entity instanceof Player || level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); - } - return false; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/MucusBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/MucusBlock.java index e15c0799..ede8e585 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/MucusBlock.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/MucusBlock.java @@ -1,5 +1,6 @@ package com.craisinlord.antarchy.content.block; +import com.craisinlord.antarchy.content.entity.WormEntity; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.entity.Entity; @@ -16,9 +17,9 @@ import net.minecraft.world.phys.shapes.VoxelShape; public class MucusBlock extends GlowLichenBlock { private static final VoxelShape DOWN_COLLISION_SHAPE = Shapes.box(0.0D, 0.0D, 0.0D, 1.0D, 0.0625D, 1.0D); - private static final double SLIDE_ACCELERATION = 0.025D; - private static final double SLIDE_MAX_SPEED = 0.6D; - private static final double SLIDE_MIN_SPEED = 0.02D; + private static final double SLIDE_ACCELERATION = 0.045D; + private static final double SLIDE_MAX_SPEED = 1.2D; + private static final double SLIDE_MIN_SPEED = 0.01D; public MucusBlock(BlockBehaviour.Properties properties) { super(properties); @@ -30,9 +31,12 @@ public class MucusBlock extends GlowLichenBlock { } @Override - public void entityInside(BlockState state, Level level, BlockPos pos, Entity entity) { - super.entityInside(state, level, pos, entity); - if (level.isClientSide || !state.getValue(MultifaceBlock.getFaceProperty(Direction.DOWN))) { + public void stepOn(Level level, BlockPos pos, BlockState state, Entity entity) { + super.stepOn(level, pos, state, entity); + if (level.isClientSide + || entity instanceof WormEntity + || entity.isShiftKeyDown() + || !state.getValue(MultifaceBlock.getFaceProperty(Direction.DOWN))) { return; } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/NadirSaplingBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/NadirSaplingBlock.java index 16eefcdb..00115598 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/NadirSaplingBlock.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/NadirSaplingBlock.java @@ -1,20 +1,35 @@ package com.craisinlord.antarchy.content.block; +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.worldgen.thoraxis.NadirTreeGrowers; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.tags.BlockTags; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.tags.TagKey; +import net.minecraft.util.RandomSource; import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.BonemealableBlock; import net.minecraft.world.level.block.BushBlock; import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; -public class NadirSaplingBlock extends BushBlock { - private static final VoxelShape SHAPE = Block.box(2.0D, 0.0D, 2.0D, 14.0D, 12.0D, 14.0D); +public class NadirSaplingBlock extends BushBlock implements BonemealableBlock { + private static final TagKey SUPPORTS = TagKey.create( + Registries.BLOCK, + new ResourceLocation(Antarchy.MODID, "nadir_sapling_supports") + ); + private static final VoxelShape SHAPE = Block.box(2.0D, 4.0D, 2.0D, 14.0D, 16.0D, 14.0D); public NadirSaplingBlock(BlockBehaviour.Properties properties) { super(properties); @@ -27,7 +42,21 @@ public class NadirSaplingBlock extends BushBlock { @Override public boolean mayPlaceOn(BlockState state, BlockGetter level, BlockPos pos) { - return state.is(BlockTags.DIRT) || state.is(Blocks.FARMLAND); + return state.is(SUPPORTS); + } + + @Override + public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + BlockPos supportPos = pos.above(); + BlockState supportState = level.getBlockState(supportPos); + return supportState.is(SUPPORTS) && supportState.isFaceSturdy(level, supportPos, Direction.DOWN); + } + + @Override + public void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (random.nextInt(7) == 0) { + this.growConfiguredTree(level, pos, state, random); + } } @Override @@ -43,4 +72,32 @@ public class NadirSaplingBlock extends BushBlock { ? super.updateShape(state, direction, neighborState, level, pos, neighborPos) : Blocks.AIR.defaultBlockState(); } + + @Override + public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state, boolean isClient) { + return true; + } + + @Override + public boolean isBonemealSuccess(Level level, RandomSource random, BlockPos pos, BlockState state) { + return random.nextFloat() < 0.45F; + } + + @Override + public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { + this.growConfiguredTree(level, pos, state, random); + } + + private void growConfiguredTree(ServerLevel level, BlockPos pos, BlockState state, RandomSource random) { + Holder.Reference> feature = level.registryAccess() + .lookupOrThrow(Registries.CONFIGURED_FEATURE) + .getOrThrow(NadirTreeGrowers.NADIR_TREE); + + level.removeBlock(pos, false); + if (feature.value().place(level, level.getChunkSource().getGenerator(), random, pos)) { + return; + } + + level.setBlock(pos, state, Block.UPDATE_ALL); + } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/OuranwoodLeavesBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/OuranwoodLeavesBlock.java index 91df9d83..ca41e571 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/OuranwoodLeavesBlock.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/OuranwoodLeavesBlock.java @@ -23,12 +23,6 @@ import net.minecraft.world.level.material.Fluids; public class OuranwoodLeavesBlock extends LeavesBlock implements BonemealableBlock { - /* - * We still include vanilla LeavesBlock.DISTANCE in the state definition because - * LeavesBlock's constructor sets it. - * - * This is the real Ouranwood decay distance. - */ public static final IntegerProperty OURANWOOD_DISTANCE = IntegerProperty.create("ouranwood_distance", 1, 17); public static final BooleanProperty PERSISTENT = LeavesBlock.PERSISTENT; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/OuranwoodSquirrelNestBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/OuranwoodSquirrelNestBlock.java index f8da8d4d..327d88b2 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/OuranwoodSquirrelNestBlock.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/OuranwoodSquirrelNestBlock.java @@ -13,12 +13,6 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.IntegerProperty; -/** - * Invisible world-gen-only marker placed inside a flying squirrel hollow. - * Schedules itself to replace with COARSE_DIRT and spawn squirrels shortly - * after the chunk loads, so entity creation never blocks the gen thread. - * No BlockItem is registered, so this block never appears in creative or JEI. - */ public class OuranwoodSquirrelNestBlock extends Block { public static final IntegerProperty SQUIRREL_COUNT = IntegerProperty.create("squirrels", 1, 3); diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/QueenTrailSpawnMarkerBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/QueenTrailSpawnMarkerBlock.java index f469554a..1d79d7e5 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/QueenTrailSpawnMarkerBlock.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/QueenTrailSpawnMarkerBlock.java @@ -14,7 +14,6 @@ import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; -/** Invisible worldgen marker which activates the Queen at a generated trail terminus. */ public final class QueenTrailSpawnMarkerBlock extends BaseEntityBlock { private final Supplier> type; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/RoyalEggBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/RoyalEggBlock.java index 30527d06..159c8d79 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/RoyalEggBlock.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/RoyalEggBlock.java @@ -3,6 +3,7 @@ package com.craisinlord.antarchy.content.block; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.block.entity.RoyalEggBlockEntity; import com.craisinlord.antarchy.content.entity.royal.RoyalMountEntity; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; import java.util.UUID; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -18,6 +19,7 @@ import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.MobSpawnType; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.Level; import net.minecraft.world.entity.item.FallingBlockEntity; import net.minecraft.world.level.LevelAccessor; @@ -30,6 +32,7 @@ import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.BooleanProperty; import net.minecraft.world.level.block.state.properties.IntegerProperty; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.phys.shapes.CollisionContext; @@ -39,6 +42,7 @@ import org.jetbrains.annotations.Nullable; public abstract class RoyalEggBlock extends BaseEntityBlock { public static final IntegerProperty HATCH = BlockStateProperties.HATCH; + public static final BooleanProperty INVERTED = BooleanProperty.create("inverted"); private static final int MAX_HATCH = 2; private static final int FALL_DELAY = 2; @@ -49,16 +53,23 @@ public abstract class RoyalEggBlock extends BaseEntityBlock { Block.box(5.0D, 14.0D, 5.0D, 11.0D, 15.0D, 11.0D), Block.box(6.0D, 15.0D, 6.0D, 10.0D, 16.0D, 10.0D)); - public RoyalEggBlock(Properties properties) { + private static final VoxelShape INVERTED_SHAPE = Shapes.or( + Block.box(3.0D, 3.0D, 3.0D, 13.0D, 16.0D, 13.0D), + Block.box(2.0D, 5.0D, 2.0D, 14.0D, 15.0D, 14.0D), + Block.box(4.0D, 2.0D, 4.0D, 12.0D, 3.0D, 12.0D), + Block.box(5.0D, 1.0D, 5.0D, 11.0D, 2.0D, 11.0D), + Block.box(6.0D, 0.0D, 6.0D, 10.0D, 1.0D, 10.0D)); + + protected RoyalEggBlock(Properties properties) { super(properties); - this.registerDefaultState(this.stateDefinition.any().setValue(HATCH, 0)); + this.registerDefaultState(this.stateDefinition.any().setValue(HATCH, 0).setValue(INVERTED, false)); } - public abstract EntityType mountType(); + protected abstract EntityType mountType(); @Override - public void createBlockStateDefinition(StateDefinition.Builder builder) { - builder.add(HATCH); + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(HATCH, INVERTED); } @Override @@ -68,7 +79,16 @@ public abstract class RoyalEggBlock extends BaseEntityBlock { @Override public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { - return SHAPE; + return state.getValue(INVERTED) ? INVERTED_SHAPE : SHAPE; + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + return this.defaultBlockState().setValue(INVERTED, isInvertedGravityAt(context.getLevel(), context.getClickedPos())); + } + + private static boolean isInvertedGravityAt(Level level, BlockPos pos) { + return ThoraxisUndersideManager.isThoraxis(level) && pos.getY() < ThoraxisUndersideManager.GRAVITY_FLIP_Y; } @Nullable @@ -105,7 +125,8 @@ public abstract class RoyalEggBlock extends BaseEntityBlock { UUID placer = source == null ? null : source.getPlacerUuid(); int hatch = state.getValue(HATCH); level.setBlock(pos, Blocks.AIR.defaultBlockState(), 2); - level.setBlock(target, state.setValue(HATCH, Math.max(0, hatch - 1)), 2); + level.setBlock(target, state.setValue(HATCH, Math.max(0, hatch - 1)) + .setValue(INVERTED, isInvertedGravityAt(level, target)), 2); if (level.getBlockEntity(target) instanceof RoyalEggBlockEntity moved) { moved.setPlacerUuid(placer); } @@ -129,6 +150,12 @@ public abstract class RoyalEggBlock extends BaseEntityBlock { @Override public void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + boolean inverted = state.getValue(INVERTED); + if (inverted) { + tickInvertedFall(state, level, pos); + return; + } + if (!FallingBlock.isFree(level.getBlockState(pos.below())) || pos.getY() < level.getMinBuildHeight()) { return; } @@ -141,6 +168,21 @@ public abstract class RoyalEggBlock extends BaseEntityBlock { } } + private void tickInvertedFall(BlockState state, ServerLevel level, BlockPos pos) { + BlockPos above = pos.above(); + if (!FallingBlock.isFree(level.getBlockState(above)) || above.getY() > level.getMaxBuildHeight()) { + return; + } + + UUID placer = level.getBlockEntity(pos) instanceof RoyalEggBlockEntity egg ? egg.getPlacerUuid() : null; + level.removeBlock(pos, false); + level.setBlock(above, state, Block.UPDATE_ALL); + if (level.getBlockEntity(above) instanceof RoyalEggBlockEntity moved) { + moved.setPlacerUuid(placer); + } + level.scheduleTick(above, this, FALL_DELAY); + } + @Override public boolean isRandomlyTicking(BlockState state) { return true; @@ -170,7 +212,7 @@ public abstract class RoyalEggBlock extends BaseEntityBlock { return; } mount.moveTo(pos.getX() + 0.5D, pos.getY(), pos.getZ() + 0.5D, level.random.nextFloat() * 360.0F, 0.0F); - mount.setBaby(true); + mount.setGrowthProgress(0.0F); mount.finalizeSpawn(level, level.getCurrentDifficultyAt(pos), MobSpawnType.BREEDING, null, null); if (placer != null) { mount.setTame(true); diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/SkulkingFrightEggBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/SkulkingFrightEggBlock.java new file mode 100644 index 00000000..1c17a6c1 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/SkulkingFrightEggBlock.java @@ -0,0 +1,244 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.entity.SkulkingFrightEntity; +import com.craisinlord.antarchy.content.block.AmberMossBlock; +import com.craisinlord.antarchy.content.block.CrawlingBlightEggBlock; +import com.craisinlord.antarchy.content.horde.CavarynHordeManager; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.tags.BlockTags; +import net.minecraft.util.RandomSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.ambient.Bat; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.GameRules; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.IntegerProperty; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class SkulkingFrightEggBlock extends Block { + public static final IntegerProperty HATCH = BlockStateProperties.HATCH; + public static final IntegerProperty EGGS = BlockStateProperties.EGGS; + private static final float PANIC_HATCH_CHANCE = 0.25F; + private static final double HORDE_ACCELERATION_RADIUS = 5.0D; + private static final int MAX_HATCH = 2; + private static final int MAX_EGGS = 4; + private static final VoxelShape SINGLE_SHAPE = Block.box(3.0D, 0.0D, 3.0D, 13.0D, 7.0D, 13.0D); + private static final VoxelShape MULTI_SHAPE = Block.box(1.0D, 0.0D, 1.0D, 15.0D, 7.0D, 15.0D); + + public SkulkingFrightEggBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any().setValue(HATCH, 0).setValue(EGGS, 1)); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return state.getValue(EGGS) > 1 ? MULTI_SHAPE : SINGLE_SHAPE; + } + + @Override + public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + return level.getBlockState(pos.below()).isFaceSturdy(level, pos.below(), Direction.UP); + } + + @Override + public BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { + return state.canSurvive(level, pos) ? super.updateShape(state, direction, neighborState, level, pos, neighborPos) : Blocks.AIR.defaultBlockState(); + } + + @Override + public boolean canBeReplaced(BlockState state, BlockPlaceContext context) { + return !context.isSecondaryUseActive() + && context.getItemInHand().is(this.asItem()) + && state.getValue(EGGS) < MAX_EGGS; + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + BlockState existingState = context.getLevel().getBlockState(context.getClickedPos()); + if (existingState.is(this)) { + return existingState.setValue(EGGS, Math.min(MAX_EGGS, existingState.getValue(EGGS) + 1)); + } + return this.defaultBlockState(); + } + + @Override + public boolean isRandomlyTicking(BlockState state) { + return true; + } + + @Override + public void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (!this.shouldUpdateHatchLevel(level, pos)) { + return; + } + + int hatch = state.getValue(HATCH); + if (hatch < MAX_HATCH) { + level.setBlock(pos, state.setValue(HATCH, hatch + 1), 2); + level.playSound(null, pos, SoundEvents.TURTLE_EGG_CRACK, SoundSource.BLOCKS, 0.7F, 0.95F + random.nextFloat() * 0.1F); + return; + } + + this.hatchEggs(level, pos, state, random, state.getValue(EGGS)); + } + + @Override + public void stepOn(Level level, BlockPos pos, BlockState state, Entity entity) { + if (entity instanceof Player && !entity.isSteppingCarefully() && this.destroyEgg(level, state, pos, entity, 100)) { + if (level instanceof ServerLevel serverLevel) { + panicHatchNearby(serverLevel, pos); + } + } + super.stepOn(level, pos, state, entity); + } + + @Override + public void fallOn(Level level, BlockState state, BlockPos pos, Entity entity, float fallDistance) { + this.destroyEgg(level, state, pos, entity, 3); + super.fallOn(level, state, pos, entity, fallDistance); + } + + @Override + public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean isMoving) { + if (hasHatchSupport(level, pos) && !level.isClientSide) { + level.levelEvent(2012, pos, 15); + } + } + + @Override + public void playerDestroy(Level level, Player player, BlockPos pos, BlockState state, BlockEntity blockEntity, net.minecraft.world.item.ItemStack stack) { + super.playerDestroy(level, player, pos, state, blockEntity, stack); + this.decreaseEggs(level, pos, state); + } + + private static void panicHatchNearby(ServerLevel level, BlockPos origin) { + int radius = 6; + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int dx = -radius; dx <= radius; dx++) { + for (int dy = -radius; dy <= radius; dy++) { + for (int dz = -radius; dz <= radius; dz++) { + if (dx == 0 && dy == 0 && dz == 0) continue; + mutable.set(origin.getX() + dx, origin.getY() + dy, origin.getZ() + dz); + BlockState nearby = level.getBlockState(mutable); + BlockPos immutable = mutable.immutable(); + if (nearby.getBlock() instanceof SkulkingFrightEggBlock b) { + b.hatchPanickedEggs(level, immutable, nearby, level.random); + } else if (nearby.getBlock() instanceof CrawlingBlightEggBlock b) { + b.hatchPanickedEggs(level, immutable, nearby, level.random); + } + } + } + } + } + + @Override + public void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(HATCH, EGGS); + } + + public static boolean hasHatchSupport(BlockGetter level, BlockPos pos) { + return isSupportedGround(level, pos.below()); + } + + public static boolean isSupportedGround(BlockGetter level, BlockPos pos) { + return level.getBlockState(pos).is(BlockTags.SAND) || level.getBlockState(pos).blocksMotion(); + } + + private boolean destroyEgg(Level level, BlockState state, BlockPos pos, Entity entity, int chance) { + if (level.isClientSide || !this.canDestroyEgg(level, entity) || level.random.nextInt(chance) != 0) { + return false; + } + level.playSound(null, pos, SoundEvents.TURTLE_EGG_BREAK, SoundSource.BLOCKS, 0.7F, 0.9F + level.random.nextFloat() * 0.2F); + this.decreaseEggs(level, pos, state); + return true; + } + + void hatchPanickedEggs(ServerLevel level, BlockPos pos, BlockState state, RandomSource random) { + int hatchedEggs = rollPanickedEggs(state.getValue(EGGS), random); + if (hatchedEggs <= 0) { + return; + } + + this.hatchEggs(level, pos, state, random, hatchedEggs); + } + + void hatchEggs(ServerLevel level, BlockPos pos, BlockState state, RandomSource random, int eggsToHatch) { + if (eggsToHatch >= state.getValue(EGGS)) { + level.removeBlock(pos, false); + } else { + level.setBlock(pos, state.setValue(EGGS, state.getValue(EGGS) - eggsToHatch), 2); + } + level.playSound(null, pos, SoundEvents.TURTLE_EGG_HATCH, SoundSource.BLOCKS, 0.75F, 0.95F + random.nextFloat() * 0.1F); + + for (int i = 0; i < eggsToHatch; i++) { + SkulkingFrightEntity entity = AntarchyObjects.SKULKING_FRIGHT.get().create(level); + if (entity == null) { + continue; + } + double spawnX = pos.getX() + 0.25D + random.nextDouble() * 0.5D; + double spawnZ = pos.getZ() + 0.25D + random.nextDouble() * 0.5D; + entity.moveTo(spawnX, pos.getY() + 0.1D, spawnZ, random.nextFloat() * 360.0F, 0.0F); + level.addFreshEntity(entity); + } + } + + public void hatchWithNucleus(ServerLevel level, BlockPos pos, BlockState state) { + this.hatchEggs(level, pos, state, level.random, state.getValue(EGGS)); + } + + private static int rollPanickedEggs(int eggs, RandomSource random) { + int hatchedEggs = 0; + for (int i = 0; i < eggs; i++) { + if (random.nextFloat() < PANIC_HATCH_CHANCE) { + hatchedEggs++; + } + } + return hatchedEggs; + } + + private void decreaseEggs(Level level, BlockPos pos, BlockState state) { + int eggs = state.getValue(EGGS); + if (eggs <= 1) { + level.destroyBlock(pos, false); + return; + } + level.setBlock(pos, state.setValue(EGGS, eggs - 1), 2); + } + + private boolean shouldUpdateHatchLevel(Level level, BlockPos pos) { + if (level instanceof ServerLevel serverLevel + && CavarynHordeManager.shouldAccelerateNearbyEggHatching(serverLevel, pos, HORDE_ACCELERATION_RADIUS, level.random)) { + return true; + } + + boolean onAmberMoss = level.getBlockState(pos.below()).getBlock() instanceof AmberMossBlock; + return level.random.nextInt(onAmberMoss ? 150 : 500) == 0; + } + + private boolean canDestroyEgg(Level level, Entity entity) { + if (entity instanceof SkulkingFrightEntity || entity instanceof Bat) { + return false; + } + if (entity instanceof net.minecraft.world.entity.LivingEntity) { + return entity instanceof Player || level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); + } + return false; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/SpringbugEggBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/SpringbugEggBlock.java new file mode 100644 index 00000000..a60f0c40 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/SpringbugEggBlock.java @@ -0,0 +1,160 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.SpringbugEntity; +import com.craisinlord.antarchy.content.horde.CavarynHordeManager; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.EntityType; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.util.RandomSource; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.Rotation; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.block.state.properties.IntegerProperty; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class SpringbugEggBlock extends Block { + public static final IntegerProperty HATCH = BlockStateProperties.HATCH; + public static final BooleanProperty HANGING = BlockStateProperties.HANGING; + public static final BooleanProperty ROTATED = BooleanProperty.create("rotated"); + private static final int MAX_HATCH = 2; + private static final double PLAYER_PROXIMITY_RADIUS = 12.0D; + private static final double HORDE_ACCELERATION_RADIUS = 5.0D; + private static final float PLAYER_PROXIMITY_HATCH_CHANCE = 0.25F; + private static final int PLAYER_PROXIMITY_CHECK_INTERVAL = 200; + private static final VoxelShape FLOOR_SHAPE = Block.box(1.5D, 0.0D, 1.5D, 14.5D, 16.0D, 14.5D); + private static final VoxelShape CEILING_SHAPE = Block.box(1.5D, 0.0D, 1.5D, 14.5D, 16.0D, 14.5D); + private static final ResourceLocation SPRINGBUG_ID = new ResourceLocation(Antarchy.MODID, "springbug"); + + public SpringbugEggBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any().setValue(HATCH, 0).setValue(HANGING, false).setValue(ROTATED, false)); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return state.getValue(HANGING) ? CEILING_SHAPE : FLOOR_SHAPE; + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + boolean hanging = context.getClickedFace() == Direction.DOWN + || (context.getClickedFace() != Direction.UP && !canSupportFloor(context.getLevel(), context.getClickedPos()) && canSupportCeiling(context.getLevel(), context.getClickedPos())); + boolean rotated = context.getHorizontalDirection().getAxis() == Direction.Axis.X; + return this.defaultBlockState().setValue(HANGING, hanging).setValue(ROTATED, rotated); + } + + @Override + public BlockState rotate(BlockState state, Rotation rotation) { + return rotation == Rotation.CLOCKWISE_90 || rotation == Rotation.COUNTERCLOCKWISE_90 + ? state.setValue(ROTATED, !state.getValue(ROTATED)) + : state; + } + + @Override + public BlockState mirror(BlockState state, Mirror mirror) { + return state; + } + + @Override + public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + return state.getValue(HANGING) ? canSupportCeiling(level, pos) : canSupportFloor(level, pos); + } + + @Override + public BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { + return state.canSurvive(level, pos) ? super.updateShape(state, direction, neighborState, level, pos, neighborPos) : Blocks.AIR.defaultBlockState(); + } + + private static boolean canSupportFloor(LevelReader level, BlockPos pos) { + return level.getBlockState(pos.below()).isFaceSturdy(level, pos.below(), Direction.UP); + } + + private static boolean canSupportCeiling(LevelReader level, BlockPos pos) { + return level.getBlockState(pos.above()).isFaceSturdy(level, pos.above(), Direction.DOWN); + } + + @Override + public boolean isRandomlyTicking(BlockState state) { + return true; + } + + @Override + public void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (!this.shouldUpdateHatchLevel(level, pos, state)) { + return; + } + + int hatch = state.getValue(HATCH); + if (hatch < MAX_HATCH) { + level.setBlock(pos, state.setValue(HATCH, hatch + 1), 2); + level.playSound(null, pos, SoundEvents.TURTLE_EGG_CRACK, SoundSource.BLOCKS, 0.7F, 0.95F + random.nextFloat() * 0.1F); + return; + } + + this.hatch(level, pos, random); + } + + private boolean shouldUpdateHatchLevel(Level level, BlockPos pos, BlockState state) { + if (level instanceof ServerLevel serverLevel + && CavarynHordeManager.shouldAccelerateNearbyEggHatching(serverLevel, pos, HORDE_ACCELERATION_RADIUS, level.random)) { + return true; + } + + if (level.random.nextInt(PLAYER_PROXIMITY_CHECK_INTERVAL) == 0) { + Player nearbyPlayer = level.getNearestPlayer(pos.getX() + 0.5D, pos.getY() + 0.5D, pos.getZ() + 0.5D, PLAYER_PROXIMITY_RADIUS, false); + if (nearbyPlayer != null && level.random.nextFloat() < PLAYER_PROXIMITY_HATCH_CHANCE) { + return true; + } + } + + BlockPos checkPos = state.getValue(HANGING) ? pos.above() : pos.below(); + boolean onAmberMoss = level.getBlockState(checkPos).getBlock() instanceof AmberMossBlock; + return level.random.nextInt(onAmberMoss ? 150 : 500) == 0; + } + + private void hatch(ServerLevel level, BlockPos pos, RandomSource random) { + level.removeBlock(pos, false); + level.playSound(null, pos, SoundEvents.TURTLE_EGG_HATCH, SoundSource.BLOCKS, 0.75F, 0.95F + random.nextFloat() * 0.1F); + @SuppressWarnings("unchecked") + EntityType springbugType = (EntityType) (EntityType) BuiltInRegistries.ENTITY_TYPE.getOptional(SPRINGBUG_ID).orElse(null); + if (springbugType == null) { + return; + } + SpringbugEntity entity = springbugType.create(level); + if (entity == null) { + return; + } + double spawnX = pos.getX() + 0.25D + random.nextDouble() * 0.5D; + double spawnZ = pos.getZ() + 0.25D + random.nextDouble() * 0.5D; + entity.moveTo(spawnX, pos.getY() + 0.1D, spawnZ, random.nextFloat() * 360.0F, 0.0F); + level.addFreshEntity(entity); + } + + public void hatchWithNucleus(ServerLevel level, BlockPos pos) { + this.hatch(level, pos, level.random); + } + + @Override + public void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(HATCH, HANGING, ROTATED); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/TriffidGooBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/TriffidGooBlock.java deleted file mode 100644 index 3f1294f8..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/TriffidGooBlock.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.craisinlord.antarchy.content.block; - -import net.minecraft.core.BlockPos; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.level.BlockGetter; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockBehaviour; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.Vec3; -import net.minecraft.world.phys.shapes.CollisionContext; -import net.minecraft.world.phys.shapes.EntityCollisionContext; -import net.minecraft.world.phys.shapes.Shapes; -import net.minecraft.world.phys.shapes.VoxelShape; - -public class TriffidGooBlock extends Block { - - private static final double BOUNCE_VELOCITY_THRESHOLD = 0.6; - private static final double MAX_SINK_SPEED = 0.05; - private static final double SPRINT_VELOCITY_THRESHOLD = 0.1; - - public TriffidGooBlock(BlockBehaviour.Properties properties) { - super(properties); - } - - public boolean isStickyBlock(BlockState state) { - return true; - } - - public boolean canStickTo(BlockState state, BlockState other) { - return !other.is(Blocks.SLIME_BLOCK) && !other.is(Blocks.HONEY_BLOCK); - } - - @Override - public VoxelShape getCollisionShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { - if (context instanceof EntityCollisionContext ecc) { - Entity entity = ecc.getEntity(); - if (entity != null) { - Vec3 delta = entity.getDeltaMovement(); - double vy = delta.y; - double hSpeed = Math.sqrt(delta.x * delta.x + delta.z * delta.z); - if (vy <= 0.0 && vy > -BOUNCE_VELOCITY_THRESHOLD && hSpeed < SPRINT_VELOCITY_THRESHOLD) { - return Shapes.empty(); - } - } - } - return super.getCollisionShape(state, level, pos, context); - } - - @Override - public void entityInside(BlockState state, Level level, BlockPos pos, Entity entity) { - Vec3 delta = entity.getDeltaMovement(); - if (delta.y < -MAX_SINK_SPEED) { - entity.setDeltaMovement(delta.x * 0.9, -MAX_SINK_SPEED, delta.z * 0.9); - } else { - entity.setDeltaMovement(delta.x * 0.9, delta.y, delta.z * 0.9); - } - entity.fallDistance = 0.0F; - } - - @Override - public void fallOn(Level level, BlockState state, BlockPos pos, Entity entity, float fallDistance) { - entity.causeFallDamage(fallDistance, 0.0F, level.damageSources().fall()); - } - - @Override - public void updateEntityAfterFallOn(BlockGetter level, Entity entity) { - Vec3 delta = entity.getDeltaMovement(); - if (delta.y < 0.0) { - double coefficient = entity instanceof LivingEntity ? 1.0 : 0.8; - entity.setDeltaMovement(delta.x, -delta.y * coefficient, delta.z); - } - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/UnderVaultBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/UnderVaultBlock.java index dd8ca675..14fd6ff2 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/UnderVaultBlock.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/UnderVaultBlock.java @@ -1,19 +1,24 @@ package com.craisinlord.antarchy.content.block; -import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.block.entity.UnderVaultBlockEntity; +import com.craisinlord.antarchy.content.block.entity.undervault.UnderVaultEffects; +import com.craisinlord.antarchy.content.block.entity.undervault.UnderVaultLogic; +import com.craisinlord.antarchy.content.block.entity.undervault.UnderVaultState; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.BaseEntityBlock; import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.Mirror; import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.Rotation; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityTicker; import net.minecraft.world.level.block.entity.BlockEntityType; @@ -22,33 +27,58 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BooleanProperty; import net.minecraft.world.level.block.state.properties.DirectionProperty; +import net.minecraft.world.level.block.state.properties.EnumProperty; import net.minecraft.world.phys.BlockHitResult; -import net.minecraft.resources.ResourceLocation; import java.util.function.Supplier; public final class UnderVaultBlock extends BaseEntityBlock { - public static final DirectionProperty FACING = DirectionProperty.create("facing"); - public static final BooleanProperty ACTIVE = BooleanProperty.create("active"); + public static final EnumProperty STATE = EnumProperty.create("vault_state", UnderVaultState.class); + public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING; + public static final BooleanProperty OMINOUS = BooleanProperty.create("ominous"); + public static final DirectionProperty UNDER_FACING = DirectionProperty.create("under_facing", Direction.values()); private final Supplier> blockEntityType; - public UnderVaultBlock(Supplier> blockEntityType, - BlockBehaviour.Properties properties) { - super(properties); + public UnderVaultBlock(Supplier> blockEntityType, BlockBehaviour.Properties properties) { + super(properties.lightLevel(UnderVaultBlock::lightLevel)); this.blockEntityType = blockEntityType; - registerDefaultState(stateDefinition.any().setValue(FACING, Direction.DOWN).setValue(ACTIVE, true)); + this.registerDefaultState(this.stateDefinition.any() + .setValue(FACING, Direction.NORTH) + .setValue(STATE, UnderVaultState.INACTIVE) + .setValue(OMINOUS, false) + .setValue(UNDER_FACING, Direction.NORTH)); + } + + public static int lightLevel(BlockState state) { + return state.getValue(STATE).lightLevel(); } @Override protected void createBlockStateDefinition(StateDefinition.Builder builder) { - builder.add(FACING, ACTIVE); + builder.add(FACING, STATE, OMINOUS); + builder.add(UNDER_FACING); } @Override - public BlockState getStateForPlacement(net.minecraft.world.item.context.BlockPlaceContext context) { - return context.getClickedFace() == Direction.DOWN - ? defaultBlockState().setValue(FACING, Direction.DOWN) - : null; + public BlockState getStateForPlacement(BlockPlaceContext context) { + if (context.getClickedFace() != Direction.DOWN) { + return null; + } + return this.defaultBlockState() + .setValue(FACING, context.getHorizontalDirection().getOpposite()) + .setValue(UNDER_FACING, Direction.DOWN); + } + + @Override + public BlockState rotate(BlockState state, Rotation rotation) { + BlockState rotated = state.setValue(FACING, rotation.rotate(state.getValue(FACING))); + return rotated.setValue(UNDER_FACING, rotation.rotate(state.getValue(UNDER_FACING))); + } + + @Override + public BlockState mirror(BlockState state, Mirror mirror) { + BlockState mirrored = state.rotate(mirror.getRotation(state.getValue(FACING))); + return mirrored.setValue(UNDER_FACING, mirror.getRotation(state.getValue(UNDER_FACING)).rotate(state.getValue(UNDER_FACING))); } @Override @@ -62,29 +92,41 @@ public final class UnderVaultBlock extends BaseEntityBlock { } @Override - public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, - InteractionHand hand, BlockHitResult hit) { + public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, + BlockHitResult hitResult) { ItemStack stack = player.getItemInHand(hand); - if (!state.getValue(ACTIVE) || !isKey(stack)) { + if (stack.isEmpty() || state.getValue(STATE) != UnderVaultState.ACTIVE) { return InteractionResult.PASS; } - if (!level.isClientSide && level instanceof ServerLevel serverLevel - && level.getBlockEntity(pos) instanceof UnderVaultBlockEntity vault) { - if (vault.unlock(serverLevel, pos, player, stack)) { - level.setBlock(pos, state.setValue(ACTIVE, false), Block.UPDATE_ALL); - return InteractionResult.CONSUME; - } + if (level instanceof ServerLevel serverLevel + && level.getBlockEntity(pos) instanceof UnderVaultBlockEntity underVault) { + UnderVaultLogic.Server.tryInsertKey( + serverLevel, pos, state, underVault.getVaultData().getConfig(), + underVault.getVaultData().getServerData(), underVault.getVaultData().getSharedData(), + player, stack); + return InteractionResult.SUCCESS; } - return InteractionResult.sidedSuccess(level.isClientSide); - } - - private static boolean isKey(ItemStack stack) { - return stack.is(BuiltInRegistries.ITEM.get(new ResourceLocation(Antarchy.MODID, "undertrial_key"))); + return level.isClientSide ? InteractionResult.CONSUME : InteractionResult.PASS; } @Override - public BlockEntityTicker getTicker(Level level, BlockState state, - BlockEntityType type) { - return createTickerHelper(type, blockEntityType.get(), UnderVaultBlockEntity::tick); + public boolean triggerEvent(BlockState state, Level level, BlockPos pos, int id, int param) { + return UnderVaultEffects.handle(level, pos, id, param); + } + + @Override + @SuppressWarnings("unchecked") + public BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType type) { + if (this.blockEntityType == null || type != this.blockEntityType.get()) { + return null; + } + if (level.isClientSide) { + return (BlockEntityTicker) (BlockEntityTicker) UnderVaultBlockEntity::clientTick; + } + return (BlockEntityTicker) (BlockEntityTicker) ((serverLevel, pos, blockState, blockEntity) -> { + if (serverLevel instanceof ServerLevel levelServer) { + UnderVaultBlockEntity.serverTick(levelServer, pos, blockState, blockEntity); + } + }); } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/UndertrialSpawnerBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/UndertrialSpawnerBlock.java index 21e05957..6a4ab96f 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/UndertrialSpawnerBlock.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/UndertrialSpawnerBlock.java @@ -1,8 +1,16 @@ package com.craisinlord.antarchy.content.block; import com.craisinlord.antarchy.content.block.entity.UndertrialSpawnerBlockEntity; +import com.craisinlord.antarchy.content.block.entity.undertrial.UndertrialSpawnerEffects; +import com.craisinlord.antarchy.content.block.entity.undertrial.UndertrialSpawnerState; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.SpawnEggItem; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.BaseEntityBlock; @@ -15,29 +23,36 @@ import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.minecraft.world.phys.BlockHitResult; import java.util.function.Supplier; public final class UndertrialSpawnerBlock extends BaseEntityBlock { - public static final BooleanProperty ACTIVE = BooleanProperty.create("active"); + public static final EnumProperty STATE = EnumProperty.create("trial_spawner_state", UndertrialSpawnerState.class); public static final BooleanProperty OMINOUS = BooleanProperty.create("ominous"); private final Supplier> blockEntityType; - public UndertrialSpawnerBlock(Supplier> blockEntityType, - BlockBehaviour.Properties properties) { - super(properties); + public UndertrialSpawnerBlock(Supplier> blockEntityType, BlockBehaviour.Properties properties) { + super(properties.lightLevel(UndertrialSpawnerBlock::lightLevel)); this.blockEntityType = blockEntityType; - registerDefaultState(stateDefinition.any().setValue(ACTIVE, false).setValue(OMINOUS, false)); + this.registerDefaultState(this.stateDefinition.any() + .setValue(STATE, UndertrialSpawnerState.INACTIVE) + .setValue(OMINOUS, false)); + } + + public static int lightLevel(BlockState state) { + return state.getValue(STATE).lightLevel(); } @Override protected void createBlockStateDefinition(StateDefinition.Builder builder) { - builder.add(ACTIVE, OMINOUS); + builder.add(STATE, OMINOUS); } @Override public BlockState getStateForPlacement(BlockPlaceContext context) { - return context.getClickedFace() == Direction.DOWN ? defaultBlockState() : null; + return context.getClickedFace() == Direction.DOWN ? this.defaultBlockState() : null; } @Override @@ -51,8 +66,35 @@ public final class UndertrialSpawnerBlock extends BaseEntityBlock { } @Override - public BlockEntityTicker getTicker(Level level, BlockState state, - BlockEntityType type) { - return createTickerHelper(type, blockEntityType.get(), UndertrialSpawnerBlockEntity::tick); + public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, + BlockHitResult hitResult) { + ItemStack stack = player.getItemInHand(hand); + if (!(stack.getItem() instanceof SpawnEggItem)) { + return InteractionResult.PASS; + } + if (level.getBlockEntity(pos) instanceof UndertrialSpawnerBlockEntity spawner) { + if (!level.isClientSide) { + spawner.setSpawnEntity(((SpawnEggItem) stack.getItem()).getType(stack.getTag())); + } + return InteractionResult.sidedSuccess(level.isClientSide); + } + return InteractionResult.PASS; + } + + @Override + public boolean triggerEvent(BlockState state, Level level, BlockPos pos, int id, int param) { + return UndertrialSpawnerEffects.handle(level, pos, id, param); + } + + @Override + public BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType blockEntityType) { + if (level.isClientSide) { + return createTickerHelper(blockEntityType, this.blockEntityType.get(), UndertrialSpawnerBlockEntity::clientTick); + } + return createTickerHelper(blockEntityType, this.blockEntityType.get(), (tickLevel, tickPos, tickState, blockEntity) -> { + if (tickLevel instanceof ServerLevel serverLevel) { + UndertrialSpawnerBlockEntity.serverTick(serverLevel, tickPos, tickState, blockEntity); + } + }); } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/AntNestBlockEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/AntNestBlockEntity.java index 782c80da..31ca520c 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/AntNestBlockEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/AntNestBlockEntity.java @@ -41,6 +41,28 @@ public class AntNestBlockEntity extends BlockEntity { } public static void serverTick(ServerLevel level, BlockPos pos, BlockState state, AntNestBlockEntity nest) { + if (state.getBlock() instanceof com.craisinlord.antarchy.content.block.AntTrapBlock) { + if (level.getGameTime() % 20L == 0L && nest.storedAnts.size() < nest.maxOccupants()) { + net.minecraft.world.phys.AABB searchArea = new net.minecraft.world.phys.AABB(pos).inflate(15.0D); + for (BaseAntEntity ant : level.getEntitiesOfClass(BaseAntEntity.class, searchArea, BaseAntEntity::isAlive)) { + if (ant.distanceToSqr(net.minecraft.world.phys.Vec3.atCenterOf(pos)) > 225.0D) { + continue; + } + if (!nest.canAccept(ant.getType())) { + continue; + } + if (ant.distanceToSqr(net.minecraft.world.phys.Vec3.atCenterOf(pos)) <= 2.25D) { + nest.tryStoreAnt(ant); + if (nest.storedAnts.size() >= nest.maxOccupants()) { + break; + } + } else { + ant.getNavigation().moveTo(pos.getX() + 0.5D, pos.getY() + 0.5D, pos.getZ() + 0.5D, 1.05D); + } + } + } + return; + } boolean playerNearby = level.hasNearbyAlivePlayer( pos.getX() + 0.5D, pos.getY() + 0.5D, pos.getZ() + 0.5D, PLAYER_ACTIVATION_RANGE); if (!playerNearby) { @@ -116,12 +138,17 @@ public class AntNestBlockEntity extends BlockEntity { } public void releaseAll(ServerLevel level) { - while (!this.storedAnts.isEmpty()) { - this.releaseOne(level); + int remaining = this.storedAnts.size(); + while (remaining-- > 0 && !this.storedAnts.isEmpty()) { + this.releaseOne(level, true); } } private void releaseOne(ServerLevel level) { + this.releaseOne(level, false); + } + + private void releaseOne(ServerLevel level, boolean forceRelease) { if (this.storedAnts.isEmpty()) { return; } @@ -133,20 +160,39 @@ public class AntNestBlockEntity extends BlockEntity { return; } - BlockPos spawnPos = this.getBlockPos().above(); - if (!level.getBlockState(spawnPos).canBeReplaced()) { + BlockPos origin = this.getBlockPos(); + java.util.List candidates = new java.util.ArrayList<>(); + for (int y = 1; y <= 3; y++) { + candidates.add(origin.above(y)); + for (int radius = 1; radius <= 2; radius++) { + candidates.add(origin.offset(radius, y, 0)); + candidates.add(origin.offset(-radius, y, 0)); + candidates.add(origin.offset(0, y, radius)); + candidates.add(origin.offset(0, y, -radius)); + } + } + BlockPos spawnPos = null; + for (BlockPos candidate : candidates) { + antEntity.moveTo(candidate.getX() + SPAWN_OFFSET_XZ, candidate.getY() + SPAWN_OFFSET_Y, candidate.getZ() + SPAWN_OFFSET_XZ, + level.random.nextFloat() * 360.0F, 0.0F); + if (level.noCollision(antEntity)) { + spawnPos = candidate; + break; + } + } + if (spawnPos == null && !forceRelease) { return; } - - antEntity.moveTo(spawnPos.getX() + SPAWN_OFFSET_XZ, spawnPos.getY() + SPAWN_OFFSET_Y, spawnPos.getZ() + SPAWN_OFFSET_XZ, level.random.nextFloat() * 360.0F, 0.0F); - if (!level.noCollision(antEntity)) { - return; + if (spawnPos == null) { + antEntity.moveTo(origin.getX() + SPAWN_OFFSET_XZ, origin.getY() + SPAWN_OFFSET_Y, origin.getZ() + SPAWN_OFFSET_XZ, + level.random.nextFloat() * 360.0F, 0.0F); } - - this.storedAnts.remove(0); - antEntity.setNestPos(this.getBlockPos()); + antEntity.setNestPos(origin); antEntity.onExitNest(); - level.addFreshEntity(antEntity); + if (!level.addFreshEntity(antEntity) && !forceRelease) { + return; + } + this.storedAnts.remove(0); this.setChanged(); } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/DimensionalTearMarkerBlockEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/DimensionalTearMarkerBlockEntity.java index b77b3457..4bffa865 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/DimensionalTearMarkerBlockEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/DimensionalTearMarkerBlockEntity.java @@ -5,6 +5,7 @@ import com.craisinlord.antarchy.content.entity.portal.DimensionalTearEntity; import java.util.function.Supplier; import net.minecraft.core.BlockPos; import net.minecraft.core.HolderLookup; +import net.minecraft.core.SectionPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerLevel; import net.minecraft.util.Mth; @@ -12,6 +13,7 @@ import net.minecraft.util.RandomSource; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.chunk.LevelChunk; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.Nullable; @@ -139,14 +141,21 @@ public class DimensionalTearMarkerBlockEntity extends BlockEntity { if (pos.getY() < minY || pos.getY() > maxY) { return false; } + BlockPos.MutableBlockPos checkPos = new BlockPos.MutableBlockPos(); + LevelChunk chunk = null; for (int dx = -2; dx <= 2; dx++) { - for (int dy = -2; dy <= 3; dy++) { - for (int dz = -4; dz <= 4; dz++) { - BlockPos checkPos = pos.offset(dx, dy, dz); - if (!level.isLoaded(checkPos)) { + for (int dz = -4; dz <= 4; dz++) { + int chunkX = SectionPos.blockToSectionCoord(pos.getX() + dx); + int chunkZ = SectionPos.blockToSectionCoord(pos.getZ() + dz); + if (chunk == null || chunk.getPos().x != chunkX || chunk.getPos().z != chunkZ) { + chunk = level.getChunkSource().getChunkNow(chunkX, chunkZ); + if (chunk == null) { return false; } - if (!level.getBlockState(checkPos).getCollisionShape(level, checkPos).isEmpty()) { + } + for (int dy = -2; dy <= 3; dy++) { + checkPos.set(pos.getX() + dx, pos.getY() + dy, pos.getZ() + dz); + if (!chunk.getBlockState(checkPos).getCollisionShape(level, checkPos).isEmpty()) { return false; } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/PortalGunPortalBaseBlockEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/PortalGunPortalBaseBlockEntity.java index e21c8cfa..2527d878 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/PortalGunPortalBaseBlockEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/PortalGunPortalBaseBlockEntity.java @@ -1,6 +1,8 @@ package com.craisinlord.antarchy.content.block.entity; import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; +import java.util.EnumMap; +import java.util.Map; import java.util.UUID; import java.util.function.Supplier; import net.minecraft.core.BlockPos; @@ -14,7 +16,8 @@ import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; -public class PortalGunPortalBaseBlockEntity extends BlockEntity { +public class PortalGunPortalBaseBlockEntity extends BlockEntity implements PortalGunPortalCellAccess { + private final Map faceRecords = new EnumMap<>(net.minecraft.core.Direction.class); private UUID ownerId; private UUID portalId; private PortalGunPortalEntity.PortalSide side = PortalGunPortalEntity.PortalSide.BLUE; @@ -26,6 +29,11 @@ public class PortalGunPortalBaseBlockEntity extends BlockEntity { super(typeSupplier.get(), pos, state); } + @Override + public Map portalGun$getFaceRecords() { + return this.faceRecords; + } + public void configure(UUID ownerId, UUID portalId, PortalGunPortalEntity.PortalSide side, BlockPos masterPos) { this.ownerId = ownerId; this.portalId = portalId; @@ -61,6 +69,11 @@ public class PortalGunPortalBaseBlockEntity extends BlockEntity { public void updatePair(UUID linkedPortalId, int pairTime) { this.linkedPortalId = linkedPortalId; this.pairTime = pairTime; + for (PortalGunPortalFaceRecord record : java.util.List.copyOf(this.faceRecords.values())) { + if (record.portalId().equals(this.portalId)) { + this.portalGun$putFaceRecord(record.withPair(linkedPortalId, pairTime)); + } + } this.setChanged(); } @@ -69,11 +82,20 @@ public class PortalGunPortalBaseBlockEntity extends BlockEntity { } public void onBroken() { - if (!(this.level instanceof ServerLevel serverLevel) || this.portalId == null) { + if (!(this.level instanceof ServerLevel serverLevel)) { return; } - if (serverLevel.getEntity(this.portalId) instanceof PortalGunPortalEntity portal && !portal.isRemoved()) { - portal.discard(); + java.util.Set portalIds = new java.util.HashSet<>(); + if (this.portalId != null) { + portalIds.add(this.portalId); + } + for (PortalGunPortalFaceRecord record : this.faceRecords.values()) { + portalIds.add(record.portalId()); + } + for (UUID id : portalIds) { + if (serverLevel.getEntity(id) instanceof PortalGunPortalEntity portal && !portal.isRemoved()) { + portal.discard(); + } } } @@ -81,15 +103,28 @@ public class PortalGunPortalBaseBlockEntity extends BlockEntity { if (((level.getGameTime() + pos.asLong()) & 15L) != 0L) { return; } + if (level.getBlockEntity(blockEntity.masterPos) instanceof PortalGunPortalMasterBlockEntity master + && master.matches(blockEntity.ownerId, blockEntity.portalId, blockEntity.side)) { + PortalGunPortalFaceRecord masterRecord = master.portalGun$getFaceRecord(master.getFacing(), blockEntity.portalId); + if (masterRecord != null && blockEntity.portalGun$getFaceRecord(masterRecord.face(), masterRecord.portalId()) == null) { + blockEntity.portalGun$putFaceRecord(masterRecord.withMaster(false)); + } + } + blockEntity.portalGun$restoreMasterFaces(level, pos); + if (blockEntity.portalId != null + && !(level.getEntity(blockEntity.portalId) instanceof PortalGunPortalEntity) + && blockEntity.faceRecords.values().stream().anyMatch(record -> !record.portalId().equals(blockEntity.portalId))) { + return; + } if (!(level.getBlockEntity(blockEntity.masterPos) instanceof PortalGunPortalMasterBlockEntity master) || !master.matches(blockEntity.ownerId, blockEntity.portalId, blockEntity.side) - || !pos.equals(master.getBasePos())) { + || !master.containsPortalSpot(pos)) { level.removeBlock(pos, false); return; } if (!(level.getEntity(blockEntity.portalId) instanceof PortalGunPortalEntity portal) || portal.isRemoved() - || !pos.equals(portal.getBasePos()) + || !portal.containsPortalSpot(pos) || blockEntity.ownerId == null || !blockEntity.ownerId.equals(portal.getOwnerId()) || blockEntity.side != portal.getPortalSide()) { @@ -123,6 +158,7 @@ public class PortalGunPortalBaseBlockEntity extends BlockEntity { tag.putInt("MasterY", this.masterPos.getY()); tag.putInt("MasterZ", this.masterPos.getZ()); tag.putInt("PairTime", this.pairTime); + this.portalGun$saveFaceRecords(tag); } @Override @@ -134,6 +170,7 @@ public class PortalGunPortalBaseBlockEntity extends BlockEntity { this.side = tag.getInt("Side") == PortalGunPortalEntity.PortalSide.ORANGE.ordinal() ? PortalGunPortalEntity.PortalSide.ORANGE : PortalGunPortalEntity.PortalSide.BLUE; this.masterPos = new BlockPos(tag.getInt("MasterX"), tag.getInt("MasterY"), tag.getInt("MasterZ")); this.pairTime = tag.getInt("PairTime"); + this.portalGun$loadFaceRecords(tag); } @Override diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/PortalGunPortalCellAccess.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/PortalGunPortalCellAccess.java new file mode 100644 index 00000000..dae1363e --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/PortalGunPortalCellAccess.java @@ -0,0 +1,117 @@ +package com.craisinlord.antarchy.content.block.entity; + +import com.craisinlord.antarchy.content.portalgun.PortalGunPlacement; +import com.craisinlord.antarchy.content.portalgun.PortalGunSavedData; +import java.util.Map; +import java.util.UUID; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.Tag; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; + +public interface PortalGunPortalCellAccess { + Map portalGun$getFaceRecords(); + + default PortalGunPortalFaceRecord portalGun$getFaceRecord(Direction face) { + return this.portalGun$getFaceRecords().get(face); + } + + default PortalGunPortalFaceRecord portalGun$getFaceRecord(Direction face, UUID portalId) { + PortalGunPortalFaceRecord record = this.portalGun$getFaceRecord(face); + return record != null && record.portalId().equals(portalId) ? record : null; + } + + default boolean portalGun$putFaceRecord(PortalGunPortalFaceRecord record) { + PortalGunPortalFaceRecord existing = this.portalGun$getFaceRecord(record.face()); + if (existing != null + && (!java.util.Objects.equals(existing.gunId(), record.gunId()) + || existing.side() != record.side())) { + return false; + } + this.portalGun$getFaceRecords().put(record.face(), record); + if (this instanceof net.minecraft.world.level.block.entity.BlockEntity blockEntity) { + blockEntity.setChanged(); + } + return true; + } + + default PortalGunPortalFaceRecord portalGun$removeFaceRecord(Direction face, UUID portalId) { + PortalGunPortalFaceRecord existing = this.portalGun$getFaceRecord(face, portalId); + if (existing == null) { + return null; + } + PortalGunPortalFaceRecord removed = this.portalGun$getFaceRecords().remove(face); + if (this instanceof net.minecraft.world.level.block.entity.BlockEntity blockEntity) { + blockEntity.setChanged(); + } + return removed; + } + + default void portalGun$updateFacePair(UUID portalId, UUID linkedPortalId, int pairTime) { + for (PortalGunPortalFaceRecord record : java.util.List.copyOf(this.portalGun$getFaceRecords().values())) { + if (record.portalId().equals(portalId)) { + this.portalGun$putFaceRecord(record.withPair(linkedPortalId, pairTime)); + } + } + } + + default void portalGun$restoreMasterFaces(ServerLevel level, BlockPos pos) { + for (PortalGunPortalFaceRecord record : java.util.List.copyOf(this.portalGun$getFaceRecords().values())) { + if (record.ownerId() == null || record.portalId() == null) { + continue; + } + if (!PortalGunSavedData.isRegistered(level, record.gunId(), record.side(), record.portalId())) { + this.portalGun$removeFaceRecord(record.face(), record.portalId()); + continue; + } + if (!record.master() || !record.masterPos().equals(pos)) { + continue; + } + boolean complete = !record.portalSpots().isEmpty() && record.portalSpots().get(0).equals(record.masterPos()); + for (int i = 0; complete && i < record.portalSpots().size(); i++) { + BlockPos spot = record.portalSpots().get(i); + BlockPos support = spot.relative(record.face().getOpposite()); + if (!level.hasChunkAt(spot) || !level.hasChunkAt(support) + || !level.getBlockState(support).isFaceSturdy(level, support, record.face()) + || !(level.getBlockEntity(spot) instanceof PortalGunPortalCellAccess cell)) { + complete = false; + continue; + } + PortalGunPortalFaceRecord footprintRecord = cell.portalGun$getFaceRecord(record.face(), record.portalId()); + complete = footprintRecord != null && footprintRecord.master() == (i == 0); + } + complete = complete && PortalGunPlacement.isRectangularFootprint( + record.portalSpots().toArray(BlockPos[]::new), + record.face(), + record.upAxis(), + record.portalWidth(), + record.portalHeight() + ); + if (complete) { + PortalGunPortalMasterBlockEntity.restorePortalEntity(level, record); + } + } + } + + default void portalGun$saveFaceRecords(CompoundTag tag) { + ListTag faces = new ListTag(); + for (PortalGunPortalFaceRecord record : this.portalGun$getFaceRecords().values()) { + faces.add(record.save()); + } + tag.put("PortalFaces", faces); + } + + default void portalGun$loadFaceRecords(CompoundTag tag) { + Map records = this.portalGun$getFaceRecords(); + records.clear(); + ListTag faces = tag.getList("PortalFaces", Tag.TAG_COMPOUND); + for (int i = 0; i < faces.size(); i++) { + PortalGunPortalFaceRecord record = PortalGunPortalFaceRecord.load(faces.getCompound(i)); + if (record != null) { + records.put(record.face(), record); + } + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/PortalGunPortalFaceRecord.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/PortalGunPortalFaceRecord.java new file mode 100644 index 00000000..fd336042 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/PortalGunPortalFaceRecord.java @@ -0,0 +1,149 @@ +package com.craisinlord.antarchy.content.block.entity; + +import com.craisinlord.antarchy.content.portalgun.PortalGunPlacement; +import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; +import com.craisinlord.antarchy.content.portalgun.PortalGunVariant; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.UUID; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.Tag; + +public record PortalGunPortalFaceRecord( + UUID ownerId, + UUID gunId, + PortalGunVariant variant, + UUID portalId, + UUID linkedPortalId, + PortalGunPortalEntity.PortalSide side, + Direction face, + Direction upAxis, + BlockPos masterPos, + BlockPos basePos, + List portalSpots, + Set compensatedSpots, + int pairTime, + int portalWidth, + int portalHeight, + boolean master +) { + public PortalGunPortalFaceRecord { + masterPos = masterPos.immutable(); + basePos = basePos.immutable(); + portalSpots = portalSpots.stream().map(BlockPos::immutable).toList(); + compensatedSpots = Set.copyOf(compensatedSpots); + } + + public PortalGunPlacement placement() { + return PortalGunPlacement.fromStored(this.face, this.upAxis, this.masterPos, this.basePos, this.portalSpots.toArray(BlockPos[]::new), this.compensatedSpots, this.portalWidth, this.portalHeight); + } + + public PortalGunPortalFaceRecord withPair(UUID linkedPortalId, int pairTime) { + return new PortalGunPortalFaceRecord(this.ownerId, this.gunId, this.variant, this.portalId, linkedPortalId, this.side, this.face, this.upAxis, this.masterPos, this.basePos, this.portalSpots, this.compensatedSpots, pairTime, this.portalWidth, this.portalHeight, this.master); + } + + public PortalGunPortalFaceRecord withMaster(boolean master) { + return new PortalGunPortalFaceRecord(this.ownerId, this.gunId, this.variant, this.portalId, this.linkedPortalId, this.side, this.face, this.upAxis, this.masterPos, this.basePos, this.portalSpots, this.compensatedSpots, this.pairTime, this.portalWidth, this.portalHeight, master); + } + + public CompoundTag save() { + CompoundTag tag = new CompoundTag(); + tag.putUUID("OwnerId", this.ownerId); + if (this.gunId != null) { + tag.putUUID("GunId", this.gunId); + } + tag.putInt("Variant", this.variant.id()); + tag.putUUID("PortalId", this.portalId); + if (this.linkedPortalId != null) { + tag.putUUID("LinkedPortalId", this.linkedPortalId); + } + tag.putInt("Side", this.side.ordinal()); + tag.putInt("Face", this.face.get3DDataValue()); + tag.putInt("UpAxis", this.upAxis.get3DDataValue()); + putPos(tag, "Master", this.masterPos); + putPos(tag, "Base", this.basePos); + tag.putInt("PairTime", this.pairTime); + tag.putInt("PortalWidth", this.portalWidth); + tag.putInt("PortalHeight", this.portalHeight); + tag.putBoolean("MasterRole", this.master); + ListTag spots = new ListTag(); + for (BlockPos pos : this.portalSpots) { + spots.add(savePos(pos)); + } + tag.put("PortalSpots", spots); + ListTag compensated = new ListTag(); + for (BlockPos pos : this.compensatedSpots) { + compensated.add(savePos(pos)); + } + tag.put("CompensatedSpots", compensated); + return tag; + } + + public static PortalGunPortalFaceRecord load(CompoundTag tag) { + if (!tag.hasUUID("OwnerId") || !tag.hasUUID("PortalId")) { + return null; + } + ListTag spotsTag = tag.getList("PortalSpots", Tag.TAG_COMPOUND); + List spots = new java.util.ArrayList<>(spotsTag.size()); + for (int i = 0; i < spotsTag.size(); i++) { + spots.add(loadPos(spotsTag.getCompound(i))); + } + ListTag compensatedTag = tag.getList("CompensatedSpots", Tag.TAG_COMPOUND); + Set compensated = new HashSet<>(); + for (int i = 0; i < compensatedTag.size(); i++) { + compensated.add(loadPos(compensatedTag.getCompound(i))); + } + PortalGunPortalEntity.PortalSide side = tag.getInt("Side") == PortalGunPortalEntity.PortalSide.ORANGE.ordinal() + ? PortalGunPortalEntity.PortalSide.ORANGE + : PortalGunPortalEntity.PortalSide.BLUE; + int width = net.minecraft.util.Mth.clamp(tag.getInt("PortalWidth"), 1, 16); + int height = net.minecraft.util.Mth.clamp(tag.getInt("PortalHeight"), 2, 16); + return new PortalGunPortalFaceRecord( + tag.getUUID("OwnerId"), + tag.hasUUID("GunId") ? tag.getUUID("GunId") : null, + PortalGunVariant.byId(tag.getInt("Variant")), + tag.getUUID("PortalId"), + tag.hasUUID("LinkedPortalId") ? tag.getUUID("LinkedPortalId") : null, + side, + Direction.from3DDataValue(tag.getInt("Face")), + Direction.from3DDataValue(tag.getInt("UpAxis")), + getPos(tag, "Master"), + getPos(tag, "Base"), + spots, + compensated, + tag.getInt("PairTime"), + width, + height, + tag.getBoolean("MasterRole") + ); + } + + private static void putPos(CompoundTag tag, String key, BlockPos pos) { + CompoundTag value = new CompoundTag(); + value.putInt("X", pos.getX()); + value.putInt("Y", pos.getY()); + value.putInt("Z", pos.getZ()); + tag.put(key, value); + } + + private static BlockPos getPos(CompoundTag tag, String key) { + CompoundTag value = tag.getCompound(key); + return new BlockPos(value.getInt("X"), value.getInt("Y"), value.getInt("Z")); + } + + private static CompoundTag savePos(BlockPos pos) { + CompoundTag tag = new CompoundTag(); + tag.putInt("X", pos.getX()); + tag.putInt("Y", pos.getY()); + tag.putInt("Z", pos.getZ()); + return tag; + } + + private static BlockPos loadPos(CompoundTag tag) { + return new BlockPos(tag.getInt("X"), tag.getInt("Y"), tag.getInt("Z")); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/PortalGunPortalMasterBlockEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/PortalGunPortalMasterBlockEntity.java index 46047424..1a790a2c 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/PortalGunPortalMasterBlockEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/PortalGunPortalMasterBlockEntity.java @@ -4,15 +4,17 @@ import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; import com.craisinlord.antarchy.content.portalgun.PortalGunPlacement; import com.craisinlord.antarchy.content.portalgun.PortalGunSavedData; +import com.craisinlord.antarchy.content.portalgun.PortalGunVariant; import java.util.ArrayList; +import java.util.EnumMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.UUID; import java.util.function.Supplier; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import net.minecraft.nbt.Tag; @@ -30,14 +32,19 @@ import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.Vec3; -public class PortalGunPortalMasterBlockEntity extends BlockEntity { +public class PortalGunPortalMasterBlockEntity extends BlockEntity implements PortalGunPortalCellAccess { + private final Map faceRecords = new EnumMap<>(Direction.class); private UUID ownerId; + private UUID gunId; + private PortalGunVariant variant = PortalGunVariant.DEFAULT; private UUID portalId; private PortalGunPortalEntity.PortalSide side = PortalGunPortalEntity.PortalSide.BLUE; private Direction facing = Direction.NORTH; private Direction upAxis = Direction.UP; private BlockPos basePos = BlockPos.ZERO; private BlockPos[] portalSpots = new BlockPos[] {BlockPos.ZERO, BlockPos.ZERO}; + private int portalWidth = 1; + private int portalHeight = 2; private Set compensatedSpots = Set.of(); private UUID linkedPortalId; private int pairTime; @@ -48,6 +55,8 @@ public class PortalGunPortalMasterBlockEntity extends BlockEntity { public void configure( UUID ownerId, + UUID gunId, + PortalGunVariant variant, UUID portalId, PortalGunPortalEntity.PortalSide side, Direction facing, @@ -55,20 +64,32 @@ public class PortalGunPortalMasterBlockEntity extends BlockEntity { BlockPos basePos, BlockPos[] portalSpots, Set compensatedSpots, - int pairTime + int pairTime, + int portalWidth, + int portalHeight ) { this.ownerId = ownerId; + this.gunId = gunId; + this.variant = variant == null ? PortalGunVariant.DEFAULT : variant; this.portalId = portalId; this.side = side; this.facing = facing; this.upAxis = upAxis; this.basePos = basePos.immutable(); - this.portalSpots = new BlockPos[] {portalSpots[0].immutable(), portalSpots[1].immutable()}; + this.portalSpots = java.util.Arrays.stream(portalSpots).map(BlockPos::immutable).toArray(BlockPos[]::new); + this.portalWidth = portalWidth; + this.portalHeight = portalHeight; this.compensatedSpots = new HashSet<>(compensatedSpots); this.pairTime = pairTime; + this.portalGun$putFaceRecord(new PortalGunPortalFaceRecord(ownerId, gunId, this.variant, portalId, this.linkedPortalId, side, facing, upAxis, this.worldPosition, this.basePos, List.of(this.portalSpots), this.compensatedSpots, pairTime, portalWidth, portalHeight, true)); this.setChanged(); } + @Override + public Map portalGun$getFaceRecords() { + return this.faceRecords; + } + public UUID getPortalId() { return this.portalId; } @@ -77,6 +98,14 @@ public class PortalGunPortalMasterBlockEntity extends BlockEntity { return this.ownerId; } + public UUID getGunId() { + return this.gunId; + } + + public PortalGunVariant getVariant() { + return this.variant; + } + public PortalGunPortalEntity.PortalSide getSide() { return this.side; } @@ -94,7 +123,16 @@ public class PortalGunPortalMasterBlockEntity extends BlockEntity { } public BlockPos[] getPortalSpots() { - return new BlockPos[] {this.portalSpots[0], this.portalSpots[1]}; + return this.portalSpots.clone(); + } + + public boolean containsPortalSpot(BlockPos pos) { + for (BlockPos portalSpot : this.portalSpots) { + if (portalSpot.equals(pos)) { + return true; + } + } + return false; } public Set getCompensatedSpots() { @@ -112,6 +150,10 @@ public class PortalGunPortalMasterBlockEntity extends BlockEntity { public void updatePair(UUID linkedPortalId, int pairTime) { this.linkedPortalId = linkedPortalId; this.pairTime = pairTime; + PortalGunPortalFaceRecord record = this.portalGun$getFaceRecord(this.facing, this.portalId); + if (record != null) { + this.portalGun$putFaceRecord(record.withPair(linkedPortalId, pairTime)); + } this.setChanged(); } @@ -120,11 +162,20 @@ public class PortalGunPortalMasterBlockEntity extends BlockEntity { } public void onBroken() { - if (!(this.level instanceof ServerLevel serverLevel) || this.portalId == null) { + if (!(this.level instanceof ServerLevel serverLevel)) { return; } - if (serverLevel.getEntity(this.portalId) instanceof PortalGunPortalEntity portal && !portal.isRemoved()) { - portal.discard(); + Set portalIds = new HashSet<>(); + if (this.portalId != null) { + portalIds.add(this.portalId); + } + for (PortalGunPortalFaceRecord record : this.faceRecords.values()) { + portalIds.add(record.portalId()); + } + for (UUID id : portalIds) { + if (serverLevel.getEntity(id) instanceof PortalGunPortalEntity portal && !portal.isRemoved()) { + portal.discard(); + } } } @@ -132,6 +183,12 @@ public class PortalGunPortalMasterBlockEntity extends BlockEntity { if (((level.getGameTime() + pos.asLong()) & 15L) != 0L) { return; } + blockEntity.portalGun$restoreMasterFaces(level, pos); + if (blockEntity.portalId != null + && !(level.getEntity(blockEntity.portalId) instanceof PortalGunPortalEntity) + && blockEntity.faceRecords.values().stream().anyMatch(record -> !record.portalId().equals(blockEntity.portalId))) { + return; + } if (!blockEntity.hasValidFootprint(level, pos)) { level.removeBlock(pos, false); return; @@ -161,16 +218,24 @@ public class PortalGunPortalMasterBlockEntity extends BlockEntity { if (this.ownerId == null || this.portalId == null || !pos.equals(this.worldPosition)) { return false; } - if (!(level.getBlockEntity(this.basePos) instanceof PortalGunPortalBaseBlockEntity base) - || !base.matches(this.ownerId, this.portalId, this.side) - || !pos.equals(base.getMasterPos())) { + if (!PortalGunPlacement.isRectangularFootprint(this.portalSpots, this.facing, this.upAxis, this.portalWidth, this.portalHeight)) { return false; } - List supportPositions = new ArrayList<>(2); - for (BlockPos portalSpot : this.portalSpots) { + List supportPositions = new ArrayList<>(this.portalSpots.length); + for (int i = 0; i < this.portalSpots.length; i++) { + BlockPos portalSpot = this.portalSpots[i]; if (portalSpot == null || BlockPos.ZERO.equals(portalSpot)) { return false; } + if (i == 0) { + if (!portalSpot.equals(pos)) { + return false; + } + } else if (!(level.getBlockEntity(portalSpot) instanceof PortalGunPortalBaseBlockEntity base) + || !base.matches(this.ownerId, this.portalId, this.side) + || !pos.equals(base.getMasterPos())) { + return false; + } supportPositions.add(portalSpot.relative(this.facing.getOpposite())); } for (BlockPos supportPos : supportPositions) { @@ -186,23 +251,60 @@ public class PortalGunPortalMasterBlockEntity extends BlockEntity { if (this.portalId == null || this.ownerId == null) { return null; } + if (!PortalGunSavedData.isRegistered(level, this.gunId, this.side, this.portalId)) { + return null; + } if (level.getEntity(this.portalId) instanceof PortalGunPortalEntity portal && !portal.isRemoved()) { return portal; } + PortalGunPortalFaceRecord record = this.portalGun$getFaceRecord(this.facing, this.portalId); + if (record != null) { + return restorePortalEntity(level, record); + } EntityType rawType = BuiltInRegistries.ENTITY_TYPE.get(new ResourceLocation(Antarchy.MODID, "portal_gun_portal")); if (!(rawType instanceof EntityType)) { return null; } - PortalGunPlacement placement = PortalGunPlacement.fromStored(this.facing, this.upAxis, this.worldPosition, this.basePos, this.compensatedSpots); + PortalGunPlacement placement = PortalGunPlacement.fromStored(this.facing, this.upAxis, this.worldPosition, this.basePos, this.portalSpots, this.compensatedSpots, this.portalWidth, this.portalHeight); @SuppressWarnings("unchecked") PortalGunPortalEntity restored = new PortalGunPortalEntity((EntityType) rawType, level); restored.setUUID(this.portalId); - restored.configure(this.ownerId, this.side, placement); + restored.configure(this.ownerId, this.gunId, this.variant, this.side, placement); restored.restorePair(this.linkedPortalId, this.pairTime); Vec3 center = placement.center(); restored.moveTo(center.x, center.y, center.z, placement.yaw(), 0.0F); level.addFreshEntity(restored); - PortalGunSavedData.setPortal(level.getServer(), this.ownerId, this.side, restored.getUUID()); + PortalGunSavedData.setPortal(level, this.gunId, this.ownerId, this.side, restored.getUUID()); + return restored; + } + + public static PortalGunPortalEntity restorePortalEntity(ServerLevel level, PortalGunPortalFaceRecord record) { + if (record.ownerId() == null || record.portalId() == null + || !PortalGunSavedData.isRegistered(level, record.gunId(), record.side(), record.portalId())) { + return null; + } + if (level.getEntity(record.portalId()) instanceof PortalGunPortalEntity portal && !portal.isRemoved()) { + return portal; + } + EntityType rawType = BuiltInRegistries.ENTITY_TYPE.get(new ResourceLocation(Antarchy.MODID, "portal_gun_portal")); + if (rawType == null) { + return null; + } + PortalGunPlacement placement = record.placement(); + @SuppressWarnings("unchecked") + PortalGunPortalEntity restored = new PortalGunPortalEntity((EntityType) rawType, level); + restored.setUUID(record.portalId()); + restored.configure(record.ownerId(), record.gunId(), record.variant(), record.side(), placement); + restored.restorePair(record.linkedPortalId(), record.pairTime()); + Vec3 center = placement.center(); + restored.moveTo(center.x, center.y, center.z, placement.yaw(), 0.0F); + level.addFreshEntity(restored); + PortalGunSavedData.setPortal(level, record.gunId(), record.ownerId(), record.side(), restored.getUUID()); + PortalGunPortalEntity linked = PortalGunSavedData.findLoadedPortal(level, record.gunId(), record.side() == PortalGunPortalEntity.PortalSide.BLUE ? PortalGunPortalEntity.PortalSide.ORANGE : PortalGunPortalEntity.PortalSide.BLUE); + if (linked != null && linked != restored && !linked.isRemoved()) { + restored.linkTo(linked); + linked.linkTo(restored); + } return restored; } @@ -211,8 +313,8 @@ public class PortalGunPortalMasterBlockEntity extends BlockEntity { return; } PortalGunPortalEntity counterpart = PortalGunSavedData.findLoadedPortal( - level.getServer(), - this.ownerId, + level, + this.gunId, this.side == PortalGunPortalEntity.PortalSide.BLUE ? PortalGunPortalEntity.PortalSide.ORANGE : PortalGunPortalEntity.PortalSide.BLUE ); if (counterpart == null || counterpart == portal || counterpart.isRemoved()) { @@ -230,6 +332,10 @@ public class PortalGunPortalMasterBlockEntity extends BlockEntity { if (this.ownerId != null) { tag.putUUID("OwnerId", this.ownerId); } + if (this.gunId != null) { + tag.putUUID("GunId", this.gunId); + } + tag.putInt("Variant", this.variant.id()); if (this.portalId != null) { tag.putUUID("PortalId", this.portalId); } @@ -243,6 +349,8 @@ public class PortalGunPortalMasterBlockEntity extends BlockEntity { tag.putInt("BaseY", this.basePos.getY()); tag.putInt("BaseZ", this.basePos.getZ()); tag.putInt("PairTime", this.pairTime); + tag.putInt("PortalWidth", this.portalWidth); + tag.putInt("PortalHeight", this.portalHeight); ListTag spots = new ListTag(); for (BlockPos portalSpot : this.portalSpots) { CompoundTag spot = new CompoundTag(); @@ -261,12 +369,15 @@ public class PortalGunPortalMasterBlockEntity extends BlockEntity { compensated.add(spot); } tag.put("CompensatedSpots", compensated); + this.portalGun$saveFaceRecords(tag); } @Override public void load(CompoundTag tag) { super.load(tag); this.ownerId = tag.hasUUID("OwnerId") ? tag.getUUID("OwnerId") : null; + this.gunId = tag.hasUUID("GunId") ? tag.getUUID("GunId") : null; + this.variant = PortalGunVariant.byId(tag.getInt("Variant")); this.portalId = tag.hasUUID("PortalId") ? tag.getUUID("PortalId") : null; this.linkedPortalId = tag.hasUUID("LinkedPortalId") ? tag.getUUID("LinkedPortalId") : null; this.side = tag.getInt("Side") == PortalGunPortalEntity.PortalSide.ORANGE.ordinal() ? PortalGunPortalEntity.PortalSide.ORANGE : PortalGunPortalEntity.PortalSide.BLUE; @@ -275,10 +386,15 @@ public class PortalGunPortalMasterBlockEntity extends BlockEntity { this.basePos = new BlockPos(tag.getInt("BaseX"), tag.getInt("BaseY"), tag.getInt("BaseZ")); this.pairTime = tag.getInt("PairTime"); ListTag spots = tag.getList("PortalSpots", Tag.TAG_COMPOUND); - for (int i = 0; i < Math.min(2, spots.size()); i++) { + if (!spots.isEmpty()) { + this.portalSpots = new BlockPos[spots.size()]; + } + for (int i = 0; i < spots.size(); i++) { CompoundTag spot = spots.getCompound(i); this.portalSpots[i] = new BlockPos(spot.getInt("X"), spot.getInt("Y"), spot.getInt("Z")); } + this.portalWidth = net.minecraft.util.Mth.clamp(tag.getInt("PortalWidth"), 1, 16); + this.portalHeight = net.minecraft.util.Mth.clamp(tag.getInt("PortalHeight"), 2, 16); ListTag compensated = tag.getList("CompensatedSpots", Tag.TAG_COMPOUND); Set compensatedSpots = new HashSet<>(); for (int i = 0; i < compensated.size(); i++) { @@ -286,6 +402,10 @@ public class PortalGunPortalMasterBlockEntity extends BlockEntity { compensatedSpots.add(new BlockPos(spot.getInt("X"), spot.getInt("Y"), spot.getInt("Z"))); } this.compensatedSpots = compensatedSpots; + this.portalGun$loadFaceRecords(tag); + if (this.faceRecords.isEmpty() && this.ownerId != null && this.portalId != null && this.portalSpots.length > 0) { + this.portalGun$putFaceRecord(new PortalGunPortalFaceRecord(this.ownerId, this.gunId, this.variant, this.portalId, this.linkedPortalId, this.side, this.facing, this.upAxis, this.worldPosition, this.basePos, List.of(this.portalSpots), this.compensatedSpots, this.pairTime, this.portalWidth, this.portalHeight, true)); + } } @Override diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/PotentNyxiteBlockEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/PotentNyxiteBlockEntity.java index de51f1b5..6121a467 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/PotentNyxiteBlockEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/PotentNyxiteBlockEntity.java @@ -6,9 +6,9 @@ import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.block.PotentNyxiteBlock; import com.craisinlord.antarchy.content.block.state.PotentNyxiteState; import com.craisinlord.antarchy.content.fluid.AntarchyFluidChecks; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; +import com.craisinlord.anthology.gravity.GravityRotationUtil; import com.craisinlord.antarchy.content.client.particle.InvertedGeyserParticleOptions; import java.util.List; import java.util.function.Predicate; @@ -333,9 +333,9 @@ public class PotentNyxiteBlockEntity extends BlockEntity { continue; } - AntarchyGravityDirection gravityDirection = AntarchyGravityApi.getGravityDirection(entity); + GravityDirection gravityDirection = GravityApi.getGravityDirection(entity); Vec3 currentWorldVelocity = gravityDirection.isInverted() - ? AntarchyGravityRotationUtil.vecPlayerToWorld(entity.getDeltaMovement(), gravityDirection) + ? GravityRotationUtil.vecPlayerToWorld(entity.getDeltaMovement(), gravityDirection) : entity.getDeltaMovement(); double axisVelocity = currentWorldVelocity.y * eruptionDirection.getStepY(); @@ -343,7 +343,7 @@ public class PotentNyxiteBlockEntity extends BlockEntity { Vec3 nextWorldVelocity = currentWorldVelocity.add(worldPush); entity.setDeltaMovement( gravityDirection.isInverted() - ? AntarchyGravityRotationUtil.vecWorldToPlayer(nextWorldVelocity, gravityDirection) + ? GravityRotationUtil.vecWorldToPlayer(nextWorldVelocity, gravityDirection) : nextWorldVelocity ); entity.hurtMarked = true; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/QueenTrailSpawnMarkerBlockEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/QueenTrailSpawnMarkerBlockEntity.java index ceab2def..0a9f03aa 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/QueenTrailSpawnMarkerBlockEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/QueenTrailSpawnMarkerBlockEntity.java @@ -10,6 +10,7 @@ import net.minecraft.world.Difficulty; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; +import org.jetbrains.annotations.Nullable; public final class QueenTrailSpawnMarkerBlockEntity extends BlockEntity { private static final double ACTIVATION_DISTANCE_SQUARED = 96.0D * 96.0D; @@ -19,11 +20,11 @@ public final class QueenTrailSpawnMarkerBlockEntity extends BlockEntity { private float yaw; private boolean configured; private boolean consumed; + @Nullable private UUID queenUuid; - public QueenTrailSpawnMarkerBlockEntity(BlockPos pos, BlockState state, - Supplier> type) { - super(type.get(), pos, state); + public QueenTrailSpawnMarkerBlockEntity(BlockPos pos, BlockState state, Supplier> typeSupplier) { + super(typeSupplier.get(), pos, state); } public void configure(long siteId, BlockPos spawnPos, BlockPos homePos, float yaw) { @@ -32,52 +33,109 @@ public final class QueenTrailSpawnMarkerBlockEntity extends BlockEntity { this.homePos = homePos.immutable(); this.yaw = yaw; this.configured = true; - setChanged(); + this.setChanged(); } - public long getSiteId() { return siteId; } - public BlockPos getSpawnPos() { return spawnPos; } - public boolean isConfigured() { return configured; } + public long getSiteId() { + return this.siteId; + } + + public BlockPos getSpawnPos() { + return this.spawnPos; + } + + public boolean isConfigured() { + return this.configured; + } + + public boolean isConsumed() { + return this.consumed; + } public static void serverTick(ServerLevel level, QueenTrailSpawnMarkerBlockEntity marker) { - if (!marker.configured || marker.consumed || level.getDifficulty() == Difficulty.PEACEFUL) return; - if (Math.floorMod(level.getGameTime(), 20L) != Math.floorMod(marker.siteId, 20L)) return; - boolean nearby = level.players().stream().anyMatch(player -> !player.isSpectator() - && player.distanceToSqr(marker.spawnPos.getX() + .5D, marker.spawnPos.getY() + .5D, - marker.spawnPos.getZ() + .5D) <= ACTIVATION_DISTANCE_SQUARED); - if (!nearby) return; - for (int chunkX = (marker.spawnPos.getX() - 16) >> 4; chunkX <= (marker.spawnPos.getX() + 16) >> 4; chunkX++) - for (int chunkZ = (marker.spawnPos.getZ() - 16) >> 4; chunkZ <= (marker.spawnPos.getZ() + 16) >> 4; chunkZ++) + if (!marker.configured || marker.consumed || level.getDifficulty() == Difficulty.PEACEFUL) { + return; + } + if (Math.floorMod(level.getGameTime(), 20L) != Math.floorMod(marker.siteId, 20L)) { + return; + } + boolean nearbyPlayer = level.players().stream().anyMatch(player -> !player.isSpectator() + && player.distanceToSqr(marker.spawnPos.getX() + 0.5D, marker.spawnPos.getY() + 0.5D, marker.spawnPos.getZ() + 0.5D) <= ACTIVATION_DISTANCE_SQUARED); + if (!nearbyPlayer) { + return; + } + for (int chunkX = (marker.spawnPos.getX() - 16) >> 4; chunkX <= (marker.spawnPos.getX() + 16) >> 4; chunkX++) { + for (int chunkZ = (marker.spawnPos.getZ() - 16) >> 4; chunkZ <= (marker.spawnPos.getZ() + 16) >> 4; chunkZ++) { level.getChunk(chunkX, chunkZ); - QueenEntity queen = QueenEntity.spawnFromUndersideTrail(level, marker.spawnPos, marker.homePos, marker.siteId, marker.yaw); + } + } + marker.spawnNow(level); + } + + @Nullable + public QueenEntity spawnNow(ServerLevel level) { + if (!this.configured) { + return null; + } + if (this.consumed) { + if (this.queenUuid != null && level.getEntity(this.queenUuid) instanceof QueenEntity queen) { + return queen; + } + return null; + } + for (int chunkX = (this.spawnPos.getX() - 16) >> 4; chunkX <= (this.spawnPos.getX() + 16) >> 4; chunkX++) { + for (int chunkZ = (this.spawnPos.getZ() - 16) >> 4; chunkZ <= (this.spawnPos.getZ() + 16) >> 4; chunkZ++) { + level.getChunk(chunkX, chunkZ); + } + } + QueenEntity queen = QueenEntity.spawnFromUndersideTrail(level, this.spawnPos, this.homePos, this.siteId, this.yaw); + if (queen == null) { + for (int radius = 2; radius <= 10 && queen == null; radius += 2) { + for (int dx = -radius; dx <= radius && queen == null; dx += radius) { + for (int dz = -radius; dz <= radius && queen == null; dz += radius) { + BlockPos candidate = this.spawnPos.offset(dx, 0, dz); + if (candidate.equals(this.spawnPos)) { + continue; + } + queen = QueenEntity.spawnFromUndersideTrail(level, candidate, this.homePos, this.siteId, this.yaw); + if (queen != null) { + this.spawnPos = candidate.immutable(); + } + } + } + } + } if (queen != null) { - marker.consumed = true; - marker.queenUuid = queen.getUUID(); - marker.setChanged(); + this.consumed = true; + this.queenUuid = queen.getUUID(); + this.setChanged(); + } + return queen; + } + + @Override + protected void saveAdditional(CompoundTag tag) { + super.saveAdditional(tag); + tag.putLong("site_id", this.siteId); + tag.putLong("spawn_pos", this.spawnPos.asLong()); + tag.putLong("home_pos", this.homePos.asLong()); + tag.putFloat("yaw", this.yaw); + tag.putBoolean("configured", this.configured); + tag.putBoolean("consumed", this.consumed); + if (this.queenUuid != null) { + tag.putUUID("queen_uuid", this.queenUuid); } } @Override public void load(CompoundTag tag) { super.load(tag); - siteId = tag.getLong("site_id"); - spawnPos = BlockPos.of(tag.getLong("spawn_pos")); - homePos = BlockPos.of(tag.getLong("home_pos")); - yaw = tag.getFloat("yaw"); - configured = tag.getBoolean("configured"); - consumed = tag.getBoolean("consumed"); - queenUuid = tag.hasUUID("queen_uuid") ? tag.getUUID("queen_uuid") : null; - } - - @Override - protected void saveAdditional(CompoundTag tag) { - super.saveAdditional(tag); - tag.putLong("site_id", siteId); - tag.putLong("spawn_pos", spawnPos.asLong()); - tag.putLong("home_pos", homePos.asLong()); - tag.putFloat("yaw", yaw); - tag.putBoolean("configured", configured); - tag.putBoolean("consumed", consumed); - if (queenUuid != null) tag.putUUID("queen_uuid", queenUuid); + this.siteId = tag.getLong("site_id"); + this.spawnPos = BlockPos.of(tag.getLong("spawn_pos")); + this.homePos = BlockPos.of(tag.getLong("home_pos")); + this.yaw = tag.getFloat("yaw"); + this.configured = tag.getBoolean("configured"); + this.consumed = tag.getBoolean("consumed"); + this.queenUuid = tag.hasUUID("queen_uuid") ? tag.getUUID("queen_uuid") : null; } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/UnderVaultBlockEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/UnderVaultBlockEntity.java index 2bc2a91c..c4197484 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/UnderVaultBlockEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/UnderVaultBlockEntity.java @@ -1,10 +1,18 @@ package com.craisinlord.antarchy.content.block.entity; import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.block.UnderVaultBlock; +import com.craisinlord.antarchy.content.block.entity.undervault.UnderVaultConfig; +import com.craisinlord.antarchy.content.block.entity.undervault.UnderVaultData; +import com.craisinlord.antarchy.content.block.entity.undervault.UnderVaultLogic; +import com.craisinlord.antarchy.content.block.entity.undervault.UnderVaultState; import net.minecraft.core.BlockPos; -import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.particles.SimpleParticleType; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.player.Player; @@ -12,72 +20,87 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; -import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; -import net.minecraft.world.level.storage.loot.LootParams; -import net.minecraft.world.level.storage.loot.LootTable; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; -import net.minecraft.core.Direction; -import net.minecraft.core.dispenser.DefaultDispenseItemBehavior; +import java.util.Optional; import java.util.function.Supplier; public final class UnderVaultBlockEntity extends BlockEntity { - private boolean unlocked; + private final UnderVaultData vaultData; + private boolean playerWasNearby; - public UnderVaultBlockEntity(BlockPos pos, net.minecraft.world.level.block.state.BlockState state, - Supplier> type) { + public UnderVaultBlockEntity(BlockPos pos, BlockState state, Supplier> type) { super(type.get(), pos, state); + this.vaultData = new UnderVaultData(); + this.vaultData.setConfig(createConfig()); } - public static void tick(Level level, BlockPos pos, net.minecraft.world.level.block.state.BlockState state, - UnderVaultBlockEntity blockEntity) { - if (level.isClientSide && state.getValue(com.craisinlord.antarchy.content.block.UnderVaultBlock.ACTIVE) - && level.random.nextInt(4) == 0) { + private static UnderVaultConfig createConfig() { + return new UnderVaultConfig(new ResourceLocation(Antarchy.MODID, "chests/undertrial_vault"), 4.0D, 4.0D, + new ItemStack(BuiltInRegistries.ITEM.get(new ResourceLocation(Antarchy.MODID, "undertrial_key"))), + Optional.empty()); + } + + public static void serverTick(ServerLevel level, BlockPos pos, BlockState state, UnderVaultBlockEntity blockEntity) { + blockEntity.vaultData.setLevel(level); + boolean playerNearby = !level.getEntitiesOfClass(Player.class, new AABB(pos).inflate(4.0D), player -> !player.isSpectator()).isEmpty(); + if (state.getValue(UnderVaultBlock.STATE) == UnderVaultState.INACTIVE && playerNearby && !blockEntity.playerWasNearby) { + state = state.setValue(UnderVaultBlock.STATE, UnderVaultState.ACTIVE); + level.setBlockAndUpdate(pos, state); + } + blockEntity.playerWasNearby = playerNearby; + UnderVaultLogic.Server.tick(level, pos, state, blockEntity.vaultData.getConfig(), blockEntity.vaultData.getServerData(), blockEntity.vaultData.getSharedData()); + } + + public static void clientTick(Level level, BlockPos pos, BlockState state, UnderVaultBlockEntity blockEntity) { + blockEntity.vaultData.setLevel(level); + UnderVaultLogic.Client.tick(level, pos, state, blockEntity.vaultData.getClientData(), blockEntity.vaultData.getSharedData()); + UnderVaultState vaultState = state.getValue(UnderVaultBlock.STATE); + if (level.isClientSide && level.random.nextInt(4) == 0 + && (vaultState == UnderVaultState.ACTIVE || vaultState == UnderVaultState.UNLOCKING)) { Player player = level.getNearestPlayer(pos.getX() + 0.5D, pos.getY() + 0.5D, pos.getZ() + 0.5D, 8.0D, false); if (player != null) { Vec3 start = Vec3.atCenterOf(pos); Vec3 end = player.position().add(0.0D, player.getBbHeight() * 0.5D, 0.0D); - Vec3 point = start.lerp(end, 0.15D + level.random.nextDouble() * 0.7D); - level.addParticle(particle("undervault_connection"), point.x, point.y, point.z, 0.0D, 0.0D, 0.0D); + double progress = 0.15D + level.random.nextDouble() * 0.7D; + Vec3 point = start.lerp(end, progress); + level.addParticle((SimpleParticleType) BuiltInRegistries.PARTICLE_TYPE.get(new ResourceLocation(Antarchy.MODID, "undervault_connection")), point.x, point.y, point.z, 0.0D, 0.0D, 0.0D); } } } - private static SimpleParticleType particle(String id) { - return (SimpleParticleType) BuiltInRegistries.PARTICLE_TYPE.get(new ResourceLocation(Antarchy.MODID, id)); - } - - public boolean unlock(ServerLevel level, BlockPos pos, Player player, ItemStack key) { - if (unlocked) { - return false; - } - if (!player.getAbilities().instabuild) { - key.shrink(1); - } - LootTable table = level.getServer().getLootData().getLootTable( - new ResourceLocation(Antarchy.MODID, "chests/undertrial_vault")); - LootParams params = new LootParams.Builder(level).withParameter( - net.minecraft.world.level.storage.loot.parameters.LootContextParams.ORIGIN, - Vec3.atCenterOf(pos)).create(LootContextParamSets.CHEST); - for (ItemStack stack : table.getRandomItems(params)) { - DefaultDispenseItemBehavior.spawnItem(level, stack, 2, Direction.DOWN, - Vec3.atBottomCenterOf(pos).relative(Direction.DOWN, 1.2D)); - } - unlocked = true; - setChanged(); - level.levelEvent(3011, pos, 0); - return true; + @Override + public void setLevel(Level level) { + super.setLevel(level); + this.vaultData.setLevel(level); } @Override public void load(CompoundTag tag) { super.load(tag); - unlocked = tag.getBoolean("Unlocked"); + vaultData.load(tag); + vaultData.setConfig(createConfig()); } @Override protected void saveAdditional(CompoundTag tag) { super.saveAdditional(tag); - tag.putBoolean("Unlocked", unlocked); + tag.merge(vaultData.save()); + } + + @Override + public CompoundTag getUpdateTag() { + return vaultData.save(); + } + + @Override + public Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } + + public UnderVaultData getVaultData() { + return vaultData; } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/UndertrialSpawnContext.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/UndertrialSpawnContext.java new file mode 100644 index 00000000..6c2f3a17 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/UndertrialSpawnContext.java @@ -0,0 +1,38 @@ +package com.craisinlord.antarchy.content.block.entity; + +import net.minecraft.world.entity.MobSpawnType; + +public final class UndertrialSpawnContext implements AutoCloseable { + private static final ThreadLocal DEPTH = ThreadLocal.withInitial(() -> 0); + + private boolean closed; + + private UndertrialSpawnContext() { + DEPTH.set(DEPTH.get() + 1); + } + + public static UndertrialSpawnContext enter() { + return new UndertrialSpawnContext(); + } + + public static boolean isActive() { + return DEPTH.get() > 0; + } + + public static boolean isTrialSpawn(MobSpawnType spawnReason) { + return spawnReason == MobSpawnType.SPAWNER && isActive(); + } + + @Override + public void close() { + if (!closed) { + closed = true; + int depth = DEPTH.get() - 1; + if (depth <= 0) { + DEPTH.remove(); + } else { + DEPTH.set(depth); + } + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/UndertrialSpawnerBlockEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/UndertrialSpawnerBlockEntity.java index a27372a3..a95dd9b1 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/UndertrialSpawnerBlockEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/UndertrialSpawnerBlockEntity.java @@ -1,113 +1,242 @@ package com.craisinlord.antarchy.content.block.entity; import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.block.UndertrialSpawnerBlock; +import com.craisinlord.antarchy.content.block.entity.undertrial.UndertrialPlayerDetector; +import com.craisinlord.antarchy.content.block.entity.undertrial.UndertrialSpawner; +import com.craisinlord.antarchy.content.block.entity.undertrial.UndertrialSpawnerConfig; +import com.craisinlord.antarchy.content.block.entity.undertrial.UndertrialSpawnerEffects; +import com.craisinlord.antarchy.content.block.entity.undertrial.UndertrialSpawnerState; +import com.craisinlord.anthology.effect.AnthologyEffects; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.dispenser.DefaultDispenseItemBehavior; import net.minecraft.core.particles.SimpleParticleType; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.Tag; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.random.SimpleWeightedRandomList; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.Mob; -import net.minecraft.world.entity.monster.Zombie; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; import net.minecraft.world.level.storage.loot.LootParams; import net.minecraft.world.level.storage.loot.LootTable; -import net.minecraft.world.level.storage.loot.parameters.LootContextParam; +import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; -import net.minecraft.core.dispenser.DefaultDispenseItemBehavior; -import java.util.List; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; import java.util.function.Supplier; -public final class UndertrialSpawnerBlockEntity extends BlockEntity { - private static final String COOLDOWN_TAG = "Cooldown"; - private static final String WAVES_TAG = "Waves"; - private static final int MAX_WAVES = 6; - private int cooldown; - private int waves; +public final class UndertrialSpawnerBlockEntity extends BlockEntity implements UndertrialSpawner.StateAccessor { + private static final String SPAWNER_TAG = "trial_spawner"; + private static final int DEFAULT_TARGET_COOLDOWN_LENGTH = 36000; + private static final int EFFECT_DURATION = 3600; + private UndertrialSpawner trialSpawner; + private UndertrialSpawnerState previousClientState; + private double clientSpin; + private double clientOldSpin; + private SimpleWeightedRandomList normalLootTables = SimpleWeightedRandomList.empty(); + private SimpleWeightedRandomList ominousLootTables = SimpleWeightedRandomList.empty(); + private Tag normalLootTablesTag; + private Tag ominousLootTablesTag; - public UndertrialSpawnerBlockEntity(BlockPos pos, BlockState state, - Supplier> type) { + public UndertrialSpawnerBlockEntity(BlockPos pos, BlockState state, Supplier> type) { super(type.get(), pos, state); + this.trialSpawner = new UndertrialSpawner(this, UndertrialPlayerDetector.INCLUDING_CREATIVE_PLAYERS, + UndertrialPlayerDetector.EntitySelector.SELECT_FROM_LEVEL); + this.trialSpawner.overridePeacefulAndMobSpawnRule(); + this.previousClientState = state.getValue(UndertrialSpawnerBlock.STATE); } - public static void tick(Level level, BlockPos pos, BlockState state, UndertrialSpawnerBlockEntity blockEntity) { - if (!(level instanceof ServerLevel serverLevel)) { - if (level.isClientSide && state.getValue(UndertrialSpawnerBlock.ACTIVE) - && level.random.nextInt(2) == 0) { - level.addParticle(particle("undertrial_omen"), pos.getX() + 0.5D + (level.random.nextDouble() - 0.5D) * 0.7D, + public static void serverTick(ServerLevel level, BlockPos pos, BlockState state, UndertrialSpawnerBlockEntity blockEntity) { + Set before = new HashSet<>(); + for (Mob mob : level.getEntitiesOfClass(Mob.class, new AABB(pos).inflate(16.0D))) { + before.add(mob.getUUID()); + } + UndertrialSpawnerState previousState = blockEntity.getState(); + boolean ominous = state.getValue(UndertrialSpawnerBlock.OMINOUS); + boolean rewardReady = previousState == UndertrialSpawnerState.EJECTING_REWARD + && blockEntity.trialSpawner.getData().isReadyToEjectItems(level, 30.0F, blockEntity.trialSpawner.getTargetCooldownLength()); + try (UndertrialSpawnContext ignored = UndertrialSpawnContext.enter()) { + blockEntity.trialSpawner.tickServer(level, pos, ominous); + } + if (rewardReady && blockEntity.getState() == UndertrialSpawnerState.EJECTING_REWARD) { + blockEntity.ejectReward(level, pos, ominous); + } + for (Mob mob : level.getEntitiesOfClass(Mob.class, new AABB(pos).inflate(16.0D))) { + if (!before.contains(mob.getUUID())) { + blockEntity.applyUndertrialEffects(mob); + } + } + } + + public static void clientTick(Level level, BlockPos pos, BlockState state, UndertrialSpawnerBlockEntity blockEntity) { + UndertrialSpawnerState currentState = state.getValue(UndertrialSpawnerBlock.STATE); + blockEntity.clientOldSpin = blockEntity.clientSpin; + if (currentState == UndertrialSpawnerState.ACTIVE || currentState == UndertrialSpawnerState.WAITING_FOR_REWARD_EJECTION) { + blockEntity.clientSpin = (blockEntity.clientSpin + 4.0D) % 360.0D; + } + if (currentState == UndertrialSpawnerState.ACTIVE || currentState == UndertrialSpawnerState.WAITING_FOR_REWARD_EJECTION) { + if (level.random.nextInt(2) == 0) { + level.addParticle(blockEntity.particle("undertrial_omen"), pos.getX() + 0.5D + (level.random.nextDouble() - 0.5D) * 0.7D, pos.getY() + 0.45D + level.random.nextDouble() * 0.35D, pos.getZ() + 0.5D + (level.random.nextDouble() - 0.5D) * 0.7D, 0.0D, 0.01D, 0.0D); } - return; - } - if (blockEntity.cooldown > 0) { - blockEntity.cooldown--; - return; - } - if (!state.getValue(UndertrialSpawnerBlock.ACTIVE)) { - return; - } - if (serverLevel.getNearestPlayer(pos.getX() + 0.5D, pos.getY() - 0.5D, pos.getZ() + 0.5D, 16.0D, false) == null) { - return; - } - long livingTrialMobs = serverLevel.getEntitiesOfClass(Mob.class, new AABB(pos).inflate(16.0D), - mob -> mob.getTags().contains("antarchy_undertrial_mob")).size(); - if (livingTrialMobs > 0) { - return; - } - if (blockEntity.waves >= MAX_WAVES) { - blockEntity.ejectReward(serverLevel, pos); - serverLevel.setBlock(pos, state.setValue(UndertrialSpawnerBlock.ACTIVE, false), 3); - return; - } - Zombie zombie = EntityType.ZOMBIE.create(serverLevel); - if (zombie != null) { - zombie.moveTo(pos.getX() + 0.5D, pos.getY() - 1.0D, pos.getZ() + 0.5D, - serverLevel.random.nextFloat() * 360.0F, 0.0F); - zombie.addTag("antarchy_undertrial_mob"); - serverLevel.addFreshEntity(zombie); - blockEntity.waves++; - blockEntity.cooldown = 80; - blockEntity.setChanged(); + } else if (currentState == UndertrialSpawnerState.WAITING_FOR_PLAYERS && blockEntity.previousClientState != currentState) { + ResourceLocation detectionSound = new ResourceLocation(Antarchy.MODID, + level.random.nextBoolean() ? "undertrial_detect_player1" : "undertrial_detect_player2"); + level.playSound(null, pos, BuiltInRegistries.SOUND_EVENT.get(detectionSound), + net.minecraft.sounds.SoundSource.BLOCKS, 1.0F, 1.0F); + for (int i = 0; i < 12; i++) { + level.addParticle(blockEntity.particle("undertrial_spawner_detection"), pos.getX() + 0.5D + (level.random.nextDouble() - 0.5D) * 1.4D, + pos.getY() + 0.15D + level.random.nextDouble() * 0.7D, + pos.getZ() + 0.5D + (level.random.nextDouble() - 0.5D) * 1.4D, 0.0D, 0.0D, 0.0D); + } } + blockEntity.previousClientState = currentState; } - private static SimpleParticleType particle(String id) { + private SimpleParticleType particle(String id) { return (SimpleParticleType) BuiltInRegistries.PARTICLE_TYPE.get(new ResourceLocation(Antarchy.MODID, id)); } - private void ejectReward(ServerLevel level, BlockPos pos) { - ResourceLocation id = new ResourceLocation(Antarchy.MODID, "spawners/undertrial"); - LootTable table = level.getServer().getLootData().getLootTable(id); - LootParams params = new LootParams.Builder(level).create(LootContextParamSets.EMPTY); - for (ItemStack stack : table.getRandomItems(params)) { - DefaultDispenseItemBehavior.spawnItem(level, stack, 2, Direction.DOWN, - Vec3.atBottomCenterOf(pos).relative(Direction.DOWN, 1.2D)); + private void applyUndertrialEffects(Mob mob) { + mob.addEffect(new MobEffectInstance(AntarchyObjects.INVERTED_EFFECT.get(), EFFECT_DURATION, 0, false, true, true)); + int roll = mob.getRandom().nextInt(100); + if (roll < 30) { + mob.addEffect(new MobEffectInstance(AnthologyEffects.contracted(), EFFECT_DURATION, 0, false, true, true)); + } else if (roll < 50) { + mob.addEffect(new MobEffectInstance(effect("shrinking"), EFFECT_DURATION, 0, false, true, true)); + } else if (roll < 65) { + mob.addEffect(new MobEffectInstance(effect("growth"), EFFECT_DURATION, 0, false, true, true)); } - level.levelEvent(3014, pos, 0); + } + + private static MobEffect effect(String path) { + MobEffect effect = BuiltInRegistries.MOB_EFFECT.get(new ResourceLocation(Antarchy.MODID, path)); + if (effect == null) { + throw new IllegalStateException("Missing mob effect " + Antarchy.MODID + ":" + path); + } + return effect; } @Override public void load(CompoundTag tag) { super.load(tag); - cooldown = tag.getInt(COOLDOWN_TAG); - waves = tag.getInt(WAVES_TAG); + Tag spawnerTag = tag.contains(SPAWNER_TAG) ? tag.get(SPAWNER_TAG) : tag; + if (spawnerTag instanceof CompoundTag compound) { + UndertrialSpawner decoded = trialSpawner.load(compound); + captureLootTables(decoded, spawnerTag); + trialSpawner = createRewardlessSpawner(decoded); + } + } + + @Override + public CompoundTag getUpdateTag() { + CompoundTag tag = new CompoundTag(); + saveAdditional(tag); + return tag; } @Override protected void saveAdditional(CompoundTag tag) { super.saveAdditional(tag); - tag.putInt(COOLDOWN_TAG, cooldown); - tag.putInt(WAVES_TAG, waves); + CompoundTag spawnerTag = trialSpawner.save(); + if (normalLootTablesTag != null) { + spawnerTag.getCompound(UndertrialSpawner.NORMAL_CONFIG_TAG_NAME).put("loot_tables_to_eject", normalLootTablesTag.copy()); + } + if (ominousLootTablesTag != null) { + spawnerTag.getCompound(UndertrialSpawner.OMINOUS_CONFIG_TAG_NAME).put("loot_tables_to_eject", ominousLootTablesTag.copy()); + } + tag.put(SPAWNER_TAG, spawnerTag); + } + + @Override + public void setState(Level level, UndertrialSpawnerState state) { + level.setBlockAndUpdate(worldPosition, getBlockState().setValue(UndertrialSpawnerBlock.STATE, state)); + } + + @Override + public UndertrialSpawnerState getState() { + return getBlockState().getValue(UndertrialSpawnerBlock.STATE); + } + + @Override + public void markUpdated() { + setChanged(); + if (level != null) { + level.sendBlockUpdated(worldPosition, getBlockState(), getBlockState(), 3); + } + } + + public UndertrialSpawner getTrialSpawner() { + return trialSpawner; + } + + public void setSpawnEntity(EntityType entityType) { + if (this.level == null) { + return; + } + this.trialSpawner.getData().setEntityId(this.trialSpawner, this.level.random, entityType); + this.markUpdated(); + } + + public double getClientSpin(float partialTick) { + return this.clientOldSpin + (this.clientSpin - this.clientOldSpin) * partialTick; + } + + private void captureLootTables(UndertrialSpawner source, Tag spawnerTag) { + normalLootTables = source.getNormalConfig().lootTablesToEject(); + ominousLootTables = source.getOminousConfig().lootTablesToEject(); + if (spawnerTag instanceof CompoundTag compound) { + CompoundTag normalConfig = compound.getCompound(UndertrialSpawner.NORMAL_CONFIG_TAG_NAME); + CompoundTag ominousConfig = compound.getCompound(UndertrialSpawner.OMINOUS_CONFIG_TAG_NAME); + normalLootTablesTag = normalConfig.get("loot_tables_to_eject"); + ominousLootTablesTag = ominousConfig.get("loot_tables_to_eject"); + } + } + + private UndertrialSpawner createRewardlessSpawner(UndertrialSpawner source) { + UndertrialSpawner rewardless = new UndertrialSpawner(withoutLootTables(source.getNormalConfig()), withoutLootTables(source.getOminousConfig()), + source.getData(), targetCooldownLength(source), source.getRequiredPlayerRange(), this, + source.getPlayerDetector(), source.getEntitySelector()); + rewardless.overridePeacefulAndMobSpawnRule(); + return rewardless; + } + + private static int targetCooldownLength(UndertrialSpawner source) { + int targetCooldownLength = source.getTargetCooldownLength(); + return targetCooldownLength > 0 ? targetCooldownLength : DEFAULT_TARGET_COOLDOWN_LENGTH; + } + + private static UndertrialSpawnerConfig withoutLootTables(UndertrialSpawnerConfig config) { + return new UndertrialSpawnerConfig(config.spawnRange(), config.totalMobs(), config.simultaneousMobs(), + config.totalMobsAddedPerPlayer(), config.simultaneousMobsAddedPerPlayer(), config.ticksBetweenSpawn(), + config.spawnPotentialsDefinition(), SimpleWeightedRandomList.empty(), config.itemsToDropWhenOminous()); + } + + private void ejectReward(ServerLevel level, BlockPos pos, boolean ominous) { + SimpleWeightedRandomList lootTables = ominous ? ominousLootTables : normalLootTables; + lootTables.getRandomValue(level.getRandom()).ifPresent(key -> { + LootTable lootTable = level.getServer().getLootData().getLootTable(key); + LootParams params = new LootParams.Builder(level).create(LootContextParamSets.EMPTY); + for (ItemStack stack : lootTable.getRandomItems(params)) { + DefaultDispenseItemBehavior.spawnItem(level, stack, 2, Direction.DOWN, + Vec3.atBottomCenterOf(pos).relative(Direction.DOWN, 1.2D)); + } + UndertrialSpawnerEffects.ejectItem(level, pos); + }); } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undertrial/UndertrialEquipmentTable.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undertrial/UndertrialEquipmentTable.java new file mode 100644 index 00000000..681338b1 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undertrial/UndertrialEquipmentTable.java @@ -0,0 +1,130 @@ +package com.craisinlord.antarchy.content.block.entity.undertrial; + +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.FloatTag; +import net.minecraft.nbt.NumericTag; +import net.minecraft.nbt.Tag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.item.Equipable; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.storage.loot.BuiltInLootTables; +import net.minecraft.world.level.storage.loot.LootParams; +import net.minecraft.world.level.storage.loot.LootTable; +import net.minecraft.world.level.storage.loot.parameters.LootContextParamSet; +import net.minecraft.world.level.storage.loot.parameters.LootContextParams; + +import java.util.ArrayList; +import java.util.EnumMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; + +public record UndertrialEquipmentTable(ResourceLocation lootTable, Map slotDropChances) { + private static final LootContextParamSet EQUIPMENT = LootContextParamSet.builder() + .required(LootContextParams.ORIGIN) + .required(LootContextParams.THIS_ENTITY) + .build(); + + public static Optional load(Tag tag) { + if (!(tag instanceof CompoundTag compound) || !compound.contains("loot_table", Tag.TAG_STRING)) { + return Optional.empty(); + } + ResourceLocation lootTable = ResourceLocation.tryParse(compound.getString("loot_table")); + if (lootTable == null) { + return Optional.empty(); + } + Map chances = new EnumMap<>(EquipmentSlot.class); + Tag chancesTag = compound.get("slot_drop_chances"); + if (chancesTag instanceof NumericTag numeric) { + for (EquipmentSlot slot : EquipmentSlot.values()) { + chances.put(slot, numeric.getAsFloat()); + } + } else if (chancesTag instanceof CompoundTag chanceMap) { + for (String key : chanceMap.getAllKeys()) { + EquipmentSlot slot = slotByName(key); + if (slot == null || !(chanceMap.get(key) instanceof NumericTag value)) { + return Optional.empty(); + } + chances.put(slot, value.getAsFloat()); + } + } else if (chancesTag != null) { + return Optional.empty(); + } + return Optional.of(new UndertrialEquipmentTable(lootTable, chances)); + } + + private static EquipmentSlot slotByName(String name) { + for (EquipmentSlot slot : EquipmentSlot.values()) { + if (slot.getName().equals(name)) { + return slot; + } + } + return null; + } + + public CompoundTag save() { + CompoundTag tag = new CompoundTag(); + tag.putString("loot_table", this.lootTable.toString()); + if (!this.slotDropChances.isEmpty()) { + Set distinct = new HashSet<>(this.slotDropChances.values()); + if (distinct.size() == 1 && this.slotDropChances.keySet().containsAll(List.of(EquipmentSlot.values()))) { + tag.put("slot_drop_chances", FloatTag.valueOf(distinct.iterator().next())); + } else { + CompoundTag map = new CompoundTag(); + for (Map.Entry entry : this.slotDropChances.entrySet()) { + map.putFloat(entry.getKey().getName(), entry.getValue()); + } + tag.put("slot_drop_chances", map); + } + } + return tag; + } + + public void equip(Mob mob) { + if (!(mob.level() instanceof ServerLevel level) || this.lootTable.equals(BuiltInLootTables.EMPTY)) { + return; + } + LootTable table = level.getServer().getLootData().getLootTable(this.lootTable); + if (table == LootTable.EMPTY) { + return; + } + LootParams params = new LootParams.Builder(level) + .withParameter(LootContextParams.ORIGIN, mob.position()) + .withParameter(LootContextParams.THIS_ENTITY, mob) + .create(EQUIPMENT); + List used = new ArrayList<>(); + for (ItemStack stack : table.getRandomItems(params, 0L)) { + EquipmentSlot slot = resolveSlot(stack, used); + if (slot != null) { + ItemStack equipped = slot.isArmor() ? stack.split(1) : stack; + mob.setItemSlot(slot, equipped); + Float chance = this.slotDropChances.get(slot); + if (chance != null) { + mob.setDropChance(slot, chance); + } + used.add(slot); + } + } + } + + private static EquipmentSlot resolveSlot(ItemStack stack, List used) { + if (stack.isEmpty()) { + return null; + } + Equipable equipable = Equipable.get(stack); + if (equipable != null) { + EquipmentSlot slot = equipable.getEquipmentSlot(); + if (!used.contains(slot)) { + return slot; + } + } else if (!used.contains(EquipmentSlot.MAINHAND)) { + return EquipmentSlot.MAINHAND; + } + return null; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undertrial/UndertrialOmen.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undertrial/UndertrialOmen.java new file mode 100644 index 00000000..20c65213 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undertrial/UndertrialOmen.java @@ -0,0 +1,70 @@ +package com.craisinlord.antarchy.content.block.entity.undertrial; + +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.player.Player; + +import java.util.ArrayList; +import java.util.List; + +public final class UndertrialOmen { + public static final int TRIAL_OMEN_PER_BAD_OMEN_LEVEL = 18000; + private static final String TAG_PREFIX = "antarchy.trial_omen."; + + private UndertrialOmen() { + } + + public static boolean hasTrialOmen(Player player) { + long now = player.level().getGameTime(); + boolean active = false; + List expired = new ArrayList<>(); + for (String tag : player.getTags()) { + if (tag.startsWith(TAG_PREFIX)) { + long expiresAt = parseExpiry(tag); + if (expiresAt > now) { + active = true; + } else { + expired.add(tag); + } + } + } + for (String tag : expired) { + player.removeTag(tag); + } + return active; + } + + public static boolean hasBadOmen(Player player) { + return player.hasEffect(MobEffects.BAD_OMEN); + } + + public static void transformBadOmenIntoTrialOmen(Player player) { + MobEffectInstance badOmen = player.getEffect(MobEffects.BAD_OMEN); + if (badOmen != null) { + int duration = TRIAL_OMEN_PER_BAD_OMEN_LEVEL * (badOmen.getAmplifier() + 1); + player.removeEffect(MobEffects.BAD_OMEN); + grantTrialOmen(player, duration); + } + } + + public static void grantTrialOmen(Player player, int duration) { + List existing = new ArrayList<>(); + for (String tag : player.getTags()) { + if (tag.startsWith(TAG_PREFIX)) { + existing.add(tag); + } + } + for (String tag : existing) { + player.removeTag(tag); + } + player.addTag(TAG_PREFIX + (player.level().getGameTime() + duration)); + } + + private static long parseExpiry(String tag) { + try { + return Long.parseLong(tag.substring(TAG_PREFIX.length())); + } catch (NumberFormatException exception) { + return Long.MIN_VALUE; + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undertrial/UndertrialPlayerDetector.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undertrial/UndertrialPlayerDetector.java new file mode 100644 index 00000000..f87a10fe --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undertrial/UndertrialPlayerDetector.java @@ -0,0 +1,48 @@ +package com.craisinlord.antarchy.content.block.entity.undertrial; + +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.ClipContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; +import java.util.function.Predicate; + +public interface UndertrialPlayerDetector { + UndertrialPlayerDetector NO_CREATIVE_PLAYERS = (level, selector, pos, range, requireLineOfSight) -> collect(level, pos, + selector.getPlayers(level, player -> player.blockPosition().closerThan(pos, range) && !player.isCreative() && !player.isSpectator()), + requireLineOfSight); + UndertrialPlayerDetector INCLUDING_CREATIVE_PLAYERS = (level, selector, pos, range, requireLineOfSight) -> collect(level, pos, + selector.getPlayers(level, player -> player.blockPosition().closerThan(pos, range) && !player.isSpectator()), + requireLineOfSight); + + List detect(ServerLevel level, EntitySelector selector, BlockPos pos, double range, boolean requireLineOfSight); + + private static List collect(ServerLevel level, BlockPos pos, List players, boolean requireLineOfSight) { + List result = new ArrayList<>(); + for (Player player : players) { + if (!requireLineOfSight || inLineOfSight(level, pos.getCenter(), player.getEyePosition())) { + result.add(player.getUUID()); + } + } + return List.copyOf(result); + } + + static boolean inLineOfSight(Level level, Vec3 target, Vec3 from) { + BlockHitResult hit = level.clip(new ClipContext(from, target, ClipContext.Block.VISUAL, ClipContext.Fluid.NONE, (Entity) null)); + return hit.getBlockPos().equals(BlockPos.containing(target)) || hit.getType() == HitResult.Type.MISS; + } + + interface EntitySelector { + EntitySelector SELECT_FROM_LEVEL = (level, predicate) -> level.getPlayers(predicate::test); + + List getPlayers(ServerLevel level, Predicate predicate); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undertrial/UndertrialSounds.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undertrial/UndertrialSounds.java new file mode 100644 index 00000000..9bd3bee3 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undertrial/UndertrialSounds.java @@ -0,0 +1,62 @@ +package com.craisinlord.antarchy.content.block.entity.undertrial; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.level.Level; + +import java.util.function.Supplier; + +public final class UndertrialSounds { + public static final Entry TRIAL_SPAWNER_SPAWN_MOB = new Entry("block.trial_spawner.spawn_mob", () -> SoundEvents.FIRECHARGE_USE); + public static final Entry TRIAL_SPAWNER_DETECT_PLAYER = new Entry("block.trial_spawner.detect_player", () -> SoundEvents.RESPAWN_ANCHOR_CHARGE); + public static final Entry TRIAL_SPAWNER_EJECT_ITEM = new Entry("block.trial_spawner.eject_item", () -> SoundEvents.DISPENSER_DISPENSE); + public static final Entry TRIAL_SPAWNER_OPEN_SHUTTER = new Entry("block.trial_spawner.open_shutter", () -> SoundEvents.IRON_TRAPDOOR_OPEN); + public static final Entry TRIAL_SPAWNER_CLOSE_SHUTTER = new Entry("block.trial_spawner.close_shutter", () -> SoundEvents.IRON_TRAPDOOR_CLOSE); + public static final Entry TRIAL_SPAWNER_OMINOUS_ACTIVATE = new Entry("block.trial_spawner.ominous_activate", () -> SoundEvents.RESPAWN_ANCHOR_SET_SPAWN); + public static final Entry TRIAL_SPAWNER_SPAWN_ITEM_BEGIN = new Entry("block.trial_spawner.spawn_item_begin", () -> SoundEvents.AMETHYST_BLOCK_CHIME); + public static final Entry VAULT_AMBIENT = new Entry("block.vault.ambient", () -> null); + public static final Entry VAULT_DEACTIVATE = new Entry("block.vault.deactivate", () -> SoundEvents.IRON_DOOR_CLOSE); + public static final Entry VAULT_INSERT_ITEM = new Entry("block.vault.insert_item", () -> SoundEvents.CHAIN_PLACE); + public static final Entry VAULT_INSERT_ITEM_FAIL = new Entry("block.vault.insert_item_fail", () -> SoundEvents.DISPENSER_FAIL); + public static final Entry VAULT_REJECT_REWARDED_PLAYER = new Entry("block.vault.reject_rewarded_player", () -> SoundEvents.DISPENSER_FAIL); + public static final Entry VAULT_OPEN_SHUTTER = new Entry("block.vault.open_shutter", () -> SoundEvents.IRON_TRAPDOOR_OPEN); + public static final Entry VAULT_CLOSE_SHUTTER = new Entry("block.vault.close_shutter", () -> SoundEvents.IRON_TRAPDOOR_CLOSE); + public static final Entry VAULT_EJECT_ITEM = new Entry("block.vault.eject_item", () -> SoundEvents.DISPENSER_DISPENSE); + + private UndertrialSounds() { + } + + public static void playServer(ServerLevel level, BlockPos pos, Entry entry, SoundSource source, float volume, float pitch) { + SoundEvent sound = entry.get(); + if (sound != null) { + level.playSound(null, pos, sound, source, volume, pitch); + } + } + + public static void playLocal(Level level, BlockPos pos, Entry entry, SoundSource source, float volume, float pitch, boolean distanceDelay) { + SoundEvent sound = entry.get(); + if (sound != null) { + level.playLocalSound(pos, sound, source, volume, pitch, distanceDelay); + } + } + + public static final class Entry { + private final ResourceLocation id; + private final Supplier fallback; + + private Entry(String path, Supplier fallback) { + this.id = new ResourceLocation("minecraft", path); + this.fallback = fallback; + } + + public SoundEvent get() { + SoundEvent registered = BuiltInRegistries.SOUND_EVENT.getOptional(this.id).orElse(null); + return registered != null ? registered : this.fallback.get(); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undertrial/UndertrialSpawnData.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undertrial/UndertrialSpawnData.java new file mode 100644 index 00000000..ce9b9267 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undertrial/UndertrialSpawnData.java @@ -0,0 +1,102 @@ +package com.craisinlord.antarchy.content.block.entity.undertrial; + +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.NbtOps; +import net.minecraft.nbt.Tag; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.random.SimpleWeightedRandomList; +import net.minecraft.util.random.WeightedEntry; +import net.minecraft.world.level.LightLayer; +import net.minecraft.world.level.SpawnData; + +import java.util.Optional; + +public record UndertrialSpawnData(CompoundTag entityToSpawn, Optional customSpawnRules, + Optional equipment) { + public static final String ENTITY_TAG = "entity"; + + public UndertrialSpawnData() { + this(new CompoundTag(), Optional.empty(), Optional.empty()); + } + + public CompoundTag getEntityToSpawn() { + return this.entityToSpawn; + } + + public Optional getCustomSpawnRules() { + return this.customSpawnRules; + } + + public Optional getEquipment() { + return this.equipment; + } + + public static boolean isValidPosition(SpawnData.CustomSpawnRules rules, BlockPos pos, ServerLevel level) { + return rules.blockLightLimit().isValueInRange(level.getBrightness(LightLayer.BLOCK, pos)) + && rules.skyLightLimit().isValueInRange(level.getBrightness(LightLayer.SKY, pos)); + } + + public static Optional load(Tag tag) { + if (!(tag instanceof CompoundTag compound) || !compound.contains(ENTITY_TAG, Tag.TAG_COMPOUND)) { + return Optional.empty(); + } + Optional rules = Optional.empty(); + if (compound.contains("custom_spawn_rules")) { + Optional parsed = SpawnData.CustomSpawnRules.CODEC + .parse(NbtOps.INSTANCE, compound.get("custom_spawn_rules")).result(); + if (parsed.isEmpty()) { + return Optional.empty(); + } + rules = parsed; + } + Optional equipment = Optional.empty(); + if (compound.contains("equipment")) { + equipment = UndertrialEquipmentTable.load(compound.get("equipment")); + if (equipment.isEmpty()) { + return Optional.empty(); + } + } + return Optional.of(new UndertrialSpawnData(compound.getCompound(ENTITY_TAG), rules, equipment)); + } + + public CompoundTag save() { + CompoundTag tag = new CompoundTag(); + tag.put(ENTITY_TAG, this.entityToSpawn); + this.customSpawnRules.flatMap(rules -> SpawnData.CustomSpawnRules.CODEC.encodeStart(NbtOps.INSTANCE, rules).result()) + .ifPresent(encoded -> tag.put("custom_spawn_rules", encoded)); + this.equipment.ifPresent(table -> tag.put("equipment", table.save())); + return tag; + } + + public static Optional> loadList(Tag tag) { + if (!(tag instanceof ListTag list)) { + return Optional.empty(); + } + SimpleWeightedRandomList.Builder builder = SimpleWeightedRandomList.builder(); + for (Tag element : list) { + if (!(element instanceof CompoundTag entry) || !entry.contains("weight", Tag.TAG_ANY_NUMERIC)) { + return Optional.empty(); + } + Optional data = load(entry.get("data")); + int weight = entry.getInt("weight"); + if (data.isEmpty() || weight < 0) { + return Optional.empty(); + } + builder.add(data.get(), weight); + } + return Optional.of(builder.build()); + } + + public static ListTag saveList(SimpleWeightedRandomList list) { + ListTag tag = new ListTag(); + for (WeightedEntry.Wrapper wrapper : list.unwrap()) { + CompoundTag entry = new CompoundTag(); + entry.put("data", wrapper.getData().save()); + entry.putInt("weight", wrapper.getWeight().asInt()); + tag.add(entry); + } + return tag; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undertrial/UndertrialSpawner.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undertrial/UndertrialSpawner.java new file mode 100644 index 00000000..ea667aa7 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undertrial/UndertrialSpawner.java @@ -0,0 +1,282 @@ +package com.craisinlord.antarchy.content.block.entity.undertrial; + +import com.craisinlord.antarchy.content.block.UndertrialSpawnerBlock; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.dispenser.DefaultDispenseItemBehavior; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.Tag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.Difficulty; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.entity.SpawnPlacements; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.GameRules; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.gameevent.GameEvent; +import net.minecraft.world.level.storage.loot.LootParams; +import net.minecraft.world.level.storage.loot.LootTable; +import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; +import net.minecraft.world.phys.Vec3; + +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +public final class UndertrialSpawner { + public static final String NORMAL_CONFIG_TAG_NAME = "normal_config"; + public static final String OMINOUS_CONFIG_TAG_NAME = "ominous_config"; + public static final int DETECT_PLAYER_SPAWN_BUFFER = 40; + public static final int DEFAULT_TARGET_COOLDOWN_LENGTH = 36000; + public static final int DEFAULT_PLAYER_SCAN_RANGE = 14; + private static final int MAX_MOB_TRACKING_DISTANCE = 47; + private static final int MAX_MOB_TRACKING_DISTANCE_SQR = Mth.square(MAX_MOB_TRACKING_DISTANCE); + private final UndertrialSpawnerConfig normalConfig; + private final UndertrialSpawnerConfig ominousConfig; + private final UndertrialSpawnerData data; + private final int requiredPlayerRange; + private final int targetCooldownLength; + private final StateAccessor stateAccessor; + private final UndertrialPlayerDetector playerDetector; + private final UndertrialPlayerDetector.EntitySelector entitySelector; + private boolean overridePeacefulAndMobSpawnRule; + private boolean isOminous; + + public UndertrialSpawner(StateAccessor stateAccessor, UndertrialPlayerDetector playerDetector, + UndertrialPlayerDetector.EntitySelector entitySelector) { + this(UndertrialSpawnerConfig.DEFAULT, UndertrialSpawnerConfig.DEFAULT, new UndertrialSpawnerData(), + DEFAULT_TARGET_COOLDOWN_LENGTH, DEFAULT_PLAYER_SCAN_RANGE, stateAccessor, playerDetector, entitySelector); + } + + public UndertrialSpawner(UndertrialSpawnerConfig normalConfig, UndertrialSpawnerConfig ominousConfig, UndertrialSpawnerData data, + int targetCooldownLength, int requiredPlayerRange, StateAccessor stateAccessor, + UndertrialPlayerDetector playerDetector, UndertrialPlayerDetector.EntitySelector entitySelector) { + this.normalConfig = normalConfig; + this.ominousConfig = ominousConfig; + this.data = data; + this.targetCooldownLength = targetCooldownLength; + this.requiredPlayerRange = requiredPlayerRange; + this.stateAccessor = stateAccessor; + this.playerDetector = playerDetector; + this.entitySelector = entitySelector; + } + + public UndertrialSpawner load(CompoundTag tag) { + UndertrialSpawnerConfig normal = tag.contains(NORMAL_CONFIG_TAG_NAME, Tag.TAG_COMPOUND) + ? UndertrialSpawnerConfig.load(tag.getCompound(NORMAL_CONFIG_TAG_NAME)) : UndertrialSpawnerConfig.DEFAULT; + UndertrialSpawnerConfig ominous = tag.contains(OMINOUS_CONFIG_TAG_NAME, Tag.TAG_COMPOUND) + ? UndertrialSpawnerConfig.load(tag.getCompound(OMINOUS_CONFIG_TAG_NAME)) : UndertrialSpawnerConfig.DEFAULT; + UndertrialSpawnerData loadedData = UndertrialSpawnerData.load(tag); + int cooldown = DEFAULT_TARGET_COOLDOWN_LENGTH; + if (tag.contains("target_cooldown_length", Tag.TAG_ANY_NUMERIC) && tag.getInt("target_cooldown_length") >= 0) { + cooldown = tag.getInt("target_cooldown_length"); + } + int range = DEFAULT_PLAYER_SCAN_RANGE; + if (tag.contains("required_player_range", Tag.TAG_ANY_NUMERIC)) { + int value = tag.getInt("required_player_range"); + if (value >= 1 && value <= 128) { + range = value; + } + } + return new UndertrialSpawner(normal, ominous, loadedData, cooldown, range, this.stateAccessor, this.playerDetector, this.entitySelector); + } + + public CompoundTag save() { + CompoundTag tag = new CompoundTag(); + if (!this.normalConfig.equals(UndertrialSpawnerConfig.DEFAULT)) { + tag.put(NORMAL_CONFIG_TAG_NAME, this.normalConfig.save()); + } + UndertrialSpawnerConfig ominous = this.getOminousConfigForSerialization(); + if (!ominous.equals(UndertrialSpawnerConfig.DEFAULT)) { + tag.put(OMINOUS_CONFIG_TAG_NAME, ominous.save()); + } + this.data.save(tag); + if (this.targetCooldownLength != DEFAULT_TARGET_COOLDOWN_LENGTH) { + tag.putInt("target_cooldown_length", this.targetCooldownLength); + } + if (this.requiredPlayerRange != DEFAULT_PLAYER_SCAN_RANGE) { + tag.putInt("required_player_range", this.requiredPlayerRange); + } + return tag; + } + + public UndertrialSpawnerConfig getConfig() { + return this.isOminous ? this.ominousConfig : this.normalConfig; + } + + public UndertrialSpawnerConfig getNormalConfig() { + return this.normalConfig; + } + + public UndertrialSpawnerConfig getOminousConfig() { + return this.ominousConfig; + } + + private UndertrialSpawnerConfig getOminousConfigForSerialization() { + return !this.ominousConfig.equals(this.normalConfig) ? this.ominousConfig : UndertrialSpawnerConfig.DEFAULT; + } + + public void applyOminous(ServerLevel level, BlockPos pos) { + level.setBlock(pos, level.getBlockState(pos).setValue(UndertrialSpawnerBlock.OMINOUS, true), 3); + UndertrialSpawnerEffects.becomeOminous(level, pos, pos, 1); + this.isOminous = true; + this.data.resetAfterBecomingOminous(this, level, pos); + } + + public void removeOminous(ServerLevel level, BlockPos pos) { + level.setBlock(pos, level.getBlockState(pos).setValue(UndertrialSpawnerBlock.OMINOUS, false), 3); + this.isOminous = false; + } + + public boolean isOminous() { + return this.isOminous; + } + + public UndertrialSpawnerData getData() { + return this.data; + } + + public int getTargetCooldownLength() { + return this.targetCooldownLength; + } + + public int getRequiredPlayerRange() { + return this.requiredPlayerRange; + } + + public UndertrialSpawnerState getState() { + return this.stateAccessor.getState(); + } + + public void setState(Level level, UndertrialSpawnerState state) { + this.stateAccessor.setState(level, state); + } + + public void markUpdated() { + this.stateAccessor.markUpdated(); + } + + public UndertrialPlayerDetector getPlayerDetector() { + return this.playerDetector; + } + + public UndertrialPlayerDetector.EntitySelector getEntitySelector() { + return this.entitySelector; + } + + public boolean canSpawnInLevel(Level level) { + if (this.overridePeacefulAndMobSpawnRule) { + return true; + } + return level.getDifficulty() != Difficulty.PEACEFUL && level.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING); + } + + public Optional spawnMob(ServerLevel level, BlockPos pos) { + RandomSource random = level.getRandom(); + UndertrialSpawnData spawnData = this.data.getOrCreateNextSpawnData(this, level.getRandom()); + CompoundTag entityTag = spawnData.entityToSpawn(); + ListTag posList = entityTag.getList("Pos", Tag.TAG_DOUBLE); + Optional> type = EntityType.by(entityTag); + if (type.isEmpty()) { + return Optional.empty(); + } + int size = posList.size(); + double x = size >= 1 ? posList.getDouble(0) + : pos.getX() + (random.nextDouble() - random.nextDouble()) * this.getConfig().spawnRange() + 0.5D; + double y = size >= 2 ? posList.getDouble(1) : pos.getY() + random.nextInt(3) - 1; + double z = size >= 3 ? posList.getDouble(2) + : pos.getZ() + (random.nextDouble() - random.nextDouble()) * this.getConfig().spawnRange() + 0.5D; + if (!level.noCollision(type.get().getAABB(x, y, z))) { + return Optional.empty(); + } + Vec3 spawnPos = new Vec3(x, y, z); + if (!UndertrialPlayerDetector.inLineOfSight(level, pos.getCenter(), spawnPos)) { + return Optional.empty(); + } + BlockPos spawnBlockPos = BlockPos.containing(spawnPos); + if (!SpawnPlacements.checkSpawnRules(type.get(), level, MobSpawnType.SPAWNER, spawnBlockPos, level.getRandom())) { + return Optional.empty(); + } + if (spawnData.getCustomSpawnRules().isPresent() + && !UndertrialSpawnData.isValidPosition(spawnData.getCustomSpawnRules().get(), spawnBlockPos, level)) { + return Optional.empty(); + } + Entity entity = EntityType.loadEntityRecursive(entityTag, level, loaded -> { + loaded.moveTo(x, y, z, random.nextFloat() * 360.0F, 0.0F); + return loaded; + }); + if (entity == null) { + return Optional.empty(); + } + if (entity instanceof Mob mob) { + if (!mob.checkSpawnObstruction(level)) { + return Optional.empty(); + } + boolean onlyId = spawnData.getEntityToSpawn().size() == 1 && spawnData.getEntityToSpawn().contains("id", Tag.TAG_STRING); + if (onlyId) { + mob.finalizeSpawn(level, level.getCurrentDifficultyAt(mob.blockPosition()), MobSpawnType.SPAWNER, null, null); + } + mob.setPersistenceRequired(); + spawnData.getEquipment().ifPresent(table -> table.equip(mob)); + } + if (!level.tryAddFreshEntityWithPassengers(entity)) { + return Optional.empty(); + } + int flame = this.isOminous ? UndertrialSpawnerEffects.FLAME_OMINOUS : UndertrialSpawnerEffects.FLAME_NORMAL; + UndertrialSpawnerEffects.spawnerSpawn(level, pos, flame); + UndertrialSpawnerEffects.mobSpawn(level, pos, spawnBlockPos, flame); + level.gameEvent(entity, GameEvent.ENTITY_PLACE, spawnBlockPos); + return Optional.of(entity.getUUID()); + } + + public void ejectReward(ServerLevel level, BlockPos pos, ResourceLocation lootTableId) { + LootTable lootTable = level.getServer().getLootData().getLootTable(lootTableId); + LootParams params = new LootParams.Builder(level).create(LootContextParamSets.EMPTY); + List items = lootTable.getRandomItems(params); + if (!items.isEmpty()) { + for (ItemStack stack : items) { + DefaultDispenseItemBehavior.spawnItem(level, stack, 2, Direction.UP, Vec3.atBottomCenterOf(pos).relative(Direction.UP, 1.2D)); + } + UndertrialSpawnerEffects.ejectItem(level, pos); + } + } + + public void tickServer(ServerLevel level, BlockPos pos, boolean ominous) { + this.isOminous = ominous; + UndertrialSpawnerState state = this.getState(); + if (this.data.currentMobs.removeIf(uuid -> shouldMobBeUntracked(level, pos, uuid))) { + this.data.nextMobSpawnsAt = level.getGameTime() + this.getConfig().ticksBetweenSpawn(); + } + UndertrialSpawnerState next = state.tickAndGetNext(pos, this, level); + if (next != state) { + this.setState(level, next); + } + } + + private static boolean shouldMobBeUntracked(ServerLevel level, BlockPos pos, UUID uuid) { + Entity entity = level.getEntity(uuid); + return entity == null + || !entity.isAlive() + || !entity.level().dimension().equals(level.dimension()) + || entity.blockPosition().distSqr(pos) > MAX_MOB_TRACKING_DISTANCE_SQR; + } + + public void overridePeacefulAndMobSpawnRule() { + this.overridePeacefulAndMobSpawnRule = true; + } + + public interface StateAccessor { + void setState(Level level, UndertrialSpawnerState state); + + UndertrialSpawnerState getState(); + + void markUpdated(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undertrial/UndertrialSpawnerConfig.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undertrial/UndertrialSpawnerConfig.java new file mode 100644 index 00000000..63a06e42 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undertrial/UndertrialSpawnerConfig.java @@ -0,0 +1,157 @@ +package com.craisinlord.antarchy.content.block.entity.undertrial; + +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.Tag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.random.SimpleWeightedRandomList; +import net.minecraft.util.random.WeightedEntry; + +import java.util.Optional; + +public record UndertrialSpawnerConfig( + int spawnRange, + float totalMobs, + float simultaneousMobs, + float totalMobsAddedPerPlayer, + float simultaneousMobsAddedPerPlayer, + int ticksBetweenSpawn, + SimpleWeightedRandomList spawnPotentialsDefinition, + SimpleWeightedRandomList lootTablesToEject, + ResourceLocation itemsToDropWhenOminous +) { + public static final ResourceLocation SPAWNER_TRIAL_CHAMBER_CONSUMABLES = new ResourceLocation("minecraft", "spawners/trial_chamber/consumables"); + public static final ResourceLocation SPAWNER_TRIAL_CHAMBER_KEY = new ResourceLocation("minecraft", "spawners/trial_chamber/key"); + public static final ResourceLocation SPAWNER_TRIAL_ITEMS_TO_DROP_WHEN_OMINOUS = new ResourceLocation("minecraft", "spawners/trial_chamber/items_to_drop_when_ominous"); + public static final UndertrialSpawnerConfig DEFAULT = new UndertrialSpawnerConfig( + 4, + 6.0F, + 2.0F, + 2.0F, + 1.0F, + 40, + SimpleWeightedRandomList.empty(), + SimpleWeightedRandomList.builder().add(SPAWNER_TRIAL_CHAMBER_CONSUMABLES, 1).add(SPAWNER_TRIAL_CHAMBER_KEY, 1).build(), + SPAWNER_TRIAL_ITEMS_TO_DROP_WHEN_OMINOUS + ); + + public int calculateTargetTotalMobs(int additionalPlayers) { + return (int) Math.floor(this.totalMobs + this.totalMobsAddedPerPlayer * additionalPlayers); + } + + public int calculateTargetSimultaneousMobs(int additionalPlayers) { + return (int) Math.floor(this.simultaneousMobs + this.simultaneousMobsAddedPerPlayer * additionalPlayers); + } + + public long ticksBetweenItemSpawners() { + return 160L; + } + + public static UndertrialSpawnerConfig load(CompoundTag tag) { + int spawnRange = DEFAULT.spawnRange; + if (tag.contains("spawn_range", Tag.TAG_ANY_NUMERIC)) { + int value = tag.getInt("spawn_range"); + if (value >= 1 && value <= 128) { + spawnRange = value; + } + } + float totalMobs = nonNegativeFloat(tag, "total_mobs", DEFAULT.totalMobs); + float simultaneousMobs = nonNegativeFloat(tag, "simultaneous_mobs", DEFAULT.simultaneousMobs); + float totalMobsAddedPerPlayer = nonNegativeFloat(tag, "total_mobs_added_per_player", DEFAULT.totalMobsAddedPerPlayer); + float simultaneousMobsAddedPerPlayer = nonNegativeFloat(tag, "simultaneous_mobs_added_per_player", DEFAULT.simultaneousMobsAddedPerPlayer); + int ticksBetweenSpawn = DEFAULT.ticksBetweenSpawn; + if (tag.contains("ticks_between_spawn", Tag.TAG_ANY_NUMERIC) && tag.getInt("ticks_between_spawn") >= 0) { + ticksBetweenSpawn = tag.getInt("ticks_between_spawn"); + } + SimpleWeightedRandomList potentials = DEFAULT.spawnPotentialsDefinition; + if (tag.contains("spawn_potentials")) { + potentials = UndertrialSpawnData.loadList(tag.get("spawn_potentials")).orElse(DEFAULT.spawnPotentialsDefinition); + } + SimpleWeightedRandomList lootTables = DEFAULT.lootTablesToEject; + if (tag.contains("loot_tables_to_eject")) { + lootTables = loadLootTables(tag.get("loot_tables_to_eject")).orElse(DEFAULT.lootTablesToEject); + } + ResourceLocation itemsToDrop = DEFAULT.itemsToDropWhenOminous; + if (tag.contains("items_to_drop_when_ominous", Tag.TAG_STRING)) { + ResourceLocation parsed = ResourceLocation.tryParse(tag.getString("items_to_drop_when_ominous")); + if (parsed != null) { + itemsToDrop = parsed; + } + } + return new UndertrialSpawnerConfig(spawnRange, totalMobs, simultaneousMobs, totalMobsAddedPerPlayer, + simultaneousMobsAddedPerPlayer, ticksBetweenSpawn, potentials, lootTables, itemsToDrop); + } + + private static float nonNegativeFloat(CompoundTag tag, String key, float fallback) { + if (tag.contains(key, Tag.TAG_ANY_NUMERIC)) { + float value = tag.getFloat(key); + if (value >= 0.0F) { + return value; + } + } + return fallback; + } + + public CompoundTag save() { + CompoundTag tag = new CompoundTag(); + if (this.spawnRange != DEFAULT.spawnRange) { + tag.putInt("spawn_range", this.spawnRange); + } + if (this.totalMobs != DEFAULT.totalMobs) { + tag.putFloat("total_mobs", this.totalMobs); + } + if (this.simultaneousMobs != DEFAULT.simultaneousMobs) { + tag.putFloat("simultaneous_mobs", this.simultaneousMobs); + } + if (this.totalMobsAddedPerPlayer != DEFAULT.totalMobsAddedPerPlayer) { + tag.putFloat("total_mobs_added_per_player", this.totalMobsAddedPerPlayer); + } + if (this.simultaneousMobsAddedPerPlayer != DEFAULT.simultaneousMobsAddedPerPlayer) { + tag.putFloat("simultaneous_mobs_added_per_player", this.simultaneousMobsAddedPerPlayer); + } + if (this.ticksBetweenSpawn != DEFAULT.ticksBetweenSpawn) { + tag.putInt("ticks_between_spawn", this.ticksBetweenSpawn); + } + if (this.spawnPotentialsDefinition != DEFAULT.spawnPotentialsDefinition) { + tag.put("spawn_potentials", UndertrialSpawnData.saveList(this.spawnPotentialsDefinition)); + } + if (this.lootTablesToEject != DEFAULT.lootTablesToEject) { + tag.put("loot_tables_to_eject", saveLootTables(this.lootTablesToEject)); + } + if (!this.itemsToDropWhenOminous.equals(DEFAULT.itemsToDropWhenOminous)) { + tag.putString("items_to_drop_when_ominous", this.itemsToDropWhenOminous.toString()); + } + return tag; + } + + public static Optional> loadLootTables(Tag tag) { + if (!(tag instanceof ListTag list)) { + return Optional.empty(); + } + SimpleWeightedRandomList.Builder builder = SimpleWeightedRandomList.builder(); + for (Tag element : list) { + if (!(element instanceof CompoundTag entry) || !entry.contains("data", Tag.TAG_STRING) + || !entry.contains("weight", Tag.TAG_ANY_NUMERIC)) { + return Optional.empty(); + } + ResourceLocation id = ResourceLocation.tryParse(entry.getString("data")); + int weight = entry.getInt("weight"); + if (id == null || weight < 0) { + return Optional.empty(); + } + builder.add(id, weight); + } + return Optional.of(builder.build()); + } + + public static ListTag saveLootTables(SimpleWeightedRandomList list) { + ListTag tag = new ListTag(); + for (WeightedEntry.Wrapper wrapper : list.unwrap()) { + CompoundTag entry = new CompoundTag(); + entry.putString("data", wrapper.getData().toString()); + entry.putInt("weight", wrapper.getWeight().asInt()); + tag.add(entry); + } + return tag; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undertrial/UndertrialSpawnerData.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undertrial/UndertrialSpawnerData.java new file mode 100644 index 00000000..ec91a041 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undertrial/UndertrialSpawnerData.java @@ -0,0 +1,320 @@ +package com.craisinlord.antarchy.content.block.entity.undertrial; + +import com.mojang.datafixers.util.Pair; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import net.minecraft.core.BlockPos; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.IntArrayTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.NbtUtils; +import net.minecraft.nbt.Tag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.util.random.SimpleWeightedRandomList; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.storage.loot.LootParams; +import net.minecraft.world.level.storage.loot.LootTable; +import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; + +import java.util.HashSet; +import java.util.List; +import java.util.Optional; +import java.util.Set; +import java.util.UUID; +import java.util.function.Function; + +public class UndertrialSpawnerData { + public static final String TAG_SPAWN_DATA = "spawn_data"; + private static final String TAG_NEXT_MOB_SPAWNS_AT = "next_mob_spawns_at"; + private static final int DELAY_BETWEEN_PLAYER_SCANS = 20; + protected final Set detectedPlayers = new HashSet<>(); + protected final Set currentMobs = new HashSet<>(); + protected long cooldownEndsAt; + protected long nextMobSpawnsAt; + protected int totalMobsSpawned; + protected Optional nextSpawnData; + protected Optional ejectingLootTable; + protected Entity displayEntity; + private SimpleWeightedRandomList dispensing; + + public UndertrialSpawnerData() { + this(Set.of(), Set.of(), 0L, 0L, 0, Optional.empty(), Optional.empty()); + } + + public UndertrialSpawnerData(Set detectedPlayers, Set currentMobs, long cooldownEndsAt, long nextMobSpawnsAt, + int totalMobsSpawned, Optional nextSpawnData, + Optional ejectingLootTable) { + this.detectedPlayers.addAll(detectedPlayers); + this.currentMobs.addAll(currentMobs); + this.cooldownEndsAt = cooldownEndsAt; + this.nextMobSpawnsAt = nextMobSpawnsAt; + this.totalMobsSpawned = totalMobsSpawned; + this.nextSpawnData = nextSpawnData; + this.ejectingLootTable = ejectingLootTable; + } + + public static UndertrialSpawnerData load(CompoundTag tag) { + Set detected = loadUuidSet(tag.get("registered_players")); + Set mobs = loadUuidSet(tag.get("current_mobs")); + long cooldownEndsAt = tag.contains("cooldown_ends_at", Tag.TAG_ANY_NUMERIC) ? tag.getLong("cooldown_ends_at") : 0L; + long nextMobSpawnsAt = tag.contains(TAG_NEXT_MOB_SPAWNS_AT, Tag.TAG_ANY_NUMERIC) ? tag.getLong(TAG_NEXT_MOB_SPAWNS_AT) : 0L; + int totalMobsSpawned = tag.contains("total_mobs_spawned", Tag.TAG_ANY_NUMERIC) && tag.getInt("total_mobs_spawned") >= 0 + ? tag.getInt("total_mobs_spawned") : 0; + Optional spawnData = tag.contains(TAG_SPAWN_DATA) + ? UndertrialSpawnData.load(tag.get(TAG_SPAWN_DATA)) : Optional.empty(); + Optional ejecting = tag.contains("ejecting_loot_table", Tag.TAG_STRING) + ? Optional.ofNullable(ResourceLocation.tryParse(tag.getString("ejecting_loot_table"))) : Optional.empty(); + return new UndertrialSpawnerData(detected, mobs, cooldownEndsAt, nextMobSpawnsAt, totalMobsSpawned, spawnData, ejecting); + } + + public void save(CompoundTag tag) { + if (!this.detectedPlayers.isEmpty()) { + tag.put("registered_players", saveUuidSet(this.detectedPlayers)); + } + if (!this.currentMobs.isEmpty()) { + tag.put("current_mobs", saveUuidSet(this.currentMobs)); + } + if (this.cooldownEndsAt != 0L) { + tag.putLong("cooldown_ends_at", this.cooldownEndsAt); + } + if (this.nextMobSpawnsAt != 0L) { + tag.putLong(TAG_NEXT_MOB_SPAWNS_AT, this.nextMobSpawnsAt); + } + if (this.totalMobsSpawned != 0) { + tag.putInt("total_mobs_spawned", this.totalMobsSpawned); + } + this.nextSpawnData.ifPresent(data -> tag.put(TAG_SPAWN_DATA, data.save())); + this.ejectingLootTable.ifPresent(id -> tag.putString("ejecting_loot_table", id.toString())); + } + + private static Set loadUuidSet(Tag tag) { + Set result = new HashSet<>(); + if (!(tag instanceof ListTag list)) { + return result; + } + for (Tag element : list) { + if (!(element instanceof IntArrayTag array) || array.size() != 4) { + return new HashSet<>(); + } + result.add(NbtUtils.loadUUID(array)); + } + return result; + } + + private static ListTag saveUuidSet(Set uuids) { + ListTag list = new ListTag(); + for (UUID uuid : uuids) { + list.add(NbtUtils.createUUID(uuid)); + } + return list; + } + + public void reset() { + this.detectedPlayers.clear(); + this.totalMobsSpawned = 0; + this.nextMobSpawnsAt = 0L; + this.cooldownEndsAt = 0L; + this.currentMobs.clear(); + this.nextSpawnData = Optional.empty(); + } + + public boolean hasMobToSpawn(UndertrialSpawner spawner, RandomSource random) { + boolean hasId = this.getOrCreateNextSpawnData(spawner, random).getEntityToSpawn().contains("id", Tag.TAG_STRING); + return hasId || !spawner.getConfig().spawnPotentialsDefinition().isEmpty(); + } + + public boolean hasFinishedSpawningAllMobs(UndertrialSpawnerConfig config, int additionalPlayers) { + return this.totalMobsSpawned >= config.calculateTargetTotalMobs(additionalPlayers); + } + + public boolean haveAllCurrentMobsDied() { + return this.currentMobs.isEmpty(); + } + + public boolean isReadyToSpawnNextMob(ServerLevel level, UndertrialSpawnerConfig config, int additionalPlayers) { + return level.getGameTime() >= this.nextMobSpawnsAt + && this.currentMobs.size() < config.calculateTargetSimultaneousMobs(additionalPlayers); + } + + public int countAdditionalPlayers(BlockPos pos) { + return Math.max(0, this.detectedPlayers.size() - 1); + } + + public void tryDetectPlayers(ServerLevel level, BlockPos pos, UndertrialSpawner spawner) { + if ((pos.asLong() + level.getGameTime()) % DELAY_BETWEEN_PLAYER_SCANS != 0L) { + return; + } + if (spawner.getState().equals(UndertrialSpawnerState.COOLDOWN) && spawner.isOminous()) { + return; + } + List players = spawner.getPlayerDetector() + .detect(level, spawner.getEntitySelector(), pos, spawner.getRequiredPlayerRange(), true); + boolean becameOminous; + if (!spawner.isOminous() && !players.isEmpty()) { + Optional> omenPlayer = findPlayerWithOminousEffect(level, players); + omenPlayer.ifPresent(pair -> { + Player player = pair.getFirst(); + if (pair.getSecond()) { + UndertrialOmen.transformBadOmenIntoTrialOmen(player); + } + UndertrialSpawnerEffects.becomeOminous(level, pos, BlockPos.containing(player.getEyePosition()), 0); + spawner.applyOminous(level, pos); + }); + becameOminous = omenPlayer.isPresent(); + } else { + becameOminous = false; + } + if (!spawner.getState().equals(UndertrialSpawnerState.COOLDOWN) || becameOminous) { + boolean firstDetection = spawner.getData().detectedPlayers.isEmpty(); + List newPlayers = firstDetection ? players + : spawner.getPlayerDetector().detect(level, spawner.getEntitySelector(), pos, spawner.getRequiredPlayerRange(), false); + if (this.detectedPlayers.addAll(newPlayers)) { + this.nextMobSpawnsAt = Math.max(level.getGameTime() + UndertrialSpawner.DETECT_PLAYER_SPAWN_BUFFER, this.nextMobSpawnsAt); + if (!becameOminous) { + UndertrialSpawnerEffects.detectPlayer(level, pos, spawner.isOminous(), this.detectedPlayers.size()); + } + } + } + } + + private static Optional> findPlayerWithOminousEffect(ServerLevel level, List players) { + Player badOmenPlayer = null; + for (UUID uuid : players) { + Player player = level.getPlayerByUUID(uuid); + if (player != null) { + if (UndertrialOmen.hasTrialOmen(player)) { + return Optional.of(Pair.of(player, false)); + } + if (UndertrialOmen.hasBadOmen(player)) { + badOmenPlayer = player; + } + } + } + return Optional.ofNullable(badOmenPlayer).map(player -> Pair.of(player, true)); + } + + public void resetAfterBecomingOminous(UndertrialSpawner spawner, ServerLevel level, BlockPos spawnerPos) { + for (UUID uuid : this.currentMobs) { + Entity entity = level.getEntity(uuid); + if (entity != null) { + UndertrialSpawnerEffects.mobSpawn(level, spawnerPos, entity.blockPosition(), UndertrialSpawnerEffects.FLAME_NORMAL); + if (entity instanceof Mob mob) { + dropPreservedEquipment(mob); + } + entity.remove(Entity.RemovalReason.DISCARDED); + } + } + if (!spawner.getOminousConfig().spawnPotentialsDefinition().isEmpty()) { + this.nextSpawnData = Optional.empty(); + } + this.totalMobsSpawned = 0; + this.currentMobs.clear(); + this.nextMobSpawnsAt = level.getGameTime() + spawner.getOminousConfig().ticksBetweenSpawn(); + spawner.markUpdated(); + this.cooldownEndsAt = level.getGameTime() + spawner.getOminousConfig().ticksBetweenItemSpawners(); + } + + private static void dropPreservedEquipment(Mob mob) { + CompoundTag saved = mob.saveWithoutId(new CompoundTag()); + ListTag hand = saved.getList("HandDropChances", Tag.TAG_FLOAT); + ListTag armor = saved.getList("ArmorDropChances", Tag.TAG_FLOAT); + for (EquipmentSlot slot : EquipmentSlot.values()) { + ItemStack stack = mob.getItemBySlot(slot); + if (stack.isEmpty()) { + continue; + } + ListTag chances = slot.getType() == EquipmentSlot.Type.HAND ? hand : armor; + double chance = slot.getIndex() < chances.size() ? chances.getFloat(slot.getIndex()) : 0.0D; + if (chance > 1.0D) { + mob.setItemSlot(slot, ItemStack.EMPTY); + mob.spawnAtLocation(stack); + } + } + } + + public boolean isReadyToOpenShutter(ServerLevel level, float delay, int targetCooldownLength) { + long cooldownStartedAt = this.cooldownEndsAt - targetCooldownLength; + return (float) level.getGameTime() >= (float) cooldownStartedAt + delay; + } + + public boolean isReadyToEjectItems(ServerLevel level, float interval, int targetCooldownLength) { + long cooldownStartedAt = this.cooldownEndsAt - targetCooldownLength; + return (float) (level.getGameTime() - cooldownStartedAt) % interval == 0.0F; + } + + public boolean isCooldownFinished(ServerLevel level) { + return level.getGameTime() >= this.cooldownEndsAt; + } + + public void setEntityId(UndertrialSpawner spawner, RandomSource random, EntityType entityType) { + this.getOrCreateNextSpawnData(spawner, random).getEntityToSpawn() + .putString("id", BuiltInRegistries.ENTITY_TYPE.getKey(entityType).toString()); + } + + protected UndertrialSpawnData getOrCreateNextSpawnData(UndertrialSpawner spawner, RandomSource random) { + if (this.nextSpawnData.isPresent()) { + return this.nextSpawnData.get(); + } + SimpleWeightedRandomList potentials = spawner.getConfig().spawnPotentialsDefinition(); + Optional picked = potentials.isEmpty() + ? this.nextSpawnData + : potentials.getRandom(random).map(wrapper -> wrapper.getData()); + this.nextSpawnData = Optional.of(picked.orElseGet(UndertrialSpawnData::new)); + spawner.markUpdated(); + return this.nextSpawnData.get(); + } + + public Entity getOrCreateDisplayEntity(UndertrialSpawner spawner, Level level, UndertrialSpawnerState state) { + if (!state.hasSpinningMob()) { + return null; + } + if (this.displayEntity == null) { + CompoundTag entityTag = this.getOrCreateNextSpawnData(spawner, level.getRandom()).getEntityToSpawn(); + if (entityTag.contains("id", Tag.TAG_STRING)) { + this.displayEntity = EntityType.loadEntityRecursive(entityTag, level, Function.identity()); + } + } + return this.displayEntity; + } + + public CompoundTag getUpdateTag(UndertrialSpawnerState state) { + CompoundTag tag = new CompoundTag(); + if (state == UndertrialSpawnerState.ACTIVE) { + tag.putLong(TAG_NEXT_MOB_SPAWNS_AT, this.nextMobSpawnsAt); + } + this.nextSpawnData.ifPresent(data -> tag.put(TAG_SPAWN_DATA, data.save())); + return tag; + } + + SimpleWeightedRandomList getDispensingItems(ServerLevel level, UndertrialSpawnerConfig config, BlockPos pos) { + if (this.dispensing != null) { + return this.dispensing; + } + LootTable lootTable = level.getServer().getLootData().getLootTable(config.itemsToDropWhenOminous()); + LootParams params = new LootParams.Builder(level).create(LootContextParamSets.EMPTY); + ObjectArrayList items = lootTable.getRandomItems(params, lowResolutionPosition(level, pos)); + if (items.isEmpty()) { + return SimpleWeightedRandomList.empty(); + } + SimpleWeightedRandomList.Builder builder = SimpleWeightedRandomList.builder(); + for (ItemStack stack : items) { + builder.add(stack.copyWithCount(1), stack.getCount()); + } + this.dispensing = builder.build(); + return this.dispensing; + } + + private static long lowResolutionPosition(ServerLevel level, BlockPos pos) { + BlockPos lowRes = new BlockPos(Mth.floor(pos.getX() / 30.0F), Mth.floor(pos.getY() / 20.0F), Mth.floor(pos.getZ() / 30.0F)); + return level.getSeed() + lowRes.asLong(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undertrial/UndertrialSpawnerEffects.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undertrial/UndertrialSpawnerEffects.java new file mode 100644 index 00000000..5c618bc2 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undertrial/UndertrialSpawnerEffects.java @@ -0,0 +1,186 @@ +package com.craisinlord.antarchy.content.block.entity.undertrial; + +import com.craisinlord.antarchy.Antarchy; +import net.minecraft.core.BlockPos; +import net.minecraft.core.particles.ParticleOptions; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.core.particles.SimpleParticleType; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundSource; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; + +public final class UndertrialSpawnerEffects { + public static final int FLAME_NORMAL = 0; + public static final int FLAME_OMINOUS = 1; + private static final int SPAWNER_SPAWN = 1; + private static final int MOB_SPAWN = 2; + private static final int DETECT_PLAYER = 3; + private static final int DETECT_PLAYER_OMINOUS = 4; + private static final int EJECT_ITEM = 5; + private static final int BECOME_OMINOUS = 6; + private static final int OFFSET_BITS = 9; + private static final int OFFSET_MASK = (1 << OFFSET_BITS) - 1; + private static final int OFFSET_BIAS = 1 << (OFFSET_BITS - 1); + private static final int FLAG_SHIFT = OFFSET_BITS * 3; + + private UndertrialSpawnerEffects() { + } + + public static void spawnerSpawn(ServerLevel level, BlockPos spawnerPos, int flame) { + send(level, spawnerPos, SPAWNER_SPAWN, flame); + } + + public static void mobSpawn(ServerLevel level, BlockPos spawnerPos, BlockPos mobPos, int flame) { + send(level, spawnerPos, MOB_SPAWN, packOffset(spawnerPos, mobPos) | (flame << FLAG_SHIFT)); + } + + public static void detectPlayer(ServerLevel level, BlockPos spawnerPos, boolean ominous, int playerCount) { + send(level, spawnerPos, ominous ? DETECT_PLAYER_OMINOUS : DETECT_PLAYER, playerCount); + } + + public static void ejectItem(ServerLevel level, BlockPos spawnerPos) { + send(level, spawnerPos, EJECT_ITEM, 0); + } + + public static void becomeOminous(ServerLevel level, BlockPos spawnerPos, BlockPos effectPos, int data) { + send(level, spawnerPos, BECOME_OMINOUS, packOffset(spawnerPos, effectPos) | ((data == 0 ? 0 : 1) << FLAG_SHIFT)); + } + + private static void send(ServerLevel level, BlockPos spawnerPos, int id, int param) { + BlockState state = level.getBlockState(spawnerPos); + level.blockEvent(spawnerPos, state.getBlock(), id, param); + } + + private static int packOffset(BlockPos origin, BlockPos target) { + int dx = clampOffset(target.getX() - origin.getX()); + int dy = clampOffset(target.getY() - origin.getY()); + int dz = clampOffset(target.getZ() - origin.getZ()); + return (dx + OFFSET_BIAS) | ((dy + OFFSET_BIAS) << OFFSET_BITS) | ((dz + OFFSET_BIAS) << (OFFSET_BITS * 2)); + } + + private static int clampOffset(int value) { + return Math.max(-OFFSET_BIAS, Math.min(OFFSET_BIAS - 1, value)); + } + + private static BlockPos unpackOffset(BlockPos origin, int param) { + int dx = (param & OFFSET_MASK) - OFFSET_BIAS; + int dy = ((param >> OFFSET_BITS) & OFFSET_MASK) - OFFSET_BIAS; + int dz = ((param >> (OFFSET_BITS * 2)) & OFFSET_MASK) - OFFSET_BIAS; + return origin.offset(dx, dy, dz); + } + + public static boolean handle(Level level, BlockPos spawnerPos, int id, int param) { + if (!level.isClientSide) { + return id >= SPAWNER_SPAWN && id <= BECOME_OMINOUS; + } + RandomSource random = level.random; + switch (id) { + case SPAWNER_SPAWN: + addSpawnParticles(level, spawnerPos, random, flameParticle(param)); + return true; + case MOB_SPAWN: { + BlockPos mobPos = unpackOffset(spawnerPos, param); + UndertrialSounds.playLocal(level, mobPos, UndertrialSounds.TRIAL_SPAWNER_SPAWN_MOB, SoundSource.BLOCKS, 1.0F, + (random.nextFloat() - random.nextFloat()) * 0.2F + 1.0F, true); + addSpawnParticles(level, mobPos, random, flameParticle((param >> FLAG_SHIFT) & 1)); + return true; + } + case DETECT_PLAYER: + case DETECT_PLAYER_OMINOUS: + UndertrialSounds.playLocal(level, spawnerPos, UndertrialSounds.TRIAL_SPAWNER_DETECT_PLAYER, SoundSource.BLOCKS, 1.0F, + (random.nextFloat() - random.nextFloat()) * 0.2F + 1.0F, true); + addDetectPlayerParticles(level, spawnerPos, random, param, detectedPlayerParticle(id == DETECT_PLAYER_OMINOUS)); + return true; + case EJECT_ITEM: + UndertrialSounds.playLocal(level, spawnerPos, UndertrialSounds.TRIAL_SPAWNER_EJECT_ITEM, SoundSource.BLOCKS, 1.0F, + (random.nextFloat() - random.nextFloat()) * 0.2F + 1.0F, true); + addEjectItemParticles(level, spawnerPos, random); + return true; + case BECOME_OMINOUS: { + BlockPos effectPos = unpackOffset(spawnerPos, param); + boolean loud = ((param >> FLAG_SHIFT) & 1) != 0; + UndertrialSounds.playLocal(level, effectPos, UndertrialSounds.TRIAL_SPAWNER_OMINOUS_ACTIVATE, SoundSource.BLOCKS, + loud ? 1.0F : 0.3F, (random.nextFloat() - random.nextFloat()) * 0.2F + 1.0F, true); + addDetectPlayerParticles(level, effectPos, random, 0, detectedPlayerParticle(true)); + addBecomeOminousParticles(level, effectPos, random); + return true; + } + default: + return false; + } + } + + private static SimpleParticleType flameParticle(int flame) { + return flame == FLAME_OMINOUS ? ParticleTypes.SOUL_FIRE_FLAME : ParticleTypes.FLAME; + } + + private static ParticleOptions detectedPlayerParticle(boolean ominous) { + SimpleParticleType detection = antarchyParticle("undertrial_spawner_detection"); + if (detection != null) { + return detection; + } + return ominous ? ParticleTypes.SOUL_FIRE_FLAME : ParticleTypes.FLAME; + } + + private static ParticleOptions omenParticle() { + SimpleParticleType omen = antarchyParticle("undertrial_omen"); + return omen != null ? omen : ParticleTypes.SOUL; + } + + private static SimpleParticleType antarchyParticle(String path) { + return BuiltInRegistries.PARTICLE_TYPE.get(new ResourceLocation(Antarchy.MODID, path)) instanceof SimpleParticleType simple + ? simple : null; + } + + public static void addSpawnParticles(Level level, BlockPos pos, RandomSource random, SimpleParticleType flame) { + for (int i = 0; i < 20; i++) { + double x = pos.getX() + 0.5D + (random.nextDouble() - 0.5D) * 2.0D; + double y = pos.getY() + 0.5D + (random.nextDouble() - 0.5D) * 2.0D; + double z = pos.getZ() + 0.5D + (random.nextDouble() - 0.5D) * 2.0D; + level.addParticle(ParticleTypes.SMOKE, x, y, z, 0.0D, 0.0D, 0.0D); + level.addParticle(flame, x, y, z, 0.0D, 0.0D, 0.0D); + } + } + + public static void addBecomeOminousParticles(Level level, BlockPos pos, RandomSource random) { + ParticleOptions omen = omenParticle(); + for (int i = 0; i < 20; i++) { + double x = pos.getX() + 0.5D + (random.nextDouble() - 0.5D) * 2.0D; + double y = pos.getY() + 0.5D + (random.nextDouble() - 0.5D) * 2.0D; + double z = pos.getZ() + 0.5D + (random.nextDouble() - 0.5D) * 2.0D; + double xd = random.nextGaussian() * 0.02D; + double yd = random.nextGaussian() * 0.02D; + double zd = random.nextGaussian() * 0.02D; + level.addParticle(omen, x, y, z, xd, yd, zd); + level.addParticle(ParticleTypes.SOUL_FIRE_FLAME, x, y, z, xd, yd, zd); + } + } + + public static void addDetectPlayerParticles(Level level, BlockPos pos, RandomSource random, int playerCount, ParticleOptions particle) { + for (int i = 0; i < 30 + Math.min(playerCount, 10) * 5; i++) { + double dx = (2.0F * random.nextFloat() - 1.0F) * 0.65D; + double dz = (2.0F * random.nextFloat() - 1.0F) * 0.65D; + double x = pos.getX() + 0.5D + dx; + double y = pos.getY() + 0.1D + random.nextFloat() * 0.8D; + double z = pos.getZ() + 0.5D + dz; + level.addParticle(particle, x, y, z, 0.0D, 0.0D, 0.0D); + } + } + + public static void addEjectItemParticles(Level level, BlockPos pos, RandomSource random) { + for (int i = 0; i < 20; i++) { + double x = pos.getX() + 0.4D + random.nextDouble() * 0.2D; + double y = pos.getY() + 0.4D + random.nextDouble() * 0.2D; + double z = pos.getZ() + 0.4D + random.nextDouble() * 0.2D; + double xd = random.nextGaussian() * 0.02D; + double yd = random.nextGaussian() * 0.02D; + double zd = random.nextGaussian() * 0.02D; + level.addParticle(ParticleTypes.SMALL_FLAME, x, y, z, xd, yd, zd * 0.25D); + level.addParticle(ParticleTypes.SMOKE, x, y, z, xd, yd, zd); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undertrial/UndertrialSpawnerState.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undertrial/UndertrialSpawnerState.java new file mode 100644 index 00000000..cd238ade --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undertrial/UndertrialSpawnerState.java @@ -0,0 +1,211 @@ +package com.craisinlord.antarchy.content.block.entity.undertrial; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundSource; +import net.minecraft.util.Mth; +import net.minecraft.util.StringRepresentable; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.ClipContext; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.Vec3; +import net.minecraft.Util; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.UUID; + +public enum UndertrialSpawnerState implements StringRepresentable { + INACTIVE("inactive", 0, -1.0D, false), + WAITING_FOR_PLAYERS("waiting_for_players", 4, 200.0D, true), + ACTIVE("active", 8, 1000.0D, true), + WAITING_FOR_REWARD_EJECTION("waiting_for_reward_ejection", 8, -1.0D, false), + EJECTING_REWARD("ejecting_reward", 8, -1.0D, false), + COOLDOWN("cooldown", 0, -1.0D, false); + + private static final float DELAY_BEFORE_EJECT_AFTER_KILLING_LAST_MOB = 40.0F; + private static final int TIME_BETWEEN_EACH_EJECTION = Mth.floor(30.0F); + private final String name; + private final int lightLevel; + private final double spinningMobSpeed; + private final boolean isCapableOfSpawning; + + UndertrialSpawnerState(String name, int lightLevel, double spinningMobSpeed, boolean isCapableOfSpawning) { + this.name = name; + this.lightLevel = lightLevel; + this.spinningMobSpeed = spinningMobSpeed; + this.isCapableOfSpawning = isCapableOfSpawning; + } + + UndertrialSpawnerState tickAndGetNext(BlockPos pos, UndertrialSpawner spawner, ServerLevel level) { + UndertrialSpawnerData data = spawner.getData(); + UndertrialSpawnerConfig config = spawner.getConfig(); + switch (this) { + case INACTIVE: + return data.getOrCreateDisplayEntity(spawner, level, WAITING_FOR_PLAYERS) == null ? this : WAITING_FOR_PLAYERS; + case WAITING_FOR_PLAYERS: + if (!spawner.canSpawnInLevel(level)) { + data.reset(); + return this; + } + if (!data.hasMobToSpawn(spawner, level.random)) { + return INACTIVE; + } + data.tryDetectPlayers(level, pos, spawner); + return data.detectedPlayers.isEmpty() ? this : ACTIVE; + case ACTIVE: { + if (!spawner.canSpawnInLevel(level)) { + data.reset(); + return WAITING_FOR_PLAYERS; + } + if (!data.hasMobToSpawn(spawner, level.random)) { + return INACTIVE; + } + int additionalPlayers = data.countAdditionalPlayers(pos); + data.tryDetectPlayers(level, pos, spawner); + if (spawner.isOminous()) { + spawnOminousItem(level, pos, spawner); + } + if (data.hasFinishedSpawningAllMobs(config, additionalPlayers)) { + if (data.haveAllCurrentMobsDied()) { + data.cooldownEndsAt = level.getGameTime() + spawner.getTargetCooldownLength(); + data.totalMobsSpawned = 0; + data.nextMobSpawnsAt = 0L; + return WAITING_FOR_REWARD_EJECTION; + } + } else if (data.isReadyToSpawnNextMob(level, config, additionalPlayers)) { + spawner.spawnMob(level, pos).ifPresent(uuid -> { + data.currentMobs.add(uuid); + data.totalMobsSpawned++; + data.nextMobSpawnsAt = level.getGameTime() + config.ticksBetweenSpawn(); + config.spawnPotentialsDefinition().getRandom(level.getRandom()).ifPresent(wrapper -> { + data.nextSpawnData = Optional.of(wrapper.getData()); + spawner.markUpdated(); + }); + }); + } + return this; + } + case WAITING_FOR_REWARD_EJECTION: + if (data.isReadyToOpenShutter(level, DELAY_BEFORE_EJECT_AFTER_KILLING_LAST_MOB, spawner.getTargetCooldownLength())) { + UndertrialSounds.playServer(level, pos, UndertrialSounds.TRIAL_SPAWNER_OPEN_SHUTTER, SoundSource.BLOCKS, 1.0F, 1.0F); + return EJECTING_REWARD; + } + return this; + case EJECTING_REWARD: + if (!data.isReadyToEjectItems(level, TIME_BETWEEN_EACH_EJECTION, spawner.getTargetCooldownLength())) { + return this; + } + if (data.detectedPlayers.isEmpty()) { + UndertrialSounds.playServer(level, pos, UndertrialSounds.TRIAL_SPAWNER_CLOSE_SHUTTER, SoundSource.BLOCKS, 1.0F, 1.0F); + data.ejectingLootTable = Optional.empty(); + return COOLDOWN; + } + if (data.ejectingLootTable.isEmpty()) { + data.ejectingLootTable = config.lootTablesToEject().getRandomValue(level.getRandom()); + } + data.ejectingLootTable.ifPresent(lootTable -> spawner.ejectReward(level, pos, lootTable)); + data.detectedPlayers.remove(data.detectedPlayers.iterator().next()); + return this; + case COOLDOWN: + default: + data.tryDetectPlayers(level, pos, spawner); + if (!data.detectedPlayers.isEmpty()) { + data.totalMobsSpawned = 0; + data.nextMobSpawnsAt = 0L; + return ACTIVE; + } + if (data.isCooldownFinished(level)) { + spawner.removeOminous(level, pos); + data.reset(); + return WAITING_FOR_PLAYERS; + } + return this; + } + } + + private void spawnOminousItem(ServerLevel level, BlockPos pos, UndertrialSpawner spawner) { + UndertrialSpawnerData data = spawner.getData(); + UndertrialSpawnerConfig config = spawner.getConfig(); + ItemStack stack = data.getDispensingItems(level, config, pos).getRandomValue(level.random).orElse(ItemStack.EMPTY); + if (stack.isEmpty() || level.getGameTime() < data.cooldownEndsAt) { + return; + } + calculatePositionToSpawnItem(level, pos, spawner, data).ifPresent(position -> { + ItemEntity item = new ItemEntity(level, position.x, position.y, position.z, stack.copy()); + item.setDeltaMovement(Vec3.ZERO); + level.addFreshEntity(item); + float pitch = (level.getRandom().nextFloat() - level.getRandom().nextFloat()) * 0.2F + 1.0F; + UndertrialSounds.playServer(level, BlockPos.containing(position), UndertrialSounds.TRIAL_SPAWNER_SPAWN_ITEM_BEGIN, SoundSource.BLOCKS, 1.0F, pitch); + data.cooldownEndsAt = level.getGameTime() + spawner.getOminousConfig().ticksBetweenItemSpawners(); + }); + } + + private static Optional calculatePositionToSpawnItem(ServerLevel level, BlockPos pos, UndertrialSpawner spawner, UndertrialSpawnerData data) { + List players = new ArrayList<>(); + for (UUID uuid : data.detectedPlayers) { + Player player = level.getPlayerByUUID(uuid); + if (player != null && !player.isCreative() && !player.isSpectator() && player.isAlive() + && player.distanceToSqr(pos.getCenter()) <= Mth.square(spawner.getRequiredPlayerRange())) { + players.add(player); + } + } + if (players.isEmpty()) { + return Optional.empty(); + } + Entity entity = selectEntityToSpawnItemAbove(players, data.currentMobs, spawner, pos, level); + return entity == null ? Optional.empty() : calculatePositionAbove(entity, level); + } + + private static Optional calculatePositionAbove(Entity entity, ServerLevel level) { + Vec3 start = entity.position(); + Vec3 end = start.relative(Direction.UP, entity.getBbHeight() + 2.0F + level.random.nextInt(4)); + BlockHitResult hit = level.clip(new ClipContext(start, end, ClipContext.Block.VISUAL, ClipContext.Fluid.NONE, null)); + Vec3 position = hit.getBlockPos().getCenter().relative(Direction.DOWN, 1.0D); + BlockPos blockPos = BlockPos.containing(position); + return !level.getBlockState(blockPos).getCollisionShape(level, blockPos).isEmpty() ? Optional.empty() : Optional.of(position); + } + + private static Entity selectEntityToSpawnItemAbove(List players, Set mobs, UndertrialSpawner spawner, BlockPos pos, ServerLevel level) { + List livingMobs = new ArrayList<>(); + for (UUID uuid : mobs) { + Entity mob = level.getEntity(uuid); + if (mob != null && mob.isAlive() && mob.distanceToSqr(pos.getCenter()) <= Mth.square(spawner.getRequiredPlayerRange())) { + livingMobs.add(mob); + } + } + List candidates = level.random.nextBoolean() ? livingMobs : players; + if (candidates.isEmpty()) { + return null; + } + return candidates.size() == 1 ? candidates.get(0) : Objects.requireNonNull(Util.getRandom(candidates, level.random)); + } + + public int lightLevel() { + return this.lightLevel; + } + + public double spinningMobSpeed() { + return this.spinningMobSpeed; + } + + public boolean hasSpinningMob() { + return this.spinningMobSpeed >= 0.0D; + } + + public boolean isCapableOfSpawning() { + return this.isCapableOfSpawning; + } + + @Override + public String getSerializedName() { + return this.name; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undervault/UnderVaultClientData.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undervault/UnderVaultClientData.java new file mode 100644 index 00000000..5a4891aa --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undervault/UnderVaultClientData.java @@ -0,0 +1,22 @@ +package com.craisinlord.antarchy.content.block.entity.undervault; + +import net.minecraft.util.Mth; + +public class UnderVaultClientData { + public static final float ROTATION_SPEED = 10.0F; + private float currentSpin; + private float previousSpin; + + public float currentSpin() { + return this.currentSpin; + } + + public float previousSpin() { + return this.previousSpin; + } + + void updateDisplayItemSpin() { + this.previousSpin = this.currentSpin; + this.currentSpin = Mth.wrapDegrees(this.currentSpin + ROTATION_SPEED); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undervault/UnderVaultConfig.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undervault/UnderVaultConfig.java new file mode 100644 index 00000000..2af7d0c1 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undervault/UnderVaultConfig.java @@ -0,0 +1,67 @@ +package com.craisinlord.antarchy.content.block.entity.undervault; + +import com.craisinlord.antarchy.content.block.entity.undertrial.UndertrialPlayerDetector; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.Tag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemStack; + +import java.util.Optional; + +public record UnderVaultConfig( + ResourceLocation lootTable, + double activationRange, + double deactivationRange, + ItemStack keyItem, + Optional overrideLootTableToDisplay, + UndertrialPlayerDetector playerDetector, + UndertrialPlayerDetector.EntitySelector entitySelector +) { + public static final String TAG_NAME = "config"; + public static final ResourceLocation TRIAL_CHAMBERS_REWARD = new ResourceLocation("minecraft", "chests/trial_chambers/reward"); + public static final UnderVaultConfig DEFAULT = new UnderVaultConfig(TRIAL_CHAMBERS_REWARD, 4.0D, 4.5D, ItemStack.EMPTY, + Optional.empty(), UndertrialPlayerDetector.INCLUDING_CREATIVE_PLAYERS, UndertrialPlayerDetector.EntitySelector.SELECT_FROM_LEVEL); + + public UnderVaultConfig(ResourceLocation lootTable, double activationRange, double deactivationRange, ItemStack keyItem, + Optional overrideLootTableToDisplay) { + this(lootTable, activationRange, deactivationRange, keyItem, overrideLootTableToDisplay, + DEFAULT.playerDetector(), DEFAULT.entitySelector()); + } + + public static Optional load(CompoundTag tag) { + ResourceLocation lootTable = DEFAULT.lootTable; + if (tag.contains("loot_table", Tag.TAG_STRING)) { + ResourceLocation parsed = ResourceLocation.tryParse(tag.getString("loot_table")); + if (parsed != null) { + lootTable = parsed; + } + } + double activation = tag.contains("activation_range", Tag.TAG_ANY_NUMERIC) ? tag.getDouble("activation_range") : DEFAULT.activationRange; + double deactivation = tag.contains("deactivation_range", Tag.TAG_ANY_NUMERIC) ? tag.getDouble("deactivation_range") : DEFAULT.deactivationRange; + ItemStack key = tag.contains("key_item", Tag.TAG_COMPOUND) ? ItemStack.of(tag.getCompound("key_item")) : ItemStack.EMPTY; + Optional override = tag.contains("override_loot_table_to_display", Tag.TAG_STRING) + ? Optional.ofNullable(ResourceLocation.tryParse(tag.getString("override_loot_table_to_display"))) : Optional.empty(); + if (activation > deactivation) { + return Optional.empty(); + } + return Optional.of(new UnderVaultConfig(lootTable, activation, deactivation, key, override)); + } + + public CompoundTag save() { + CompoundTag tag = new CompoundTag(); + if (!this.lootTable.equals(DEFAULT.lootTable)) { + tag.putString("loot_table", this.lootTable.toString()); + } + if (this.activationRange != DEFAULT.activationRange) { + tag.putDouble("activation_range", this.activationRange); + } + if (this.deactivationRange != DEFAULT.deactivationRange) { + tag.putDouble("deactivation_range", this.deactivationRange); + } + if (!this.keyItem.isEmpty()) { + tag.put("key_item", this.keyItem.save(new CompoundTag())); + } + this.overrideLootTableToDisplay.ifPresent(id -> tag.putString("override_loot_table_to_display", id.toString())); + return tag; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undervault/UnderVaultData.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undervault/UnderVaultData.java new file mode 100644 index 00000000..341eafa8 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undervault/UnderVaultData.java @@ -0,0 +1,61 @@ +package com.craisinlord.antarchy.content.block.entity.undervault; + +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.Tag; +import net.minecraft.world.level.Level; + +public final class UnderVaultData { + private final UnderVaultServerData serverData = new UnderVaultServerData(); + private final UnderVaultSharedData sharedData = new UnderVaultSharedData(); + private final UnderVaultClientData clientData = new UnderVaultClientData(); + private UnderVaultConfig config = UnderVaultConfig.DEFAULT; + private Level level; + + public void setLevel(Level level) { + this.level = level; + } + + public Level getLevel() { + return this.level; + } + + public CompoundTag save() { + CompoundTag tag = new CompoundTag(); + tag.put(UnderVaultConfig.TAG_NAME, this.config.save()); + tag.put(UnderVaultSharedData.TAG_NAME, this.sharedData.save()); + tag.put(UnderVaultServerData.TAG_NAME, this.serverData.save()); + return tag; + } + + public void load(CompoundTag tag) { + if (tag.contains(UnderVaultServerData.TAG_NAME, Tag.TAG_COMPOUND)) { + this.serverData.set(UnderVaultServerData.load(tag.getCompound(UnderVaultServerData.TAG_NAME))); + } + if (tag.contains(UnderVaultConfig.TAG_NAME, Tag.TAG_COMPOUND)) { + UnderVaultConfig.load(tag.getCompound(UnderVaultConfig.TAG_NAME)).ifPresent(loaded -> this.config = loaded); + } + if (tag.contains(UnderVaultSharedData.TAG_NAME, Tag.TAG_COMPOUND)) { + this.sharedData.set(UnderVaultSharedData.load(tag.getCompound(UnderVaultSharedData.TAG_NAME))); + } + } + + public UnderVaultServerData getServerData() { + return this.level != null && !this.level.isClientSide ? this.serverData : null; + } + + public UnderVaultSharedData getSharedData() { + return this.sharedData; + } + + public UnderVaultClientData getClientData() { + return this.clientData; + } + + public UnderVaultConfig getConfig() { + return this.config; + } + + public void setConfig(UnderVaultConfig config) { + this.config = config; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undervault/UnderVaultEffects.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undervault/UnderVaultEffects.java new file mode 100644 index 00000000..c1d82813 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undervault/UnderVaultEffects.java @@ -0,0 +1,44 @@ +package com.craisinlord.antarchy.content.block.entity.undervault; + +import com.craisinlord.antarchy.content.block.entity.undertrial.UndertrialSounds; +import com.craisinlord.antarchy.content.block.entity.undertrial.UndertrialSpawnerEffects; +import net.minecraft.core.BlockPos; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundSource; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.Level; + +public final class UnderVaultEffects { + private static final int DEACTIVATE = 1; + private static final int EJECT_ITEM = 2; + + private UnderVaultEffects() { + } + + public static void deactivate(ServerLevel level, BlockPos pos, boolean ominous) { + level.blockEvent(pos, level.getBlockState(pos).getBlock(), DEACTIVATE, ominous ? 1 : 0); + } + + public static void ejectItem(ServerLevel level, BlockPos pos) { + level.blockEvent(pos, level.getBlockState(pos).getBlock(), EJECT_ITEM, 0); + } + + public static boolean handle(Level level, BlockPos pos, int id, int param) { + if (!level.isClientSide) { + return id == DEACTIVATE || id == EJECT_ITEM; + } + RandomSource random = level.random; + if (id == DEACTIVATE) { + UnderVaultLogic.Client.emitDeactivationParticles(level, pos, param == 0 ? ParticleTypes.SMALL_FLAME : ParticleTypes.SOUL_FIRE_FLAME); + UndertrialSounds.playLocal(level, pos, UndertrialSounds.VAULT_DEACTIVATE, SoundSource.BLOCKS, 1.0F, + (random.nextFloat() - random.nextFloat()) * 0.2F + 1.0F, true); + return true; + } + if (id == EJECT_ITEM) { + UndertrialSpawnerEffects.addEjectItemParticles(level, pos, random); + return true; + } + return false; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undervault/UnderVaultLogic.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undervault/UnderVaultLogic.java new file mode 100644 index 00000000..0e029593 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undervault/UnderVaultLogic.java @@ -0,0 +1,261 @@ +package com.craisinlord.antarchy.content.block.entity.undervault; + +import com.craisinlord.antarchy.content.block.UnderVaultBlock; +import com.craisinlord.antarchy.content.block.entity.undertrial.UndertrialSounds; +import net.minecraft.Util; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.particles.ParticleOptions; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundSource; +import net.minecraft.stats.Stats; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.loot.BuiltInLootTables; +import net.minecraft.world.level.storage.loot.LootParams; +import net.minecraft.world.level.storage.loot.LootTable; +import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; +import net.minecraft.world.level.storage.loot.parameters.LootContextParams; +import net.minecraft.world.phys.Vec3; + +import java.util.List; +import java.util.Set; +import java.util.UUID; + +public final class UnderVaultLogic { + private UnderVaultLogic() { + } + + public static final class Client { + private static final int PARTICLE_TICK_RATE = 20; + private static final float IDLE_PARTICLE_CHANCE = 0.5F; + private static final float AMBIENT_SOUND_CHANCE = 0.02F; + private static final int ACTIVATION_PARTICLE_COUNT = 20; + private static final int DEACTIVATION_PARTICLE_COUNT = 20; + + private Client() { + } + + public static void tick(Level level, BlockPos pos, BlockState state, UnderVaultClientData clientData, UnderVaultSharedData sharedData) { + clientData.updateDisplayItemSpin(); + if (level.getGameTime() % PARTICLE_TICK_RATE == 0L) { + emitConnectionParticlesForNearbyPlayers(level, pos, state, sharedData); + } + emitIdleParticles(level, pos, sharedData, state.getValue(UnderVaultBlock.OMINOUS) ? ParticleTypes.SOUL_FIRE_FLAME : ParticleTypes.SMALL_FLAME); + playIdleSounds(level, pos, sharedData); + } + + public static void emitActivationParticles(Level level, BlockPos pos, BlockState state, UnderVaultSharedData sharedData, ParticleOptions particle) { + emitConnectionParticlesForNearbyPlayers(level, pos, state, sharedData); + RandomSource random = level.random; + for (int i = 0; i < ACTIVATION_PARTICLE_COUNT; i++) { + Vec3 position = randomPosInsideCage(pos, random); + level.addParticle(ParticleTypes.SMOKE, position.x(), position.y(), position.z(), 0.0D, 0.0D, 0.0D); + level.addParticle(particle, position.x(), position.y(), position.z(), 0.0D, 0.0D, 0.0D); + } + } + + public static void emitDeactivationParticles(Level level, BlockPos pos, ParticleOptions particle) { + RandomSource random = level.random; + for (int i = 0; i < DEACTIVATION_PARTICLE_COUNT; i++) { + Vec3 position = randomPosCenterOfCage(pos, random); + Vec3 velocity = new Vec3(random.nextGaussian() * 0.02D, random.nextGaussian() * 0.02D, random.nextGaussian() * 0.02D); + level.addParticle(particle, position.x(), position.y(), position.z(), velocity.x(), velocity.y(), velocity.z()); + } + } + + private static void emitIdleParticles(Level level, BlockPos pos, UnderVaultSharedData sharedData, ParticleOptions particle) { + RandomSource random = level.getRandom(); + if (random.nextFloat() <= IDLE_PARTICLE_CHANCE) { + Vec3 position = randomPosInsideCage(pos, random); + level.addParticle(ParticleTypes.SMOKE, position.x(), position.y(), position.z(), 0.0D, 0.0D, 0.0D); + if (shouldDisplayActiveEffects(sharedData)) { + level.addParticle(particle, position.x(), position.y(), position.z(), 0.0D, 0.0D, 0.0D); + } + } + } + + private static void emitConnectionParticlesForPlayer(Level level, Vec3 keyhole, Player player) { + RandomSource random = level.random; + Vec3 toPlayer = keyhole.vectorTo(player.position().add(0.0D, player.getBbHeight() / 2.0F, 0.0D)); + int count = Mth.nextInt(random, 2, 5); + for (int i = 0; i < count; i++) { + Vec3 offset = toPlayer.offsetRandom(random, 1.0F); + level.addParticle(ParticleTypes.ENCHANT, keyhole.x(), keyhole.y(), keyhole.z(), offset.x(), offset.y(), offset.z()); + } + } + + private static void emitConnectionParticlesForNearbyPlayers(Level level, BlockPos pos, BlockState state, UnderVaultSharedData sharedData) { + Set players = sharedData.getConnectedPlayers(); + if (players.isEmpty()) { + return; + } + Vec3 keyhole = keyholePos(pos, state.getValue(UnderVaultBlock.FACING)); + for (UUID uuid : players) { + Player player = level.getPlayerByUUID(uuid); + if (player != null && isWithinConnectionRange(pos, sharedData, player)) { + emitConnectionParticlesForPlayer(level, keyhole, player); + } + } + } + + private static boolean isWithinConnectionRange(BlockPos pos, UnderVaultSharedData sharedData, Player player) { + return player.blockPosition().distSqr(pos) <= Mth.square(sharedData.connectedParticlesRange()); + } + + private static void playIdleSounds(Level level, BlockPos pos, UnderVaultSharedData sharedData) { + if (shouldDisplayActiveEffects(sharedData)) { + RandomSource random = level.getRandom(); + if (random.nextFloat() <= AMBIENT_SOUND_CHANCE) { + UndertrialSounds.playLocal(level, pos, UndertrialSounds.VAULT_AMBIENT, SoundSource.BLOCKS, + random.nextFloat() * 0.25F + 0.75F, random.nextFloat() + 0.5F, false); + } + } + } + + public static boolean shouldDisplayActiveEffects(UnderVaultSharedData sharedData) { + return sharedData.hasDisplayItem(); + } + + private static Vec3 randomPosCenterOfCage(BlockPos pos, RandomSource random) { + return Vec3.atLowerCornerOf(pos).add(Mth.nextDouble(random, 0.4D, 0.6D), Mth.nextDouble(random, 0.4D, 0.6D), Mth.nextDouble(random, 0.4D, 0.6D)); + } + + private static Vec3 randomPosInsideCage(BlockPos pos, RandomSource random) { + return Vec3.atLowerCornerOf(pos).add(Mth.nextDouble(random, 0.1D, 0.9D), Mth.nextDouble(random, 0.25D, 0.75D), Mth.nextDouble(random, 0.1D, 0.9D)); + } + + private static Vec3 keyholePos(BlockPos pos, Direction direction) { + return Vec3.atBottomCenterOf(pos).add(direction.getStepX() * 0.5D, 1.75D, direction.getStepZ() * 0.5D); + } + } + + public static final class Server { + private static final int UNLOCKING_DELAY_TICKS = 14; + private static final int DISPLAY_CYCLE_TICK_RATE = 20; + private static final int INSERT_FAIL_SOUND_BUFFER_TICKS = 15; + + private Server() { + } + + public static void tick(ServerLevel level, BlockPos pos, BlockState state, UnderVaultConfig config, + UnderVaultServerData serverData, UnderVaultSharedData sharedData) { + UnderVaultState vaultState = state.getValue(UnderVaultBlock.STATE); + if (shouldCycleDisplayItem(level.getGameTime(), vaultState)) { + cycleDisplayItemFromLootTable(level, vaultState, config, sharedData, pos); + } + BlockState nextState = state; + if (level.getGameTime() >= serverData.stateUpdatingResumesAt()) { + nextState = state.setValue(UnderVaultBlock.STATE, vaultState.tickAndGetNext(level, pos, config, serverData, sharedData)); + if (!state.equals(nextState)) { + setVaultState(level, pos, state, nextState, config, sharedData); + } + } + if (serverData.isDirty || sharedData.isDirty) { + level.blockEntityChanged(pos); + if (!state.isAir()) { + level.updateNeighbourForOutputSignal(pos, state.getBlock()); + } + if (sharedData.isDirty) { + level.sendBlockUpdated(pos, state, nextState, 2); + } + serverData.isDirty = false; + sharedData.isDirty = false; + } + } + + public static void tryInsertKey(ServerLevel level, BlockPos pos, BlockState state, UnderVaultConfig config, + UnderVaultServerData serverData, UnderVaultSharedData sharedData, Player player, ItemStack stack) { + UnderVaultState vaultState = state.getValue(UnderVaultBlock.STATE); + if (!canEjectReward(config, vaultState)) { + return; + } + if (!isValidToInsert(config, stack)) { + playInsertFailSound(level, serverData, pos, UndertrialSounds.VAULT_INSERT_ITEM_FAIL); + } else if (serverData.hasRewardedPlayer(player)) { + playInsertFailSound(level, serverData, pos, UndertrialSounds.VAULT_REJECT_REWARDED_PLAYER); + } else { + List items = resolveItemsToEject(level, config, pos, player); + if (!items.isEmpty()) { + player.awardStat(Stats.ITEM_USED.get(stack.getItem())); + if (!player.getAbilities().instabuild) { + stack.shrink(config.keyItem().getCount()); + } + unlock(level, state, pos, config, serverData, sharedData, items); + serverData.addToRewardedPlayers(player); + sharedData.updateConnectedPlayersWithinRange(level, pos, serverData, config, config.deactivationRange()); + } + } + } + + static void setVaultState(ServerLevel level, BlockPos pos, BlockState oldState, BlockState newState, + UnderVaultConfig config, UnderVaultSharedData sharedData) { + UnderVaultState from = oldState.getValue(UnderVaultBlock.STATE); + UnderVaultState to = newState.getValue(UnderVaultBlock.STATE); + level.setBlock(pos, newState, 3); + from.onTransition(level, pos, to, config, sharedData, newState.getValue(UnderVaultBlock.OMINOUS)); + } + + static void cycleDisplayItemFromLootTable(ServerLevel level, UnderVaultState state, UnderVaultConfig config, + UnderVaultSharedData sharedData, BlockPos pos) { + if (!canEjectReward(config, state)) { + sharedData.setDisplayItem(ItemStack.EMPTY); + } else { + ItemStack stack = getRandomDisplayItemFromLootTable(level, pos, config.overrideLootTableToDisplay().orElse(config.lootTable())); + sharedData.setDisplayItem(stack); + } + } + + private static ItemStack getRandomDisplayItemFromLootTable(ServerLevel level, BlockPos pos, ResourceLocation lootTableId) { + LootTable lootTable = level.getServer().getLootData().getLootTable(lootTableId); + LootParams params = new LootParams.Builder(level) + .withParameter(LootContextParams.ORIGIN, Vec3.atCenterOf(pos)) + .create(LootContextParamSets.CHEST); + List items = lootTable.getRandomItems(params); + return items.isEmpty() ? ItemStack.EMPTY : Util.getRandom(items, level.getRandom()); + } + + private static void unlock(ServerLevel level, BlockState state, BlockPos pos, UnderVaultConfig config, + UnderVaultServerData serverData, UnderVaultSharedData sharedData, List items) { + serverData.setItemsToEject(items); + sharedData.setDisplayItem(serverData.getNextItemToEject()); + serverData.pauseStateUpdatingUntil(level.getGameTime() + UNLOCKING_DELAY_TICKS); + setVaultState(level, pos, state, state.setValue(UnderVaultBlock.STATE, UnderVaultState.UNLOCKING), config, sharedData); + } + + private static List resolveItemsToEject(ServerLevel level, UnderVaultConfig config, BlockPos pos, Player player) { + LootTable lootTable = level.getServer().getLootData().getLootTable(config.lootTable()); + LootParams params = new LootParams.Builder(level) + .withParameter(LootContextParams.ORIGIN, Vec3.atCenterOf(pos)) + .withLuck(player.getLuck()) + .withParameter(LootContextParams.THIS_ENTITY, player) + .create(LootContextParamSets.CHEST); + return lootTable.getRandomItems(params); + } + + private static boolean canEjectReward(UnderVaultConfig config, UnderVaultState state) { + return !config.lootTable().equals(BuiltInLootTables.EMPTY) && !config.keyItem().isEmpty() && state != UnderVaultState.INACTIVE; + } + + private static boolean isValidToInsert(UnderVaultConfig config, ItemStack stack) { + return ItemStack.isSameItemSameTags(stack, config.keyItem()) && stack.getCount() >= config.keyItem().getCount(); + } + + private static boolean shouldCycleDisplayItem(long gameTime, UnderVaultState state) { + return gameTime % DISPLAY_CYCLE_TICK_RATE == 0L && state == UnderVaultState.ACTIVE; + } + + private static void playInsertFailSound(ServerLevel level, UnderVaultServerData serverData, BlockPos pos, UndertrialSounds.Entry sound) { + if (level.getGameTime() >= serverData.getLastInsertFailTimestamp() + INSERT_FAIL_SOUND_BUFFER_TICKS) { + UndertrialSounds.playServer(level, pos, sound, SoundSource.BLOCKS, 1.0F, 1.0F); + serverData.setLastInsertFailTimestamp(level.getGameTime()); + } + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undervault/UnderVaultServerData.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undervault/UnderVaultServerData.java new file mode 100644 index 00000000..bba8bef4 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undervault/UnderVaultServerData.java @@ -0,0 +1,158 @@ +package com.craisinlord.antarchy.content.block.entity.undervault; + +import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import it.unimi.dsi.fastutil.objects.ObjectLinkedOpenHashSet; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.Tag; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; + +import java.util.Iterator; +import java.util.List; +import java.util.Set; +import java.util.UUID; + +public class UnderVaultServerData { + public static final String TAG_NAME = "server_data"; + private static final int MAX_REWARD_PLAYERS = 128; + private final Set rewardedPlayers = new ObjectLinkedOpenHashSet<>(); + private long stateUpdatingResumesAt; + private final List itemsToEject = new ObjectArrayList<>(); + private long lastInsertFailTimestamp; + private int totalEjectionsNeeded; + boolean isDirty; + + public static UnderVaultServerData load(CompoundTag tag) { + UnderVaultServerData data = new UnderVaultServerData(); + data.rewardedPlayers.addAll(UnderVaultSharedData.loadUuidSet(tag.get("rewarded_players"))); + data.stateUpdatingResumesAt = tag.contains("state_updating_resumes_at", Tag.TAG_ANY_NUMERIC) ? tag.getLong("state_updating_resumes_at") : 0L; + if (tag.contains("items_to_eject", Tag.TAG_LIST)) { + ListTag list = tag.getList("items_to_eject", Tag.TAG_COMPOUND); + List items = new ObjectArrayList<>(); + boolean valid = true; + for (int i = 0; i < list.size(); i++) { + ItemStack stack = ItemStack.of(list.getCompound(i)); + if (stack.isEmpty()) { + valid = false; + break; + } + items.add(stack); + } + if (valid) { + data.itemsToEject.addAll(items); + } + } + data.totalEjectionsNeeded = tag.contains("total_ejections_needed", Tag.TAG_ANY_NUMERIC) ? tag.getInt("total_ejections_needed") : 0; + return data; + } + + public CompoundTag save() { + CompoundTag tag = new CompoundTag(); + if (!this.rewardedPlayers.isEmpty()) { + tag.put("rewarded_players", UnderVaultSharedData.saveUuidSet(this.rewardedPlayers)); + } + if (this.stateUpdatingResumesAt != 0L) { + tag.putLong("state_updating_resumes_at", this.stateUpdatingResumesAt); + } + if (!this.itemsToEject.isEmpty()) { + ListTag list = new ListTag(); + for (ItemStack stack : this.itemsToEject) { + list.add(stack.save(new CompoundTag())); + } + tag.put("items_to_eject", list); + } + if (this.totalEjectionsNeeded != 0) { + tag.putInt("total_ejections_needed", this.totalEjectionsNeeded); + } + return tag; + } + + void setLastInsertFailTimestamp(long timestamp) { + this.lastInsertFailTimestamp = timestamp; + } + + long getLastInsertFailTimestamp() { + return this.lastInsertFailTimestamp; + } + + Set getRewardedPlayers() { + return this.rewardedPlayers; + } + + boolean hasRewardedPlayer(Player player) { + return this.rewardedPlayers.contains(player.getUUID()); + } + + public void addToRewardedPlayers(Player player) { + this.rewardedPlayers.add(player.getUUID()); + if (this.rewardedPlayers.size() > MAX_REWARD_PLAYERS) { + Iterator iterator = this.rewardedPlayers.iterator(); + if (iterator.hasNext()) { + iterator.next(); + iterator.remove(); + } + } + this.markChanged(); + } + + long stateUpdatingResumesAt() { + return this.stateUpdatingResumesAt; + } + + void pauseStateUpdatingUntil(long time) { + this.stateUpdatingResumesAt = time; + this.markChanged(); + } + + List getItemsToEject() { + return this.itemsToEject; + } + + void markEjectionFinished() { + this.totalEjectionsNeeded = 0; + this.markChanged(); + } + + void setItemsToEject(List items) { + this.itemsToEject.clear(); + this.itemsToEject.addAll(items); + this.totalEjectionsNeeded = this.itemsToEject.size(); + this.markChanged(); + } + + ItemStack getNextItemToEject() { + if (this.itemsToEject.isEmpty()) { + return ItemStack.EMPTY; + } + ItemStack stack = this.itemsToEject.get(this.itemsToEject.size() - 1); + return stack != null ? stack : ItemStack.EMPTY; + } + + ItemStack popNextItemToEject() { + if (this.itemsToEject.isEmpty()) { + return ItemStack.EMPTY; + } + this.markChanged(); + ItemStack stack = this.itemsToEject.remove(this.itemsToEject.size() - 1); + return stack != null ? stack : ItemStack.EMPTY; + } + + void set(UnderVaultServerData other) { + this.stateUpdatingResumesAt = other.stateUpdatingResumesAt(); + this.itemsToEject.clear(); + this.itemsToEject.addAll(other.itemsToEject); + this.rewardedPlayers.clear(); + this.rewardedPlayers.addAll(other.rewardedPlayers); + } + + private void markChanged() { + this.isDirty = true; + } + + public float ejectionProgress() { + return this.totalEjectionsNeeded == 1 ? 1.0F + : 1.0F - Mth.inverseLerp((float) this.getItemsToEject().size(), 1.0F, (float) this.totalEjectionsNeeded); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undervault/UnderVaultSharedData.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undervault/UnderVaultSharedData.java new file mode 100644 index 00000000..74553dd0 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undervault/UnderVaultSharedData.java @@ -0,0 +1,118 @@ +package com.craisinlord.antarchy.content.block.entity.undervault; + +import it.unimi.dsi.fastutil.objects.ObjectLinkedOpenHashSet; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.IntArrayTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.NbtUtils; +import net.minecraft.nbt.Tag; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.item.ItemStack; + +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + +public class UnderVaultSharedData { + public static final String TAG_NAME = "shared_data"; + private ItemStack displayItem = ItemStack.EMPTY; + private Set connectedPlayers = new ObjectLinkedOpenHashSet<>(); + private double connectedParticlesRange = UnderVaultConfig.DEFAULT.deactivationRange(); + boolean isDirty; + + public static UnderVaultSharedData load(CompoundTag tag) { + UnderVaultSharedData data = new UnderVaultSharedData(); + data.displayItem = tag.contains("display_item", Tag.TAG_COMPOUND) ? ItemStack.of(tag.getCompound("display_item")) : ItemStack.EMPTY; + data.connectedPlayers.addAll(loadUuidSet(tag.get("connected_players"))); + data.connectedParticlesRange = tag.contains("connected_particles_range", Tag.TAG_ANY_NUMERIC) + ? tag.getDouble("connected_particles_range") : UnderVaultConfig.DEFAULT.deactivationRange(); + return data; + } + + public CompoundTag save() { + CompoundTag tag = new CompoundTag(); + if (!this.displayItem.isEmpty()) { + tag.put("display_item", this.displayItem.save(new CompoundTag())); + } + if (!this.connectedPlayers.isEmpty()) { + tag.put("connected_players", saveUuidSet(this.connectedPlayers)); + } + if (this.connectedParticlesRange != UnderVaultConfig.DEFAULT.deactivationRange()) { + tag.putDouble("connected_particles_range", this.connectedParticlesRange); + } + return tag; + } + + static Set loadUuidSet(Tag tag) { + Set result = new ObjectLinkedOpenHashSet<>(); + if (!(tag instanceof ListTag list)) { + return result; + } + for (Tag element : list) { + if (!(element instanceof IntArrayTag array) || array.size() != 4) { + return new ObjectLinkedOpenHashSet<>(); + } + result.add(NbtUtils.loadUUID(array)); + } + return result; + } + + static ListTag saveUuidSet(Set uuids) { + ListTag list = new ListTag(); + for (UUID uuid : uuids) { + list.add(NbtUtils.createUUID(uuid)); + } + return list; + } + + public ItemStack getDisplayItem() { + return this.displayItem; + } + + public boolean hasDisplayItem() { + return !this.displayItem.isEmpty(); + } + + public void setDisplayItem(ItemStack stack) { + if (!ItemStack.matches(this.displayItem, stack)) { + this.displayItem = stack.copy(); + this.markDirty(); + } + } + + boolean hasConnectedPlayers() { + return !this.connectedPlayers.isEmpty(); + } + + Set getConnectedPlayers() { + return this.connectedPlayers; + } + + double connectedParticlesRange() { + return this.connectedParticlesRange; + } + + void updateConnectedPlayersWithinRange(ServerLevel level, BlockPos pos, UnderVaultServerData serverData, UnderVaultConfig config, double range) { + Set players = new HashSet<>(); + for (UUID uuid : config.playerDetector().detect(level, config.entitySelector(), pos, range, false)) { + if (!serverData.getRewardedPlayers().contains(uuid)) { + players.add(uuid); + } + } + if (!this.connectedPlayers.equals(players)) { + this.connectedPlayers = players; + this.markDirty(); + } + } + + private void markDirty() { + this.isDirty = true; + } + + void set(UnderVaultSharedData other) { + this.displayItem = other.displayItem; + this.connectedPlayers = other.connectedPlayers; + this.connectedParticlesRange = other.connectedParticlesRange; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undervault/UnderVaultState.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undervault/UnderVaultState.java new file mode 100644 index 00000000..6fd54a9e --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/undervault/UnderVaultState.java @@ -0,0 +1,119 @@ +package com.craisinlord.antarchy.content.block.entity.undervault; + +import com.craisinlord.antarchy.content.block.entity.undertrial.UndertrialSounds; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.dispenser.DefaultDispenseItemBehavior; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundSource; +import net.minecraft.util.StringRepresentable; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.phys.Vec3; + +public enum UnderVaultState implements StringRepresentable { + INACTIVE("inactive", 6) { + @Override + protected void onEnter(ServerLevel level, BlockPos pos, UnderVaultConfig config, UnderVaultSharedData sharedData, boolean ominous) { + sharedData.setDisplayItem(ItemStack.EMPTY); + UnderVaultEffects.deactivate(level, pos, ominous); + } + }, + ACTIVE("active", 12) { + @Override + protected void onEnter(ServerLevel level, BlockPos pos, UnderVaultConfig config, UnderVaultSharedData sharedData, boolean ominous) { + if (!sharedData.hasDisplayItem()) { + UnderVaultLogic.Server.cycleDisplayItemFromLootTable(level, this, config, sharedData, pos); + } + } + }, + UNLOCKING("unlocking", 12) { + @Override + protected void onEnter(ServerLevel level, BlockPos pos, UnderVaultConfig config, UnderVaultSharedData sharedData, boolean ominous) { + UndertrialSounds.playServer(level, pos, UndertrialSounds.VAULT_INSERT_ITEM, SoundSource.BLOCKS, 1.0F, 1.0F); + } + }, + EJECTING("ejecting", 12) { + @Override + protected void onEnter(ServerLevel level, BlockPos pos, UnderVaultConfig config, UnderVaultSharedData sharedData, boolean ominous) { + UndertrialSounds.playServer(level, pos, UndertrialSounds.VAULT_OPEN_SHUTTER, SoundSource.BLOCKS, 1.0F, 1.0F); + } + + @Override + protected void onExit(ServerLevel level, BlockPos pos, UnderVaultConfig config, UnderVaultSharedData sharedData) { + UndertrialSounds.playServer(level, pos, UndertrialSounds.VAULT_CLOSE_SHUTTER, SoundSource.BLOCKS, 1.0F, 1.0F); + } + }; + + private static final int UPDATE_CONNECTED_PLAYERS_TICK_RATE = 20; + private static final int DELAY_BETWEEN_EJECTIONS_TICKS = 20; + private static final int DELAY_AFTER_LAST_EJECTION_TICKS = 20; + private static final int DELAY_BEFORE_FIRST_EJECTION_TICKS = 20; + private final String stateName; + private final int lightLevel; + + UnderVaultState(String stateName, int lightLevel) { + this.stateName = stateName; + this.lightLevel = lightLevel; + } + + @Override + public String getSerializedName() { + return this.stateName; + } + + public int lightLevel() { + return this.lightLevel; + } + + public UnderVaultState tickAndGetNext(ServerLevel level, BlockPos pos, UnderVaultConfig config, UnderVaultServerData serverData, + UnderVaultSharedData sharedData) { + switch (this) { + case INACTIVE: + return updateStateForConnectedPlayers(level, pos, config, serverData, sharedData, config.activationRange()); + case ACTIVE: + return updateStateForConnectedPlayers(level, pos, config, serverData, sharedData, config.deactivationRange()); + case UNLOCKING: + serverData.pauseStateUpdatingUntil(level.getGameTime() + DELAY_BEFORE_FIRST_EJECTION_TICKS); + return EJECTING; + case EJECTING: + default: + if (serverData.getItemsToEject().isEmpty()) { + serverData.markEjectionFinished(); + return updateStateForConnectedPlayers(level, pos, config, serverData, sharedData, config.deactivationRange()); + } + float progress = serverData.ejectionProgress(); + this.ejectResultItem(level, pos, serverData.popNextItemToEject(), progress); + sharedData.setDisplayItem(serverData.getNextItemToEject()); + boolean finished = serverData.getItemsToEject().isEmpty(); + int delay = finished ? DELAY_AFTER_LAST_EJECTION_TICKS : DELAY_BETWEEN_EJECTIONS_TICKS; + serverData.pauseStateUpdatingUntil(level.getGameTime() + delay); + return EJECTING; + } + } + + private static UnderVaultState updateStateForConnectedPlayers(ServerLevel level, BlockPos pos, UnderVaultConfig config, + UnderVaultServerData serverData, UnderVaultSharedData sharedData, + double range) { + sharedData.updateConnectedPlayersWithinRange(level, pos, serverData, config, range); + serverData.pauseStateUpdatingUntil(level.getGameTime() + UPDATE_CONNECTED_PLAYERS_TICK_RATE); + return sharedData.hasConnectedPlayers() ? ACTIVE : INACTIVE; + } + + public void onTransition(ServerLevel level, BlockPos pos, UnderVaultState next, UnderVaultConfig config, + UnderVaultSharedData sharedData, boolean ominous) { + this.onExit(level, pos, config, sharedData); + next.onEnter(level, pos, config, sharedData, ominous); + } + + protected void onEnter(ServerLevel level, BlockPos pos, UnderVaultConfig config, UnderVaultSharedData sharedData, boolean ominous) { + } + + protected void onExit(ServerLevel level, BlockPos pos, UnderVaultConfig config, UnderVaultSharedData sharedData) { + } + + private void ejectResultItem(ServerLevel level, BlockPos pos, ItemStack stack, float progress) { + DefaultDispenseItemBehavior.spawnItem(level, stack, 2, Direction.UP, Vec3.atBottomCenterOf(pos).relative(Direction.UP, 1.2D)); + UnderVaultEffects.ejectItem(level, pos); + UndertrialSounds.playServer(level, pos, UndertrialSounds.VAULT_EJECT_ITEM, SoundSource.BLOCKS, 1.0F, 0.8F + 0.4F * progress); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/boss/BossCombatUtil.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/boss/BossCombatUtil.java index ca57852b..619de07a 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/boss/BossCombatUtil.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/boss/BossCombatUtil.java @@ -1,11 +1,29 @@ package com.craisinlord.antarchy.content.boss; +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyTags; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.Mob; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + public final class BossCombatUtil { private BossCombatUtil() {} + private static final Map MAGIC_WINDOWS = new HashMap<>(); + private static final Map MAGIC_WARD_EXPIRY_TICK = new HashMap<>(); + private static final Map MAGIC_WARD_BREACH_COUNTS = new HashMap<>(); + + private static final class MagicWindowState { + long windowStartTick; + float accumulated; + } + public static boolean isOutOfDamageRange(Mob boss, double range) { if (range <= 0.0D) { return false; @@ -13,17 +31,63 @@ public final class BossCombatUtil { return boss.level().getNearestPlayer(boss, range) == null; } - /** - * Caps a single hit so it cannot bring the boss from above half of its max health - * down past that threshold in one shot. Once the boss is at or below half health, - * hits are no longer capped. - */ - public static float capSingleHitAtHalfHealth(LivingEntity boss, float amount) { + public static void clampHalfHealthCrossing(LivingEntity boss, float preHitHealth) { float halfHealth = boss.getMaxHealth() * 0.5F; - float currentHealth = boss.getHealth(); - if (currentHealth > halfHealth && currentHealth - amount < halfHealth) { - return currentHealth - halfHealth; + if (preHitHealth > halfHealth && boss.getHealth() < halfHealth) { + boss.setHealth(halfHealth); } - return amount; + } + + public static boolean isMagicBurstSource(DamageSource source) { + if (source.is(AntarchyTags.DamageType.ANTARCHY_MAGIC_BURST)) { + return true; + } + ResourceLocation typeId = source.typeHolder().unwrapKey().map(ResourceKey::location).orElse(null); + if (typeId == null) { + return false; + } + for (String namespace : AntarchySettings.magicBurstDamageNamespaces()) { + if (typeId.getNamespace().equals(namespace)) { + return true; + } + } + return false; + } + + public static float trackMagicBurstWindow(LivingEntity boss, float amount, int windowTicks) { + long now = boss.level().getGameTime(); + MagicWindowState state = MAGIC_WINDOWS.computeIfAbsent(boss.getUUID(), id -> new MagicWindowState()); + if (now - state.windowStartTick >= windowTicks) { + state.windowStartTick = now; + state.accumulated = 0.0F; + } + state.accumulated += amount; + return state.accumulated; + } + + public static float remainingWindowBudget(LivingEntity boss, float windowCap) { + MagicWindowState state = MAGIC_WINDOWS.get(boss.getUUID()); + if (state == null) { + return windowCap; + } + long now = boss.level().getGameTime(); + if (now - state.windowStartTick >= AntarchySettings.bossMagicWindowTicks()) { + return windowCap; + } + return Math.max(0.0F, windowCap - state.accumulated); + } + + public static boolean isMagicWarded(LivingEntity boss) { + Long expiryTick = MAGIC_WARD_EXPIRY_TICK.get(boss.getUUID()); + return expiryTick != null && boss.level().getGameTime() < expiryTick; + } + + public static void triggerMagicWard(LivingEntity boss, int durationTicks) { + MAGIC_WARD_EXPIRY_TICK.put(boss.getUUID(), boss.level().getGameTime() + durationTicks); + MAGIC_WARD_BREACH_COUNTS.remove(boss.getUUID()); + } + + public static int recordMagicWindowBreach(LivingEntity boss) { + return MAGIC_WARD_BREACH_COUNTS.merge(boss.getUUID(), 1, Integer::sum); } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/AntarchyArchivePreviews.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/AntarchyArchivePreviews.java new file mode 100644 index 00000000..cf5460b7 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/AntarchyArchivePreviews.java @@ -0,0 +1,15 @@ +package com.craisinlord.antarchy.content.client; + +import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity; +import com.craisinlord.antos.api.client.archive.ArchiveEntityPreviewRegistry; +import net.minecraft.resources.ResourceLocation; + +public final class AntarchyArchivePreviews { + private AntarchyArchivePreviews() {} + + public static void register() { + ArchiveEntityPreviewRegistry.register(new ResourceLocation("antarchy", "nightmare"), entity -> { + if (entity instanceof NightmareEntity nightmare) nightmare.setArchivePreviewFlying(); + }); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/AntarchyGameClientState.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/AntarchyGameClientState.java new file mode 100644 index 00000000..7d9697f8 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/AntarchyGameClientState.java @@ -0,0 +1,27 @@ +package com.craisinlord.antarchy.content.client; + +import com.craisinlord.antarchy.content.network.AntarchyGamePayload; +import com.craisinlord.antarchy.content.network.AntarchyGameResultPayload; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import net.minecraft.core.BlockPos; + +public final class AntarchyGameClientState { + private static final Map GAME_STATES = new ConcurrentHashMap<>(); + + private AntarchyGameClientState() { } + + public static void update(AntarchyGameResultPayload result) { + String[] envelope = result.data().split("\u0000", 3); + if (envelope.length < 3) return; + if (envelope[0].equals(Integer.toString(AntarchyGamePayload.BASILISK_STATE)) + || envelope[0].equals(Integer.toString(AntarchyGamePayload.ANTMAN_STATE))) { + GAME_STATES.put(key(result.pos(), envelope[0]), + result.success() ? envelope[2] : ""); + } + } + + public static String getGameState(BlockPos pos, int action) { return GAME_STATES.get(key(pos, Integer.toString(action))); } + public static void clearGameState(BlockPos pos, int action) { GAME_STATES.remove(key(pos, Integer.toString(action))); } + private static String key(BlockPos pos, String action) { return pos.asLong() + "|" + action; } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/CameraShakeClientState.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/CameraShakeClientState.java deleted file mode 100644 index e2a336f9..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/CameraShakeClientState.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.craisinlord.antarchy.content.client; - -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.function.BooleanSupplier; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.phys.Vec3; - -public final class CameraShakeClientState { - public static final double TORETERROR_RANGE = 48.0D; - public static final float TORETERROR_STRENGTH = 1.0F; - public static final double NIGHTMARE_RANGE = 32.0D; - public static final float NIGHTMARE_STRENGTH = 1.35F; - - private record Source(double range, float strength, BooleanSupplier active) { - } - - private record Impact(Vec3 position, float intensity, int remainingTicks, int totalTicks, float radius) { - private Impact ticked() { - return new Impact(position, intensity, remainingTicks - 1, totalTicks, radius); - } - } - - private static final Map SOURCES = new HashMap<>(); - private static final java.util.List IMPACTS = new java.util.ArrayList<>(); - - private CameraShakeClientState() { - } - - public static void register(LivingEntity entity, double range, float strength, BooleanSupplier active) { - SOURCES.putIfAbsent(entity, new Source(range, strength, active)); - } - - public static float getStrength(Vec3 cameraPos) { - float total = 0.0F; - Iterator> iterator = SOURCES.entrySet().iterator(); - while (iterator.hasNext()) { - Map.Entry entry = iterator.next(); - LivingEntity entity = entry.getKey(); - Source source = entry.getValue(); - if (entity.isRemoved() || !entity.isAlive() || !source.active().getAsBoolean()) { - iterator.remove(); - continue; - } - - double distance = Math.sqrt(cameraPos.distanceToSqr(entity.position().add(0.0D, entity.getBbHeight() * 0.5D, 0.0D))); - if (distance > source.range()) { - continue; - } - - total += (float) ((1.0D - distance / source.range()) * source.strength()); - } - - Iterator impactIterator = IMPACTS.iterator(); - while (impactIterator.hasNext()) { - Impact impact = impactIterator.next(); - if (impact.remainingTicks() <= 0) { - impactIterator.remove(); - continue; - } - double distance = Math.sqrt(cameraPos.distanceToSqr(impact.position())); - if (distance > impact.radius()) { - continue; - } - total += (float) ((1.0D - distance / impact.radius()) * impact.intensity() * (impact.remainingTicks() / (float) Math.max(1, impact.totalTicks()))); - } - - return total; - } - - public static void triggerImpact(Vec3 position, float intensity, int durationTicks, float radius) { - int ticks = Math.max(1, durationTicks); - IMPACTS.add(new Impact(position, intensity, ticks, ticks, Math.max(1.0F, radius))); - } - - public static void tick() { - for (int i = IMPACTS.size() - 1; i >= 0; i--) { - Impact impact = IMPACTS.get(i); - if (impact.remainingTicks() <= 1) { - IMPACTS.remove(i); - } else { - IMPACTS.set(i, impact.ticked()); - } - } - } - - public static void clear() { - SOURCES.clear(); - IMPACTS.clear(); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/ClientTimeDilationTicker.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/ClientTimeDilationTicker.java deleted file mode 100644 index ae2c4a96..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/ClientTimeDilationTicker.java +++ /dev/null @@ -1,146 +0,0 @@ -package com.craisinlord.antarchy.content.client; - -import com.craisinlord.antarchy.content.time.TimeDilationFieldSnapshot; -import com.craisinlord.antarchy.content.time.TimeDilationFieldSnapshotSampler; -import com.craisinlord.antarchy.content.time.TimeDilationMath; -import java.util.List; -import java.util.Map; -import java.util.WeakHashMap; -import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.item.ItemEntity; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.util.Mth; - -public final class ClientTimeDilationTicker { - private static volatile List activeFields = List.of(); - private static ClientLevel activeLevel; - private static final Map ITEM_SPIN_STATES = new WeakHashMap<>(); - private static final Map ATTACK_ANIMATION_STATES = new WeakHashMap<>(); - private static final Map ANIMATION_CLOCKS = new WeakHashMap<>(); - - private ClientTimeDilationTicker() { - } - - public static void tick(ClientLevel level) { - if (activeLevel != level) { - activeLevel = level; - activeFields = List.of(); - ITEM_SPIN_STATES.clear(); - ATTACK_ANIMATION_STATES.clear(); - ANIMATION_CLOCKS.clear(); - com.craisinlord.antarchy.content.time.TimeDilationApi.clearSyncedClientRates(); - } - } - - public static float dilateAnimationTime(Entity entity, float vanillaTime) { - double rate = com.craisinlord.antarchy.content.time.TimeDilationApi.getRate(entity); - if (rate >= TimeDilationMath.NORMAL_RATE) { - ANIMATION_CLOCKS.remove(entity); - return vanillaTime; - } - AnimationClockState state = ANIMATION_CLOCKS.computeIfAbsent(entity, - ignored -> new AnimationClockState(vanillaTime)); - float delta = vanillaTime - state.lastVanillaTime; - if (delta >= 0.0F) { - state.temporalTime += delta * (float) rate; - } - state.lastVanillaTime = vanillaTime; - return state.temporalTime; - } - - public static float dilateAttackAnimation(LivingEntity entity, float partialTick, float vanillaAnimation) { - double rate = com.craisinlord.antarchy.content.time.TimeDilationApi.getRate(entity); - if (rate >= TimeDilationMath.NORMAL_RATE) { - ATTACK_ANIMATION_STATES.remove(entity); - return vanillaAnimation; - } - AttackAnimationState state = ATTACK_ANIMATION_STATES.computeIfAbsent( - entity, ignored -> new AttackAnimationState(entity.tickCount, vanillaAnimation) - ); - if (state.lastTick != entity.tickCount) { - state.previous = state.current; - state.current += (vanillaAnimation - state.current) * (float) rate; - state.lastTick = entity.tickCount; - } - return state.previous + (state.current - state.previous) * partialTick; - } - - public static float dilateRotation(LivingEntity entity, float previous, float current, float partialTick) { - double rate = com.craisinlord.antarchy.content.time.TimeDilationApi.getRate(entity); - if (rate >= TimeDilationMath.NORMAL_RATE) { - return Mth.rotLerp(partialTick, previous, current); - } - return previous + Mth.wrapDegrees(current - previous) * partialTick * (float) rate; - } - - public static float dilatePitch(LivingEntity entity, float previous, float current, float partialTick) { - double rate = com.craisinlord.antarchy.content.time.TimeDilationApi.getRate(entity); - if (rate >= TimeDilationMath.NORMAL_RATE) { - return Mth.lerp(partialTick, previous, current); - } - return previous + (current - previous) * partialTick * (float) rate; - } - - public static float dilateWalkAmount(LivingEntity entity, float amount) { - double rate = com.craisinlord.antarchy.content.time.TimeDilationApi.getRate(entity); - return rate >= TimeDilationMath.NORMAL_RATE ? amount : amount * (float) rate; - } - - public static float dilateItemSpin(ItemEntity item, float vanillaSpin) { - double rate = com.craisinlord.antarchy.content.time.TimeDilationApi.getRate(item); - if (rate >= TimeDilationMath.NORMAL_RATE) { - ITEM_SPIN_STATES.remove(item); - return vanillaSpin; - } - ItemSpinState state = ITEM_SPIN_STATES.computeIfAbsent(item, ignored -> new ItemSpinState(vanillaSpin)); - float rawDelta = vanillaSpin - state.lastVanillaSpin; - state.lastVanillaSpin = vanillaSpin; - state.temporalSpin += rawDelta * (float) rate; - return state.temporalSpin; - } - - private static final class ItemSpinState { - private float lastVanillaSpin; - private float temporalSpin; - - private ItemSpinState(float initialSpin) { - this.lastVanillaSpin = initialSpin; - this.temporalSpin = initialSpin; - } - } - - private static final class AttackAnimationState { - private int lastTick; - private float previous; - private float current; - - private AttackAnimationState(int tick, float initial) { - this.lastTick = tick; - this.previous = initial; - this.current = initial; - } - } - - private static final class AnimationClockState { - private float lastVanillaTime; - private float temporalTime; - - private AnimationClockState(float initialTime) { - this.lastVanillaTime = initialTime; - this.temporalTime = initialTime; - } - } - - public static double rateAt(double x, double y, double z) { - List fields = activeFields; - if (fields.isEmpty()) { - return TimeDilationMath.NORMAL_RATE; - } - return TimeDilationFieldSnapshotSampler.sample(fields, x, y, z); - } - - public static void applyFields(List fields) { - activeFields = List.copyOf(fields); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/ContractionAfterimages.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/ContractionAfterimages.java deleted file mode 100644 index 4393b561..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/ContractionAfterimages.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.craisinlord.antarchy.content.client; - -import com.craisinlord.antarchy.content.effect.RoyalEffectHooks; -import java.util.ArrayDeque; -import java.util.Deque; -import java.util.Iterator; -import java.util.Map; -import java.util.WeakHashMap; -import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.effect.MobEffect; - -public final class ContractionAfterimages { - public static final int MAX_SAMPLES = 10; - public static final int SAMPLE_LIFETIME_TICKS = 13; - private static final Map> HISTORY = new WeakHashMap<>(); - - private ContractionAfterimages() {} - - public static void tick(ClientLevel level) { - MobEffect contracted = RoyalEffectHooks.contractedHolder(); - int now = (int) (level.getGameTime() & 0x7fffffffL); - Iterator>> iterator = HISTORY.entrySet().iterator(); - while (iterator.hasNext()) { - LivingEntity tracked = iterator.next().getKey(); - if (tracked == null || tracked.isRemoved() || !tracked.isAlive() || contracted == null - || !tracked.hasEffect(contracted)) { - iterator.remove(); - } - } - if (contracted == null) return; - for (Entity entity : level.entitiesForRendering()) { - if (!(entity instanceof LivingEntity living) || living.isInvisible() || !living.hasEffect(contracted)) continue; - Deque samples = HISTORY.computeIfAbsent(living, ignored -> new ArrayDeque<>()); - samples.addFirst(new Sample(living, now)); - while (samples.size() > MAX_SAMPLES) samples.removeLast(); - } - } - - public static Deque samples(LivingEntity entity) { return HISTORY.get(entity); } - - public static float fade(Sample sample, int now) { - return Math.max(0.0F, 1.0F - (now - sample.recordedTick) / (float) SAMPLE_LIFETIME_TICKS); - } - - public static void clear() { HISTORY.clear(); } - - public static final class Sample { - public final double x, y, z; - public final float bodyYaw, headYaw, xRot, limbPos, limbSpeed, ageInTicks; - public final int recordedTick; - - Sample(LivingEntity entity, int recordedTick) { - this.x = entity.getX(); this.y = entity.getY(); this.z = entity.getZ(); - this.bodyYaw = entity.yBodyRot; this.headYaw = entity.getYHeadRot(); this.xRot = entity.getXRot(); - this.limbPos = entity.walkAnimation.position(); - this.limbSpeed = Math.min(entity.walkAnimation.speed(), 1.0F); - this.ageInTicks = entity.tickCount; this.recordedTick = recordedTick; - } - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/HoverboardSoundSystem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/HoverboardSoundSystem.java new file mode 100644 index 00000000..17dee3e8 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/HoverboardSoundSystem.java @@ -0,0 +1,128 @@ +package com.craisinlord.antarchy.content.client; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.antarchy.content.entity.HoverboardEntity; +import com.craisinlord.antarchy.mixins.LivingEntityJumpingAccessor; +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.sounds.AbstractTickableSoundInstance; +import net.minecraft.client.resources.sounds.SoundInstance; +import net.minecraft.sounds.SoundSource; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.entity.Entity; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +public final class HoverboardSoundSystem { + private static final float MIN_PITCH = 0.75F; + private static final float MAX_PITCH = 1.6F; + private static final float MIN_VOLUME = 0.45F; + private static final float MAX_VOLUME = 0.8F; + + private static final Map ACTIVE = new HashMap<>(); + + private HoverboardSoundSystem() { + } + + public static void tick() { + Minecraft mc = Minecraft.getInstance(); + if (mc.level == null) { + stopAll(mc); + return; + } + if (mc.isPaused()) { + return; + } + + Set activeIds = new HashSet<>(); + for (Entity entity : mc.level.entitiesForRendering()) { + if (!(entity instanceof HoverboardEntity hoverboard) || !hoverboard.isVehicle()) { + continue; + } + + int id = hoverboard.getId(); + activeIds.add(id); + IdleLoopSound sound = ACTIVE.get(id); + if (sound == null || !mc.getSoundManager().isActive(sound)) { + sound = new IdleLoopSound(hoverboard); + ACTIVE.put(id, sound); + mc.getSoundManager().play(sound); + } + } + + ACTIVE.entrySet().removeIf(entry -> { + if (activeIds.contains(entry.getKey())) { + return false; + } + mc.getSoundManager().stop(entry.getValue()); + return true; + }); + } + + private static void stopAll(Minecraft mc) { + ACTIVE.values().forEach(mc.getSoundManager()::stop); + ACTIVE.clear(); + } + + private static final class IdleLoopSound extends AbstractTickableSoundInstance { + private final HoverboardEntity hoverboard; + private double lastX; + private double lastZ; + + private IdleLoopSound(HoverboardEntity hoverboard) { + super(AntarchySoundEvents.HOVERBOARD_IDLE.get(), SoundSource.NEUTRAL, RandomSource.create()); + this.hoverboard = hoverboard; + this.looping = true; + this.delay = 0; + this.relative = false; + this.attenuation = SoundInstance.Attenuation.LINEAR; + this.volume = MIN_VOLUME; + this.pitch = MIN_PITCH; + this.x = hoverboard.getX(); + this.y = hoverboard.getY(); + this.z = hoverboard.getZ(); + this.lastX = this.x; + this.lastZ = this.z; + } + + @Override + public void tick() { + if (this.hoverboard.isRemoved() || !this.hoverboard.isVehicle()) { + this.stop(); + return; + } + + double dx = this.hoverboard.getX() - this.lastX; + double dz = this.hoverboard.getZ() - this.lastZ; + double speed = Math.sqrt(dx * dx + dz * dz); + this.lastX = this.hoverboard.getX(); + this.lastZ = this.hoverboard.getZ(); + + this.x = this.hoverboard.getX(); + this.y = this.hoverboard.getY(); + this.z = this.hoverboard.getZ(); + + double maxSpeed = Math.max(AntarchySettings.hoverboardMaxSpeed(), 0.0001D); + float speedRatio = (float) Mth.clamp(speed / maxSpeed, 0.0D, 1.0D); + boolean jumping = false; + Entity passenger = this.hoverboard.getControllingPassenger(); + if (passenger instanceof net.minecraft.world.entity.player.Player player) { + jumping = ((LivingEntityJumpingAccessor) player).antarchy$isJumping(); + } + boolean movingUpward = this.hoverboard.getDeltaMovement().y > 0.02D; + float liftRatio = jumping || movingUpward ? 1.0F : 0.0F; + this.volume = Mth.lerp(speedRatio, MIN_VOLUME, MAX_VOLUME); + this.pitch = Mth.lerp(speedRatio, MIN_PITCH, MAX_PITCH) + + Mth.lerp(liftRatio, 0.0F, 0.2F); + } + + @Override + public boolean canStartSilent() { + return true; + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/KingJudgmentFlashClientState.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/KingJudgmentFlashClientState.java new file mode 100644 index 00000000..07113176 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/KingJudgmentFlashClientState.java @@ -0,0 +1,36 @@ +package com.craisinlord.antarchy.content.client; + +public final class KingJudgmentFlashClientState { + private static int flashTicks; + private static int flashDuration; + + private KingJudgmentFlashClientState() { + } + + public static void trigger(int ticks) { + int duration = Math.max(0, ticks); + if (duration >= flashTicks) { + flashTicks = duration; + flashDuration = duration; + } + } + + public static void tick() { + if (flashTicks > 0) { + flashTicks--; + } + } + + public static float alpha() { + if (flashTicks <= 0 || flashDuration <= 0) { + return 0.0F; + } + float remaining = flashTicks / (float) flashDuration; + return Math.min(0.92F, 0.92F * remaining * remaining); + } + + public static void clear() { + flashTicks = 0; + flashDuration = 0; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/KingJudgmentFlashHudRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/KingJudgmentFlashHudRenderer.java new file mode 100644 index 00000000..00e0ea17 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/KingJudgmentFlashHudRenderer.java @@ -0,0 +1,17 @@ +package com.craisinlord.antarchy.content.client; + +import net.minecraft.client.gui.GuiGraphics; + +public final class KingJudgmentFlashHudRenderer { + private KingJudgmentFlashHudRenderer() { + } + + public static void render(GuiGraphics guiGraphics) { + int alpha = Math.round(KingJudgmentFlashClientState.alpha() * 255.0F); + if (alpha <= 0) { + return; + } + guiGraphics.fill(0, 0, guiGraphics.guiWidth(), guiGraphics.guiHeight(), + alpha << 24 | 0x00FFFFFF); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/MoonSkyTracker.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/MoonSkyTracker.java new file mode 100644 index 00000000..444d94bb --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/MoonSkyTracker.java @@ -0,0 +1,52 @@ +package com.craisinlord.antarchy.content.client; + +import com.craisinlord.antarchy.content.network.PortalGunMoonAimPayload; +import com.craisinlord.antarchy.content.portalgun.PortalGunMoonMath; +import java.util.function.Consumer; +import net.minecraft.client.Camera; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.world.phys.Vec3; +import org.joml.Matrix4f; +import org.joml.Quaterniond; +import org.joml.Vector3d; +import org.joml.Vector3f; + +public final class MoonSkyTracker { + private static final long MAX_AGE_MILLIS = 1500L; + private static final double AIM_COSINE = Math.cos(Math.toRadians(PortalGunMoonMath.AIM_TOLERANCE_DEGREES)); + private static Vec3 direction; + private static ClientLevel level; + private static long recordedAt; + private static Consumer sender = payload -> {}; + + private MoonSkyTracker() { + } + + public static void setSender(Consumer payloadSender) { + sender = payloadSender; + } + + public static void recordSphericalMoon(ClientLevel renderedLevel, Camera camera, Matrix4f skyMatrix, double theta, double phi) { + Vector3d local = new Quaterniond().rotateY(theta).mul(new Quaterniond().rotateX(phi)).transform(new Vector3d(0.0D, 1.0D, 0.0D)); + Vector3f view = skyMatrix.transformDirection(new Vector3f((float) local.x, (float) local.y, (float) local.z)); + if (view.lengthSquared() < 1.0E-8F) { + return; + } + Vector3f world = camera.rotation().transform(view.normalize()); + direction = new Vec3(world.x, world.y, world.z).normalize(); + level = renderedLevel; + recordedAt = System.currentTimeMillis(); + } + + public static void report() { + Minecraft minecraft = Minecraft.getInstance(); + if (minecraft.player == null) { + return; + } + boolean tracked = direction != null && level == minecraft.level && System.currentTimeMillis() - recordedAt <= MAX_AGE_MILLIS; + boolean aiming = tracked && minecraft.gameRenderer.getMainCamera().getLookVector().dot( + new Vector3f((float) direction.x, (float) direction.y, (float) direction.z)) >= AIM_COSINE; + sender.accept(new PortalGunMoonAimPayload(tracked, aiming)); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/NightmareSwordTooltipHelper.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/NightmareSwordTooltipHelper.java index 56c6d041..24dce6ac 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/NightmareSwordTooltipHelper.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/NightmareSwordTooltipHelper.java @@ -2,7 +2,6 @@ package com.craisinlord.antarchy.content.client; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.item.NightmareSwordItem; -import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; import net.minecraft.network.chat.Component; import net.minecraft.world.entity.player.Player; @@ -16,14 +15,6 @@ public final class NightmareSwordTooltipHelper { float damage = player != null ? NightmareSwordItem.calculateDamage(player) : (float) AntarchySettings.nightmareSwordBaseDamage(); - return Component.translatable("tooltip.antarchy.nightmare_sword_damage", formatDamage(damage)).withStyle(ChatFormatting.RED); - } - - private static String formatDamage(float damage) { - float rounded = Math.round(damage * 10.0F) / 10.0F; - if (rounded == (int) rounded) { - return String.valueOf((int) rounded); - } - return String.valueOf(rounded); + return NightmareSwordItem.damageLine(damage); } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunCrosshairRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunCrosshairRenderer.java new file mode 100644 index 00000000..0c26c5a1 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunCrosshairRenderer.java @@ -0,0 +1,94 @@ +package com.craisinlord.antarchy.content.client; + +import com.craisinlord.antarchy.content.item.PortalGunItem; +import com.craisinlord.antarchy.content.network.PortalGunIndicatorPayload; +import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; +import com.mojang.blaze3d.systems.RenderSystem; +import java.util.EnumSet; +import java.util.Set; +import java.util.UUID; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemStack; + +public final class PortalGunCrosshairRenderer { + private static final int WIDTH = 34; + private static final int HEIGHT = 33; + private static final int HALF_WIDTH = 17; + private static final float MISSING_BRIGHTNESS = 0.3F; + private static final float MISSING_ALPHA = 0.75F; + private static ClientLevel cachedLevel; + private static long cachedGameTime = Long.MIN_VALUE; + private static UUID cachedGunId; + private static Set cachedPortals = Set.of(); + + private PortalGunCrosshairRenderer() { + } + + public static void render(GuiGraphics guiGraphics) { + Minecraft minecraft = Minecraft.getInstance(); + if (minecraft.player == null || minecraft.level == null || minecraft.screen != null || minecraft.options.hideGui + || !minecraft.options.getCameraType().isFirstPerson()) { + return; + } + ItemStack held = minecraft.player.getMainHandItem(); + if (!(held.getItem() instanceof PortalGunItem)) { + held = minecraft.player.getOffhandItem(); + if (!(held.getItem() instanceof PortalGunItem)) { + return; + } + } + ResourceLocation crosshair = ((PortalGunItem) held.getItem()).getVariant().crosshairTexture(); + UUID gunId = PortalGunItem.getGunId(held); + PortalGunIndicatorClientState.requestIfNeeded(minecraft, gunId); + Set portals = portalsFor(minecraft, gunId); + PortalGunIndicatorPayload serverState = PortalGunIndicatorClientState.get(gunId); + boolean blueAvailable = serverState == null + ? portals.contains(PortalGunPortalEntity.PortalSide.BLUE) + : serverState.blueAvailable(); + boolean orangeAvailable = serverState == null + ? portals.contains(PortalGunPortalEntity.PortalSide.ORANGE) + : serverState.orangeAvailable(); + + int left = (minecraft.getWindow().getGuiScaledWidth() - WIDTH) / 2; + int top = (minecraft.getWindow().getGuiScaledHeight() - HEIGHT) / 2; + RenderSystem.enableBlend(); + RenderSystem.defaultBlendFunc(); + drawHalf(guiGraphics, crosshair, left + 6, top, 0.0F, blueAvailable); + drawHalf(guiGraphics, crosshair, left + 11, top, HALF_WIDTH, orangeAvailable); + guiGraphics.setColor(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.disableBlend(); + } + + private static void drawHalf(GuiGraphics guiGraphics, ResourceLocation crosshair, int x, int y, float u, boolean available) { + if (available) { + guiGraphics.setColor(1.0F, 1.0F, 1.0F, 1.0F); + } else { + guiGraphics.setColor(MISSING_BRIGHTNESS, MISSING_BRIGHTNESS, MISSING_BRIGHTNESS, MISSING_ALPHA); + } + guiGraphics.blit(crosshair, x, y, u, 0.0F, HALF_WIDTH, HEIGHT, WIDTH, HEIGHT); + } + + private static Set portalsFor(Minecraft minecraft, UUID gunId) { + if (gunId == null) { + return Set.of(); + } + ClientLevel level = minecraft.level; + long gameTime = level.getGameTime(); + if (cachedLevel != level || cachedGameTime != gameTime || !gunId.equals(cachedGunId)) { + Set portals = EnumSet.noneOf(PortalGunPortalEntity.PortalSide.class); + for (com.craisinlord.anthology.portal.PortalEntity entry : com.craisinlord.anthology.portal.PortalRegistry.all(level)) { + if (entry instanceof PortalGunPortalEntity portal && portal.isAlive() && gunId.equals(portal.getGunId())) { + portals.add(portal.getPortalSide()); + } + } + cachedLevel = level; + cachedGameTime = gameTime; + cachedGunId = gunId; + cachedPortals = Set.copyOf(portals); + } + return cachedPortals; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunEntityTransformationStack.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunEntityTransformationStack.java deleted file mode 100644 index 2fc79ae4..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunEntityTransformationStack.java +++ /dev/null @@ -1,101 +0,0 @@ -package com.craisinlord.antarchy.content.client; - -import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; -import com.craisinlord.antarchy.content.portalgun.PortalGunTransformUtil; -import java.util.ArrayDeque; -import java.util.Deque; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.phys.Vec3; - -public final class PortalGunEntityTransformationStack { - private final Entity entity; - private final Deque stack = new ArrayDeque<>(); - - public PortalGunEntityTransformationStack(Entity entity) { - this.entity = entity; - } - - public void push() { - this.stack.push(EntityTransformation.capture(this.entity)); - } - - public void pop() { - if (!this.stack.isEmpty()) { - this.stack.pop().restore(this.entity); - } - } - - public Vec3 moveEntity(PortalGunPortalEntity sourcePortal, PortalGunPortalEntity destinationPortal, float partialTick) { - Vec3 interpolated = new Vec3( - net.minecraft.util.Mth.lerp(partialTick, this.entity.xo, this.entity.getX()), - net.minecraft.util.Mth.lerp(partialTick, this.entity.yo, this.entity.getY()), - net.minecraft.util.Mth.lerp(partialTick, this.entity.zo, this.entity.getZ()) - ); - Vec3 previous = new Vec3(this.entity.xo, this.entity.yo, this.entity.zo); - Vec3 transformed = destinationPortal.position().add(PortalGunTransformUtil.transformPosition(sourcePortal, destinationPortal, interpolated.subtract(sourcePortal.position()))); - Vec3 transformedPrevious = destinationPortal.position().add(PortalGunTransformUtil.transformPosition(sourcePortal, destinationPortal, previous.subtract(sourcePortal.position()))); - Vec3 look = PortalGunTransformUtil.transformVector(sourcePortal, destinationPortal, this.entity.getLookAngle()).normalize(); - Vec3 velocity = PortalGunTransformUtil.transformVector(sourcePortal, destinationPortal, this.entity.getDeltaMovement()); - float yaw = PortalGunTransformUtil.yawFromLook(look); - float pitch = PortalGunTransformUtil.pitchFromLook(look); - this.entity.setPos(transformed.x, transformed.y, transformed.z); - this.entity.xo = transformedPrevious.x; - this.entity.yo = transformedPrevious.y; - this.entity.zo = transformedPrevious.z; - this.entity.setYRot(yaw); - this.entity.setXRot(pitch); - this.entity.yRotO = yaw; - this.entity.xRotO = pitch; - this.entity.setDeltaMovement(velocity); - if (this.entity instanceof LivingEntity living) { - living.setYHeadRot(yaw); - living.setYBodyRot(yaw); - } - return transformed; - } - - public void reset() { - while (!this.stack.isEmpty()) { - this.pop(); - } - } - - private record EntityTransformation( - double x, - double y, - double z, - double xo, - double yo, - double zo, - float yRot, - float xRot, - float yRotO, - float xRotO, - float yHeadRot, - float yBodyRot, - Vec3 deltaMovement - ) { - private static EntityTransformation capture(Entity entity) { - float yHeadRot = entity instanceof LivingEntity living ? living.getYHeadRot() : entity.getYRot(); - float yBodyRot = entity instanceof LivingEntity living ? living.yBodyRot : entity.getYRot(); - return new EntityTransformation(entity.getX(), entity.getY(), entity.getZ(), entity.xo, entity.yo, entity.zo, entity.getYRot(), entity.getXRot(), entity.yRotO, entity.xRotO, yHeadRot, yBodyRot, entity.getDeltaMovement()); - } - - private void restore(Entity entity) { - entity.setPos(this.x, this.y, this.z); - entity.xo = this.xo; - entity.yo = this.yo; - entity.zo = this.zo; - entity.setYRot(this.yRot); - entity.setXRot(this.xRot); - entity.yRotO = this.yRotO; - entity.xRotO = this.xRotO; - entity.setDeltaMovement(this.deltaMovement); - if (entity instanceof LivingEntity living) { - living.setYHeadRot(this.yHeadRot); - living.setYBodyRot(this.yBodyRot); - } - } - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunIndicatorClientState.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunIndicatorClientState.java new file mode 100644 index 00000000..03ca1c14 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunIndicatorClientState.java @@ -0,0 +1,59 @@ +package com.craisinlord.antarchy.content.client; + +import com.craisinlord.antarchy.content.network.PortalGunIndicatorPayload; +import com.craisinlord.antarchy.content.network.PortalGunIndicatorRequestPayload; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; +import java.util.function.Consumer; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientLevel; + +public final class PortalGunIndicatorClientState { + private static final Map STATES = new HashMap<>(); + private static ClientLevel level; + private static long lastRequestTick = Long.MIN_VALUE; + private static UUID lastRequestedGun; + private static Consumer requestSender = payload -> {}; + + private PortalGunIndicatorClientState() { + } + + public static void setRequestSender(Consumer sender) { + requestSender = sender; + } + + public static void requestIfNeeded(Minecraft minecraft, UUID gunId) { + ClientLevel currentLevel = minecraft.level; + if (currentLevel == null || gunId == null || minecraft.player == null) { + return; + } + if (level != currentLevel) { + level = currentLevel; + STATES.clear(); + lastRequestedGun = null; + lastRequestTick = Long.MIN_VALUE; + } + long currentTick = minecraft.player.tickCount; + if (!gunId.equals(lastRequestedGun) || currentTick - lastRequestTick >= 20L) { + lastRequestedGun = gunId; + lastRequestTick = currentTick; + requestSender.accept(new PortalGunIndicatorRequestPayload(gunId)); + } + } + + public static void update(PortalGunIndicatorPayload payload) { + STATES.put(payload.gunId(), payload); + } + + public static PortalGunIndicatorPayload get(UUID gunId) { + return gunId == null ? null : STATES.get(gunId); + } + + public static void clear() { + STATES.clear(); + level = null; + lastRequestedGun = null; + lastRequestTick = Long.MIN_VALUE; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunPortalRenderState.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunPortalRenderState.java deleted file mode 100644 index 6b3b3f94..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunPortalRenderState.java +++ /dev/null @@ -1,139 +0,0 @@ -package com.craisinlord.antarchy.content.client; - -import com.craisinlord.antarchy.content.portalgun.PortalGunWorldPortalShape; -import java.util.ArrayDeque; -import java.util.Deque; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec3; -import org.joml.Matrix4f; - -public final class PortalGunPortalRenderState { - private static final ThreadLocal> ACTIVE_DESTINATION_SHAPES = ThreadLocal.withInitial(ArrayDeque::new); - private static final ThreadLocal> ACTIVE_SOURCE_SHAPES = ThreadLocal.withInitial(ArrayDeque::new); - private static final ThreadLocal> ACTIVE_CONTEXTS = ThreadLocal.withInitial(ArrayDeque::new); - private static final ThreadLocal RENDER_ALL_DEPTH = ThreadLocal.withInitial(() -> 0); - - private PortalGunPortalRenderState() { - } - - public static void pushPortalView(PortalGunWorldPortalShape sourceShape, PortalGunWorldPortalShape destinationShape, boolean renderAll) { - ACTIVE_SOURCE_SHAPES.get().push(sourceShape); - ACTIVE_DESTINATION_SHAPES.get().push(destinationShape); - if (renderAll) { - RENDER_ALL_DEPTH.set(RENDER_ALL_DEPTH.get() + 1); - } - } - - public static void pushPortalView(PortalRenderContext context) { - ACTIVE_CONTEXTS.get().push(context); - pushPortalView(context.sourceShape(), context.destinationShape(), context.renderAll()); - } - - public static void popPortalView(boolean renderAll) { - Deque sourceShapes = ACTIVE_SOURCE_SHAPES.get(); - if (!sourceShapes.isEmpty()) { - sourceShapes.pop(); - } - if (sourceShapes.isEmpty()) { - ACTIVE_SOURCE_SHAPES.remove(); - } - Deque destinationShapes = ACTIVE_DESTINATION_SHAPES.get(); - if (!destinationShapes.isEmpty()) { - destinationShapes.pop(); - } - if (destinationShapes.isEmpty()) { - ACTIVE_DESTINATION_SHAPES.remove(); - } - if (renderAll) { - int depth = Math.max(0, RENDER_ALL_DEPTH.get() - 1); - if (depth == 0) { - RENDER_ALL_DEPTH.remove(); - } else { - RENDER_ALL_DEPTH.set(depth); - } - } - Deque contexts = ACTIVE_CONTEXTS.get(); - if (!contexts.isEmpty()) { - contexts.pop(); - } - if (contexts.isEmpty()) { - ACTIVE_CONTEXTS.remove(); - } - } - - public static void pushDestinationShape(PortalGunWorldPortalShape shape) { - ACTIVE_DESTINATION_SHAPES.get().push(shape); - } - - public static void popDestinationShape() { - Deque shapes = ACTIVE_DESTINATION_SHAPES.get(); - if (!shapes.isEmpty()) { - shapes.pop(); - } - if (shapes.isEmpty()) { - ACTIVE_DESTINATION_SHAPES.remove(); - } - } - - public static PortalGunWorldPortalShape getDestinationShape() { - Deque shapes = ACTIVE_DESTINATION_SHAPES.get(); - return shapes.isEmpty() ? null : shapes.peek(); - } - - public static PortalGunWorldPortalShape getSourceShape() { - Deque shapes = ACTIVE_SOURCE_SHAPES.get(); - return shapes.isEmpty() ? null : shapes.peek(); - } - - public static PortalRenderContext getContext() { - Deque contexts = ACTIVE_CONTEXTS.get(); - return contexts.isEmpty() ? null : contexts.peek(); - } - - public static int getRenderLevel() { - return ACTIVE_CONTEXTS.get().size(); - } - - public static boolean renderAll() { - return RENDER_ALL_DEPTH.get() > 0; - } - - public static boolean shouldRenderBounds(AABB bounds) { - if (renderAll()) { - return true; - } - PortalRenderContext context = getContext(); - if (context == null) { - PortalGunWorldPortalShape destinationShape = getDestinationShape(); - PortalGunWorldPortalShape sourceShape = getSourceShape(); - return destinationShape == null || shouldRenderBounds(bounds, sourceShape, destinationShape, false); - } - return shouldRenderBounds(bounds, context.sourceShape(), context.destinationShape(), context.renderAll()); - } - - private static boolean shouldRenderBounds(AABB bounds, PortalGunWorldPortalShape sourceShape, PortalGunWorldPortalShape destinationShape, boolean renderAll) { - if (renderAll) { - return true; - } - if (!destinationShape.intersectsFront(bounds, 0.125D)) { - return false; - } - if (!destinationShape.intersectsPortalColumn(bounds, 1.5D, 1.5D, destinationShape.halfDepth() + 96.0D)) { - return false; - } - return sourceShape == null || !sourceShape.intersectsFront(bounds, -0.02D); - } - - public record PortalRenderContext( - PortalGunWorldPortalShape sourceShape, - PortalGunWorldPortalShape destinationShape, - Vec3 cameraPos, - Vec3 look, - Vec3 up, - Matrix4f viewMatrix, - Matrix4f projectionMatrix, - int renderLevel, - boolean renderAll - ) { - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunResetClientState.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunResetClientState.java new file mode 100644 index 00000000..03676a76 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunResetClientState.java @@ -0,0 +1,51 @@ +package com.craisinlord.antarchy.content.client; + +import com.craisinlord.antarchy.content.network.PortalGunResetPayload; +import java.util.function.Consumer; +import net.minecraft.client.Minecraft; + +public final class PortalGunResetClientState { + private static boolean resetDown; + private static boolean attackDown; + private static boolean useDown; + private static boolean selectedSide; + + private PortalGunResetClientState() { + } + + public static boolean tick(Minecraft minecraft, boolean enabled, boolean resetPressed, Consumer sender) { + boolean canInput = enabled && minecraft.player != null && minecraft.level != null && minecraft.screen == null; + boolean active = canInput && resetPressed; + boolean attack = canInput && minecraft.options.keyAttack.isDown(); + boolean use = canInput && minecraft.options.keyUse.isDown(); + if (active && !resetDown) { + sender.accept(new PortalGunResetPayload(com.craisinlord.antarchy.content.portalgun.PortalGunResetManager.ARM)); + selectedSide = false; + } + if (active && attack && !attackDown) { + sender.accept(new PortalGunResetPayload(com.craisinlord.antarchy.content.portalgun.PortalGunResetManager.RESET_BLUE)); + selectedSide = true; + } + if (active && use && !useDown) { + selectedSide = true; + } + if (!active && resetDown) { + int action = !canInput || selectedSide + ? com.craisinlord.antarchy.content.portalgun.PortalGunResetManager.RELEASE + : com.craisinlord.antarchy.content.portalgun.PortalGunResetManager.RESET_ALL; + sender.accept(new PortalGunResetPayload(action)); + selectedSide = false; + } + resetDown = active; + attackDown = attack; + useDown = use; + return active; + } + + public static void clear() { + resetDown = false; + attackDown = false; + useDown = false; + selectedSide = false; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunRollClientState.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunRollClientState.java deleted file mode 100644 index 84e38223..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunRollClientState.java +++ /dev/null @@ -1,123 +0,0 @@ -package com.craisinlord.antarchy.content.client; - -import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; -import com.craisinlord.antarchy.content.portalgun.PortalGunTransformUtil; -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; -import net.minecraft.client.Minecraft; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.phys.Vec3; - -public final class PortalGunRollClientState { - private static final int TELEPORT_COOLDOWN_TICKS = 40; - private static final float ROLL_DECAY = 0.85F; - private static final float ROLL_EPSILON = 0.05F; - private static final Map TELEPORT_COOLDOWNS = new HashMap<>(); - private static float previousRollDegrees; - private static float rollDegrees; - - private PortalGunRollClientState() { - } - - public static float getRollDegrees() { - return rollDegrees; - } - - public static float getRollDegrees(float partialTick) { - return previousRollDegrees + (rollDegrees - previousRollDegrees) * partialTick; - } - - public static boolean isEntityInsidePortal(Minecraft minecraft, Entity entity) { - if (minecraft.level == null || entity == null) { - return false; - } - for (Entity renderEntity : minecraft.level.entitiesForRendering()) { - if (renderEntity instanceof PortalGunPortalEntity portal && portal.isAlive() && portal.intersectsEntityBounds(entity)) { - return true; - } - } - return false; - } - - public static boolean isCameraInsidePortal(Minecraft minecraft) { - Entity cameraEntity = minecraft.getCameraEntity(); - return cameraEntity != null && isEntityInsidePortal(minecraft, cameraEntity); - } - - public static void clear() { - previousRollDegrees = 0.0F; - rollDegrees = 0.0F; - TELEPORT_COOLDOWNS.clear(); - } - - public static void tick(Minecraft minecraft) { - if (minecraft.level == null || minecraft.player == null) { - clear(); - return; - } - Entity cameraEntity = minecraft.getCameraEntity(); - if (cameraEntity == null) { - return; - } - previousRollDegrees = rollDegrees; - rollDegrees *= ROLL_DECAY; - if (Math.abs(rollDegrees) < ROLL_EPSILON) { - rollDegrees = 0.0F; - } - long gameTime = minecraft.level.getGameTime(); - TELEPORT_COOLDOWNS.entrySet().removeIf(entry -> entry.getValue() <= gameTime); - for (Entity entity : minecraft.level.entitiesForRendering()) { - if (!(entity instanceof PortalGunPortalEntity portal) || !portal.isAlive()) { - continue; - } - PortalGunPortalEntity linkedPortal = portal.getLinkedPortal(); - if (linkedPortal == null || !linkedPortal.isAlive()) { - continue; - } - if (!portal.shouldRenderFront(cameraEntity.position())) { - continue; - } - if (!canTeleport(cameraEntity, gameTime)) { - continue; - } - Vec3 crossingProbe = portal.resolveCrossingProbe(cameraEntity); - if (crossingProbe == null) { - continue; - } - applyPredictedTeleport(cameraEntity, portal, linkedPortal, crossingProbe, gameTime); - break; - } - } - - private static boolean canTeleport(Entity entity, long gameTime) { - if (!entity.isAlive() || entity instanceof PortalGunPortalEntity || entity.isPassenger() || entity.isVehicle()) { - return false; - } - long cooldownUntil = TELEPORT_COOLDOWNS.getOrDefault(entity.getUUID(), 0L); - return cooldownUntil <= gameTime; - } - - private static void applyPredictedTeleport(Entity entity, PortalGunPortalEntity sourcePortal, PortalGunPortalEntity destinationPortal, Vec3 currentProbe, long gameTime) { - Vec3 transformedLook = PortalGunTransformUtil.transformVector(sourcePortal, destinationPortal, entity.getLookAngle()).normalize(); - Vec3 transformedUp = PortalGunTransformUtil.transformVector(sourcePortal, destinationPortal, PortalGunTransformUtil.upVectorFromLookAndRoll(entity.getLookAngle(), rollDegrees)).normalize(); - Vec3 relativeProbe = currentProbe.subtract(sourcePortal.position()); - Vec3 transformedProbe = PortalGunTransformUtil.transformPosition(sourcePortal, destinationPortal, relativeProbe); - Vec3 transformedEntityOffset = PortalGunTransformUtil.transformVector(sourcePortal, destinationPortal, entity.position().subtract(currentProbe)); - Vec3 destinationNormal = destinationPortal.getNormalVec().normalize(); - double exitClearance = Math.max(0.35D, entity.getBbWidth() * 0.5D + 0.16D); - Vec3 exitProbe = destinationPortal.position().add(transformedProbe).add(destinationNormal.scale(exitClearance - transformedProbe.dot(destinationNormal))); - Vec3 exitPos = exitProbe.add(transformedEntityOffset); - Vec3 transformedMotion = PortalGunTransformUtil.transformVector(sourcePortal, destinationPortal, entity.getDeltaMovement()); - double outward = transformedMotion.dot(destinationNormal); - if (outward < 0.42D) { - transformedMotion = transformedMotion.add(destinationNormal.scale(0.42D - outward)); - } - rollDegrees = PortalGunTransformUtil.rollFromOrientation(transformedLook, transformedUp); - entity.teleportTo(exitPos.x, exitPos.y, exitPos.z); - entity.setDeltaMovement(transformedMotion); - entity.setYRot(PortalGunTransformUtil.yawFromLook(transformedLook)); - entity.setXRot(PortalGunTransformUtil.pitchFromLook(transformedLook)); - TELEPORT_COOLDOWNS.put(entity.getUUID(), gameTime + TELEPORT_COOLDOWN_TICKS); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunZoomClientState.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunZoomClientState.java new file mode 100644 index 00000000..87b4f53d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunZoomClientState.java @@ -0,0 +1,80 @@ +package com.craisinlord.antarchy.content.client; + +import com.craisinlord.antarchy.content.item.PortalGunItem; +import net.minecraft.client.Minecraft; +import net.minecraft.client.Options; +import net.minecraft.world.item.ItemStack; + +public final class PortalGunZoomClientState { + private static final int MAX_PROGRESS = 5; + private static int progress; + private static boolean zooming; + private static Double originalSensitivity; + + private PortalGunZoomClientState() { + } + + public static void tick(Minecraft minecraft, boolean held, boolean togglePressed) { + if (minecraft.player == null || minecraft.level == null) { + zooming = false; + progress = 0; + restoreSensitivity(minecraft.options); + return; + } + + ItemStack main = minecraft.player.getMainHandItem(); + ItemStack off = minecraft.player.getOffhandItem(); + boolean holdingPortalGun = held && (main.getItem() instanceof PortalGunItem || off.getItem() instanceof PortalGunItem); + if (togglePressed && holdingPortalGun) { + zooming = !zooming; + if (zooming && originalSensitivity == null) { + originalSensitivity = minecraft.options.sensitivity().get(); + } + } + if (!holdingPortalGun) { + zooming = false; + } + + progress = Math.max(0, Math.min(MAX_PROGRESS, progress + (zooming ? 1 : -1))); + if (originalSensitivity != null) { + if (progress == 0) { + restoreSensitivity(minecraft.options); + } + } + } + + public static double applyFov(double fov, float partialTick, Options options) { + if (progress == 0 && !zooming) { + restoreSensitivity(options); + return fov; + } + double tickProgress = Math.max(0.0D, Math.min(1.0D, partialTick)); + double easedProgress = progress == MAX_PROGRESS + ? MAX_PROGRESS + : zooming + ? progress - 1.0D + tickProgress + : progress + 1.0D - tickProgress; + easedProgress = Math.max(0.0D, Math.min(MAX_PROGRESS, easedProgress)); + double zoomFactor = zoomFactor(easedProgress); + if (originalSensitivity != null) { + options.sensitivity().set(originalSensitivity * zoomFactor); + } + return fov * zoomFactor; + } + + private static double zoomFactor(double progress) { + double normalizedProgress = Math.max(0.0D, Math.min(1.0D, progress / MAX_PROGRESS)); + return 0.1D + 0.9D * (1.0D - Math.sin(Math.toRadians(90.0D * normalizedProgress))); + } + + private static double zoomFactor(int progress) { + return zoomFactor((double) progress); + } + + private static void restoreSensitivity(Options options) { + if (originalSensitivity != null) { + options.sensitivity().set(originalSensitivity); + originalSensitivity = null; + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/QueenMusicHandler.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/QueenMusicHandler.java new file mode 100644 index 00000000..69d71742 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/QueenMusicHandler.java @@ -0,0 +1,103 @@ +package com.craisinlord.antarchy.content.client; + +import com.craisinlord.antarchy.content.entity.royal.QueenEntity; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.DeathScreen; +import net.minecraft.client.resources.sounds.AbstractTickableSoundInstance; +import net.minecraft.client.resources.sounds.SoundInstance; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundSource; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; + +import java.util.Comparator; + +public final class QueenMusicHandler { + private static final double START_RADIUS = 256.0D; + private static final double STOP_RADIUS = 320.0D; + private static final float MUSIC_VOLUME_SCALE = 0.7F; + private static QueenMusicSound music; + + private QueenMusicHandler() { + } + + public static boolean isPlaying() { + return music != null; + } + + public static void tick(Minecraft minecraft, SoundEvent soundEvent) { + if (minecraft.level == null || minecraft.player == null || minecraft.isPaused() + || !minecraft.player.isAlive() || minecraft.player.isRemoved() + || minecraft.player.isDeadOrDying() || minecraft.screen instanceof DeathScreen) { + reset(minecraft); + return; + } + + QueenEntity queen = minecraft.level.getEntitiesOfClass( + QueenEntity.class, + minecraft.player.getBoundingBox().inflate(STOP_RADIUS), + entity -> entity.isQueenMusicActive() || entity.shouldPlayQueenMusic() + ).stream() + .min(Comparator.comparingDouble(entity -> entity.distanceToSqr(minecraft.player))) + .orElse(null); + + if (queen == null) { + stop(minecraft); + return; + } + + if (music != null && !minecraft.getSoundManager().isActive(music)) { + music = null; + } + + if (music == null) { + minecraft.getMusicManager().stopPlaying(); + music = new QueenMusicSound(soundEvent); + minecraft.getSoundManager().play(music); + } + + if (music != null) { + double distance = Math.sqrt(queen.distanceToSqr(minecraft.player)); + float volume = distance <= START_RADIUS + ? 1.0F + : (float) Mth.clamp(1.0D - (distance - START_RADIUS) / (STOP_RADIUS - START_RADIUS), 0.0D, 1.0D); + music.setVolume(volume * MUSIC_VOLUME_SCALE); + } + } + + private static void stop(Minecraft minecraft) { + if (music != null) { + minecraft.getSoundManager().stop(music); + music = null; + } + } + + private static void reset(Minecraft minecraft) { + stop(minecraft); + } + + private static final class QueenMusicSound extends AbstractTickableSoundInstance { + private QueenMusicSound(SoundEvent soundEvent) { + super(soundEvent, SoundSource.MUSIC, RandomSource.create()); + this.looping = true; + this.delay = 0; + this.relative = true; + this.attenuation = SoundInstance.Attenuation.NONE; + this.volume = 1.0F; + this.pitch = 1.0F; + } + + private void setVolume(float volume) { + this.volume = volume; + } + + @Override + public void tick() { + } + + @Override + public boolean canStartSilent() { + return true; + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/ThoraxisWeatherClientState.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/ThoraxisWeatherClientState.java deleted file mode 100644 index b60eb51f..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/ThoraxisWeatherClientState.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.craisinlord.antarchy.content.client; - -import com.craisinlord.antarchy.content.weather.ThoraxisWeatherKind; -import java.util.HashMap; -import java.util.Map; -import net.minecraft.core.BlockPos; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.Level; - -public final class ThoraxisWeatherClientState { - private static final Map STATES = new HashMap<>(); - - private ThoraxisWeatherClientState() { - } - - public static void apply(ResourceLocation dimension, ThoraxisWeatherKind kind, long expiresAt, int anchorX, int anchorY, int anchorZ) { - if (kind == ThoraxisWeatherKind.NONE) { - STATES.remove(dimension); - return; - } - - STATES.put(dimension, new ThoraxisWeatherState(kind, expiresAt, new BlockPos(anchorX, anchorY, anchorZ))); - } - - public static ThoraxisWeatherState current(Level level) { - if (level == null) { - return null; - } - - ThoraxisWeatherState state = STATES.get(level.dimension().location()); - if (state == null) { - return null; - } - - long now = level.getGameTime(); - if (state.expiresAt > 0L && now > state.expiresAt) { - STATES.remove(level.dimension().location()); - return null; - } - - return state; - } - - public record ThoraxisWeatherState(ThoraxisWeatherKind kind, long expiresAt, BlockPos anchor) { - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/game/AntarchyComputerGames.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/game/AntarchyComputerGames.java new file mode 100644 index 00000000..42c6b464 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/game/AntarchyComputerGames.java @@ -0,0 +1,53 @@ +package com.craisinlord.antarchy.content.client.game; + +import com.craisinlord.antos.api.client.game.ComputerGame; +import com.craisinlord.antos.api.client.game.ComputerGameRegistry; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.resources.ResourceLocation; +import java.util.function.IntPredicate; +import java.util.function.Predicate; + +public final class AntarchyComputerGames { + private AntarchyComputerGames() {} + + public static void register() { + registerIfMissing(game("basilisk", "BASILISK", () -> { + BasiliskProgram program = new BasiliskProgram(true, 0, 0, score -> {}); + return new GameSession(program::tick, program::render, program::keyPressed, ignored -> false); + })); + } + + private static void registerIfMissing(ComputerGame game) { + if (ComputerGameRegistry.get(game.id()) == null) ComputerGameRegistry.register(game); + } + + private static ComputerGame game(String path, String title, ProgramFactory factory) { + ResourceLocation id = new ResourceLocation("antarchy", path); + ResourceLocation disk = new ResourceLocation("antarchy", path + "_game"); + return new ComputerGame() { + @Override public ResourceLocation id() { return id; } + @Override public ResourceLocation diskId() { return disk; } + @Override public String title() { return title; } + @Override public Session create() { return factory.create(); } + }; + } + + @FunctionalInterface + private interface ProgramFactory { ComputerGame.Session create(); } + + @FunctionalInterface private interface GameRenderer { void render(GuiGraphics graphics, Font font, int x, int y, int width, int height); } + private static final class GameSession implements ComputerGame.Session { + private final Runnable ticker; + private final GameRenderer renderer; + private final IntPredicate keyHandler; + private final Predicate charHandler; + private GameSession(Runnable ticker, GameRenderer renderer, IntPredicate keyHandler, Predicate charHandler) { + this.ticker = ticker; this.renderer = renderer; this.keyHandler = keyHandler; this.charHandler = charHandler; + } + @Override public void tick() { ticker.run(); } + @Override public void render(GuiGraphics graphics, Font font, int x, int y, int width, int height) { renderer.render(graphics, font, x, y, width, height); } + @Override public boolean keyPressed(int keyCode) { return keyHandler.test(keyCode); } + @Override public boolean charTyped(char codePoint) { return charHandler.test(codePoint); } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/game/AntmanGame.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/game/AntmanGame.java new file mode 100644 index 00000000..2788448c --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/game/AntmanGame.java @@ -0,0 +1,233 @@ +package com.craisinlord.antarchy.content.client.game; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Random; + +public final class AntmanGame { + public enum Phase { READY, PLAYING, LOST } + public enum Direction { UP(0, -1), DOWN(0, 1), LEFT(-1, 0), RIGHT(1, 0); + final int dx; + final int dy; + Direction(int dx, int dy) { this.dx = dx; this.dy = dy; } + Direction opposite() { return switch (this) { case UP -> DOWN; case DOWN -> UP; case LEFT -> RIGHT; case RIGHT -> LEFT; }; } + } + public enum EnemyKind { CREEPER, ZOMBIE } + public record Enemy(EnemyKind kind, double x, double y, Direction direction) { } + + private static final int WIDTH = 28; + private static final int HEIGHT = 20; + private static final double SPEED = 0.075D; + private final Random random = new Random(); + private final boolean[][] walls = new boolean[HEIGHT][WIDTH]; + private final List enemies = new ArrayList<>(); + private Direction direction = Direction.RIGHT; + private Direction requested = Direction.RIGHT; + private Phase phase = Phase.READY; + private double playerX; + private double playerY; + private int diamondX; + private int diamondY; + private int cornDogX; + private int cornDogY; + private int cornDogTicks; + private int cornDogSpawnTicks; + private int score; + private int highScore; + private int lives = 3; + private int ticks; + private boolean collectedDiamond; + + public AntmanGame(int highScore, int score) { + this.highScore = Math.max(0, highScore); + reset(score); + } + + public void reset() { reset(0); } + + public void reset(int currentScore) { + generateMaze(); + playerX = 1.5D; + playerY = 1.5D; + direction = Direction.RIGHT; + requested = Direction.RIGHT; + phase = Phase.READY; + score = Math.max(0, currentScore); + lives = 3; + ticks = 0; + cornDogTicks = 0; + cornDogSpawnTicks = 0; + placeDiamond(); + cornDogX = -1; + cornDogY = -1; + enemies.clear(); + enemies.add(new Enemy(EnemyKind.CREEPER, WIDTH - 2.5D, HEIGHT - 2.5D, Direction.LEFT)); + enemies.add(new Enemy(EnemyKind.ZOMBIE, WIDTH - 2.5D, 1.5D, Direction.DOWN)); + } + + public void start() { if (phase == Phase.READY) phase = Phase.PLAYING; } + + public boolean tick() { + collectedDiamond = false; + if (phase != Phase.PLAYING) return false; + ticks++; + if (cornDogTicks > 0) cornDogTicks--; + if (cornDogX < 0 && ++cornDogSpawnTicks >= 240) { + placeCornDog(); + cornDogSpawnTicks = 0; + } + updatePlayer(); + updateEnemies(); + if (near(playerX, playerY, diamondX + 0.5D, diamondY + 0.5D)) { + score += 10; + highScore = Math.max(highScore, score); + collectedDiamond = true; + placeDiamond(); + } + if (cornDogX >= 0 && near(playerX, playerY, cornDogX + 0.5D, cornDogY + 0.5D)) { + cornDogTicks = 200; + cornDogX = -1; + cornDogY = -1; + cornDogSpawnTicks = 0; + } + for (int index = 0; index < enemies.size(); index++) { + Enemy enemy = enemies.get(index); + if (!near(playerX, playerY, enemy.x(), enemy.y())) continue; + if (cornDogTicks > 0) { + score += 100; + highScore = Math.max(highScore, score); + enemies.set(index, new Enemy(enemy.kind(), WIDTH - 2.5D, enemy.kind() == EnemyKind.CREEPER ? HEIGHT - 2.5D : 1.5D, Direction.LEFT)); + } else { + lives--; + if (lives <= 0) phase = Phase.LOST; + else { + playerX = 1.5D; + playerY = 1.5D; + direction = Direction.RIGHT; + requested = Direction.RIGHT; + } + } + } + return true; + } + + public void setDirection(Direction direction) { if (direction != null) requested = direction; } + public Phase phase() { return phase; } + public int score() { return score; } + public int highScore() { return highScore; } + public int lives() { return lives; } + public int width() { return WIDTH; } + public int height() { return HEIGHT; } + public double playerX() { return playerX; } + public double playerY() { return playerY; } + public int diamondX() { return diamondX; } + public int diamondY() { return diamondY; } + public int cornDogX() { return cornDogX; } + public int cornDogY() { return cornDogY; } + public int cornDogTicks() { return cornDogTicks; } + public int animationFrame() { return (ticks / 5) % 2; } + public Direction direction() { return direction; } + public List enemies() { return Collections.unmodifiableList(enemies); } + public boolean collectedDiamond() { return collectedDiamond; } + public boolean isWall(int x, int y) { return x < 0 || y < 0 || x >= WIDTH || y >= HEIGHT || walls[y][x]; } + + private void updatePlayer() { + if (atCenter(playerX) && atCenter(playerY) && canMove(playerX, playerY, requested)) { + playerX = Math.round(playerX - 0.5D) + 0.5D; + playerY = Math.round(playerY - 0.5D) + 0.5D; + direction = requested; + } + double nextX = playerX + direction.dx * SPEED; + double nextY = playerY + direction.dy * SPEED; + if (canMove(nextX, nextY, direction)) { playerX = nextX; playerY = nextY; } + else { playerX = Math.round(playerX - 0.5D) + 0.5D; playerY = Math.round(playerY - 0.5D) + 0.5D; } + } + + private void updateEnemies() { + for (int index = 0; index < enemies.size(); index++) { + Enemy enemy = enemies.get(index); + Direction next = enemy.direction(); + if (atCenter(enemy.x()) && atCenter(enemy.y())) next = enemy.kind() == EnemyKind.CREEPER ? chaseDirection(enemy.x(), enemy.y(), next) : zombieDirection(enemy.x(), enemy.y(), next); + double nextX = enemy.x() + next.dx * (enemy.kind() == EnemyKind.CREEPER ? 0.06D : 0.05D); + double nextY = enemy.y() + next.dy * (enemy.kind() == EnemyKind.CREEPER ? 0.06D : 0.05D); + if (!canMove(nextX, nextY, next)) { next = randomDirection(enemy.x(), enemy.y(), next); nextX = enemy.x() + next.dx * 0.05D; nextY = enemy.y() + next.dy * 0.05D; } + if (canMove(nextX, nextY, next)) enemies.set(index, new Enemy(enemy.kind(), nextX, nextY, next)); + } + } + + private Direction chaseDirection(double x, double y, Direction current) { + Direction best = current; + double distance = Double.MAX_VALUE; + for (Direction direction : Direction.values()) { + if (isOpposite(direction, current) || !canMove(x, y, direction)) continue; + double nx = x + direction.dx; + double ny = y + direction.dy; + double value = Math.abs(playerX - nx) + Math.abs(playerY - ny); + if (value < distance) { distance = value; best = direction; } + } + if (distance == Double.MAX_VALUE && canMove(x, y, current.opposite())) best = current.opposite(); + return best; + } + + private Direction zombieDirection(double x, double y, Direction current) { + if (random.nextInt(4) != 0 && canMove(x, y, current)) return current; + return randomDirection(x, y, current); + } + + private Direction randomDirection(double x, double y, Direction current) { + List options = new ArrayList<>(); + for (Direction direction : Direction.values()) if (!isOpposite(direction, current) && canMove(x, y, direction)) options.add(direction); + if (options.isEmpty() && canMove(x, y, current.opposite())) return current.opposite(); + if (options.isEmpty()) return current; + return options.get(random.nextInt(options.size())); + } + + private boolean canMove(double x, double y, Direction direction) { + double nx = x + direction.dx * SPEED; + double ny = y + direction.dy * SPEED; + return !isWall((int) Math.floor(nx), (int) Math.floor(ny)); + } + + private boolean atCenter(double value) { return Math.abs((value - 0.5D) - Math.rint(value - 0.5D)) < 0.07D; } + private boolean near(double firstX, double firstY, double secondX, double secondY) { return Math.abs(firstX - secondX) < 0.45D && Math.abs(firstY - secondY) < 0.45D; } + private boolean isOpposite(Direction first, Direction second) { return first.dx + second.dx == 0 && first.dy + second.dy == 0; } + + private void generateMaze() { + for (int y = 0; y < HEIGHT; y++) for (int x = 0; x < WIDTH; x++) walls[y][x] = true; + carve(1, 1); + } + + private void carve(int x, int y) { + walls[y][x] = false; + List directions = new ArrayList<>(List.of(Direction.UP, Direction.DOWN, Direction.LEFT, Direction.RIGHT)); + Collections.shuffle(directions, random); + for (Direction direction : directions) { + int nx = x + direction.dx * 2; + int ny = y + direction.dy * 2; + if (nx > 0 && ny > 0 && nx < WIDTH - 1 && ny < HEIGHT - 1 && walls[ny][nx]) { + walls[y + direction.dy][x + direction.dx] = false; + carve(nx, ny); + } + } + } + + private void placeDiamond() { + int[] cell = randomOpenCell(); + diamondX = cell[0]; + diamondY = cell[1]; + } + + private void placeCornDog() { + int[] cell = randomOpenCell(); + cornDogX = cell[0]; + cornDogY = cell[1]; + } + + private int[] randomOpenCell() { + int x; + int y; + do { x = random.nextInt(WIDTH); y = random.nextInt(HEIGHT); } while (isWall(x, y) || near(playerX, playerY, x + 0.5D, y + 0.5D)); + return new int[]{x, y}; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/game/AntmanProgram.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/game/AntmanProgram.java new file mode 100644 index 00000000..3966450c --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/game/AntmanProgram.java @@ -0,0 +1,48 @@ +package com.craisinlord.antarchy.content.client.game; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.sounds.SoundEvents; +import java.util.function.IntConsumer; + +public final class AntmanProgram { + private final AntmanGame game; + private final IntConsumer scoreSaver; + private boolean installed; + private int savedScore; + private int savedHighScore; + + public AntmanProgram(boolean installed, int highScore, int score, IntConsumer scoreSaver) { + this.installed = installed; + this.savedScore = score; + this.savedHighScore = highScore; + this.game = new AntmanGame(highScore, score); + this.scoreSaver = scoreSaver; + } + + public void setInstalled(boolean installed) { this.installed = installed; if (!installed) game.reset(); } + public boolean installed() { return installed; } + public AntmanGame game() { return game; } + public void setStoredScores(int score, int highScore) { savedScore = score; savedHighScore = highScore; game.reset(score); } + public void tick() { + if (!game.tick()) return; + if (game.collectedDiamond() && Minecraft.getInstance().player != null) Minecraft.getInstance().player.playSound(SoundEvents.AMETHYST_BLOCK_CHIME, 0.6F, 1.4F); + if (game.score() != savedScore || game.highScore() != savedHighScore) { savedScore = game.score(); savedHighScore = game.highScore(); scoreSaver.accept(savedScore); } + } + public boolean keyPressed(int keyCode) { + if (!installed) return false; + AntmanGame.Direction direction = switch (keyCode) { + case 265, 87 -> AntmanGame.Direction.UP; + case 264, 83 -> AntmanGame.Direction.DOWN; + case 263, 65 -> AntmanGame.Direction.LEFT; + case 262, 68 -> AntmanGame.Direction.RIGHT; + default -> null; + }; + if (direction != null) { game.start(); game.setDirection(direction); return true; } + if (keyCode == 257 || keyCode == 335) { if (game.phase() != AntmanGame.Phase.PLAYING) { game.reset(); game.start(); savedScore = 0; scoreSaver.accept(0); } return true; } + return false; + } + public void render(GuiGraphics graphics, Font font, int x, int y, int width, int height) { AntmanRenderer.render(graphics, font, game, x, y, width, height); } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/game/AntmanRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/game/AntmanRenderer.java new file mode 100644 index 00000000..7babb7b9 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/game/AntmanRenderer.java @@ -0,0 +1,100 @@ +package com.craisinlord.antarchy.content.client.game; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; + +public final class AntmanRenderer { + private static final int BLACK = 0xFF020602; + private static final int DARK_GREEN = 0xFF123012; + private static final int GREEN = 0xFF65FF65; + private static final int PALE_GREEN = 0xFFB8FFB8; + private static final int ANT_BODY = 0xFFC98A3D; + private static final int GHOST_RED = 0xFFFF4A4A; + private static final int GHOST_PINK = 0xFFFF8FD2; + private static final int GHOST_FRIGHTENED = 0xFF4A8CFF; + private static final int GHOST_EYE = 0xFFF8FFFF; + private AntmanRenderer() { } + + public static void render(GuiGraphics graphics, Font font, AntmanGame game, int x, int y, int width, int height) { + graphics.fill(x, y, x + width, y + height, BLACK); + graphics.drawString(font, "SCORE " + String.format("%04d", game.score()), x + 5, y + 4, GREEN, false); + graphics.drawString(font, "HI " + String.format("%04d", game.highScore()), x + width - 55, y + 4, PALE_GREEN, false); + graphics.drawString(font, "LIVES " + game.lives(), x + 5, y + height - 13, PALE_GREEN, false); + int tile = Math.max(1, Math.min((width - 8) / game.width(), (height - 34) / game.height())); + int boardWidth = tile * game.width(); + int boardHeight = tile * game.height(); + int boardX = x + (width - boardWidth) / 2; + int boardY = y + 20 + (height - 34 - boardHeight) / 2; + for (int cellY = 0; cellY < game.height(); cellY++) for (int cellX = 0; cellX < game.width(); cellX++) if (game.isWall(cellX, cellY)) graphics.fill(boardX + cellX * tile, boardY + cellY * tile, boardX + (cellX + 1) * tile, boardY + (cellY + 1) * tile, DARK_GREEN); + renderItem(graphics, new ItemStack(Items.DIAMOND), boardX + game.diamondX() * tile, boardY + game.diamondY() * tile, tile); + if (game.cornDogX() >= 0) renderItem(graphics, new ItemStack(AntarchyObjects.COOKED_CORNDOG.get()), boardX + game.cornDogX() * tile, boardY + game.cornDogY() * tile, tile); + int playerX = boardX + (int) (game.playerX() * tile); + int playerY = boardY + (int) (game.playerY() * tile); + drawAnt(graphics, playerX, playerY, tile, game.animationFrame(), ANT_BODY, game.direction()); + for (AntmanGame.Enemy enemy : game.enemies()) { + int enemyX = boardX + (int) (enemy.x() * tile); + int enemyY = boardY + (int) (enemy.y() * tile); + int color = game.cornDogTicks() > 0 ? GHOST_FRIGHTENED : (enemy.kind() == AntmanGame.EnemyKind.CREEPER ? GHOST_RED : GHOST_PINK); + drawGhost(graphics, enemyX, enemyY, tile, game.animationFrame(), color); + } + if (game.phase() != AntmanGame.Phase.PLAYING) { + String title = game.phase() == AntmanGame.Phase.READY ? "ANTMAN.EXE" : "GAME OVER"; + String prompt = game.phase() == AntmanGame.Phase.READY ? "ENTER TO START" : "ENTER TO RETRY"; + int centerY = y + height / 2; + graphics.fill(x + 4, centerY - 16, x + width - 4, centerY + 16, BLACK); + graphics.drawString(font, title, x + (width - font.width(title)) / 2, centerY - 12, GREEN, false); + graphics.drawString(font, prompt, x + (width - font.width(prompt)) / 2, centerY + 2, PALE_GREEN, false); + } + } + + private static void drawAnt(GuiGraphics graphics, int centerX, int centerY, int tile, int frame, int color, AntmanGame.Direction direction) { + int size = Math.max(4, tile - 1); + int left = centerX - size / 2; + int top = centerY - size / 2; + int segment = Math.max(1, size / 4); + graphics.fill(left + segment * 2, top + segment, left + segment * 3, top + segment * 3, color); + graphics.fill(left + segment, top + segment * 2, left + segment * 4, top + segment * 4, color); + graphics.fill(left + segment * 3, top + segment * 2, left + segment * 5, top + segment * 4, color); + int legOffset = frame == 0 ? 1 : -1; + graphics.fill(left + segment, top + segment * 3, left + segment * 2, top + segment * 4 + legOffset, color); + graphics.fill(left + segment * 3, top + segment * 3, left + segment * 4, top + segment * 4 - legOffset, color); + if (direction == AntmanGame.Direction.LEFT || direction == AntmanGame.Direction.RIGHT) { + int headX = direction == AntmanGame.Direction.LEFT ? left : left + segment * 4; + graphics.fill(headX, top + segment, headX + segment, top + segment * 2, BLACK); + } + } + + private static void drawGhost(GuiGraphics graphics, int centerX, int centerY, int tile, int frame, int color) { + int size = Math.max(4, tile - 1); + int left = centerX - size / 2; + int top = centerY - size / 2; + int eyeWidth = Math.max(1, size / 5); + int bodyBottom = top + size - 1; + graphics.fill(left + 1, top, left + size - 1, bodyBottom - 1, color); + graphics.fill(left, top + 2, left + size, bodyBottom - 2, color); + int wave = frame == 0 ? 0 : 1; + graphics.fill(left, bodyBottom - 1 - wave, left + size / 3, bodyBottom + 1, color); + graphics.fill(left + size / 3, bodyBottom - wave, left + size * 2 / 3, bodyBottom + 1, color); + graphics.fill(left + size * 2 / 3, bodyBottom - 1 - wave, left + size, bodyBottom + 1, color); + int eyeY = top + Math.max(1, size / 3); + graphics.fill(left + size / 3 - eyeWidth / 2, eyeY, left + size / 3 + eyeWidth, eyeY + eyeWidth + 1, GHOST_EYE); + graphics.fill(left + size * 2 / 3 - eyeWidth / 2, eyeY, left + size * 2 / 3 + eyeWidth, eyeY + eyeWidth + 1, GHOST_EYE); + graphics.fill(left + size / 3, eyeY + 1, left + size / 3 + 1, eyeY + eyeWidth + 1, BLACK); + graphics.fill(left + size * 2 / 3, eyeY + 1, left + size * 2 / 3 + 1, eyeY + eyeWidth + 1, BLACK); + } + + private static void renderItem(GuiGraphics graphics, ItemStack stack, int x, int y, int tile) { + float scale = Math.min(1.0F, Math.max(0.45F, tile / 16.0F)); + graphics.pose().pushPose(); + graphics.pose().translate(x + tile / 2.0F, y + tile / 2.0F, 0.0F); + graphics.pose().scale(scale, scale, 1.0F); + RenderSystem.setShaderColor(0.38F, 1.0F, 0.38F, 1.0F); + graphics.renderItem(stack, -8, -8); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + graphics.pose().popPose(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/game/BasiliskGame.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/game/BasiliskGame.java new file mode 100644 index 00000000..36fedcf9 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/game/BasiliskGame.java @@ -0,0 +1,94 @@ +package com.craisinlord.antarchy.content.client.game; + +import java.util.ArrayDeque; +import java.util.Deque; +import java.util.Random; + +public final class BasiliskGame { + public enum Phase { READY, PLAYING, LOST } + public enum Direction { UP(0, -1), DOWN(0, 1), LEFT(-1, 0), RIGHT(1, 0); + final int dx; + final int dy; + Direction(int dx, int dy) { this.dx = dx; this.dy = dy; } + } + + private final Deque body = new ArrayDeque<>(); + private final Random random = new Random(); + private Direction direction = Direction.RIGHT; + private Direction requested = Direction.RIGHT; + private Phase phase = Phase.READY; + private int foodX; + private int foodY; + private int score; + private int highScore; + private int ticks; + + public BasiliskGame(int highScore, int score) { + this.highScore = Math.max(0, highScore); + reset(score); + } + + public void reset() { + reset(0); + } + + public void reset(int currentScore) { + body.clear(); + body.addFirst(new Part(9, 7)); + body.addLast(new Part(8, 7)); + body.addLast(new Part(7, 7)); + direction = Direction.RIGHT; + requested = Direction.RIGHT; + phase = Phase.READY; + score = Math.max(0, currentScore); + ticks = 0; + placeFood(); + } + + public void start() { if (phase == Phase.READY) phase = Phase.PLAYING; } + + public boolean tick() { + if (phase != Phase.PLAYING || ++ticks < 5) return false; + ticks = 0; + if (!isOpposite(requested, direction)) direction = requested; + Part head = body.peekFirst(); + int nextX = head.x() + direction.dx; + int nextY = head.y() + direction.dy; + if (nextX < 0 || nextX >= 20 || nextY < 0 || nextY >= 14 || body.contains(new Part(nextX, nextY))) { + phase = Phase.LOST; + return true; + } + body.addFirst(new Part(nextX, nextY)); + if (nextX == foodX && nextY == foodY) { + score += 10; + highScore = Math.max(highScore, score); + placeFood(); + } else { + body.removeLast(); + } + return true; + } + + public void setDirection(Direction direction) { if (direction != null && !isOpposite(direction, this.direction)) requested = direction; } + public Phase phase() { return phase; } + public int score() { return score; } + public int highScore() { return highScore; } + public int width() { return 20; } + public int height() { return 14; } + public int foodX() { return foodX; } + public int foodY() { return foodY; } + public Deque body() { return body; } + + private void placeFood() { + do { + foodX = random.nextInt(width()); + foodY = random.nextInt(height()); + } while (body.contains(new Part(foodX, foodY))); + } + + private boolean isOpposite(Direction first, Direction second) { + return first.dx + second.dx == 0 && first.dy + second.dy == 0; + } + + public record Part(int x, int y) { } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/game/BasiliskProgram.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/game/BasiliskProgram.java new file mode 100644 index 00000000..cf85c8d5 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/game/BasiliskProgram.java @@ -0,0 +1,43 @@ +package com.craisinlord.antarchy.content.client.game; + +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; +import java.util.function.IntConsumer; + +public final class BasiliskProgram { + private final BasiliskGame game; + private boolean installed; + private int savedScore; + private int savedHighScore; + private final IntConsumer scoreSaver; + + public BasiliskProgram(boolean installed, int highScore, int score, IntConsumer scoreSaver) { + this.installed = installed; + this.savedHighScore = highScore; + this.savedScore = score; + this.game = new BasiliskGame(highScore, score); + this.scoreSaver = scoreSaver; + } + + public void setInstalled(boolean installed) { this.installed = installed; if (!installed) game.reset(); } + public boolean installed() { return installed; } + public BasiliskGame game() { return game; } + public void setStoredScores(int score, int highScore) { savedScore = score; savedHighScore = highScore; game.reset(score); } + public void tick() { if (game.tick() && (game.score() != savedScore || game.highScore() != savedHighScore)) { if (game.score() > savedScore) Minecraft.getInstance().player.playSound(AntarchySoundEvents.BASILISK_BITE.get(), 0.5F, 1.2F); savedScore = game.score(); savedHighScore = game.highScore(); scoreSaver.accept(savedScore); } } + public boolean keyPressed(int keyCode) { + if (!installed) return false; + BasiliskGame.Direction direction = switch (keyCode) { + case 265, 87 -> BasiliskGame.Direction.UP; + case 264, 83 -> BasiliskGame.Direction.DOWN; + case 263, 65 -> BasiliskGame.Direction.LEFT; + case 262, 68 -> BasiliskGame.Direction.RIGHT; + default -> null; + }; + if (direction != null) { game.start(); game.setDirection(direction); return true; } + if (keyCode == 257 || keyCode == 335) { if (game.phase() != BasiliskGame.Phase.PLAYING) { game.reset(); game.start(); savedScore = 0; scoreSaver.accept(0); } return true; } + return false; + } + public void render(GuiGraphics graphics, Font font, int x, int y, int width, int height) { BasiliskRenderer.render(graphics, font, game, x, y, width, height); } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/game/BasiliskRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/game/BasiliskRenderer.java new file mode 100644 index 00000000..3adab6c6 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/game/BasiliskRenderer.java @@ -0,0 +1,39 @@ +package com.craisinlord.antarchy.content.client.game; + +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; + +public final class BasiliskRenderer { + private static final int BLACK = 0xFF020602; + private static final int DARK_GREEN = 0xFF123012; + private static final int GREEN = 0xFF65FF65; + private static final int PALE_GREEN = 0xFFB8FFB8; + private BasiliskRenderer() { } + + public static void render(GuiGraphics graphics, Font font, BasiliskGame game, int x, int y, int width, int height) { + graphics.fill(x, y, x + width, y + height, BLACK); + graphics.drawString(font, "SCORE " + String.format("%04d", game.score()), x + 6, y + 4, GREEN, false); + graphics.drawString(font, "HI " + String.format("%04d", game.highScore()), x + width - 56, y + 4, PALE_GREEN, false); + int tile = Math.max(1, Math.min((width - 10) / game.width(), (height - 28) / game.height())); + int boardWidth = tile * game.width(); + int boardHeight = tile * game.height(); + int boardX = x + (width - boardWidth) / 2; + int boardY = y + 22 + (height - 22 - boardHeight) / 2; + graphics.fill(boardX, boardY, boardX + boardWidth, boardY + boardHeight, DARK_GREEN); + graphics.fill(boardX + 1, boardY + 1, boardX + boardWidth - 1, boardY + boardHeight - 1, BLACK); + int appleX = boardX + game.foodX() * tile; + int appleY = boardY + game.foodY() * tile; + int appleInset = Math.max(1, tile / 4); + graphics.fill(appleX + appleInset, appleY + appleInset + 1, appleX + tile - appleInset, appleY + tile - appleInset, PALE_GREEN); + if (tile >= 5) graphics.fill(appleX + tile / 2, appleY + 1, appleX + tile / 2 + 1, appleY + tile / 3 + 1, GREEN); + for (BasiliskGame.Part part : game.body()) graphics.fill(boardX + part.x() * tile + 1, boardY + part.y() * tile + 1, boardX + (part.x() + 1) * tile - 1, boardY + (part.y() + 1) * tile - 1, GREEN); + if (game.phase() != BasiliskGame.Phase.PLAYING) { + String title = game.phase() == BasiliskGame.Phase.READY ? "BASILISK" : "GAME OVER"; + String prompt = game.phase() == BasiliskGame.Phase.READY ? "ENTER TO START" : "ENTER TO RETRY"; + int centerY = y + height / 2; + graphics.fill(x + 4, centerY - 16, x + width - 4, centerY + 16, BLACK); + graphics.drawString(font, title, x + (width - font.width(title)) / 2, centerY - 12, GREEN, false); + graphics.drawString(font, prompt, x + (width - font.width(prompt)) / 2, centerY + 2, PALE_GREEN, false); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/hud/BloodglassHudRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/hud/BloodglassHudRenderer.java index 1d6422a0..4f1af2da 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/hud/BloodglassHudRenderer.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/hud/BloodglassHudRenderer.java @@ -10,7 +10,7 @@ import net.minecraft.world.entity.player.Player; public final class BloodglassHudRenderer { private static final ResourceLocation HEART_CONTAINER = - new ResourceLocation("textures/gui/sprites/hud/heart/container.png"); + new ResourceLocation("textures/gui/icons.png"); private static final ResourceLocation HEART_FULL = new ResourceLocation(Antarchy.MODID, "textures/gui/sprites/hud/bloodglass_heart.png"); private static final ResourceLocation HEART_CRACKED = @@ -50,7 +50,7 @@ public final class BloodglassHudRenderer { int x = left + col * HEART_PITCH; int y = baseTop - row * 10; ResourceLocation tex = (i < active) ? HEART_FULL : HEART_CRACKED; - gui.blit(HEART_CONTAINER, x, y, 0, 0, HEART_SIZE, HEART_SIZE, HEART_SIZE, HEART_SIZE); + gui.blit(HEART_CONTAINER, x, y, 16, 0, HEART_SIZE, HEART_SIZE, 256, 256); gui.blit(tex, x, y, 0, 0, HEART_SIZE, HEART_SIZE, HEART_SIZE, HEART_SIZE); } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/hud/CustomBossBarRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/hud/CustomBossBarRenderer.java index caf0a6d7..3c8035fb 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/hud/CustomBossBarRenderer.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/hud/CustomBossBarRenderer.java @@ -7,10 +7,14 @@ import com.craisinlord.antarchy.content.entity.HerculesBeetleEntity; import com.craisinlord.antarchy.content.entity.ToreterrorEntity; import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; +import com.craisinlord.antarchy.content.entity.royal.KingEntity; +import com.craisinlord.antarchy.content.entity.royal.QueenEntity; +import java.util.HashMap; import java.util.Map; import java.util.UUID; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.BossEvent; import net.minecraft.world.entity.Entity; @@ -19,6 +23,7 @@ public final class CustomBossBarRenderer { private static final int BAR_WIDTH = 182; private static final int BAR_HEIGHT = 5; private static final int GLOBAL_Y_OFFSET = 15; + private static final Map TEXTURES_BY_BOSS_ID = new HashMap<>(); private static final Map, Textures> BY_ENTITY_CLASS = Map.of( KrakenEntity.class, textures("blue", "kraken", 204, 56, 4), @@ -26,7 +31,19 @@ public final class CustomBossBarRenderer { AlphaMantisEntity.class, textures("green", "alpha_mantis", 205, 49, 6), BrutalflyEntity.class, textures("brutalfly", "brutalfly", 198, 38, 3), HerculesBeetleEntity.class, textures("beetle", "hercules_beetle", 194, 33, 1), - EmperorScorpionEntity.class, textures("purple", "scorpion", 218, 34, -2) + EmperorScorpionEntity.class, textures("purple", "scorpion", 218, 34, -2), + KingEntity.class, textures("king", "king", 256, 67, 4), + QueenEntity.class, textures("queen", "queen", 253, 50, 6) + ); + private static final Map BY_LOCALIZED_NAME_AND_COLOR = Map.of( + key(Component.translatable("entity.antarchy.kraken").getString(), BossEvent.BossBarColor.BLUE), BY_ENTITY_CLASS.get(KrakenEntity.class), + key(Component.translatable("entity.antarchy.toreterror").getString(), BossEvent.BossBarColor.GREEN), BY_ENTITY_CLASS.get(ToreterrorEntity.class), + key(Component.translatable("entity.antarchy.alpha_mantis").getString(), BossEvent.BossBarColor.GREEN), BY_ENTITY_CLASS.get(AlphaMantisEntity.class), + key(Component.translatable("entity.antarchy.brutalfly").getString(), BossEvent.BossBarColor.YELLOW), BY_ENTITY_CLASS.get(BrutalflyEntity.class), + key(Component.translatable("entity.antarchy.hercules_beetle").getString(), BossEvent.BossBarColor.RED), BY_ENTITY_CLASS.get(HerculesBeetleEntity.class), + key(Component.translatable("entity.antarchy.emperor_scorpion").getString(), BossEvent.BossBarColor.PURPLE), BY_ENTITY_CLASS.get(EmperorScorpionEntity.class), + key(Component.translatable("entity.antarchy.king").getString(), BossEvent.BossBarColor.YELLOW), BY_ENTITY_CLASS.get(KingEntity.class), + key(Component.translatable("entity.antarchy.queen").getString(), BossEvent.BossBarColor.PURPLE), BY_ENTITY_CLASS.get(QueenEntity.class) ); private CustomBossBarRenderer() { @@ -60,11 +77,25 @@ public final class CustomBossBarRenderer { } private static Textures lookup(BossEvent bossEvent) { - Entity entity = findEntity(bossEvent.getId()); - if (entity == null) { - return null; + Textures cached = TEXTURES_BY_BOSS_ID.get(bossEvent.getId()); + if (cached != null) { + return cached; } - return BY_ENTITY_CLASS.get(entity.getClass()); + + Entity entity = findEntity(bossEvent.getId()); + if (entity != null) { + Textures textures = BY_ENTITY_CLASS.get(entity.getClass()); + if (textures != null) { + TEXTURES_BY_BOSS_ID.put(bossEvent.getId(), textures); + return textures; + } + } + + Textures fallback = BY_LOCALIZED_NAME_AND_COLOR.get(key(bossEvent.getName().getString(), bossEvent.getColor())); + if (fallback != null) { + TEXTURES_BY_BOSS_ID.put(bossEvent.getId(), fallback); + } + return fallback; } private static Entity findEntity(UUID id) { @@ -91,6 +122,10 @@ public final class CustomBossBarRenderer { ); } + private static String key(String name, BossEvent.BossBarColor color) { + return color.name() + "|" + name; + } + private record Textures(ResourceLocation background, ResourceLocation progress, ResourceLocation overlay, int overlayWidth, int overlayHeight, int barYOffset) { } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/CloudSharkModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/CloudSharkModel.java deleted file mode 100644 index 8184331b..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/CloudSharkModel.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.craisinlord.antarchy.content.client.model; - -import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.entity.cloud_shark.CloudSharkEntity; -import net.minecraft.resources.ResourceLocation; -import software.bernie.geckolib.model.GeoModel; - -public class CloudSharkModel extends GeoModel { - public static final ResourceLocation BASE_TEXTURE = - new ResourceLocation(Antarchy.MODID, "textures/entity/cloud_shark/cloud_shark.png"); - public static final ResourceLocation EMISSIVE_TEXTURE = - new ResourceLocation(Antarchy.MODID, "textures/entity/cloud_shark/cloud_shark_emissive.png"); - - @Override - public ResourceLocation getModelResource(CloudSharkEntity animatable) { - return new ResourceLocation(Antarchy.MODID, "geo/cloud_shark.geo.json"); - } - - @Override - public ResourceLocation getTextureResource(CloudSharkEntity animatable) { - return BASE_TEXTURE; - } - - @Override - public ResourceLocation getAnimationResource(CloudSharkEntity animatable) { - return new ResourceLocation(Antarchy.MODID, "animations/cloud_shark.animation.json"); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/CrawlingBlightModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/CrawlingBlightModel.java new file mode 100644 index 00000000..f6aecf3d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/CrawlingBlightModel.java @@ -0,0 +1,23 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.CrawlingBlightEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class CrawlingBlightModel extends GeoModel { + @Override + public ResourceLocation getModelResource(CrawlingBlightEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "geo/crawling_blight.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(CrawlingBlightEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "textures/entity/crawling_blight.png"); + } + + @Override + public ResourceLocation getAnimationResource(CrawlingBlightEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "animations/crawling_blight.animation.json"); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/CreepingHorrorModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/CreepingHorrorModel.java deleted file mode 100644 index f738b2fe..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/CreepingHorrorModel.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.craisinlord.antarchy.content.client.model; - -import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.entity.CreepingHorrorEntity; -import net.minecraft.resources.ResourceLocation; -import software.bernie.geckolib.model.GeoModel; - -public class CreepingHorrorModel extends GeoModel { - @Override - public ResourceLocation getModelResource(CreepingHorrorEntity animatable) { - return new ResourceLocation(Antarchy.MODID, "geo/creeping_horror.geo.json"); - } - - @Override - public ResourceLocation getTextureResource(CreepingHorrorEntity animatable) { - return new ResourceLocation(Antarchy.MODID, "textures/entity/creeping_horror.png"); - } - - @Override - public ResourceLocation getAnimationResource(CreepingHorrorEntity animatable) { - return new ResourceLocation(Antarchy.MODID, "animations/creeping_horror.animation.json"); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/FlytrapModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/FlytrapModel.java new file mode 100644 index 00000000..3bf4a7f7 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/FlytrapModel.java @@ -0,0 +1,27 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.FlytrapEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class FlytrapModel extends GeoModel { + private static final ResourceLocation MODEL = new ResourceLocation(Antarchy.MODID, "geo/flytrap.geo.json"); + private static final ResourceLocation TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/entity/flytrap.png"); + private static final ResourceLocation ANIMATION = new ResourceLocation(Antarchy.MODID, "animations/flytrap.animation.json"); + + @Override + public ResourceLocation getModelResource(FlytrapEntity animatable) { + return MODEL; + } + + @Override + public ResourceLocation getTextureResource(FlytrapEntity animatable) { + return TEXTURE; + } + + @Override + public ResourceLocation getAnimationResource(FlytrapEntity animatable) { + return ANIMATION; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/JumpyBugModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/JumpyBugModel.java deleted file mode 100644 index a25de655..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/JumpyBugModel.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.craisinlord.antarchy.content.client.model; - -import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.entity.JumpyBugEntity; -import net.minecraft.resources.ResourceLocation; -import software.bernie.geckolib.model.GeoModel; - -public class JumpyBugModel extends GeoModel { - public static final ResourceLocation EMISSIVE_TEXTURE = - new ResourceLocation(Antarchy.MODID, "textures/entity/jumpy_bug_emissive.png"); - - @Override - public ResourceLocation getModelResource(JumpyBugEntity animatable) { - return new ResourceLocation(Antarchy.MODID, "geo/jumpy_bug.geo.json"); - } - - @Override - public ResourceLocation getTextureResource(JumpyBugEntity animatable) { - return new ResourceLocation(Antarchy.MODID, "textures/entity/jumpy_bug.png"); - } - - @Override - public ResourceLocation getAnimationResource(JumpyBugEntity animatable) { - return new ResourceLocation(Antarchy.MODID, "animations/jumpy_bug.animation.json"); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/LurkingTerrorModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/LurkingTerrorModel.java deleted file mode 100644 index 7303f12e..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/LurkingTerrorModel.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.craisinlord.antarchy.content.client.model; - -import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.entity.LurkingTerrorEntity; -import net.minecraft.resources.ResourceLocation; -import software.bernie.geckolib.model.GeoModel; - -public class LurkingTerrorModel extends GeoModel { - @Override - public ResourceLocation getModelResource(LurkingTerrorEntity animatable) { - return new ResourceLocation(Antarchy.MODID, "geo/lurking_terror.geo.json"); - } - - @Override - public ResourceLocation getTextureResource(LurkingTerrorEntity animatable) { - return new ResourceLocation(Antarchy.MODID, "textures/entity/lurking_terror.png"); - } - - @Override - public ResourceLocation getAnimationResource(LurkingTerrorEntity animatable) { - return new ResourceLocation(Antarchy.MODID, "animations/lurking_terror.animation.json"); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/NightmareModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/NightmareModel.java index 26aeddcd..44e4e1e0 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/NightmareModel.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/NightmareModel.java @@ -6,8 +6,10 @@ import net.minecraft.resources.ResourceLocation; import software.bernie.geckolib.model.GeoModel; public class NightmareModel extends GeoModel { - public static final ResourceLocation EMISSIVE_TEXTURE = - new ResourceLocation(Antarchy.MODID, "textures/entity/nightmare_emissive.png"); + private static final ResourceLocation PHASE_ONE_TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/entity/nightmare/nightmare.png"); + private static final ResourceLocation PHASE_TWO_TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/entity/nightmare/nightmare_phase_2.png"); + private static final ResourceLocation PHASE_ONE_EMISSIVE = new ResourceLocation(Antarchy.MODID, "textures/entity/nightmare/nightmare_emissive.png"); + private static final ResourceLocation PHASE_TWO_EMISSIVE = new ResourceLocation(Antarchy.MODID, "textures/entity/nightmare/nightmare_phase_2_emissive.png"); @Override public ResourceLocation getModelResource(NightmareEntity animatable) { @@ -16,11 +18,19 @@ public class NightmareModel extends GeoModel { @Override public ResourceLocation getTextureResource(NightmareEntity animatable) { - return new ResourceLocation(Antarchy.MODID, "textures/entity/nightmare.png"); + return textureFor(animatable); } @Override public ResourceLocation getAnimationResource(NightmareEntity animatable) { return new ResourceLocation(Antarchy.MODID, "animations/nightmare.animation.json"); } + + public static ResourceLocation textureFor(NightmareEntity animatable) { + return animatable.hasPhaseTwoTexture() ? PHASE_TWO_TEXTURE : PHASE_ONE_TEXTURE; + } + + public static ResourceLocation emissiveTextureFor(NightmareEntity animatable) { + return animatable.hasPhaseTwoTexture() ? PHASE_TWO_EMISSIVE : PHASE_ONE_EMISSIVE; + } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/PortalGunBlackHoleModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/PortalGunBlackHoleModel.java deleted file mode 100644 index 4ebc3947..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/PortalGunBlackHoleModel.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.craisinlord.antarchy.content.client.model; - -import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.portalgun.PortalGunBlackHoleEntity; -import net.minecraft.resources.ResourceLocation; -import software.bernie.geckolib.model.GeoModel; - -public class PortalGunBlackHoleModel extends GeoModel { - private static final ResourceLocation TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/vfx/portal_gun_black_hole.png"); - - @Override - public ResourceLocation getModelResource(PortalGunBlackHoleEntity animatable) { - return new ResourceLocation(Antarchy.MODID, "geo/portal_gun_portal.geo.json"); - } - - @Override - public ResourceLocation getTextureResource(PortalGunBlackHoleEntity animatable) { - return TEXTURE; - } - - @Override - public ResourceLocation getAnimationResource(PortalGunBlackHoleEntity animatable) { - return new ResourceLocation(Antarchy.MODID, "animations/portal_gun_portal.animation.json"); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/PortalGunPortalModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/PortalGunPortalModel.java deleted file mode 100644 index d5279b7a..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/PortalGunPortalModel.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.craisinlord.antarchy.content.client.model; - -import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; -import net.minecraft.resources.ResourceLocation; -import software.bernie.geckolib.model.GeoModel; - -public class PortalGunPortalModel extends GeoModel { - private static final ResourceLocation BLUE_TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/vfx/portal_gun_portal_blue.png"); - private static final ResourceLocation ORANGE_TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/vfx/portal_gun_portal_orange.png"); - - @Override - public ResourceLocation getModelResource(PortalGunPortalEntity animatable) { - return new ResourceLocation(Antarchy.MODID, "geo/portal_gun_portal.geo.json"); - } - - @Override - public ResourceLocation getTextureResource(PortalGunPortalEntity animatable) { - return animatable.getPortalSide() == PortalGunPortalEntity.PortalSide.BLUE ? BLUE_TEXTURE : ORANGE_TEXTURE; - } - - @Override - public ResourceLocation getAnimationResource(PortalGunPortalEntity animatable) { - return new ResourceLocation(Antarchy.MODID, "animations/portal_gun_portal.animation.json"); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/RoyalBossModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/RoyalBossModel.java index 87852b28..26bea68a 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/RoyalBossModel.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/RoyalBossModel.java @@ -2,10 +2,19 @@ package com.craisinlord.antarchy.content.client.model; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.entity.royal.RoyalBossEntity; +import com.craisinlord.antarchy.content.entity.royal.RoyalHead; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.Nullable; +import software.bernie.geckolib.core.animation.AnimationState; +import software.bernie.geckolib.cache.object.GeoBone; import software.bernie.geckolib.model.GeoModel; public class RoyalBossModel extends GeoModel { + private static final String[] BEAM_ANCHORS = { + "beam_anchor_left", "beam_anchor_center", "beam_anchor_right" + }; + @Override public ResourceLocation getModelResource(RoyalBossEntity animatable) { return new ResourceLocation(Antarchy.MODID, "geo/" + animatable.geoNameForRender() + ".geo.json"); @@ -21,4 +30,24 @@ public class RoyalBossModel extends GeoModel { public ResourceLocation getAnimationResource(RoyalBossEntity animatable) { return new ResourceLocation(Antarchy.MODID, "animations/" + animatable.geoNameForRender() + ".animation.json"); } + + @Override + public void setCustomAnimations(RoyalBossEntity animatable, long instanceId, + AnimationState animationState) { + super.setCustomAnimations(animatable, instanceId, animationState); + for (String anchor : BEAM_ANCHORS) { + this.getBone(anchor).ifPresent(bone -> bone.setTrackingMatrices(true)); + } + + } + + @Nullable + public Vec3 getTrackedBeamAnchor(RoyalHead.Slot slot) { + GeoBone bone = this.getBone(BEAM_ANCHORS[slot.ordinal()]).orElse(null); + if (bone == null || !bone.isTrackingMatrices()) { + return null; + } + org.joml.Vector3d position = bone.getWorldPosition(); + return new Vec3(position.x, position.y, position.z); + } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/RoyalElementalProjectileModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/RoyalElementalProjectileModel.java index bb327a57..5c234379 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/RoyalElementalProjectileModel.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/RoyalElementalProjectileModel.java @@ -14,6 +14,9 @@ public class RoyalElementalProjectileModel extends GeoModel { + private static final String[] HEADS = {"head_left", "head", "head_right"}; + @Override public ResourceLocation getModelResource(RoyalMountEntity animatable) { return new ResourceLocation(Antarchy.MODID, "geo/" + animatable.geoNameForRender() + ".geo.json"); @@ -20,4 +26,22 @@ public class RoyalMountModel extends GeoModel { public ResourceLocation getAnimationResource(RoyalMountEntity animatable) { return new ResourceLocation(Antarchy.MODID, "animations/" + animatable.geoNameForRender() + ".animation.json"); } + + @Override + public void setCustomAnimations(RoyalMountEntity animatable, long instanceId, + AnimationState animationState) { + super.setCustomAnimations(animatable, instanceId, animationState); + for (String head : HEADS) { + this.getBone(head).ifPresent(bone -> bone.setTrackingMatrices(true)); + } + } + + @Nullable + public Vec3 getTrackedBeamAnchor(int head) { + if (head < 0 || head >= HEADS.length) return null; + GeoBone bone = this.getBone(HEADS[head]).orElse(null); + if (bone == null || !bone.isTrackingMatrices()) return null; + org.joml.Vector3d position = bone.getWorldPosition(); + return new Vec3(position.x, position.y, position.z); + } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/SkulkingFrightModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/SkulkingFrightModel.java new file mode 100644 index 00000000..da925f53 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/SkulkingFrightModel.java @@ -0,0 +1,23 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.SkulkingFrightEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class SkulkingFrightModel extends GeoModel { + @Override + public ResourceLocation getModelResource(SkulkingFrightEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "geo/skulking_fright.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(SkulkingFrightEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "textures/entity/skulking_fright.png"); + } + + @Override + public ResourceLocation getAnimationResource(SkulkingFrightEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "animations/skulking_fright.animation.json"); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/SpringbugModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/SpringbugModel.java new file mode 100644 index 00000000..6de63bb3 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/SpringbugModel.java @@ -0,0 +1,26 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.SpringbugEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class SpringbugModel extends GeoModel { + public static final ResourceLocation EMISSIVE_TEXTURE = + new ResourceLocation(Antarchy.MODID, "textures/entity/springbug_emissive.png"); + + @Override + public ResourceLocation getModelResource(SpringbugEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "geo/springbug.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(SpringbugEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "textures/entity/springbug.png"); + } + + @Override + public ResourceLocation getAnimationResource(SpringbugEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "animations/springbug.animation.json"); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/StratosharkModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/StratosharkModel.java new file mode 100644 index 00000000..664ee3a6 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/StratosharkModel.java @@ -0,0 +1,28 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.stratoshark.StratosharkEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class StratosharkModel extends GeoModel { + public static final ResourceLocation BASE_TEXTURE = + new ResourceLocation(Antarchy.MODID, "textures/entity/stratoshark/stratoshark.png"); + public static final ResourceLocation EMISSIVE_TEXTURE = + new ResourceLocation(Antarchy.MODID, "textures/entity/stratoshark/stratoshark_emissive.png"); + + @Override + public ResourceLocation getModelResource(StratosharkEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "geo/stratoshark.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(StratosharkEntity animatable) { + return BASE_TEXTURE; + } + + @Override + public ResourceLocation getAnimationResource(StratosharkEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "animations/stratoshark.animation.json"); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/TriffidModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/TriffidModel.java deleted file mode 100644 index 947cc6f1..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/TriffidModel.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.craisinlord.antarchy.content.client.model; - -import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.entity.TriffidEntity; -import net.minecraft.resources.ResourceLocation; -import software.bernie.geckolib.model.GeoModel; - -public class TriffidModel extends GeoModel { - private static final ResourceLocation MODEL = new ResourceLocation(Antarchy.MODID, "geo/triffid.geo.json"); - private static final ResourceLocation TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/entity/triffid.png"); - private static final ResourceLocation ANIMATION = new ResourceLocation(Antarchy.MODID, "animations/triffid.animation.json"); - - @Override - public ResourceLocation getModelResource(TriffidEntity animatable) { - return MODEL; - } - - @Override - public ResourceLocation getTextureResource(TriffidEntity animatable) { - return TEXTURE; - } - - @Override - public ResourceLocation getAnimationResource(TriffidEntity animatable) { - return ANIMATION; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/WormModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/WormModel.java index d1ab6d74..8aa94358 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/WormModel.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/WormModel.java @@ -6,22 +6,40 @@ import net.minecraft.resources.ResourceLocation; import software.bernie.geckolib.model.GeoModel; public class WormModel extends GeoModel { - private static final ResourceLocation MODEL = new ResourceLocation(Antarchy.MODID, "geo/worm_large.geo.json"); - private static final ResourceLocation TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/entity/worm/worm_large.png"); - private static final ResourceLocation ANIMATION = new ResourceLocation(Antarchy.MODID, "animations/worm_large.animation.json"); + private static final ResourceLocation SMALL_MODEL = new ResourceLocation(Antarchy.MODID, "geo/worm_small.geo.json"); + private static final ResourceLocation MEDIUM_MODEL = new ResourceLocation(Antarchy.MODID, "geo/worm_medium.geo.json"); + private static final ResourceLocation LARGE_MODEL = new ResourceLocation(Antarchy.MODID, "geo/worm_large.geo.json"); + private static final ResourceLocation SMALL_TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/entity/worm/worm_small.png"); + private static final ResourceLocation MEDIUM_TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/entity/worm/worm_medium.png"); + private static final ResourceLocation LARGE_TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/entity/worm/worm_large.png"); + private static final ResourceLocation SMALL_ANIMATION = new ResourceLocation(Antarchy.MODID, "animations/worm_small.animation.json"); + private static final ResourceLocation MEDIUM_ANIMATION = new ResourceLocation(Antarchy.MODID, "animations/worm_medium.animation.json"); + private static final ResourceLocation LARGE_ANIMATION = new ResourceLocation(Antarchy.MODID, "animations/worm_large.animation.json"); @Override public ResourceLocation getModelResource(WormEntity animatable) { - return MODEL; + return switch (animatable.getGrowthStage()) { + case SMALL -> SMALL_MODEL; + case MEDIUM -> MEDIUM_MODEL; + case LARGE -> LARGE_MODEL; + }; } @Override public ResourceLocation getTextureResource(WormEntity animatable) { - return TEXTURE; + return switch (animatable.getGrowthStage()) { + case SMALL -> SMALL_TEXTURE; + case MEDIUM -> MEDIUM_TEXTURE; + case LARGE -> LARGE_TEXTURE; + }; } @Override public ResourceLocation getAnimationResource(WormEntity animatable) { - return ANIMATION; + return switch (animatable.getGrowthStage()) { + case SMALL -> SMALL_ANIMATION; + case MEDIUM -> MEDIUM_ANIMATION; + case LARGE -> LARGE_ANIMATION; + }; } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/glimmer/GlimmerFrogModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/glimmer/GlimmerFrogModel.java index 363c0b28..e09f50a2 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/glimmer/GlimmerFrogModel.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/glimmer/GlimmerFrogModel.java @@ -8,11 +8,6 @@ import net.minecraft.client.model.FrogModel; import net.minecraft.client.model.geom.ModelPart; import net.minecraft.util.Mth; -/** - * Reuses vanilla Frog geometry ({@link FrogModel}/{@code ModelLayers.FROG}) for the Frog - * Glimmer variant instead of an ill-fitting GeckoLib placeholder mesh, with a simplified - * walk/idle animation (GlimmerEntity has no Frog-specific jump/tongue state). - */ public class GlimmerFrogModel extends EntityModel { private final ModelPart root; private final ModelPart head; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/BugSprayParticle.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/BugSprayParticle.java new file mode 100644 index 00000000..917e4267 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/BugSprayParticle.java @@ -0,0 +1,52 @@ +package com.craisinlord.antarchy.content.client.particle; + +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.particle.Particle; +import net.minecraft.client.particle.ParticleProvider; +import net.minecraft.client.particle.ParticleRenderType; +import net.minecraft.client.particle.SpriteSet; +import net.minecraft.client.particle.TextureSheetParticle; +import net.minecraft.core.particles.SimpleParticleType; + +public final class BugSprayParticle extends TextureSheetParticle { + private final SpriteSet sprites; + + private BugSprayParticle(ClientLevel level, double x, double y, double z, double xd, double yd, double zd, SpriteSet sprites) { + super(level, x, y, z, xd, yd, zd); + this.sprites = sprites; + this.setSprite(sprites.get(level.random)); + this.lifetime = 14 + this.random.nextInt(8); + this.quadSize = 0.16F + this.random.nextFloat() * 0.14F; + this.friction = 0.88F; + this.gravity = -0.01F; + this.alpha = 0.9F; + } + + @Override + public void tick() { + super.tick(); + if (!this.removed) { + this.setSprite(this.sprites.get(Math.min(this.age, this.lifetime - 1), this.lifetime)); + this.alpha = 0.9F * (1.0F - (float) this.age / this.lifetime); + } + } + + @Override + public ParticleRenderType getRenderType() { + return ParticleRenderType.PARTICLE_SHEET_TRANSLUCENT; + } + + public static final class Provider implements ParticleProvider { + private final SpriteSet sprites; + + public Provider(SpriteSet sprites) { + this.sprites = sprites; + } + + @Override + public Particle createParticle(SimpleParticleType type, ClientLevel level, double x, double y, double z, + double xd, double yd, double zd) { + return new BugSprayParticle(level, x, y, z, xd, yd, zd, this.sprites); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/UndertrialParticle.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/UndertrialParticle.java index 426d4203..4525e74b 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/UndertrialParticle.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/UndertrialParticle.java @@ -8,7 +8,6 @@ import net.minecraft.client.particle.SpriteSet; import net.minecraft.client.particle.TextureSheetParticle; import net.minecraft.core.particles.SimpleParticleType; -/** Lightweight 1.20 equivalent of the Undertrial's detection/omen particles. */ public final class UndertrialParticle extends TextureSheetParticle { private final SpriteSet sprites; private final boolean animated; @@ -18,6 +17,9 @@ public final class UndertrialParticle extends TextureSheetParticle { super(level, x, y, z, xd, yd, zd); this.sprites = sprites; this.animated = animated; + this.xd = xd; + this.yd = yd; + this.zd = zd; this.gravity = 0.0F; this.friction = 0.96F; this.hasPhysics = false; @@ -44,7 +46,9 @@ public final class UndertrialParticle extends TextureSheetParticle { public static final class DetectionProvider implements ParticleProvider { private final SpriteSet sprites; - public DetectionProvider(SpriteSet sprites) { this.sprites = sprites; } + public DetectionProvider(SpriteSet sprites) { + this.sprites = sprites; + } @Override public Particle createParticle(SimpleParticleType type, ClientLevel level, double x, double y, double z, @@ -56,7 +60,9 @@ public final class UndertrialParticle extends TextureSheetParticle { public static final class OmenProvider implements ParticleProvider { private final SpriteSet sprites; - public OmenProvider(SpriteSet sprites) { this.sprites = sprites; } + public OmenProvider(SpriteSet sprites) { + this.sprites = sprites; + } @Override public Particle createParticle(SimpleParticleType type, ClientLevel level, double x, double y, double z, diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/AlphaMantisRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/AlphaMantisRenderer.java index 6ee5cedf..82a8e718 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/AlphaMantisRenderer.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/AlphaMantisRenderer.java @@ -9,7 +9,6 @@ public class AlphaMantisRenderer extends GeoEntityRenderer { public AlphaMantisRenderer(EntityRendererProvider.Context context) { super(context, new AlphaMantisModel()); this.shadowRadius = 1.5F; - // Mantis renders at 1.25x; the alpha is 1.5x bigger overall this.withScale(1.875F); } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/CloudSharkRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/CloudSharkRenderer.java deleted file mode 100644 index ac08580d..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/CloudSharkRenderer.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.craisinlord.antarchy.content.client.renderer; - -import com.craisinlord.antarchy.content.client.model.CloudSharkModel; -import com.craisinlord.antarchy.content.entity.cloud_shark.CloudSharkEntity; -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.VertexConsumer; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.entity.EntityRendererProvider; -import net.minecraft.client.renderer.texture.OverlayTexture; -import net.minecraft.resources.ResourceLocation; -import org.jetbrains.annotations.Nullable; -import software.bernie.geckolib.cache.object.BakedGeoModel; -import software.bernie.geckolib.renderer.GeoEntityRenderer; -import software.bernie.geckolib.renderer.layer.GeoRenderLayer; - -public class CloudSharkRenderer extends GeoEntityRenderer { - private static final float SHADOW_RADIUS = 0.6F; - - public CloudSharkRenderer(EntityRendererProvider.Context context) { - super(context, new CloudSharkModel()); - this.shadowRadius = SHADOW_RADIUS; - this.addRenderLayer(new CloudSharkEmissiveLayer(this)); - } - - @Override - public RenderType getRenderType(CloudSharkEntity animatable, ResourceLocation texture, @Nullable MultiBufferSource bufferSource, float partialTick) { - return RenderType.entityCutoutNoCull(texture); - } - - private static final class CloudSharkEmissiveLayer extends GeoRenderLayer { - private CloudSharkEmissiveLayer(GeoEntityRenderer renderer) { - super(renderer); - } - - @Override - public void render(PoseStack poseStack, CloudSharkEntity animatable, BakedGeoModel bakedModel, @Nullable RenderType renderType, - MultiBufferSource bufferSource, @Nullable VertexConsumer buffer, float partialTick, - int packedLight, int packedOverlay) { - RenderType emissiveType = RenderType.eyes(CloudSharkModel.EMISSIVE_TEXTURE); - VertexConsumer emissiveBuffer = bufferSource.getBuffer(emissiveType); - this.getRenderer().reRender( - bakedModel, - poseStack, - bufferSource, - animatable, - emissiveType, - emissiveBuffer, - partialTick, - 0xF000F0, - OverlayTexture.NO_OVERLAY, - 1.0F, - 1.0F, - 1.0F, - 1.0F - ); - } - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/CrawlingBlightRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/CrawlingBlightRenderer.java new file mode 100644 index 00000000..40029e90 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/CrawlingBlightRenderer.java @@ -0,0 +1,29 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.CrawlingBlightModel; +import com.craisinlord.antarchy.content.entity.CrawlingBlightEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.math.Axis; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import org.jetbrains.annotations.Nullable; +import software.bernie.geckolib.cache.object.BakedGeoModel; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class CrawlingBlightRenderer extends GeoEntityRenderer { + public CrawlingBlightRenderer(EntityRendererProvider.Context context) { + super(context, new CrawlingBlightModel()); + this.shadowRadius = 0.5F; + this.withScale(0.85F); + } + + @Override + public void preRender(PoseStack poseStack, CrawlingBlightEntity animatable, BakedGeoModel model, @Nullable MultiBufferSource bufferSource, @Nullable VertexConsumer buffer, boolean isReRender, float partialTick, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) { + super.preRender(poseStack, animatable, model, bufferSource, buffer, isReRender, partialTick, packedLight, packedOverlay, red, green, blue, alpha); + if (animatable.isWallClimbing()) { + poseStack.mulPose(Axis.XP.rotationDegrees(-90.0F)); + poseStack.translate(0, -0.5, 0.5); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/CreepingHorrorRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/CreepingHorrorRenderer.java deleted file mode 100644 index 87800344..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/CreepingHorrorRenderer.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.craisinlord.antarchy.content.client.renderer; - -import com.craisinlord.antarchy.content.client.model.CreepingHorrorModel; -import com.craisinlord.antarchy.content.entity.CreepingHorrorEntity; -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.VertexConsumer; -import com.mojang.math.Axis; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.entity.EntityRendererProvider; -import org.jetbrains.annotations.Nullable; -import software.bernie.geckolib.cache.object.BakedGeoModel; -import software.bernie.geckolib.renderer.GeoEntityRenderer; - -public class CreepingHorrorRenderer extends GeoEntityRenderer { - public CreepingHorrorRenderer(EntityRendererProvider.Context context) { - super(context, new CreepingHorrorModel()); - this.shadowRadius = 0.5F; - this.withScale(0.85F); - } - - @Override - public void preRender(PoseStack poseStack, CreepingHorrorEntity animatable, BakedGeoModel model, @Nullable MultiBufferSource bufferSource, @Nullable VertexConsumer buffer, boolean isReRender, float partialTick, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) { - super.preRender(poseStack, animatable, model, bufferSource, buffer, isReRender, partialTick, packedLight, packedOverlay, red, green, blue, alpha); - if (animatable.isWallClimbing()) { - poseStack.mulPose(Axis.XP.rotationDegrees(-90.0F)); - poseStack.translate(0, -0.5, 0.5); - } - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/ElythiaSkyRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/ElythiaSkyRenderer.java index 483133a9..d4934903 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/ElythiaSkyRenderer.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/ElythiaSkyRenderer.java @@ -71,9 +71,8 @@ public final class ElythiaSkyRenderer { float blue = (float) skyColor.z; float rainLevel = level.getRainLevel(partialTick); float starBrightness = level.getStarBrightness(partialTick) * (1.0F - rainLevel); - float timeOfDay = level.getTimeOfDay(partialTick); + double timeDegrees = (level.getDayTime() + partialTick) * (360.0D / 24000.0D); - // Blend in a dark purple when it's night (starBrightness > 0) float nightPurpleR = 0.055F; float nightPurpleG = 0.010F; float nightPurpleB = 0.120F; @@ -89,7 +88,7 @@ public final class ElythiaSkyRenderer { RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); renderSunrise(poseStack, projectionMatrix, level, partialTick, rainLevel); - renderCelestialBodies(poseStack.last().pose(), projectionMatrix, timeOfDay, rainLevel); + renderCelestialBodies(poseStack.last().pose(), projectionMatrix, timeDegrees, rainLevel); if (starBrightness > 0.1F) { if (coloredStarBuffer == null) { @@ -169,10 +168,10 @@ public final class ElythiaSkyRenderer { private static float[] pickStarColor(Random random) { float roll = random.nextFloat(); - if (roll < 0.80F) return new float[]{1.0F, 1.0F, 1.0F}; // white - if (roll < 0.87F) return new float[]{0.85F, 0.60F, 1.00F}; // light purple - if (roll < 0.94F) return new float[]{1.00F, 0.95F, 0.50F}; // yellow - return new float[]{1.0F, 0.45F, 0.45F}; // red + if (roll < 0.80F) return new float[]{1.0F, 1.0F, 1.0F}; + if (roll < 0.87F) return new float[]{0.85F, 0.60F, 1.00F}; + if (roll < 0.94F) return new float[]{1.00F, 0.95F, 0.50F}; + return new float[]{1.0F, 0.45F, 0.45F}; } private static void renderSunrise(PoseStack poseStack, Matrix4f projectionMatrix, ClientLevel level, float partialTick, float rainLevel) { @@ -211,28 +210,27 @@ public final class ElythiaSkyRenderer { RenderSystem.disableBlend(); } - private static void renderCelestialBodies(Matrix4f modelViewMatrix, Matrix4f projectionMatrix, float timeOfDay, float rainLevel) { - float t = timeOfDay * 360.0F; + private static void renderCelestialBodies(Matrix4f modelViewMatrix, Matrix4f projectionMatrix, double timeDegrees, float rainLevel) { - // Purple sun - float sun1Orbit = t; + float sun1Orbit = orbitAngle(timeDegrees, 1.0D, 0.0D); renderBodyGlow(modelViewMatrix, projectionMatrix, sun1Orbit, 0.0F, 0xD06BFF, rainLevel, 70.0F); - renderTexturedBody(modelViewMatrix, projectionMatrix, sun1Orbit, 0.0F, 38.0F, 0xD06BFF, 1.0F, SUN_TEXTURE, false, 0, t * 0.8F); + renderTexturedBody(modelViewMatrix, projectionMatrix, sun1Orbit, 0.0F, 38.0F, 0xD06BFF, 1.0F, SUN_TEXTURE, false, 0, orbitAngle(timeDegrees, 0.8D, 0.0D)); - // Orange sub - float sun2Orbit = t * 0.73F + 54.0F; + float sun2Orbit = orbitAngle(timeDegrees, 0.73D, 54.0D); renderBodyGlow(modelViewMatrix, projectionMatrix, sun2Orbit, -14.0F, 0xFF9A33, rainLevel, 70.0F); - renderTexturedBody(modelViewMatrix, projectionMatrix, sun2Orbit, -14.0F, 16.0F, 0xFF9A33, 1.0F, SUN_TEXTURE, false, 0, -t * 0.5F); + renderTexturedBody(modelViewMatrix, projectionMatrix, sun2Orbit, -14.0F, 16.0F, 0xFF9A33, 1.0F, SUN_TEXTURE, false, 0, orbitAngle(timeDegrees, -0.5D, 0.0D)); - // Dark green moon - float moon2Orbit = t * 1.27F + 228.0F; + float moon2Orbit = orbitAngle(timeDegrees, 1.27D, 228.0D); renderBodyGlow(modelViewMatrix, projectionMatrix, moon2Orbit, 36.0F, 0x4FD84D, rainLevel, 78.0F); - renderTexturedBody(modelViewMatrix, projectionMatrix, moon2Orbit, 36.0F, 14.0F, 0x4FD84D, 1.0F, MOON_TEXTURE, true, 1, t * 0.3F); + renderTexturedBody(modelViewMatrix, projectionMatrix, moon2Orbit, 36.0F, 14.0F, 0x4FD84D, 1.0F, MOON_TEXTURE, true, 1, orbitAngle(timeDegrees, 0.3D, 0.0D)); - // Light green moon - float moon3Orbit = t * 0.38F + 122.0F; + float moon3Orbit = orbitAngle(timeDegrees, 0.38D, 122.0D); renderBodyGlow(modelViewMatrix, projectionMatrix, moon3Orbit, -34.0F, 0xA3FF8F, rainLevel, 78.0F); - renderTexturedBody(modelViewMatrix, projectionMatrix, moon3Orbit, -34.0F, 12.0F, 0xA3FF8F, 1.0F, MOON_TEXTURE, true, 2, -t * 0.6F); + renderTexturedBody(modelViewMatrix, projectionMatrix, moon3Orbit, -34.0F, 12.0F, 0xA3FF8F, 1.0F, MOON_TEXTURE, true, 2, orbitAngle(timeDegrees, -0.6D, 0.0D)); + } + + private static float orbitAngle(double timeDegrees, double speed, double offset) { + return (float) ((timeDegrees * speed + offset) % 360.0D); } private static void renderBodyGlow( diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/FlytrapRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/FlytrapRenderer.java new file mode 100644 index 00000000..f441d8b1 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/FlytrapRenderer.java @@ -0,0 +1,18 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.FlytrapModel; +import com.craisinlord.antarchy.content.entity.FlytrapEntity; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class FlytrapRenderer extends GeoEntityRenderer { + public FlytrapRenderer(EntityRendererProvider.Context context) { + super(context, new FlytrapModel()); + this.shadowRadius = 1.4F; + } + + @Override + protected float getDeathMaxRotation(FlytrapEntity animatable) { + return 0.0F; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/GiantFryingPanRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/GiantFryingPanRenderer.java new file mode 100644 index 00000000..08882f3a --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/GiantFryingPanRenderer.java @@ -0,0 +1,54 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.item.GiantFryingPanItem; +import com.craisinlord.antarchy.content.item.GiantFryingPanStorage; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.world.item.ItemDisplayContext; +import net.minecraft.world.item.ItemStack; +import software.bernie.geckolib.cache.object.BakedGeoModel; +import software.bernie.geckolib.model.GeoModel; +import software.bernie.geckolib.renderer.GeoItemRenderer; + +public final class GiantFryingPanRenderer extends GeoItemRenderer { + public GiantFryingPanRenderer(GeoModel model) { + super(model); + } + + @Override + public void actuallyRender( + PoseStack poseStack, + GiantFryingPanItem animatable, + BakedGeoModel model, + net.minecraft.client.renderer.RenderType renderType, + MultiBufferSource bufferSource, + com.mojang.blaze3d.vertex.VertexConsumer buffer, + boolean isReRender, + float partialTick, + int packedLight, + int packedOverlay, + float red, + float green, + float blue, + float alpha + ) { + super.actuallyRender(poseStack, animatable, model, renderType, bufferSource, buffer, isReRender, partialTick, packedLight, packedOverlay, red, green, blue, alpha); + if (isReRender || this.renderPerspective == ItemDisplayContext.GUI) return; + ItemStack pan = this.getCurrentItemStack(); + net.minecraft.world.entity.player.Player player = Minecraft.getInstance().player; + if (player == null) return; + GiantFryingPanStorage storage = new GiantFryingPanStorage(pan, player); + for (int slot = 0; slot < GiantFryingPanStorage.SLOT_COUNT; slot++) { + ItemStack stack = storage.getItem(slot); + if (stack.isEmpty()) continue; + int row = slot / 3; + int column = slot % 3; + poseStack.pushPose(); + poseStack.translate((column - 1) * 0.55D, 2.5D - (row - 1) * 0.55D, 0.03125D); + poseStack.scale(0.24F, 0.24F, 0.24F); + Minecraft.getInstance().getItemRenderer().renderStatic(stack, ItemDisplayContext.FIXED, packedLight, packedOverlay, poseStack, bufferSource, Minecraft.getInstance().level, 0); + poseStack.popPose(); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/GlimmeringLivingLayer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/GlimmeringLivingLayer.java index d82d79c3..c0bc6ec1 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/GlimmeringLivingLayer.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/GlimmeringLivingLayer.java @@ -14,12 +14,7 @@ import net.minecraft.world.effect.MobEffect; import net.minecraft.world.entity.LivingEntity; public final class GlimmeringLivingLayer> extends RenderLayer { - // High-alpha, luminance-preserving tint drawn straight over the skin (no scale-up) so it - // reads as the body itself recolored spirit-blue rather than a separate ghost shell. - private static final float GLIMMERING_TINT_R = 0.4F; - private static final float GLIMMERING_TINT_G = 0.8F; - private static final float GLIMMERING_TINT_B = 1.0F; - private static final float GLIMMERING_TINT_A = 0.2588F; + private static final int GLIMMERING_TINT = 0x4266CCFF; public GlimmeringLivingLayer(RenderLayerParent renderer) { super(renderer); @@ -40,10 +35,10 @@ public final class GlimmeringLivingLayer> 16) & 0xFF) / 255.0F, + ((GLIMMERING_TINT >> 8) & 0xFF) / 255.0F, + (GLIMMERING_TINT & 0xFF) / 255.0F, + ((GLIMMERING_TINT >>> 24) & 0xFF) / 255.0F ); } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/JumpyBugRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/JumpyBugRenderer.java deleted file mode 100644 index 2d9fffed..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/JumpyBugRenderer.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.craisinlord.antarchy.content.client.renderer; - -import com.craisinlord.antarchy.content.client.model.JumpyBugModel; -import com.craisinlord.antarchy.content.entity.JumpyBugEntity; -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.VertexConsumer; -import com.mojang.math.Axis; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.entity.EntityRendererProvider; -import net.minecraft.client.renderer.texture.OverlayTexture; -import net.minecraft.resources.ResourceLocation; -import org.jetbrains.annotations.Nullable; -import software.bernie.geckolib.cache.object.BakedGeoModel; -import software.bernie.geckolib.renderer.GeoEntityRenderer; -import software.bernie.geckolib.renderer.layer.GeoRenderLayer; -import software.bernie.geckolib.core.object.Color; - -public class JumpyBugRenderer extends GeoEntityRenderer { - public JumpyBugRenderer(EntityRendererProvider.Context context) { - super(context, new JumpyBugModel()); - this.shadowRadius = 6.0F; - this.addRenderLayer(new JumpyBugEmissiveLayer(this)); - } - - @Override - public RenderType getRenderType(JumpyBugEntity animatable, ResourceLocation texture, @Nullable MultiBufferSource bufferSource, float partialTick) { - return animatable.isCamouflaged() ? RenderType.entityTranslucent(texture) : RenderType.entityCutoutNoCull(texture); - } - - @Override - public Color getRenderColor(JumpyBugEntity animatable, float partialTick, int packedLight) { - int alpha = Math.max(10, Math.min(255, Math.round(animatable.getVisualAlpha(partialTick) * 255.0F))); - return Color.ofRGBA(255, 255, 255, alpha); - } - - @Override - public void preRender(PoseStack poseStack, JumpyBugEntity animatable, BakedGeoModel model, @Nullable MultiBufferSource bufferSource, @Nullable VertexConsumer buffer, boolean isReRender, float partialTick, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) { - super.preRender(poseStack, animatable, model, bufferSource, buffer, isReRender, partialTick, packedLight, packedOverlay, red, green, blue, alpha); - this.shadowRadius = animatable.isCamouflaged() ? 1.0F : 6.0F; - - if (animatable.isClingingToCeiling()) { - poseStack.translate(0.0F, animatable.getBbHeight() + 0.05F, 0.0F); - poseStack.mulPose(Axis.ZP.rotationDegrees(180.0F)); - } - } - - private static final class JumpyBugEmissiveLayer extends GeoRenderLayer { - private JumpyBugEmissiveLayer(GeoEntityRenderer renderer) { - super(renderer); - } - - @Override - public void render(PoseStack poseStack, JumpyBugEntity animatable, BakedGeoModel bakedModel, @Nullable RenderType renderType, - MultiBufferSource bufferSource, @Nullable VertexConsumer buffer, float partialTick, - int packedLight, int packedOverlay) { - RenderType emissiveType = animatable.isCamouflaged() - ? RenderType.entityTranslucent(JumpyBugModel.EMISSIVE_TEXTURE) - : RenderType.eyes(JumpyBugModel.EMISSIVE_TEXTURE); - float alpha = Math.max(10, Math.min(255, Math.round(animatable.getVisualAlpha(partialTick) * 255.0F))) / 255.0F; - VertexConsumer emissiveBuffer = bufferSource.getBuffer(emissiveType); - this.getRenderer().reRender( - bakedModel, - poseStack, - bufferSource, - animatable, - emissiveType, - emissiveBuffer, - partialTick, - 0xF000F0, - OverlayTexture.NO_OVERLAY, - 1.0F, - 1.0F, - 1.0F, - alpha - ); - } - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/LurkingTerrorRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/LurkingTerrorRenderer.java deleted file mode 100644 index c84ffa19..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/LurkingTerrorRenderer.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.craisinlord.antarchy.content.client.renderer; - -import com.craisinlord.antarchy.content.client.model.LurkingTerrorModel; -import com.craisinlord.antarchy.content.entity.LurkingTerrorEntity; -import net.minecraft.client.renderer.entity.EntityRendererProvider; -import software.bernie.geckolib.renderer.GeoEntityRenderer; - -public class LurkingTerrorRenderer extends GeoEntityRenderer { - public LurkingTerrorRenderer(EntityRendererProvider.Context context) { - super(context, new LurkingTerrorModel()); - this.shadowRadius = 0.5F; - this.withScale(0.85F); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/NightmarePortalRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/NightmarePortalRenderer.java index 4cbd9d93..d58e53ef 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/NightmarePortalRenderer.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/NightmarePortalRenderer.java @@ -3,14 +3,11 @@ package com.craisinlord.antarchy.content.client.renderer; import com.craisinlord.antarchy.content.client.model.NightmarePortalModel; import com.craisinlord.antarchy.content.entity.nightmare.NightmarePortalEntity; import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.VertexConsumer; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.entity.EntityRendererProvider; -import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.resources.ResourceLocation; import org.jetbrains.annotations.Nullable; -import software.bernie.geckolib.cache.object.BakedGeoModel; import software.bernie.geckolib.renderer.GeoEntityRenderer; public class NightmarePortalRenderer extends GeoEntityRenderer { @@ -21,17 +18,11 @@ public class NightmarePortalRenderer extends GeoEntityRenderer { public void render(PoseStack poseStack, NightmareEntity animatable, BakedGeoModel bakedModel, @Nullable RenderType renderType, MultiBufferSource bufferSource, @Nullable VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) { - RenderType emissiveType = RenderType.eyes(NightmareModel.EMISSIVE_TEXTURE); + RenderType emissiveType = RenderType.eyes(NightmareModel.emissiveTextureFor(animatable)); VertexConsumer emissiveBuffer = bufferSource.getBuffer(emissiveType); this.getRenderer().reRender( bakedModel, diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunBlackHoleRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunBlackHoleRenderer.java deleted file mode 100644 index b46bf0e1..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunBlackHoleRenderer.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.craisinlord.antarchy.content.client.renderer; - -import com.craisinlord.antarchy.content.client.model.PortalGunBlackHoleModel; -import com.craisinlord.antarchy.content.portalgun.PortalGunBlackHoleEntity; -import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.entity.EntityRendererProvider; -import net.minecraft.resources.ResourceLocation; -import org.jetbrains.annotations.Nullable; -import software.bernie.geckolib.renderer.GeoEntityRenderer; - -public class PortalGunBlackHoleRenderer extends GeoEntityRenderer { - public PortalGunBlackHoleRenderer(EntityRendererProvider.Context context) { - super(context, new PortalGunBlackHoleModel()); - this.shadowRadius = 0.0F; - } - - @Override - public void render(PortalGunBlackHoleEntity entity, float entityYaw, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, int packedLight) { - super.render(entity, entityYaw, partialTick, poseStack, bufferSource, 0xF000F0); - } - - @Override - public @Nullable RenderType getRenderType(PortalGunBlackHoleEntity animatable, ResourceLocation texture, @Nullable MultiBufferSource bufferSource, float partialTick) { - return RenderType.entityTranslucent(this.getGeoModel().getTextureResource(animatable)); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunMoonViewRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunMoonViewRenderer.java new file mode 100644 index 00000000..f219df47 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunMoonViewRenderer.java @@ -0,0 +1,219 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.anthology.portal.PortalTransforms; +import com.craisinlord.anthology.portal.PortalShape; +import com.mojang.blaze3d.platform.GlStateManager; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.BufferBuilder; +import com.mojang.blaze3d.vertex.BufferUploader; +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.Tesselator; +import com.mojang.blaze3d.vertex.VertexFormat; +import com.mojang.blaze3d.vertex.VertexSorting; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.RandomSource; +import net.minecraft.world.phys.Vec3; +import org.joml.Matrix4f; +import org.joml.Quaternionf; +import org.joml.Vector3f; +import org.lwjgl.opengl.GL11; + +public final class PortalGunMoonViewRenderer { + private static final ResourceLocation EARTH = new ResourceLocation(Antarchy.MODID, "textures/environment/moon_view/earth.png"); + private static final double SKY_DISTANCE = 100.0D; + private static final double EARTH_HALF_SIZE = 32.0D; + private static final double EARTH_PLANET_FRACTION = 0.5D; + private static final double EARTH_ELEVATION = Math.toRadians(10.0D); + private static final int STAR_COUNT = 1800; + private static final Vec3 EXIT_NORMAL = new Vec3(0.0D, 0.0D, 1.0D); + private static final Vec3 EXIT_UP = new Vec3(0.0D, 1.0D, 0.0D); + private static float[] stars; + + private PortalGunMoonViewRenderer() { + } + + public static void render(Minecraft minecraft, PortalShape source, Vec3 cameraPos, Vec3 look, Vec3 up, + Matrix4f rootProjection, float partialTick) { + PortalShape exit = new PortalShape(Vec3.ZERO, EXIT_NORMAL, EXIT_UP, EXIT_NORMAL.cross(EXIT_UP), + source.halfWidth(), source.halfHeight(), source.halfDepth()); + Vec3 moonLook = PortalTransforms.transformVector(source, exit, look).normalize(); + Vec3 moonUp = PortalTransforms.transformVector(source, exit, up).normalize(); + Matrix4f view = new Matrix4f().rotation(PortalTransforms.orientationQuaternion(moonLook, moonUp).conjugate(new Quaternionf())); + Vec3 earthDirection = new Vec3(0.0D, Math.sin(EARTH_ELEVATION), Math.cos(EARTH_ELEVATION)); + + PoseStack modelViewStack = RenderSystem.getModelViewStack(); + Matrix4f previousProjection = new Matrix4f(RenderSystem.getProjectionMatrix()); + VertexSorting previousSorting = RenderSystem.getVertexSorting(); + int previousDepthFunction = GL11.glGetInteger(GL11.GL_DEPTH_FUNC); + modelViewStack.pushPose(); + try { + fillBlack(); + RenderSystem.disableCull(); + RenderSystem.depthMask(false); + RenderSystem.disableDepthTest(); + modelViewStack.setIdentity(); + modelViewStack.mulPoseMatrix(view); + RenderSystem.applyModelViewMatrix(); + RenderSystem.setProjectionMatrix(rootProjection, VertexSorting.DISTANCE_TO_ORIGIN); + drawStars(); + drawEarth(earthDirection); + } finally { + GL11.glDepthFunc(previousDepthFunction); + RenderSystem.setProjectionMatrix(previousProjection, previousSorting); + modelViewStack.popPose(); + RenderSystem.applyModelViewMatrix(); + RenderSystem.defaultBlendFunc(); + RenderSystem.disableBlend(); + RenderSystem.enableCull(); + RenderSystem.enableDepthTest(); + RenderSystem.depthMask(true); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + } + } + + private static void fillBlack() { + Matrix4f previousProjection = new Matrix4f(RenderSystem.getProjectionMatrix()); + VertexSorting previousSorting = RenderSystem.getVertexSorting(); + BufferBuilder buffer = Tesselator.getInstance().getBuilder(); + buffer.begin(VertexFormat.Mode.TRIANGLES, DefaultVertexFormat.POSITION); + buffer.vertex(-1.0F, -1.0F, 0.99999F).endVertex(); + buffer.vertex(3.0F, -1.0F, 0.99999F).endVertex(); + buffer.vertex(-1.0F, 3.0F, 0.99999F).endVertex(); + BufferBuilder.RenderedBuffer mesh = buffer.end(); + PoseStack modelViewStack = RenderSystem.getModelViewStack(); + modelViewStack.pushPose(); + try { + modelViewStack.setIdentity(); + RenderSystem.applyModelViewMatrix(); + RenderSystem.enableDepthTest(); + RenderSystem.depthMask(true); + RenderSystem.colorMask(true, true, true, true); + RenderSystem.disableBlend(); + RenderSystem.disableCull(); + GL11.glDepthFunc(GL11.GL_ALWAYS); + RenderSystem.setProjectionMatrix(new Matrix4f(), previousSorting); + RenderSystem.setShader(GameRenderer::getPositionShader); + RenderSystem.setShaderColor(0.0F, 0.0F, 0.0F, 1.0F); + if (mesh != null) { + BufferUploader.drawWithShader(mesh); + } + } finally { + GL11.glDepthFunc(GL11.GL_LEQUAL); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.setProjectionMatrix(previousProjection, previousSorting); + modelViewStack.popPose(); + RenderSystem.applyModelViewMatrix(); + } + } + + private static float[] stars() { + if (stars == null) { + RandomSource random = RandomSource.create(7342L); + float[] data = new float[STAR_COUNT * 5]; + int count = 0; + while (count < STAR_COUNT) { + Vector3f direction = new Vector3f(random.nextFloat() * 2.0F - 1.0F, random.nextFloat() * 2.0F - 1.0F, random.nextFloat() * 2.0F - 1.0F); + float lengthSquared = direction.lengthSquared(); + if (lengthSquared < 1.0E-4F || lengthSquared > 1.0F) { + continue; + } + direction.normalize(); + data[count * 5] = direction.x; + data[count * 5 + 1] = direction.y; + data[count * 5 + 2] = direction.z; + data[count * 5 + 3] = 0.12F + random.nextFloat() * 0.22F; + data[count * 5 + 4] = 0.35F + random.nextFloat() * 0.65F; + count++; + } + stars = data; + } + return stars; + } + + private static void drawStars() { + float[] data = stars(); + BufferBuilder buffer = Tesselator.getInstance().getBuilder(); + buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); + for (int i = 0; i < STAR_COUNT; i++) { + Vec3 direction = new Vec3(data[i * 5], data[i * 5 + 1], data[i * 5 + 2]); + double size = data[i * 5 + 3]; + int brightness = (int) (255.0F * data[i * 5 + 4]); + Vec3[] basis = basis(direction); + Vec3 center = direction.scale(SKY_DISTANCE); + Vec3 right = basis[0].scale(size); + Vec3 upward = basis[1].scale(size); + addColored(buffer, center.subtract(right).subtract(upward), brightness); + addColored(buffer, center.subtract(right).add(upward), brightness); + addColored(buffer, center.add(right).add(upward), brightness); + addColored(buffer, center.add(right).subtract(upward), brightness); + } + BufferBuilder.RenderedBuffer mesh = buffer.end(); + if (mesh == null) { + return; + } + RenderSystem.disableBlend(); + RenderSystem.setShader(GameRenderer::getPositionColorShader); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + BufferUploader.drawWithShader(mesh); + } + + private static void drawEarth(Vec3 earthDirection) { + Vec3[] basis = basis(earthDirection); + Vec3 center = earthDirection.scale(SKY_DISTANCE); + Vec3 right = basis[0]; + Vec3 upward = basis[1]; + + double planet = EARTH_HALF_SIZE * EARTH_PLANET_FRACTION; + BufferBuilder backing = Tesselator.getInstance().getBuilder(); + backing.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); + addColored(backing, center.subtract(right.scale(planet)).subtract(upward.scale(planet)), 0); + addColored(backing, center.subtract(right.scale(planet)).add(upward.scale(planet)), 0); + addColored(backing, center.add(right.scale(planet)).add(upward.scale(planet)), 0); + addColored(backing, center.add(right.scale(planet)).subtract(upward.scale(planet)), 0); + BufferBuilder.RenderedBuffer backingMesh = backing.end(); + if (backingMesh != null) { + RenderSystem.disableBlend(); + RenderSystem.setShader(GameRenderer::getPositionColorShader); + BufferUploader.drawWithShader(backingMesh); + } + + BufferBuilder buffer = Tesselator.getInstance().getBuilder(); + buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX); + addTextured(buffer, center.subtract(right.scale(EARTH_HALF_SIZE)).subtract(upward.scale(EARTH_HALF_SIZE)), 0.0F, 1.0F); + addTextured(buffer, center.subtract(right.scale(EARTH_HALF_SIZE)).add(upward.scale(EARTH_HALF_SIZE)), 0.0F, 0.0F); + addTextured(buffer, center.add(right.scale(EARTH_HALF_SIZE)).add(upward.scale(EARTH_HALF_SIZE)), 1.0F, 0.0F); + addTextured(buffer, center.add(right.scale(EARTH_HALF_SIZE)).subtract(upward.scale(EARTH_HALF_SIZE)), 1.0F, 1.0F); + BufferBuilder.RenderedBuffer mesh = buffer.end(); + if (mesh == null) { + return; + } + RenderSystem.enableBlend(); + RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE, + GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + RenderSystem.setShader(GameRenderer::getPositionTexShader); + RenderSystem.setShaderTexture(0, EARTH); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + BufferUploader.drawWithShader(mesh); + RenderSystem.defaultBlendFunc(); + RenderSystem.disableBlend(); + } + + private static Vec3[] basis(Vec3 direction) { + Vec3 reference = Math.abs(direction.y) > 0.9D ? new Vec3(1.0D, 0.0D, 0.0D) : EXIT_UP; + Vec3 right = direction.cross(reference).normalize(); + Vec3 upward = right.cross(direction).normalize(); + return new Vec3[] {right, upward}; + } + + private static void addColored(BufferBuilder buffer, Vec3 position, int brightness) { + buffer.vertex((float) position.x, (float) position.y, (float) position.z).color(brightness, brightness, brightness, 255).endVertex(); + } + + private static void addTextured(BufferBuilder buffer, Vec3 position, float u, float v) { + buffer.vertex((float) position.x, (float) position.y, (float) position.z).uv(u, v).endVertex(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalRenderer.java index b5cc5c53..749b18d3 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalRenderer.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalRenderer.java @@ -1,65 +1,11 @@ package com.craisinlord.antarchy.content.client.renderer; -import com.craisinlord.antarchy.content.client.model.PortalGunPortalModel; import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.VertexConsumer; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.LightTexture; -import net.minecraft.client.renderer.RenderType; +import com.craisinlord.anthology.portal.client.PortalEntityRenderer; import net.minecraft.client.renderer.entity.EntityRendererProvider; -import net.minecraft.client.renderer.texture.OverlayTexture; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.phys.Vec3; -import org.jetbrains.annotations.Nullable; -import org.joml.Matrix4f; -import software.bernie.geckolib.renderer.GeoEntityRenderer; -public class PortalGunPortalRenderer extends GeoEntityRenderer { +public class PortalGunPortalRenderer extends PortalEntityRenderer { public PortalGunPortalRenderer(EntityRendererProvider.Context context) { - super(context, new PortalGunPortalModel()); - this.shadowRadius = 0.0F; - } - - @Override - public void render(PortalGunPortalEntity entity, float entityYaw, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, int packedLight) { - poseStack.pushPose(); - VertexConsumer consumer = bufferSource.getBuffer(RenderType.entityTranslucent(this.getGeoModel().getTextureResource(entity))); - Matrix4f pose = poseStack.last().pose(); - putPortalVertex(consumer, pose, entity, -0.5F, -1.0F, 0.0F, 1.0F, false); - putPortalVertex(consumer, pose, entity, -0.5F, 1.0F, 0.0F, 0.0F, false); - putPortalVertex(consumer, pose, entity, 0.5F, 1.0F, 1.0F, 0.0F, false); - putPortalVertex(consumer, pose, entity, 0.5F, -1.0F, 1.0F, 1.0F, false); - VertexConsumer edge = bufferSource.getBuffer(RenderType.entityTranslucent(this.getGeoModel().getTextureResource(entity))); - putPortalVertex(edge, pose, entity, -0.56F, -1.07F, 0.0F, 1.0F, true); - putPortalVertex(edge, pose, entity, -0.56F, 1.07F, 0.0F, 0.0F, true); - putPortalVertex(edge, pose, entity, 0.56F, 1.07F, 1.0F, 0.0F, true); - putPortalVertex(edge, pose, entity, 0.56F, -1.07F, 1.0F, 1.0F, true); - poseStack.popPose(); - } - - private static void putPortalVertex(VertexConsumer consumer, Matrix4f pose, PortalGunPortalEntity entity, float horizontal, float vertical, float u, float v, boolean channelTint) { - Vec3 position = entity.getWidthVec().normalize().scale(horizontal) - .add(entity.getUpVec().normalize().scale(vertical)) - .add(entity.getNormalVec().normalize().scale(0.03125D)); - int red = channelTint ? entity.getChannelRed() : 255; - int green = channelTint ? entity.getChannelGreen() : 255; - int blue = channelTint ? entity.getChannelBlue() : 255; - int alpha = channelTint ? 150 : 210; - consumer.vertex(pose, (float) position.x, (float) position.y, (float) position.z) - .color(red, green, blue, alpha) - .uv(u, v) - .overlayCoords(OverlayTexture.NO_OVERLAY) - .uv2(LightTexture.FULL_BRIGHT) - .normal((float) entity.getNormalVec().x, (float) entity.getNormalVec().y, (float) entity.getNormalVec().z) - .endVertex(); - } - - protected void applyRotations(PortalGunPortalEntity animatable, PoseStack poseStack, float ageInTicks, float rotationYaw, float partialTick, float nativeScale) { - } - - @Override - public @Nullable RenderType getRenderType(PortalGunPortalEntity animatable, ResourceLocation texture, @Nullable MultiBufferSource bufferSource, float partialTick) { - return RenderType.entityTranslucent(this.getGeoModel().getTextureResource(animatable)); + super(context); } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalViewRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalViewRenderer.java deleted file mode 100644 index dfff1188..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalViewRenderer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.craisinlord.antarchy.content.client.renderer; - -import net.minecraft.client.Camera; -import org.joml.Matrix4f; - -/** 1.20 hook for the optional recursive portal framebuffer path. */ -public final class PortalGunPortalViewRenderer { - private PortalGunPortalViewRenderer() { - } - - public static boolean isEnabled() { - return false; - } - - public static void render(Camera camera, Matrix4f poseMatrix, float tickCounter) { - // Disabled on 1.20 until its LevelRenderer camera contract is ported. - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunProjectileRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunProjectileRenderer.java index a8379507..0193467e 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunProjectileRenderer.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunProjectileRenderer.java @@ -4,6 +4,7 @@ import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.portalgun.PortalGunProjectileEntity; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.entity.EntityRenderer; @@ -11,11 +12,25 @@ import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.HumanoidArm; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.phys.Vec3; import org.joml.Matrix4f; public class PortalGunProjectileRenderer extends EntityRenderer { - private static final ResourceLocation BLUE_TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/vfx/portal_gun_portal_blue.png"); - private static final ResourceLocation ORANGE_TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/vfx/portal_gun_portal_orange.png"); + private static final ResourceLocation SHOT_TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/vfx/portal_gun_shot.png"); + private static final float CORE_SIZE = 0.16F; + private static final float GLOW_SIZE = 0.34F; + private static final float STREAK_WIDTH = 0.045F; + private static final double STREAK_LENGTH = 2.2D; + private static final float MUZZLE_TICKS = 4.0F; + private static final double MUZZLE_FORWARD = 0.55D; + private static final double MUZZLE_SIDE = 0.32D; + private static final double MUZZLE_DOWN = 0.28D; + private static final double HIDDEN_DISTANCE = 0.9D; + private static final double FADE_DISTANCE = 1.8D; public PortalGunProjectileRenderer(EntityRendererProvider.Context context) { super(context); @@ -23,37 +38,103 @@ public class PortalGunProjectileRenderer extends EntityRenderer> 16 & 0xFF) / 255.0F; + float green = (color >> 8 & 0xFF) / 255.0F; + float blue = (color & 0xFF) / 255.0F; - poseStack.scale(baseScale * trailStretch, baseScale * travelPulse, baseScale * travelPulse); + poseStack.pushPose(); + Vec3 offset = renderPos.subtract(entityPos); + poseStack.translate(offset.x, offset.y, offset.z); + this.renderStreak(entity, renderPos, cameraPos, poseStack, bufferSource, red, green, blue, fade, partialTick); + poseStack.mulPose(this.entityRenderDispatcher.cameraOrientation()); PoseStack.Pose pose = poseStack.last(); Matrix4f matrix = pose.pose(); - VertexConsumer core = bufferSource.getBuffer(RenderType.entityTranslucent(texture)); - addQuad(core, pose, matrix, red, green, blue, 0.92F, packedLight, -0.9F, -0.5F, 0.9F, 0.5F); - VertexConsumer glow = bufferSource.getBuffer(RenderType.entityTranslucentEmissive(texture)); - addQuad(glow, pose, matrix, 1.0F, 1.0F, 1.0F, 0.8F * pulse, 0xF000F0, -1.15F, -0.7F, 1.15F, 0.7F); - - poseStack.mulPose(com.mojang.math.Axis.ZP.rotationDegrees(90.0F)); - pose = poseStack.last(); - matrix = pose.pose(); - core = bufferSource.getBuffer(RenderType.entityTranslucent(texture)); - addQuad(core, pose, matrix, red, green, blue, 0.74F, packedLight, -0.45F, -0.95F, 0.45F, 0.95F); - glow = bufferSource.getBuffer(RenderType.entityTranslucentEmissive(texture)); - addQuad(glow, pose, matrix, 1.0F, 1.0F, 1.0F, 0.52F * pulse, 0xF000F0, -0.62F, -1.15F, 0.62F, 1.15F); + VertexConsumer glow = bufferSource.getBuffer(RenderType.entityTranslucentEmissive(SHOT_TEXTURE)); + addQuad(glow, pose, matrix, red, green, blue, 0.55F * fade, GLOW_SIZE); + addQuad(glow, pose, matrix, 1.0F, 1.0F, 1.0F, 0.9F * fade, CORE_SIZE); poseStack.popPose(); } + private void renderStreak(PortalGunProjectileEntity entity, Vec3 renderPos, Vec3 cameraPos, PoseStack poseStack, MultiBufferSource bufferSource, + float red, float green, float blue, float fade, float partialTick) { + Vec3 velocity = entity.getSyncedVelocity(); + if (velocity.lengthSqr() < 1.0E-6D) { + velocity = entity.getDeltaMovement(); + } + if (velocity.lengthSqr() < 1.0E-6D) { + return; + } + Vec3 direction = velocity.normalize(); + Vec3 toCamera = cameraPos.subtract(renderPos); + Vec3 side = direction.cross(toCamera); + if (side.lengthSqr() < 1.0E-6D) { + return; + } + side = side.normalize().scale(STREAK_WIDTH); + double travelled = entity.getSyncedSpawnPosition().distanceTo(renderPos); + double length = Math.min(STREAK_LENGTH, Math.max(0.0D, travelled - HIDDEN_DISTANCE)); + if (length <= 0.05D) { + return; + } + Vec3 tail = direction.scale(-length); + Matrix4f matrix = poseStack.last().pose(); + VertexConsumer streak = bufferSource.getBuffer(RenderType.lightning()); + float headAlpha = 0.7F * fade; + Vec3 tailLeft = tail.add(side.scale(0.3D)); + Vec3 tailRight = tail.subtract(side.scale(0.3D)); + Vec3 headLeft = side; + Vec3 headRight = side.scale(-1.0D); + addStreakVertex(streak, matrix, headLeft, red, green, blue, headAlpha); + addStreakVertex(streak, matrix, tailLeft, red, green, blue, 0.0F); + addStreakVertex(streak, matrix, tailRight, red, green, blue, 0.0F); + addStreakVertex(streak, matrix, headRight, red, green, blue, headAlpha); + addStreakVertex(streak, matrix, headRight, red, green, blue, headAlpha); + addStreakVertex(streak, matrix, tailRight, red, green, blue, 0.0F); + addStreakVertex(streak, matrix, tailLeft, red, green, blue, 0.0F); + addStreakVertex(streak, matrix, headLeft, red, green, blue, headAlpha); + } + + private static void addStreakVertex(VertexConsumer consumer, Matrix4f matrix, Vec3 position, float red, float green, float blue, float alpha) { + consumer.vertex(matrix, (float) position.x, (float) position.y, (float) position.z).color(red, green, blue, alpha).endVertex(); + } + + private Vec3 muzzleBlendedPosition(PortalGunProjectileEntity entity, Vec3 entityPos, float partialTick) { + float age = entity.tickCount + partialTick; + if (age >= MUZZLE_TICKS) { + return entityPos; + } + Entity shooter = Minecraft.getInstance().level == null ? null : Minecraft.getInstance().level.getEntity(entity.getShooterId()); + if (!(shooter instanceof LivingEntity livingShooter)) { + return entityPos; + } + Vec3 eye = livingShooter.getEyePosition(partialTick); + Vec3 look = livingShooter.getViewVector(partialTick); + Vec3 right = look.cross(new Vec3(0.0D, 1.0D, 0.0D)); + right = right.lengthSqr() < 1.0E-6D ? new Vec3(1.0D, 0.0D, 0.0D) : right.normalize(); + Vec3 down = right.cross(look).normalize().scale(-1.0D); + boolean rightHanded = livingShooter.getMainArm() == HumanoidArm.RIGHT; + boolean offhand = !(livingShooter.getMainHandItem().getItem() instanceof com.craisinlord.antarchy.content.item.PortalGunItem) + && livingShooter.getOffhandItem().getItem() instanceof com.craisinlord.antarchy.content.item.PortalGunItem; + double sideSign = rightHanded != offhand ? 1.0D : -1.0D; + Vec3 muzzle = eye.add(look.scale(MUZZLE_FORWARD)).add(right.scale(MUZZLE_SIDE * sideSign)).add(down.scale(MUZZLE_DOWN)); + double blend = Mth.clamp(age / MUZZLE_TICKS, 0.0F, 1.0F); + return muzzle.lerp(entityPos, blend * blend); + } + + @Override + public boolean shouldRender(PortalGunProjectileEntity entity, net.minecraft.client.renderer.culling.Frustum frustum, double cameraX, double cameraY, double cameraZ) { + return true; + } + @Override protected int getBlockLightLevel(PortalGunProjectileEntity entity, BlockPos pos) { return 15; @@ -61,22 +142,22 @@ public class PortalGunProjectileRenderer extends EntityRenderer> { - private static final int[] TINTS = {0x66FF3B4D, 0x4DFF263D, 0x33E8142F, 0x1FCC0D26}; - - public RoyalAssailantAxeAfterimageLayer(RenderLayerParent> renderer) { - super(renderer); - } - - @Override - public void render(PoseStack poseStack, MultiBufferSource buffer, int packedLight, AbstractClientPlayer player, - float limbSwing, float limbSwingAmount, float partialTick, float ageInTicks, - float netHeadYaw, float headPitch) { - if (player.isSpectator() || player.isInvisible() || player.getAttackAnim(partialTick) <= 0.01F) return; - ItemStack stack = player.getMainHandItem(); - HumanoidArm arm = player.getMainArm(); - if (!(stack.getItem() instanceof RoyalAssailantBattleAxeItem)) { - stack = player.getOffhandItem(); - arm = player.getMainArm() == HumanoidArm.RIGHT ? HumanoidArm.LEFT : HumanoidArm.RIGHT; - } - if (!(stack.getItem() instanceof RoyalAssailantBattleAxeItem)) return; - VertexConsumer vertexConsumer = buffer.getBuffer(RenderType.entityTranslucent(this.getTextureLocation(player))); - float swing = player.getAttackAnim(partialTick); - for (int i = TINTS.length - 1; i >= 0; i--) { - poseStack.pushPose(); - poseStack.translate(0.0D, 0.0D, (i + 1) * 0.08F); - poseStack.mulPose(Axis.YP.rotation((i + 1) * 0.12F * (swing < 0.5F ? -1.0F : 1.0F))); - int tint = TINTS[i]; - this.getParentModel().renderToBuffer(poseStack, vertexConsumer, LightTexture.FULL_BRIGHT, - LivingEntityRenderer.getOverlayCoords(player, 0.0F), - ((tint >> 16) & 0xFF) / 255.0F, ((tint >> 8) & 0xFF) / 255.0F, - (tint & 0xFF) / 255.0F, ((tint >>> 24) & 0xFF) / 255.0F); - poseStack.popPose(); - } - for (int i = TINTS.length - 1; i >= 0; i--) { - poseStack.pushPose(); - this.getParentModel().translateToHand(arm, poseStack); - poseStack.mulPose(Axis.YP.rotation((i + 1) * 0.12F * (swing < 0.5F ? -1.0F : 1.0F))); - Minecraft.getInstance().getItemRenderer().renderStatic(player, stack, - arm == HumanoidArm.RIGHT ? ItemDisplayContext.THIRD_PERSON_RIGHT_HAND : ItemDisplayContext.THIRD_PERSON_LEFT_HAND, - arm == HumanoidArm.LEFT, poseStack, buffer, player.level(), packedLight, - LivingEntityRenderer.getOverlayCoords(player, 0.0F), player.getId()); - poseStack.popPose(); - } - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/RoyalBlackHoleRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/RoyalBlackHoleRenderer.java index 2dbb6801..c5cea334 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/RoyalBlackHoleRenderer.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/RoyalBlackHoleRenderer.java @@ -19,7 +19,11 @@ public class RoyalBlackHoleRenderer extends GeoEntityRenderer { - private static final ResourceLocation QUEEN_BEAM_OUTER = new ResourceLocation("antarchy", "textures/entity/queen/queen_beam_outer.png"); - private static final ResourceLocation QUEEN_BEAM_INNER = new ResourceLocation("antarchy", "textures/entity/queen/queen_beam_inner.png"); - private static final ResourceLocation QUEEN_BEAM_END = new ResourceLocation("antarchy", "textures/entity/queen/queen_beam_end_1.png"); + private static final ResourceLocation QUEEN_PURPLE_BEAM_OUTER = new ResourceLocation("antarchy", "textures/entity/queen/queen_purple_beam_outer.png"); + private static final ResourceLocation QUEEN_PURPLE_BEAM_INNER = new ResourceLocation("antarchy", "textures/entity/queen/queen_purple_beam_inner.png"); + private static final ResourceLocation QUEEN_PURPLE_BEAM_END_1 = new ResourceLocation("antarchy", "textures/entity/queen/queen_purple_beam_end_1.png"); + private static final ResourceLocation QUEEN_PURPLE_BEAM_END_2 = new ResourceLocation("antarchy", "textures/entity/queen/queen_purple_beam_end_2.png"); + private static final ResourceLocation QUEEN_RED_BEAM_OUTER = new ResourceLocation("antarchy", "textures/entity/queen/queen_red_beam_outer.png"); + private static final ResourceLocation QUEEN_RED_BEAM_INNER = new ResourceLocation("antarchy", "textures/entity/queen/queen_red_beam_inner.png"); + private static final ResourceLocation QUEEN_RED_BEAM_END_1 = new ResourceLocation("antarchy", "textures/entity/queen/queen_red_beam_end_1.png"); + private static final ResourceLocation QUEEN_RED_BEAM_END_2 = new ResourceLocation("antarchy", "textures/entity/queen/queen_red_beam_end_2.png"); + private static final ResourceLocation QUEEN_BLACK_BEAM_OUTER = new ResourceLocation("antarchy", "textures/entity/queen/queen_black_beam_outer.png"); + private static final ResourceLocation QUEEN_BLACK_BEAM_INNER = new ResourceLocation("antarchy", "textures/entity/queen/queen_black_beam_inner.png"); + private static final ResourceLocation QUEEN_BLACK_BEAM_END_1 = new ResourceLocation("antarchy", "textures/entity/queen/queen_black_beam_end_1.png"); + private static final ResourceLocation QUEEN_BLACK_BEAM_END_2 = new ResourceLocation("antarchy", "textures/entity/queen/queen_black_beam_end_2.png"); private static final ResourceLocation KING_FIRE_BEAM_OUTER = new ResourceLocation("antarchy", "textures/entity/king/fire_beam_outer.png"); private static final ResourceLocation KING_FIRE_BEAM_INNER = new ResourceLocation("antarchy", "textures/entity/king/fire_beam_inner.png"); - private static final ResourceLocation KING_FIRE_BEAM_END = new ResourceLocation("antarchy", "textures/entity/king/fire_beam_end_1.png"); + private static final ResourceLocation KING_FIRE_BEAM_END_1 = new ResourceLocation("antarchy", "textures/entity/king/fire_beam_end_1.png"); + private static final ResourceLocation KING_FIRE_BEAM_END_2 = new ResourceLocation("antarchy", "textures/entity/king/fire_beam_end_2.png"); private static final ResourceLocation KING_LIGHTNING_BEAM_OUTER = new ResourceLocation("antarchy", "textures/entity/king/lightning_beam_outer.png"); private static final ResourceLocation KING_LIGHTNING_BEAM_INNER = new ResourceLocation("antarchy", "textures/entity/king/lightning_beam_inner.png"); - private static final ResourceLocation KING_LIGHTNING_BEAM_END = new ResourceLocation("antarchy", "textures/entity/king/lightning_beam_end_1.png"); + private static final ResourceLocation KING_LIGHTNING_BEAM_END_1 = new ResourceLocation("antarchy", "textures/entity/king/lightning_beam_end_1.png"); + private static final ResourceLocation KING_LIGHTNING_BEAM_END_2 = new ResourceLocation("antarchy", "textures/entity/king/lightning_beam_end_2.png"); private static final ResourceLocation KING_ICE_BEAM_OUTER = new ResourceLocation("antarchy", "textures/entity/king/ice_beam_outer.png"); private static final ResourceLocation KING_ICE_BEAM_INNER = new ResourceLocation("antarchy", "textures/entity/king/ice_beam_inner.png"); - private static final ResourceLocation KING_ICE_BEAM_END = new ResourceLocation("antarchy", "textures/entity/king/ice_beam_end_1.png"); + private static final ResourceLocation KING_ICE_BEAM_END_1 = new ResourceLocation("antarchy", "textures/entity/king/ice_beam_end_1.png"); + private static final ResourceLocation KING_ICE_BEAM_END_2 = new ResourceLocation("antarchy", "textures/entity/king/ice_beam_end_2.png"); public RoyalBossRenderer(EntityRendererProvider.Context context) { super(context, new RoyalBossModel()); this.shadowRadius = 8.0F; + this.addRenderLayer(new RoyalAfterimageLayer(this)); + this.addRenderLayer(new TemporalContractionGeoLayer<>(this)); + } + + private static final class RoyalAfterimageLayer extends GeoRenderLayer { + private RoyalAfterimageLayer(RoyalBossRenderer renderer) { + super(renderer); + } + + @Override + public void render(PoseStack poseStack, RoyalBossEntity animatable, BakedGeoModel bakedModel, @Nullable RenderType renderType, + MultiBufferSource bufferSource, @Nullable VertexConsumer buffer, float partialTick, + int packedLight, int packedOverlay) { + if (!animatable.isRoyalAccelerated() && (RoyalEffectHooks.contractedHolder() == null + || !animatable.hasEffect(RoyalEffectHooks.contractedHolder()))) return; + Vec3 movement = animatable.getDeltaMovement(); + if (movement.lengthSqr() < 1.0E-5D) return; + RenderType afterimageType = RenderType.entityTranslucent(this.getRenderer().getTextureLocation(animatable)); + VertexConsumer afterimageBuffer = bufferSource.getBuffer(afterimageType); + int[] colors = animatable instanceof QueenEntity + ? new int[]{0x66FF5F6F, 0x4DFF4D60, 0x33FF3B52, 0x1FFF2944} + : new int[]{0x66FFD966, 0x4DFFC94D, 0x33FFB52E, 0x1FFF8C14}; + for (int i = colors.length - 1; i >= 0; i--) { + poseStack.pushPose(); + Vec3 offset = movement.scale(-(i + 1) * 3.0D / RoyalBossEntity.MODEL_RENDER_SCALE); + poseStack.translate(offset.x, offset.y, offset.z); + this.getRenderer().reRender( + bakedModel, + poseStack, + bufferSource, + animatable, + afterimageType, + afterimageBuffer, + partialTick, + 0xF000F0, + OverlayTexture.NO_OVERLAY, + ((colors[i] >> 16) & 0xFF) / 255.0F, + ((colors[i] >> 8) & 0xFF) / 255.0F, + (colors[i] & 0xFF) / 255.0F, + ((colors[i] >>> 24) & 0xFF) / 255.0F + ); + poseStack.popPose(); + } + } } @Override @@ -59,23 +122,30 @@ public class RoyalBossRenderer extends GeoEntityRenderer { this.shadowRadius = 8.0F * RoyalBossEntity.MODEL_RENDER_SCALE; } - private static final float BEAM_OUTER_RADIUS = 0.55F; - private static final float BEAM_INNER_RADIUS = 0.32F; - private static final float BEAM_TILE_BLOCKS = 3.0F; - private static final float BEAM_SCROLL_SPEED = 0.32F; + private static final float BEAM_OUTER_RADIUS = 1.75F; + private static final float BEAM_INNER_RADIUS = 1.5F; @Override public void render(RoyalBossEntity entity, float entityYaw, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, int packedLight) { super.render(entity, entityYaw, partialTick, poseStack, bufferSource, packedLight); - Vec3 end = entity.getRoyalBeamEndPosition(); - if (!entity.isFiringRoyalBeam() || end == null) { - return; + for (RoyalHead.Slot slot : RoyalHead.Slot.values()) { + if (entity.isFiringRoyalBeam(slot) && entity.getRoyalBeamEndPosition(slot) != null) { + renderBeam(entity, slot, partialTick, poseStack, bufferSource); + } } + } + + private void renderBeam(RoyalBossEntity entity, RoyalHead.Slot beamHead, float partialTick, + PoseStack poseStack, MultiBufferSource bufferSource) { + Vec3 end = entity.getRoyalBeamEndPosition(beamHead); + if (end == null) return; double x = Mth.lerp(partialTick, entity.xo, entity.getX()); double y = Mth.lerp(partialTick, entity.yo, entity.getY()); double z = Mth.lerp(partialTick, entity.zo, entity.getZ()); - Vec3 start = entity.getRoyalBeamShootFrom(partialTick).subtract(x, y, z); + Vec3 trackedAnchor = ((RoyalBossModel) this.getGeoModel()).getTrackedBeamAnchor(beamHead); + Vec3 start = (trackedAnchor != null ? trackedAnchor : entity.getRoyalBeamShootFrom(beamHead, partialTick)) + .subtract(x, y, z); Vec3 finish = end.subtract(x, y, z); Vec3 axis = finish.subtract(start); double length = axis.length(); @@ -83,83 +153,172 @@ public class RoyalBossRenderer extends GeoEntityRenderer { return; } Vec3 dir = axis.scale(1.0D / length); - Vec3 side1 = dir.cross(new Vec3(0.0D, 1.0D, 0.0D)); - if (side1.lengthSqr() < 1.0E-4D) { - side1 = dir.cross(new Vec3(1.0D, 0.0D, 0.0D)); - } - side1 = side1.normalize(); - Vec3 side2 = dir.cross(side1).normalize(); - - ResourceLocation outer = QUEEN_BEAM_OUTER; - ResourceLocation inner = QUEEN_BEAM_INNER; - ResourceLocation endTexture = QUEEN_BEAM_END; + ResourceLocation outer = QUEEN_PURPLE_BEAM_OUTER; + ResourceLocation inner = QUEEN_PURPLE_BEAM_INNER; + ResourceLocation[] endTextures = {QUEEN_PURPLE_BEAM_END_1, QUEEN_PURPLE_BEAM_END_2}; if (entity instanceof KingEntity) { switch (entity.getRoyalBeamElement()) { case FIRE -> { outer = KING_FIRE_BEAM_OUTER; inner = KING_FIRE_BEAM_INNER; - endTexture = KING_FIRE_BEAM_END; + endTextures = new ResourceLocation[]{KING_FIRE_BEAM_END_1, KING_FIRE_BEAM_END_2}; } case LIGHTNING -> { outer = KING_LIGHTNING_BEAM_OUTER; inner = KING_LIGHTNING_BEAM_INNER; - endTexture = KING_LIGHTNING_BEAM_END; + endTextures = new ResourceLocation[]{KING_LIGHTNING_BEAM_END_1, KING_LIGHTNING_BEAM_END_2}; } case ICE -> { outer = KING_ICE_BEAM_OUTER; inner = KING_ICE_BEAM_INNER; - endTexture = KING_ICE_BEAM_END; + endTextures = new ResourceLocation[]{KING_ICE_BEAM_END_1, KING_ICE_BEAM_END_2}; } case GENERIC -> { } } + } else { + switch (entity.getRoyalBeamElement(beamHead)) { + case QUEEN_RED -> { + outer = QUEEN_RED_BEAM_OUTER; + inner = QUEEN_RED_BEAM_INNER; + endTextures = new ResourceLocation[]{QUEEN_RED_BEAM_END_1, QUEEN_RED_BEAM_END_2}; + } + case QUEEN_BLACK -> { + outer = QUEEN_BLACK_BEAM_OUTER; + inner = QUEEN_BLACK_BEAM_INNER; + endTextures = new ResourceLocation[]{QUEEN_BLACK_BEAM_END_1, QUEEN_BLACK_BEAM_END_2}; + } + default -> { + } + } } float time = entity.tickCount + partialTick; - float tiles = (float) (length / BEAM_TILE_BLOCKS); - float scroll = -time * BEAM_SCROLL_SPEED; - var pose = poseStack.last().pose(); + float outerV = -time * 0.25F; + float innerV = -time * 0.25F * 0.5F; - VertexConsumer outerBuffer = bufferSource.getBuffer(RenderType.entityTranslucent(outer)); - drawBeamPlane(outerBuffer, pose, start, finish, side1.scale(BEAM_OUTER_RADIUS), scroll, scroll + tiles); - drawBeamPlane(outerBuffer, pose, start, finish, side2.scale(BEAM_OUTER_RADIUS), scroll, scroll + tiles); + float yaw = (float) Math.atan2(dir.z, dir.x); + float pitch = (float) Math.acos(dir.y); + poseStack.pushPose(); + poseStack.translate(start.x, start.y, start.z); + poseStack.mulPose(Axis.YP.rotation((float) (Math.PI * 0.5D - yaw))); + poseStack.mulPose(Axis.XP.rotation((float) (-Math.PI * 0.5D + pitch))); + poseStack.mulPose(Axis.ZP.rotationDegrees(45.0F)); + org.joml.Matrix4f pose = poseStack.last().pose(); - float innerScroll = -time * BEAM_SCROLL_SPEED * 1.6F; - VertexConsumer innerBuffer = bufferSource.getBuffer(RenderType.entityTranslucent(inner)); - drawBeamPlane(innerBuffer, pose, start, finish, side1.scale(BEAM_INNER_RADIUS), innerScroll, innerScroll + tiles); - drawBeamPlane(innerBuffer, pose, start, finish, side2.scale(BEAM_INNER_RADIUS), innerScroll, innerScroll + tiles); + VertexConsumer innerBuffer = bufferSource.getBuffer(BeamRenderTypes.beam(inner)); + drawLocalBeam(innerBuffer, pose, length, BEAM_INNER_RADIUS, 4, innerV, 0.5F); + VertexConsumer outerBuffer = bufferSource.getBuffer(BeamRenderTypes.beam(outer)); + drawLocalBeam(outerBuffer, pose, length, BEAM_OUTER_RADIUS, 8, outerV, 0.15F); - float impactSize = 1.1F + 0.35F * Mth.sin(time * 0.6F); - Vec3 camLeft = new Vec3(this.entityRenderDispatcher.camera.getLeftVector()); - Vec3 camUp = new Vec3(this.entityRenderDispatcher.camera.getUpVector()); - VertexConsumer endBuffer = bufferSource.getBuffer(RenderType.entityTranslucent(endTexture)); - drawBillboard(endBuffer, pose, finish, camLeft.scale(impactSize), camUp.scale(impactSize)); + ResourceLocation endTexture = endTextures[(entity.tickCount / 2) % endTextures.length]; + VertexConsumer endBuffer = bufferSource.getBuffer(BeamRenderTypes.beam(endTexture)); + drawBeamImpact(endBuffer, pose, (float) length - 1.5F, BEAM_INNER_RADIUS); + poseStack.popPose(); } - private static void drawBeamPlane(VertexConsumer vertices, org.joml.Matrix4f pose, Vec3 start, Vec3 end, Vec3 half, - float startV, float endV) { - emitQuad(vertices, pose, - start.subtract(half), start.add(half), end.add(half), end.subtract(half), - 0.0F, startV, 1.0F, endV); - emitQuad(vertices, pose, - start.add(half), start.subtract(half), end.subtract(half), end.add(half), - 0.0F, startV, 1.0F, endV); + private static void drawLocalBeam(VertexConsumer vertices, org.joml.Matrix4f pose, double length, + float radius, int sections, float scroll, float uvLengthScale) { + float endV = scroll + (float) length * uvLengthScale; + float previousX = -radius; + float previousY = 0.0F; + float previousU = 0.0F; + for (int i = 0; i <= sections; i++) { + float angle = (float) (Math.PI + Math.PI * 2.0D * i / sections); + float currentX = Mth.cos(angle) * radius; + float currentY = Mth.sin(angle) * radius; + Vec3 previousStart = new Vec3(previousX * 0.55D, previousY * 0.55D, 0.0D); + Vec3 previousEnd = new Vec3(previousX, previousY, length); + Vec3 currentEnd = new Vec3(currentX, currentY, length); + Vec3 currentStart = new Vec3(currentX * 0.55D, currentY * 0.55D, 0.0D); + emitBeamQuad(vertices, pose, previousStart, previousEnd, currentEnd, currentStart, + previousU, scroll, i + 1.0F, endV, 255); + previousX = currentX; + previousY = currentY; + previousU = i + 1.0F; + } } - private static void drawBillboard(VertexConsumer vertices, org.joml.Matrix4f pose, Vec3 center, Vec3 left, Vec3 up) { - emitQuad(vertices, pose, - center.add(left).add(up), center.subtract(left).add(up), - center.subtract(left).subtract(up), center.add(left).subtract(up), - 0.0F, 0.0F, 1.0F, 1.0F); - emitQuad(vertices, pose, - center.subtract(left).add(up), center.add(left).add(up), - center.add(left).subtract(up), center.subtract(left).subtract(up), - 0.0F, 0.0F, 1.0F, 1.0F); + private static void emitBeamQuad(VertexConsumer vertices, org.joml.Matrix4f pose, + Vec3 a, Vec3 b, Vec3 c, Vec3 d, + float minU, float minV, float maxU, float maxV, int endAlpha) { + beamVertex(vertices, pose, a, minU, minV, 255); + beamVertex(vertices, pose, b, maxU, minV, endAlpha); + beamVertex(vertices, pose, c, maxU, maxV, endAlpha); + beamVertex(vertices, pose, d, minU, maxV, 255); } - private static void emitQuad(VertexConsumer vertices, org.joml.Matrix4f pose, - Vec3 a, Vec3 b, Vec3 c, Vec3 d, - float minU, float minV, float maxU, float maxV) { + static void drawBeamImpact(VertexConsumer vertices, org.joml.Matrix4f pose, float z, float size) { + PoseStack endpoint = new PoseStack(); + endpoint.last().pose().set(pose); + endpoint.translate(0.0D, 0.0D, z); + endpoint.mulPose(Axis.ZP.rotationDegrees(45.0F)); + endpoint.mulPose(Axis.XP.rotationDegrees(90.0F)); + endpoint.scale(size / 16.0F, size / 16.0F, size / 16.0F); + endpoint.translate(0.0D, 24.0D, 0.0D); + + org.joml.Matrix4f modelPose = endpoint.last().pose(); + emitQuadUv(vertices, modelPose, + new Vec3(-11.0D, 0.0D, -11.0D), new Vec3(11.0D, 0.0D, -11.0D), + new Vec3(11.0D, 0.0D, 11.0D), new Vec3(-11.0D, 0.0D, 11.0D), + 0.0F, 0.0F, 22.0F / 128.0F, 22.0F / 128.0F); + + endpoint.pushPose(); + endpoint.translate(0.0D, 0.0D, -11.0D); + endpoint.mulPose(Axis.XP.rotation(0.3927F)); + drawModelPlane(vertices, endpoint.last().pose(), -12, -24, 0, 24, 24, 3, 38); + endpoint.popPose(); + endpoint.pushPose(); + endpoint.translate(0.0D, 0.0D, -11.0D); + endpoint.mulPose(Axis.XP.rotation(0.7854F)); + drawModelPlane(vertices, endpoint.last().pose(), -15, -16, 0, 30, 16, 0, 22); + endpoint.popPose(); + + endpoint.pushPose(); + endpoint.translate(0.0D, 0.0D, 11.0D); + endpoint.mulPose(Axis.XP.rotation(-0.3927F)); + drawModelPlane(vertices, endpoint.last().pose(), -12, -24, 0, 24, 24, 3, 38); + endpoint.popPose(); + endpoint.pushPose(); + endpoint.translate(0.0D, 0.0D, 11.0D); + endpoint.mulPose(Axis.XP.rotation(-0.7854F)); + drawModelPlane(vertices, endpoint.last().pose(), -15, -16, 0, 30, 16, 0, 22); + endpoint.popPose(); + + endpoint.pushPose(); + endpoint.translate(11.0D, 0.0D, 0.0D); + endpoint.mulPose(Axis.ZP.rotation(0.3927F)); + drawModelPlane(vertices, endpoint.last().pose(), 0, -24, -13, 24, 24, 3, 14); + endpoint.popPose(); + endpoint.pushPose(); + endpoint.translate(11.0D, 0.0D, 0.0D); + endpoint.mulPose(Axis.ZP.rotation(0.7854F)); + drawModelPlane(vertices, endpoint.last().pose(), 0, -16, -15, 16, 30, 0, -8); + endpoint.popPose(); + + endpoint.pushPose(); + endpoint.translate(-11.0D, 0.0D, 0.0D); + endpoint.mulPose(Axis.ZP.rotation(-0.3927F)); + drawModelPlane(vertices, endpoint.last().pose(), 0, -24, -12, 24, 24, 3, 14); + endpoint.popPose(); + endpoint.pushPose(); + endpoint.translate(-11.0D, 0.0D, 0.0D); + endpoint.mulPose(Axis.ZP.rotation(-0.7854F)); + drawModelPlane(vertices, endpoint.last().pose(), 0, -16, -15, 16, 30, 0, -8); + endpoint.popPose(); + } + + private static void drawModelPlane(VertexConsumer vertices, org.joml.Matrix4f pose, + int x, int y, int z, int width, int height, int u, int v) { + emitQuadUv(vertices, pose, + new Vec3(x + width, y, z), new Vec3(x, y, z), + new Vec3(x, y + height, z), new Vec3(x + width, y + height, z), + (u + width) / 128.0F, v / 128.0F, u / 128.0F, (v + height) / 128.0F); + } + + private static void emitQuadUv(VertexConsumer vertices, org.joml.Matrix4f pose, + Vec3 a, Vec3 b, Vec3 c, Vec3 d, + float minU, float minV, float maxU, float maxV) { vertex(vertices, pose, a, minU, minV); vertex(vertices, pose, b, maxU, minV); vertex(vertices, pose, c, maxU, maxV); @@ -168,9 +327,17 @@ public class RoyalBossRenderer extends GeoEntityRenderer { private static void vertex(VertexConsumer vertices, org.joml.Matrix4f pose, Vec3 pos, float u, float v) { vertices.vertex(pose, (float) pos.x, (float) pos.y, (float) pos.z) - .color(255, 255, 255, 255).uv(u, v) + .color(1.0F, 1.0F, 1.0F, 1.0F).uv(u, v) .overlayCoords(net.minecraft.client.renderer.texture.OverlayTexture.NO_OVERLAY) - .uv2(0x00F000F0) + .uv2(240) .normal(0.0F, 1.0F, 0.0F).endVertex(); } + + private static void beamVertex(VertexConsumer vertices, org.joml.Matrix4f pose, Vec3 pos, float u, float v, int alpha) { + vertices.vertex(pose, (float) pos.x, (float) pos.y, (float) pos.z) + .color(1.0F, 1.0F, 1.0F, alpha / 255.0F).uv(u, v) + .overlayCoords(OverlayTexture.NO_OVERLAY) + .uv2(240) + .normal(0.0F, -1.0F, 0.0F).endVertex(); + } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/RoyalElementalProjectileRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/RoyalElementalProjectileRenderer.java index 511fd61c..7eaa5612 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/RoyalElementalProjectileRenderer.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/RoyalElementalProjectileRenderer.java @@ -6,8 +6,12 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.math.Axis; import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.cache.object.BakedGeoModel; import software.bernie.geckolib.renderer.GeoEntityRenderer; @@ -17,21 +21,42 @@ public class RoyalElementalProjectileRenderer extends GeoEntityRenderer 1.0E-6D) { + double horizontal = travel.horizontalDistance(); + yaw = (float) (Mth.atan2(travel.z, travel.x) * Mth.RAD_TO_DEG) - 90.0F; + pitch = (float) (Mth.atan2(horizontal, travel.y) * Mth.RAD_TO_DEG) - 90.0F; + } else { + yaw = Mth.rotLerp(partialTick, entity.yRotO, entity.getYRot()); + pitch = Mth.lerp(partialTick, entity.xRotO, entity.getXRot()); + } poseStack.mulPose(Axis.YP.rotationDegrees(180.0F - yaw)); poseStack.mulPose(Axis.XP.rotationDegrees(-pitch)); + if (!entity.isIceball()) { + poseStack.mulPose(Axis.ZP.rotationDegrees(180.0F)); + } } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/RoyalIndicatorGeoLayer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/RoyalIndicatorGeoLayer.java new file mode 100644 index 00000000..4ba3e480 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/RoyalIndicatorGeoLayer.java @@ -0,0 +1,32 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.effect.JudgmentMarkAccess; +import com.craisinlord.antarchy.content.effect.RoyalEffectHooks; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import org.jetbrains.annotations.Nullable; +import software.bernie.geckolib.core.animatable.GeoAnimatable; +import software.bernie.geckolib.cache.object.BakedGeoModel; +import software.bernie.geckolib.renderer.GeoRenderer; +import software.bernie.geckolib.renderer.layer.GeoRenderLayer; + +public final class RoyalIndicatorGeoLayer extends GeoRenderLayer { + public RoyalIndicatorGeoLayer(GeoRenderer renderer) { + super(renderer); + } + + @Override + public void render(com.mojang.blaze3d.vertex.PoseStack poseStack, T animatable, BakedGeoModel bakedModel, + @Nullable RenderType renderType, MultiBufferSource bufferSource, + @Nullable com.mojang.blaze3d.vertex.VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) { + if (!(animatable instanceof Entity entity) || !(entity instanceof LivingEntity living)) { + return; + } + RoyalIndicatorRenderer.render(poseStack, bufferSource, living, + RoyalEffectHooks.commandedHolder() != null && living.hasEffect(RoyalEffectHooks.commandedHolder()), + living instanceof JudgmentMarkAccess access && access.antarchy$isJudgmentMarked(), + living.tickCount + partialTick); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/RoyalIndicatorLivingLayer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/RoyalIndicatorLivingLayer.java new file mode 100644 index 00000000..9840fbd6 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/RoyalIndicatorLivingLayer.java @@ -0,0 +1,24 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.effect.JudgmentMarkAccess; +import com.craisinlord.antarchy.content.effect.RoyalEffectHooks; +import net.minecraft.client.model.EntityModel; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.entity.RenderLayerParent; +import net.minecraft.client.renderer.entity.layers.RenderLayer; +import net.minecraft.world.entity.LivingEntity; + +public final class RoyalIndicatorLivingLayer> extends RenderLayer { + public RoyalIndicatorLivingLayer(RenderLayerParent renderer) { + super(renderer); + } + + @Override + public void render(com.mojang.blaze3d.vertex.PoseStack poseStack, MultiBufferSource buffers, int packedLight, T entity, + float limbSwing, float limbSwingAmount, float partialTick, float ageInTicks, + float netHeadYaw, float headPitch) { + RoyalIndicatorRenderer.render(poseStack, buffers, entity, + RoyalEffectHooks.commandedHolder() != null && entity.hasEffect(RoyalEffectHooks.commandedHolder()), + entity instanceof JudgmentMarkAccess access && access.antarchy$isJudgmentMarked(), ageInTicks); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/RoyalIndicatorRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/RoyalIndicatorRenderer.java new file mode 100644 index 00000000..fa86be17 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/RoyalIndicatorRenderer.java @@ -0,0 +1,117 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.LightTexture; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.LivingEntity; + +public final class RoyalIndicatorRenderer { + private static final ResourceLocation COMMANDED_CROWN_TEXTURE = new ResourceLocation( + com.craisinlord.antarchy.Antarchy.MODID, "textures/vfx/commanded_vfx_side.png"); + + private RoyalIndicatorRenderer() { + } + + public static void render(PoseStack poseStack, MultiBufferSource buffers, LivingEntity entity, + boolean commanded, boolean judged, float ageInTicks) { + if ((!commanded && !judged) || entity.isInvisible()) { + return; + } + float radius = Math.max(0.28F, Math.min(1.15F, entity.getBbWidth() * 0.58F)); + float baseY = entity.getBbHeight() + 0.18F; + poseStack.pushPose(); + poseStack.translate(0.0D, baseY, 0.0D); + VertexConsumer lines = buffers.getBuffer(RenderType.lines()); + PoseStack.Pose pose = poseStack.last(); + float spin = ageInTicks * (judged ? 0.055F : 0.025F); + + if (commanded) { + ring(lines, pose, radius, spin, 0.95F, 0.63F, 0.10F, 0.95F, 36); + crownTexture(poseStack, buffers, LightTexture.FULL_BRIGHT, radius, spin); + } + if (judged) { + float markY = commanded ? -0.13F : 0.08F; + poseStack.translate(0.0D, markY, 0.0D); + pose = poseStack.last(); + brackets(lines, pose, radius * 1.18F, -spin * 1.7F); + ring(lines, pose, radius * 0.73F, -spin * 0.7F, 1.0F, 0.91F, 0.48F, 0.85F, 24); + judgmentFlare(lines, pose, radius * 0.82F, spin); + } + poseStack.popPose(); + } + + private static void ring(VertexConsumer out, PoseStack.Pose pose, float radius, float rotation, + float r, float g, float b, float a, int segments) { + for (int i = 0; i < segments; i++) { + double angleA = (Math.PI * 2.0D * i) / segments + rotation; + double angleB = (Math.PI * 2.0D * (i + 1)) / segments + rotation; + line(out, pose, (float) Math.cos(angleA) * radius, 0.0F, (float) Math.sin(angleA) * radius, + (float) Math.cos(angleB) * radius, 0.0F, (float) Math.sin(angleB) * radius, r, g, b, a); + } + } + + private static void crownTexture(PoseStack poseStack, MultiBufferSource buffers, int packedLight, + float radius, float rotation) { + VertexConsumer crown = buffers.getBuffer(RenderType.entityTranslucentEmissive(COMMANDED_CROWN_TEXTURE)); + float halfWidth = radius * 0.78F; + float bottom = 0.02F; + float top = 0.40F; + + poseStack.pushPose(); + poseStack.mulPose(com.mojang.math.Axis.YP.rotation(rotation)); + for (int side = 0; side < 4; side++) { + poseStack.pushPose(); + poseStack.mulPose(com.mojang.math.Axis.YP.rotationDegrees(side * 90.0F)); + PoseStack.Pose pose = poseStack.last(); + quad(crown, pose, -halfWidth, bottom, halfWidth, top, halfWidth, packedLight); + poseStack.popPose(); + } + poseStack.popPose(); + } + + private static void quad(VertexConsumer out, PoseStack.Pose pose, float left, float bottom, + float right, float top, float depth, int packedLight) { + out.vertex(pose.pose(), left, bottom, depth).color(1.0F, 1.0F, 1.0F, 1.0F).uv(0.0F, 1.0F).overlayCoords(0).uv2(packedLight).normal(pose.normal(), 0.0F, 0.0F, 1.0F).endVertex(); + out.vertex(pose.pose(), right, bottom, depth).color(1.0F, 1.0F, 1.0F, 1.0F).uv(1.0F, 1.0F).overlayCoords(0).uv2(packedLight).normal(pose.normal(), 0.0F, 0.0F, 1.0F).endVertex(); + out.vertex(pose.pose(), right, top, depth).color(1.0F, 1.0F, 1.0F, 1.0F).uv(1.0F, 0.0F).overlayCoords(0).uv2(packedLight).normal(pose.normal(), 0.0F, 0.0F, 1.0F).endVertex(); + out.vertex(pose.pose(), left, top, depth).color(1.0F, 1.0F, 1.0F, 1.0F).uv(0.0F, 0.0F).overlayCoords(0).uv2(packedLight).normal(pose.normal(), 0.0F, 0.0F, 1.0F).endVertex(); + + out.vertex(pose.pose(), left, top, depth).color(1.0F, 1.0F, 1.0F, 1.0F).uv(0.0F, 0.0F).overlayCoords(0).uv2(packedLight).normal(pose.normal(), 0.0F, 0.0F, -1.0F).endVertex(); + out.vertex(pose.pose(), right, top, depth).color(1.0F, 1.0F, 1.0F, 1.0F).uv(1.0F, 0.0F).overlayCoords(0).uv2(packedLight).normal(pose.normal(), 0.0F, 0.0F, -1.0F).endVertex(); + out.vertex(pose.pose(), right, bottom, depth).color(1.0F, 1.0F, 1.0F, 1.0F).uv(1.0F, 1.0F).overlayCoords(0).uv2(packedLight).normal(pose.normal(), 0.0F, 0.0F, -1.0F).endVertex(); + out.vertex(pose.pose(), left, bottom, depth).color(1.0F, 1.0F, 1.0F, 1.0F).uv(0.0F, 1.0F).overlayCoords(0).uv2(packedLight).normal(pose.normal(), 0.0F, 0.0F, -1.0F).endVertex(); + } + + private static void brackets(VertexConsumer out, PoseStack.Pose pose, float radius, float rotation) { + for (int i = 0; i < 3; i++) { + double angle = rotation + Math.PI * 2.0D * i / 3.0D; + float cx = (float) Math.cos(angle) * radius; + float cz = (float) Math.sin(angle) * radius; + float tx = (float) -Math.sin(angle); + float tz = (float) Math.cos(angle); + line(out, pose, cx - tx * 0.13F, 0.0F, cz - tz * 0.13F, + cx + tx * 0.13F, 0.0F, cz + tz * 0.13F, 1.0F, 0.81F, 0.20F, 1.0F); + line(out, pose, cx, 0.0F, cz, cx * 0.82F, 0.0F, cz * 0.82F, 1.0F, 0.91F, 0.52F, 0.9F); + } + } + + private static void judgmentFlare(VertexConsumer out, PoseStack.Pose pose, float radius, float rotation) { + for (int i = 0; i < 4; i++) { + double angle = rotation + Math.PI * 0.5D * i; + float x = (float) Math.cos(angle) * radius; + float z = (float) Math.sin(angle) * radius; + line(out, pose, x, -0.16F, z, 0.0F, 0.22F, 0.0F, 1.0F, 0.68F, 0.08F, 1.0F); + line(out, pose, 0.0F, 0.22F, 0.0F, -x, -0.16F, -z, 1.0F, 0.91F, 0.35F, 0.95F); + } + } + + private static void line(VertexConsumer out, PoseStack.Pose pose, + float x1, float y1, float z1, float x2, float y2, float z2, + float r, float g, float b, float a) { + out.vertex(pose.pose(), x1, y1, z1).color(r, g, b, a).normal(pose.normal(), 0.0F, 1.0F, 0.0F).endVertex(); + out.vertex(pose.pose(), x2, y2, z2).color(r, g, b, a).normal(pose.normal(), 0.0F, 1.0F, 0.0F).endVertex(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/RoyalMountRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/RoyalMountRenderer.java index e5d72bb3..15d87892 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/RoyalMountRenderer.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/RoyalMountRenderer.java @@ -1,5 +1,6 @@ package com.craisinlord.antarchy.content.client.renderer; +import com.craisinlord.anthology.beam.client.BeamRenderTypes; import com.craisinlord.antarchy.content.client.model.RoyalMountModel; import com.craisinlord.antarchy.content.entity.royal.RoyalMountEntity; import com.mojang.blaze3d.vertex.PoseStack; @@ -8,14 +9,35 @@ import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.world.phys.Vec3; +import com.craisinlord.antarchy.content.entity.royal.PrinceEntity; +import com.craisinlord.antarchy.content.entity.royal.beam.RoyalBeamElement; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.cache.object.BakedGeoModel; import software.bernie.geckolib.renderer.GeoEntityRenderer; public class RoyalMountRenderer extends GeoEntityRenderer { + private static final ResourceLocation QUEEN_OUTER = new ResourceLocation("antarchy", "textures/entity/queen/queen_purple_beam_outer.png"); + private static final ResourceLocation QUEEN_INNER = new ResourceLocation("antarchy", "textures/entity/queen/queen_purple_beam_inner.png"); + private static final ResourceLocation QUEEN_END_1 = new ResourceLocation("antarchy", "textures/entity/queen/queen_purple_beam_end_1.png"); + private static final ResourceLocation QUEEN_END_2 = new ResourceLocation("antarchy", "textures/entity/queen/queen_purple_beam_end_2.png"); + private static final ResourceLocation KING_FIRE_OUTER = new ResourceLocation("antarchy", "textures/entity/king/fire_beam_outer.png"); + private static final ResourceLocation KING_FIRE_INNER = new ResourceLocation("antarchy", "textures/entity/king/fire_beam_inner.png"); + private static final ResourceLocation KING_FIRE_END_1 = new ResourceLocation("antarchy", "textures/entity/king/fire_beam_end_1.png"); + private static final ResourceLocation KING_FIRE_END_2 = new ResourceLocation("antarchy", "textures/entity/king/fire_beam_end_2.png"); + private static final ResourceLocation KING_LIGHTNING_OUTER = new ResourceLocation("antarchy", "textures/entity/king/lightning_beam_outer.png"); + private static final ResourceLocation KING_LIGHTNING_INNER = new ResourceLocation("antarchy", "textures/entity/king/lightning_beam_inner.png"); + private static final ResourceLocation KING_LIGHTNING_END_1 = new ResourceLocation("antarchy", "textures/entity/king/lightning_beam_end_1.png"); + private static final ResourceLocation KING_LIGHTNING_END_2 = new ResourceLocation("antarchy", "textures/entity/king/lightning_beam_end_2.png"); + private static final ResourceLocation KING_ICE_OUTER = new ResourceLocation("antarchy", "textures/entity/king/ice_beam_outer.png"); + private static final ResourceLocation KING_ICE_INNER = new ResourceLocation("antarchy", "textures/entity/king/ice_beam_inner.png"); + private static final ResourceLocation KING_ICE_END_1 = new ResourceLocation("antarchy", "textures/entity/king/ice_beam_end_1.png"); + private static final ResourceLocation KING_ICE_END_2 = new ResourceLocation("antarchy", "textures/entity/king/ice_beam_end_2.png"); public RoyalMountRenderer(EntityRendererProvider.Context context) { super(context, new RoyalMountModel()); this.shadowRadius = 1.1F; + this.addRenderLayer(new TemporalContractionGeoLayer<>(this)); } @Override @@ -28,8 +50,146 @@ public class RoyalMountRenderer extends GeoEntityRenderer { @Nullable VertexConsumer buffer, boolean isReRender, float partialTick, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) { super.preRender(poseStack, animatable, model, bufferSource, buffer, isReRender, partialTick, packedLight, packedOverlay, red, green, blue, alpha); - float scale = animatable.getAgeScale(); + float scale = animatable.getGrowthScale(); poseStack.scale(scale, scale, scale); this.shadowRadius = 1.1F * scale; } + + @Override + public void render(RoyalMountEntity entity, float entityYaw, float partialTick, PoseStack poseStack, + MultiBufferSource bufferSource, int packedLight) { + super.render(entity, entityYaw, partialTick, poseStack, bufferSource, packedLight); + Vec3 end = entity.getBeamEndPosition(); + if (!entity.isFiringBeam() || end == null) return; + double x = Mth.lerp(partialTick, entity.xo, entity.getX()); + double y = Mth.lerp(partialTick, entity.yo, entity.getY()); + double z = Mth.lerp(partialTick, entity.zo, entity.getZ()); + int beamHead = entity.getBeamHead(); + Vec3 trackedAnchor = ((RoyalMountModel) this.getGeoModel()).getTrackedBeamAnchor(beamHead); + Vec3 start = (trackedAnchor != null ? trackedAnchor : entity.beamShootFrom()).subtract(x, y, z); + Vec3 finish = end.subtract(x, y, z); + Vec3 axis = finish.subtract(start); + double length = axis.length(); + if (length < 0.05D) return; + Vec3 dir = axis.scale(1.0D / length); + Vec3 side = dir.cross(new Vec3(0.0D, 1.0D, 0.0D)); + if (side.lengthSqr() < 1.0E-4D) side = dir.cross(new Vec3(1.0D, 0.0D, 0.0D)); + side = side.normalize(); + Vec3 side2 = dir.cross(side).normalize(); + ResourceLocation outer = QUEEN_OUTER; + ResourceLocation inner = QUEEN_INNER; + ResourceLocation[] endTextures = {QUEEN_END_1, QUEEN_END_2}; + if (entity instanceof PrinceEntity) { + switch (entity.getBeamElement()) { + case FIRE -> { outer = KING_FIRE_OUTER; inner = KING_FIRE_INNER; endTextures = new ResourceLocation[]{KING_FIRE_END_1, KING_FIRE_END_2}; } + case ICE -> { outer = KING_ICE_OUTER; inner = KING_ICE_INNER; endTextures = new ResourceLocation[]{KING_ICE_END_1, KING_ICE_END_2}; } + default -> { outer = KING_LIGHTNING_OUTER; inner = KING_LIGHTNING_INNER; endTextures = new ResourceLocation[]{KING_LIGHTNING_END_1, KING_LIGHTNING_END_2}; } + } + } + float time = entity.tickCount + partialTick; + float outerV = -time * 0.25F; + float innerV = -time * 0.25F * 0.5F; + float yaw = (float) Math.atan2(dir.z, dir.x); + float pitch = (float) Math.acos(dir.y); + poseStack.pushPose(); + poseStack.translate(start.x, start.y, start.z); + poseStack.mulPose(com.mojang.math.Axis.YP.rotation((float) (Math.PI * 0.5D - yaw))); + poseStack.mulPose(com.mojang.math.Axis.XP.rotation((float) (-Math.PI * 0.5D + pitch))); + poseStack.mulPose(com.mojang.math.Axis.ZP.rotationDegrees(45.0F)); + org.joml.Matrix4f pose = poseStack.last().pose(); + VertexConsumer innerBuffer = bufferSource.getBuffer(BeamRenderTypes.beam(inner)); + drawLocalBeam(innerBuffer, pose, length, 0.375F, 4, innerV, 0.5F); + VertexConsumer outerBuffer = bufferSource.getBuffer(BeamRenderTypes.beam(outer)); + drawLocalBeam(outerBuffer, pose, length, 0.44F, 8, outerV, 0.15F); + ResourceLocation endTexture = endTextures[(entity.tickCount / 2) % endTextures.length]; + VertexConsumer endBuffer = bufferSource.getBuffer(BeamRenderTypes.beam(endTexture)); + RoyalBossRenderer.drawBeamImpact(endBuffer, pose, (float) length - 1.5F, 0.375F); + poseStack.popPose(); + } + + private static void drawLocalBeam(VertexConsumer vertices, org.joml.Matrix4f pose, double length, + float radius, int sections, float scroll, float uvLengthScale) { + float endV = scroll + (float) length * uvLengthScale; + float previousX = -radius; + float previousY = 0.0F; + float previousU = 0.0F; + for (int i = 0; i <= sections; i++) { + float angle = (float) (Math.PI + Math.PI * 2.0D * i / sections); + float currentX = Mth.cos(angle) * radius; + float currentY = Mth.sin(angle) * radius; + emitBeamQuad(vertices, pose, + new Vec3(previousX * 0.55D, previousY * 0.55D, 0.0D), + new Vec3(previousX, previousY, length), + new Vec3(currentX, currentY, length), + new Vec3(currentX * 0.55D, currentY * 0.55D, 0.0D), + previousU, scroll, i + 1.0F, endV, 255); + previousX = currentX; + previousY = currentY; + previousU = i + 1.0F; + } + } + + private static void drawBeamTube(VertexConsumer vertices, org.joml.Matrix4f pose, Vec3 start, Vec3 end, + Vec3 side1, Vec3 side2, float radius, int sections, float scroll, float phase, + float startScale, float uvLengthScale, int endAlpha) { + Vec3[] startRing = new Vec3[sections]; + Vec3[] endRing = new Vec3[sections]; + for (int i = 0; i < sections; i++) { + double angle = Math.PI * 2.0D * i / sections + phase; + Vec3 offset = side1.scale(Math.cos(angle) * radius).add(side2.scale(Math.sin(angle) * radius)); + startRing[i] = start.add(offset.scale(startScale)); + endRing[i] = end.add(offset); + } + float endV = scroll + (float) start.distanceTo(end) * uvLengthScale; + for (int i = 0; i < sections; i++) { + int next = (i + 1) % sections; + emitBeamQuad(vertices, pose, startRing[i], endRing[i], endRing[next], startRing[next], + i / (float) sections, scroll, next / (float) sections, endV, endAlpha); + } + } + + private static void emitBeamQuad(VertexConsumer vertices, org.joml.Matrix4f pose, + Vec3 a, Vec3 b, Vec3 c, Vec3 d, + float minU, float minV, float maxU, float maxV, int endAlpha) { + beamVertex(vertices, pose, a, minU, minV, 255); + beamVertex(vertices, pose, b, maxU, minV, endAlpha); + beamVertex(vertices, pose, c, maxU, maxV, endAlpha); + beamVertex(vertices, pose, d, minU, maxV, 255); + } + + private static void drawBeamImpact(VertexConsumer vertices, org.joml.Matrix4f pose, Vec3 center, Vec3 direction, + Vec3 side1, Vec3 side2, float size) { + drawBillboard(vertices, pose, center, side1.scale(size), side2.scale(size)); + for (int i = 0; i < 8; i++) { + double angle = (i + 0.5D) * Math.PI * 0.25D; + Vec3 radial = side1.scale(Math.cos(angle)).add(side2.scale(Math.sin(angle))).scale(size); + Vec3 back = direction.scale(size * (i % 2 == 0 ? 1.5D : 1.0D)); + emitQuad(vertices, pose, center.add(radial), center.subtract(radial), + center.subtract(radial).subtract(back), center.add(radial).subtract(back)); + } + } + + private static void drawBillboard(VertexConsumer vertices, org.joml.Matrix4f pose, Vec3 center, Vec3 left, Vec3 up) { + emitQuad(vertices, pose, center.add(left).add(up), center.subtract(left).add(up), + center.subtract(left).subtract(up), center.add(left).subtract(up)); + emitQuad(vertices, pose, center.subtract(left).add(up), center.add(left).add(up), + center.add(left).subtract(up), center.subtract(left).subtract(up)); + } + + private static void emitQuad(VertexConsumer vertices, org.joml.Matrix4f pose, Vec3 a, Vec3 b, Vec3 c, Vec3 d) { + vertex(vertices, pose, a, 0.0F, 0.0F); + vertex(vertices, pose, b, 1.0F, 0.0F); + vertex(vertices, pose, c, 1.0F, 1.0F); + vertex(vertices, pose, d, 0.0F, 1.0F); + } + + private static void vertex(VertexConsumer vertices, org.joml.Matrix4f pose, Vec3 pos, float u, float v) { + vertices.vertex(pose, (float) pos.x, (float) pos.y, (float) pos.z).color(1.0F, 1.0F, 1.0F, 1.0F).uv(u, v) + .overlayCoords(net.minecraft.client.renderer.texture.OverlayTexture.NO_OVERLAY).uv2(240).normal(0.0F, 1.0F, 0.0F).endVertex(); + } + + private static void beamVertex(VertexConsumer vertices, org.joml.Matrix4f pose, Vec3 pos, float u, float v, int alpha) { + vertices.vertex(pose, (float) pos.x, (float) pos.y, (float) pos.z).color(1.0F, 1.0F, 1.0F, alpha / 255.0F).uv(u, v) + .overlayCoords(net.minecraft.client.renderer.texture.OverlayTexture.NO_OVERLAY).uv2(240).normal(0.0F, -1.0F, 0.0F).endVertex(); + } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/SkulkingFrightRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/SkulkingFrightRenderer.java new file mode 100644 index 00000000..20adf2b2 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/SkulkingFrightRenderer.java @@ -0,0 +1,14 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.SkulkingFrightModel; +import com.craisinlord.antarchy.content.entity.SkulkingFrightEntity; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class SkulkingFrightRenderer extends GeoEntityRenderer { + public SkulkingFrightRenderer(EntityRendererProvider.Context context) { + super(context, new SkulkingFrightModel()); + this.shadowRadius = 0.5F; + this.withScale(0.85F); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/SpringbugRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/SpringbugRenderer.java new file mode 100644 index 00000000..ea1f4eaf --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/SpringbugRenderer.java @@ -0,0 +1,79 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.SpringbugModel; +import com.craisinlord.antarchy.content.entity.SpringbugEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.math.Axis; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.resources.ResourceLocation; +import org.jetbrains.annotations.Nullable; +import software.bernie.geckolib.cache.object.BakedGeoModel; +import software.bernie.geckolib.renderer.GeoEntityRenderer; +import software.bernie.geckolib.renderer.layer.GeoRenderLayer; +import software.bernie.geckolib.core.object.Color; + +public class SpringbugRenderer extends GeoEntityRenderer { + public SpringbugRenderer(EntityRendererProvider.Context context) { + super(context, new SpringbugModel()); + this.shadowRadius = 6.0F; + this.addRenderLayer(new SpringbugEmissiveLayer(this)); + } + + @Override + public RenderType getRenderType(SpringbugEntity animatable, ResourceLocation texture, @Nullable MultiBufferSource bufferSource, float partialTick) { + return animatable.isCamouflaged() ? RenderType.entityTranslucent(texture) : RenderType.entityCutoutNoCull(texture); + } + + @Override + public Color getRenderColor(SpringbugEntity animatable, float partialTick, int packedLight) { + int alpha = Math.max(10, Math.min(255, Math.round(animatable.getVisualAlpha(partialTick) * 255.0F))); + return Color.ofRGBA(255, 255, 255, alpha); + } + + @Override + public void preRender(PoseStack poseStack, SpringbugEntity animatable, BakedGeoModel model, @Nullable MultiBufferSource bufferSource, @Nullable VertexConsumer buffer, boolean isReRender, float partialTick, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) { + super.preRender(poseStack, animatable, model, bufferSource, buffer, isReRender, partialTick, packedLight, packedOverlay, red, green, blue, alpha); + this.shadowRadius = animatable.isCamouflaged() ? 1.0F : 6.0F; + + if (animatable.isClingingToCeiling()) { + poseStack.translate(0.0F, animatable.getBbHeight() + 0.05F, 0.0F); + poseStack.mulPose(Axis.ZP.rotationDegrees(180.0F)); + } + } + + private static final class SpringbugEmissiveLayer extends GeoRenderLayer { + private SpringbugEmissiveLayer(GeoEntityRenderer renderer) { + super(renderer); + } + + @Override + public void render(PoseStack poseStack, SpringbugEntity animatable, BakedGeoModel bakedModel, @Nullable RenderType renderType, + MultiBufferSource bufferSource, @Nullable VertexConsumer buffer, float partialTick, + int packedLight, int packedOverlay) { + RenderType emissiveType = animatable.isCamouflaged() + ? RenderType.entityTranslucent(SpringbugModel.EMISSIVE_TEXTURE) + : RenderType.eyes(SpringbugModel.EMISSIVE_TEXTURE); + int alpha = Math.max(10, Math.min(255, Math.round(animatable.getVisualAlpha(partialTick) * 255.0F))); + VertexConsumer emissiveBuffer = bufferSource.getBuffer(emissiveType); + this.getRenderer().reRender( + bakedModel, + poseStack, + bufferSource, + animatable, + emissiveType, + emissiveBuffer, + partialTick, + 0xF000F0, + OverlayTexture.NO_OVERLAY, + 1.0F, + 1.0F, + 1.0F, + alpha / 255.0F + ); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/StratosharkRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/StratosharkRenderer.java new file mode 100644 index 00000000..f427013e --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/StratosharkRenderer.java @@ -0,0 +1,59 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.StratosharkModel; +import com.craisinlord.antarchy.content.entity.stratoshark.StratosharkEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.resources.ResourceLocation; +import org.jetbrains.annotations.Nullable; +import software.bernie.geckolib.cache.object.BakedGeoModel; +import software.bernie.geckolib.renderer.GeoEntityRenderer; +import software.bernie.geckolib.renderer.layer.GeoRenderLayer; + +public class StratosharkRenderer extends GeoEntityRenderer { + private static final float SHADOW_RADIUS = 0.6F; + + public StratosharkRenderer(EntityRendererProvider.Context context) { + super(context, new StratosharkModel()); + this.shadowRadius = SHADOW_RADIUS; + this.addRenderLayer(new StratosharkEmissiveLayer(this)); + } + + @Override + public RenderType getRenderType(StratosharkEntity animatable, ResourceLocation texture, @Nullable MultiBufferSource bufferSource, float partialTick) { + return RenderType.entityCutoutNoCull(texture); + } + + private static final class StratosharkEmissiveLayer extends GeoRenderLayer { + private StratosharkEmissiveLayer(GeoEntityRenderer renderer) { + super(renderer); + } + + @Override + public void render(PoseStack poseStack, StratosharkEntity animatable, BakedGeoModel bakedModel, @Nullable RenderType renderType, + MultiBufferSource bufferSource, @Nullable VertexConsumer buffer, float partialTick, + int packedLight, int packedOverlay) { + RenderType emissiveType = RenderType.eyes(StratosharkModel.EMISSIVE_TEXTURE); + VertexConsumer emissiveBuffer = bufferSource.getBuffer(emissiveType); + this.getRenderer().reRender( + bakedModel, + poseStack, + bufferSource, + animatable, + emissiveType, + emissiveBuffer, + partialTick, + 0xF000F0, + OverlayTexture.NO_OVERLAY, + 1.0F, + 1.0F, + 1.0F, + 1.0F + ); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TemporalContractionAfterimageLayer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TemporalContractionAfterimageLayer.java index a5157b88..903b953d 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TemporalContractionAfterimageLayer.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TemporalContractionAfterimageLayer.java @@ -1,6 +1,6 @@ package com.craisinlord.antarchy.content.client.renderer; -import com.craisinlord.antarchy.content.client.ContractionAfterimages; +import com.craisinlord.anthology.time.client.ContractionAfterimages; import com.craisinlord.antarchy.content.effect.RoyalEffectHooks; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TemporalContractionGeoLayer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TemporalContractionGeoLayer.java index 79d899e1..1742ada1 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TemporalContractionGeoLayer.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TemporalContractionGeoLayer.java @@ -1,6 +1,6 @@ package com.craisinlord.antarchy.content.client.renderer; -import com.craisinlord.antarchy.content.client.ContractionAfterimages; +import com.craisinlord.anthology.time.client.ContractionAfterimages; import com.craisinlord.antarchy.content.effect.RoyalEffectHooks; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/ThoraxisUndersideSkyRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/ThoraxisUndersideSkyRenderer.java index ee473534..f03b7414 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/ThoraxisUndersideSkyRenderer.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/ThoraxisUndersideSkyRenderer.java @@ -7,12 +7,14 @@ import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.BufferBuilder; import com.mojang.blaze3d.vertex.BufferUploader; import com.mojang.blaze3d.vertex.DefaultVertexFormat; - import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.Tesselator; import com.mojang.blaze3d.vertex.VertexBuffer; import com.mojang.blaze3d.vertex.VertexFormat; import com.mojang.blaze3d.vertex.VertexSorting; +import com.mojang.math.Axis; +import java.util.ArrayList; +import java.util.List; import java.util.Random; import net.minecraft.client.Camera; import net.minecraft.client.Minecraft; @@ -22,25 +24,51 @@ import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; -import com.mojang.math.Axis; import net.minecraft.world.level.Level; import org.joml.Matrix4f; +import org.joml.Vector3f; public final class ThoraxisUndersideSkyRenderer { public static final ResourceKey THORAXIS = ResourceKey.create( Registries.DIMENSION, new ResourceLocation(Antarchy.MODID, "thoraxis") ); - private static final ResourceLocation SUN_TEXTURE = new ResourceLocation("minecraft", "textures/environment/sun.png"); - private static final ResourceLocation MOON_TEXTURE = new ResourceLocation("minecraft", "textures/environment/moon_phases.png"); + private static final ResourceLocation SUN_TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/environment/eye_moon.png"); + private static final ResourceLocation[] EYE_STAR_TEXTURES = { + new ResourceLocation(Antarchy.MODID, "textures/environment/eye_star1.png"), + new ResourceLocation(Antarchy.MODID, "textures/environment/eye_star2.png"), + new ResourceLocation(Antarchy.MODID, "textures/environment/eye_star3.png"), + new ResourceLocation(Antarchy.MODID, "textures/environment/eye_star4.png"), + new ResourceLocation(Antarchy.MODID, "textures/environment/eye_star5.png") + }; + private static final float[] EYE_STAR_SCALES = {1.0F, 0.86F, 0.72F, 0.58F, 0.46F}; + private static final double STAR_FOOTPRINT = Math.sqrt(2.0D); + private static final double STAR_GAP = 1.0D; private static final float SKY_RADIUS = 100.0F; private static final float BODY_SIZE = 32.0F; + private static final float SUN_RADIUS = 27.0F; + private static final float SUN_GLOW_RED = 1.0F; + private static final float SUN_GLOW_GREEN = 0x1F / 255.0F; + private static final float SUN_GLOW_BLUE = 0x18 / 255.0F; + private static final float SUN_GLOW_CENTER_ALPHA = 0.04F; + private static final float SUN_GLOW_PEAK_RADIUS = 15.5F; + private static final float SUN_GLOW_PEAK_ALPHA = 0.12F; + private static final float SUN_GLOW_KNEE_RADIUS = 19.0F; + private static final float SUN_GLOW_KNEE_ALPHA = 0.03F; + private static final float SUN_GLOW_RADIUS = 25.0F; + private static final float[][] EYE_SUNS = { + {259.2F, -10.0F, 245.5F}, + {200.0F, 20.0F, 30.0F}, + {150.0F, -35.0F, 200.0F}, + {120.0F, 40.0F, 300.0F}, + {215.0F, -60.0F, 120.0F} + }; private static final float SKY_RED = 0.015F; private static final float SKY_GREEN = 0.0F; private static final float SKY_BLUE = 0.035F; @org.jetbrains.annotations.Nullable - private static VertexBuffer redStarBuffer = null; + private static VertexBuffer[] eyeStarBuffers = null; private ThoraxisUndersideSkyRenderer() { } @@ -71,44 +99,80 @@ public final class ThoraxisUndersideSkyRenderer { VertexBuffer.unbind(); RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - float timeOfDay = 0.72F + partialTick * 0.0F; - renderCelestialBodies(poseStack.last().pose(), projectionMatrix, timeOfDay); - renderRedStars(poseStack.last().pose(), projectionMatrix); + renderEyeStars(poseStack.last().pose(), projectionMatrix); + renderEyeSuns(poseStack.last().pose(), projectionMatrix); RenderSystem.depthMask(true); } - private static void renderRedStars(Matrix4f modelViewMatrix, Matrix4f projectionMatrix) { - if (redStarBuffer == null) { - redStarBuffer = buildRedStarBuffer(); + private static void renderEyeStars(Matrix4f modelViewMatrix, Matrix4f projectionMatrix) { + if (eyeStarBuffers == null) { + eyeStarBuffers = buildEyeStarBuffers(); } RenderSystem.enableBlend(); RenderSystem.defaultBlendFunc(); - RenderSystem.setShaderColor(0.95F, 0.95F, 0.95F, 0.95F); - redStarBuffer.bind(); - redStarBuffer.drawWithShader(modelViewMatrix, projectionMatrix, GameRenderer.getPositionColorShader()); - VertexBuffer.unbind(); + RenderSystem.setShader(GameRenderer::getPositionTexShader); RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.backupProjectionMatrix(); + RenderSystem.setProjectionMatrix(projectionMatrix, VertexSorting.DISTANCE_TO_ORIGIN); + + for (int i = 0; i < eyeStarBuffers.length; i++) { + RenderSystem.setShaderTexture(0, EYE_STAR_TEXTURES[i]); + eyeStarBuffers[i].bind(); + eyeStarBuffers[i].drawWithShader(modelViewMatrix, projectionMatrix, GameRenderer.getPositionTexShader()); + VertexBuffer.unbind(); + } + RenderSystem.restoreProjectionMatrix(); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.defaultBlendFunc(); RenderSystem.disableBlend(); } - private static VertexBuffer buildRedStarBuffer() { + private static VertexBuffer[] buildEyeStarBuffers() { + Vector3f[] sunDirections = new Vector3f[EYE_SUNS.length]; + for (int sun = 0; sun < EYE_SUNS.length; sun++) { + sunDirections[sun] = bodyDirection(EYE_SUNS[sun][0], EYE_SUNS[sun][1]); + } + double sunLimit = Math.cos(bodyAngularRadius(SUN_RADIUS)); + List stars = new ArrayList<>(); Random random = new Random(552031L); - BufferBuilder builder = Tesselator.getInstance().getBuilder(); - builder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); - for (int i = 0; i < 1800; i++) { double x = random.nextFloat() * 2.0F - 1.0F; double y = random.nextFloat() * 2.0F - 1.0F; double z = random.nextFloat() * 2.0F - 1.0F; - double size = 0.13F + random.nextFloat() * 0.12F; + int textureIndex = i % EYE_STAR_TEXTURES.length; + double size = (0.52F + random.nextFloat() * 1.24F) * EYE_STAR_SCALES[textureIndex]; + double rot = random.nextDouble() * Math.PI * 2.0D; double lenSq = x * x + y * y + z * z; - if (lenSq < 1.0D && lenSq > 0.01D) { - double len = 1.0D / Math.sqrt(lenSq); - x *= len; - y *= len; - z *= len; + if (lenSq >= 1.0D || lenSq <= 0.01D) { + continue; + } + + double len = 1.0D / Math.sqrt(lenSq); + x *= len; + y *= len; + z *= len; + if (behindEyeSun(sunDirections, sunLimit, x, y, z) || crowdsExistingStar(stars, x, y, z, size)) { + continue; + } + stars.add(new double[]{x, y, z, size, rot, textureIndex}); + } + + VertexBuffer[] buffers = new VertexBuffer[EYE_STAR_TEXTURES.length]; + for (int textureIndex = 0; textureIndex < EYE_STAR_TEXTURES.length; textureIndex++) { + BufferBuilder builder = Tesselator.getInstance().getBuilder(); + builder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX); + + for (double[] star : stars) { + if ((int) star[5] != textureIndex) { + continue; + } + double x = star[0]; + double y = star[1]; + double z = star[2]; + double size = star[3]; + double rot = star[4]; double sx = x * 100.0D; double sy = y * 100.0D; double sz = z * 100.0D; @@ -118,12 +182,8 @@ public final class ThoraxisUndersideSkyRenderer { double pitch = Math.atan2(Math.sqrt(x * x + z * z), y); double sinPitch = Math.sin(pitch); double cosPitch = Math.cos(pitch); - double rot = random.nextDouble() * Math.PI * 2.0D; double sinRot = Math.sin(rot); double cosRot = Math.cos(rot); - float red = 0.75F + random.nextFloat() * 0.25F; - float green = 0.02F + random.nextFloat() * 0.05F; - float blue = 0.04F + random.nextFloat() * 0.08F; for (int j = 0; j < 4; j++) { double u = (j & 2) - 1; @@ -134,31 +194,64 @@ public final class ThoraxisUndersideSkyRenderer { double qy = -px * cosPitch; double rx = qy * sinYaw - py * cosYaw; double ry = py * sinYaw + qy * cosYaw; + float quadU = (j == 0 || j == 1) ? 0.0F : 1.0F; + float quadV = (j == 0 || j == 3) ? 0.0F : 1.0F; builder.vertex((float) (sx + rx * size), (float) (sy + qx * size), (float) (sz + ry * size)) - .color(red, green, blue, 1.0F).endVertex(); + .uv(quadU, quadV).endVertex(); } } + + BufferBuilder.RenderedBuffer mesh = builder.end(); + buffers[textureIndex] = new VertexBuffer(VertexBuffer.Usage.STATIC); + buffers[textureIndex].bind(); + buffers[textureIndex].upload(mesh); + VertexBuffer.unbind(); } - - BufferBuilder.RenderedBuffer mesh = builder.end(); - VertexBuffer buffer = new VertexBuffer(VertexBuffer.Usage.STATIC); - buffer.bind(); - buffer.upload(mesh); - VertexBuffer.unbind(); - return buffer; + return buffers; } - private static void renderCelestialBodies(Matrix4f modelViewMatrix, Matrix4f projectionMatrix, float timeOfDay) { - float t = timeOfDay * 360.0F; - renderBodyGlow(modelViewMatrix, projectionMatrix, t, -10.0F, 0xFF1F18, 86.0F); - renderTexturedBody(modelViewMatrix, projectionMatrix, t, -10.0F, 42.0F, 0xFF1F18, SUN_TEXTURE, false, 0, t * 0.6F); - - float moonOrbit = t + 180.0F; - renderBodyGlow(modelViewMatrix, projectionMatrix, moonOrbit, 24.0F, 0x8F30FF, 76.0F); - renderTexturedBody(modelViewMatrix, projectionMatrix, moonOrbit, 24.0F, 26.0F, 0x8F30FF, MOON_TEXTURE, true, 0, -t * 0.35F); + private static boolean behindEyeSun(Vector3f[] sunDirections, double limit, double x, double y, double z) { + for (Vector3f direction : sunDirections) { + if (x * direction.x + y * direction.y + z * direction.z > limit) { + return true; + } + } + return false; } - private static void renderBodyGlow(Matrix4f modelViewMatrix, Matrix4f projectionMatrix, float orbitDegrees, float yawDegrees, int rgb, float glowRadius) { + private static boolean crowdsExistingStar(List stars, double x, double y, double z, double size) { + for (double[] other : stars) { + double dx = (x - other[0]) * SKY_RADIUS; + double dy = (y - other[1]) * SKY_RADIUS; + double dz = (z - other[2]) * SKY_RADIUS; + double minDistance = (size + other[3]) * STAR_FOOTPRINT + STAR_GAP; + if (dx * dx + dy * dy + dz * dz < minDistance * minDistance) { + return true; + } + } + return false; + } + + private static Vector3f bodyDirection(float orbitDegrees, float yawDegrees) { + return new Matrix4f() + .rotateX((float) Math.toRadians(orbitDegrees)) + .rotateZ((float) Math.toRadians(yawDegrees)) + .transformDirection(new Vector3f(0.0F, 1.0F, 0.0F)) + .normalize(); + } + + private static double bodyAngularRadius(float radius) { + return Math.atan(BODY_SIZE * 0.5F * (radius / 22.0F) / SKY_RADIUS) + 0.02D; + } + + private static void renderEyeSuns(Matrix4f modelViewMatrix, Matrix4f projectionMatrix) { + for (float[] sun : EYE_SUNS) { + renderSunGlow(modelViewMatrix, projectionMatrix, sun[0], sun[1]); + renderSunBody(modelViewMatrix, projectionMatrix, sun[0], sun[1], sun[2]); + } + } + + private static void renderSunGlow(Matrix4f modelViewMatrix, Matrix4f projectionMatrix, float orbitDegrees, float yawDegrees) { RenderSystem.enableBlend(); RenderSystem.defaultBlendFunc(); RenderSystem.disableCull(); @@ -168,22 +261,14 @@ public final class ThoraxisUndersideSkyRenderer { PoseStack modelViewStack = RenderSystem.getModelViewStack(); modelViewStack.pushPose(); - modelViewStack.mulPoseMatrix(modelViewMatrix); + modelViewStack.last().pose().set(modelViewMatrix); modelViewStack.mulPose(Axis.XP.rotationDegrees(orbitDegrees)); modelViewStack.mulPose(Axis.ZP.rotationDegrees(yawDegrees)); RenderSystem.applyModelViewMatrix(); - float red = ((rgb >> 16) & 0xFF) / 255.0F; - float green = ((rgb >> 8) & 0xFF) / 255.0F; - float blue = (rgb & 0xFF) / 255.0F; - BufferBuilder buffer = Tesselator.getInstance().getBuilder(); - buffer.begin(VertexFormat.Mode.TRIANGLE_FAN, DefaultVertexFormat.POSITION_COLOR); - buffer.vertex(0.0F, SKY_RADIUS, 0.0F).color(red, green, blue, 0.55F).endVertex(); - for (int i = 0; i <= 24; i++) { - float angle = i * Mth.TWO_PI / 24.0F; - buffer.vertex(Mth.sin(angle) * glowRadius, SKY_RADIUS, Mth.cos(angle) * glowRadius).color(red, green, blue, 0.0F).endVertex(); - } - BufferUploader.drawWithShader(buffer.end()); + drawGlowBand(0.0F, SUN_GLOW_CENTER_ALPHA, SUN_GLOW_PEAK_RADIUS, SUN_GLOW_PEAK_ALPHA); + drawGlowBand(SUN_GLOW_PEAK_RADIUS, SUN_GLOW_PEAK_ALPHA, SUN_GLOW_KNEE_RADIUS, SUN_GLOW_KNEE_ALPHA); + drawGlowBand(SUN_GLOW_KNEE_RADIUS, SUN_GLOW_KNEE_ALPHA, SUN_GLOW_RADIUS, 0.0F); modelViewStack.popPose(); RenderSystem.applyModelViewMatrix(); @@ -192,18 +277,20 @@ public final class ThoraxisUndersideSkyRenderer { RenderSystem.disableBlend(); } - private static void renderTexturedBody( - Matrix4f modelViewMatrix, - Matrix4f projectionMatrix, - float orbitDegrees, - float yawDegrees, - float radius, - int rgb, - ResourceLocation texture, - boolean usePhaseSheet, - int phaseIndex, - float selfRotationDegrees - ) { + private static void drawGlowBand(float fromRadius, float fromAlpha, float toRadius, float toAlpha) { + BufferBuilder buffer = Tesselator.getInstance().getBuilder(); + buffer.begin(VertexFormat.Mode.TRIANGLE_STRIP, DefaultVertexFormat.POSITION_COLOR); + for (int i = 0; i <= 32; i++) { + float angle = i * Mth.TWO_PI / 32.0F; + float sin = Mth.sin(angle); + float cos = Mth.cos(angle); + buffer.vertex(sin * fromRadius, SKY_RADIUS, cos * fromRadius).color(SUN_GLOW_RED, SUN_GLOW_GREEN, SUN_GLOW_BLUE, fromAlpha).endVertex(); + buffer.vertex(sin * toRadius, SKY_RADIUS, cos * toRadius).color(SUN_GLOW_RED, SUN_GLOW_GREEN, SUN_GLOW_BLUE, toAlpha).endVertex(); + } + BufferUploader.drawWithShader(buffer.end()); + } + + private static void renderSunBody(Matrix4f modelViewMatrix, Matrix4f projectionMatrix, float orbitDegrees, float yawDegrees, float selfRotationDegrees) { RenderSystem.enableBlend(); RenderSystem.blendFuncSeparate( GlStateManager.SourceFactor.ONE, @@ -212,46 +299,32 @@ public final class ThoraxisUndersideSkyRenderer { GlStateManager.DestFactor.ZERO ); RenderSystem.disableCull(); - RenderSystem.setShaderColor(((rgb >> 16) & 0xFF) / 255.0F, ((rgb >> 8) & 0xFF) / 255.0F, (rgb & 0xFF) / 255.0F, 1.0F); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderTexture(0, texture); + RenderSystem.setShaderTexture(0, SUN_TEXTURE); RenderSystem.backupProjectionMatrix(); RenderSystem.setProjectionMatrix(projectionMatrix, VertexSorting.DISTANCE_TO_ORIGIN); PoseStack modelViewStack = RenderSystem.getModelViewStack(); modelViewStack.pushPose(); - modelViewStack.mulPoseMatrix(modelViewMatrix); + modelViewStack.last().pose().set(modelViewMatrix); modelViewStack.mulPose(Axis.XP.rotationDegrees(orbitDegrees)); modelViewStack.mulPose(Axis.ZP.rotationDegrees(yawDegrees)); modelViewStack.mulPose(Axis.YP.rotationDegrees(selfRotationDegrees)); RenderSystem.applyModelViewMatrix(); - float halfSize = BODY_SIZE * 0.5F * (radius / 22.0F); - float minU = 0.0F; - float maxU = 1.0F; - float minV = 0.0F; - float maxV = 1.0F; - if (usePhaseSheet) { - int phaseX = phaseIndex % 4; - int phaseY = phaseIndex / 4; - minU = phaseX / 4.0F; - maxU = (phaseX + 1) / 4.0F; - minV = phaseY / 2.0F; - maxV = (phaseY + 1) / 2.0F; - } - + float halfSize = BODY_SIZE * 0.5F * (SUN_RADIUS / 22.0F); BufferBuilder buffer = Tesselator.getInstance().getBuilder(); buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX); - buffer.vertex(-halfSize, SKY_RADIUS, -halfSize).uv(minU, minV).endVertex(); - buffer.vertex(-halfSize, SKY_RADIUS, halfSize).uv(minU, maxV).endVertex(); - buffer.vertex(halfSize, SKY_RADIUS, halfSize).uv(maxU, maxV).endVertex(); - buffer.vertex(halfSize, SKY_RADIUS, -halfSize).uv(maxU, minV).endVertex(); + buffer.vertex(-halfSize, SKY_RADIUS, -halfSize).uv(0.0F, 0.0F).endVertex(); + buffer.vertex(-halfSize, SKY_RADIUS, halfSize).uv(0.0F, 1.0F).endVertex(); + buffer.vertex(halfSize, SKY_RADIUS, halfSize).uv(1.0F, 1.0F).endVertex(); + buffer.vertex(halfSize, SKY_RADIUS, -halfSize).uv(1.0F, 0.0F).endVertex(); BufferUploader.drawWithShader(buffer.end()); modelViewStack.popPose(); RenderSystem.applyModelViewMatrix(); RenderSystem.restoreProjectionMatrix(); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); RenderSystem.defaultBlendFunc(); RenderSystem.enableCull(); RenderSystem.disableBlend(); diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TigerEyeCamouflageTextureResolver.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TigerEyeCamouflageTextureResolver.java index 517f5898..7764a483 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TigerEyeCamouflageTextureResolver.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TigerEyeCamouflageTextureResolver.java @@ -22,9 +22,6 @@ import net.minecraft.world.level.block.state.BlockState; public final class TigerEyeCamouflageTextureResolver { public record ResolvedTexture(ResourceLocation texture, int argbTint) {} - // PlayerModel's skin layout is always laid out on a 64x64 canvas, regardless of the - // block texture's actual size, so the generated overlay texture must match that grid - // for every body part to sample the block texture at the same pixel density. private static final int SKIN_SIZE = 64; private static final Map CACHE = new ConcurrentHashMap<>(); private static final ResourceLocation FALLBACK_TEXTURE = new ResourceLocation("textures/block/stone.png"); @@ -102,7 +99,6 @@ public final class TigerEyeCamouflageTextureResolver { try (NativeImage sourceImage = NativeImage.read(stream)) { int tileWidth = sourceImage.getWidth(); - // Animated block textures stack frames vertically below a square first frame. int tileHeight = tileWidth <= sourceImage.getHeight() ? tileWidth : sourceImage.getHeight(); NativeImage canvas = new NativeImage(SKIN_SIZE, SKIN_SIZE, false); diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TimeDilationFieldRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TimeDilationFieldRenderer.java deleted file mode 100644 index 3a825108..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TimeDilationFieldRenderer.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.craisinlord.antarchy.content.client.renderer; - -import com.craisinlord.antarchy.content.time.TimeDilationFieldEntity; -import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.entity.EntityRenderer; -import net.minecraft.client.renderer.entity.EntityRendererProvider; -import net.minecraft.resources.ResourceLocation; - -public class TimeDilationFieldRenderer extends EntityRenderer { - public TimeDilationFieldRenderer(EntityRendererProvider.Context context) { - super(context); - this.shadowRadius = 0.0F; - } - - @Override - public void render(TimeDilationFieldEntity entity, float entityYaw, float partialTick, PoseStack poseStack, - MultiBufferSource bufferSource, int packedLight) { - } - - @Override - public ResourceLocation getTextureLocation(TimeDilationFieldEntity entity) { - return new ResourceLocation("minecraft", "textures/misc/unknown_pack.png"); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TriffidRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TriffidRenderer.java deleted file mode 100644 index 423eeb70..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TriffidRenderer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.craisinlord.antarchy.content.client.renderer; - -import com.craisinlord.antarchy.content.client.model.TriffidModel; -import com.craisinlord.antarchy.content.entity.TriffidEntity; -import net.minecraft.client.renderer.entity.EntityRendererProvider; -import software.bernie.geckolib.renderer.GeoEntityRenderer; - -public class TriffidRenderer extends GeoEntityRenderer { - public TriffidRenderer(EntityRendererProvider.Context context) { - super(context, new TriffidModel()); - this.shadowRadius = 1.4F; - } - - @Override - protected float getDeathMaxRotation(TriffidEntity animatable) { - return 0.0F; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/UnderVaultRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/UnderVaultRenderer.java index a6c15660..678590b7 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/UnderVaultRenderer.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/UnderVaultRenderer.java @@ -1,34 +1,105 @@ package com.craisinlord.antarchy.content.client.renderer; import com.craisinlord.antarchy.content.block.entity.UnderVaultBlockEntity; +import com.craisinlord.antarchy.content.block.entity.undervault.UnderVaultClientData; +import com.craisinlord.antarchy.content.block.entity.undervault.UnderVaultData; +import com.craisinlord.antarchy.content.block.entity.undervault.UnderVaultLogic; import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.Minecraft; +import com.mojang.math.Axis; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; +import net.minecraft.client.renderer.entity.ItemRenderer; import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; -/** Compact 1.20 vault display: a rotating key replaces the vanilla vault core. */ public final class UnderVaultRenderer implements BlockEntityRenderer { - public UnderVaultRenderer() { - } + private final ItemRenderer itemRenderer; + private final RandomSource random = RandomSource.create(); - public UnderVaultRenderer(BlockEntityRendererProvider.Context ignored) { + public UnderVaultRenderer(BlockEntityRendererProvider.Context context) { + this.itemRenderer = context.getItemRenderer(); } @Override - public void render(UnderVaultBlockEntity blockEntity, float partialTick, PoseStack poseStack, - MultiBufferSource buffer, int packedLight, int packedOverlay) { + public void render(UnderVaultBlockEntity blockEntity, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, int packedLight, int packedOverlay) { + UnderVaultData vaultData = blockEntity.getVaultData(); + if (!UnderVaultLogic.Client.shouldDisplayActiveEffects(vaultData.getSharedData())) { + return; + } + Level level = vaultData.getLevel(); + if (level == null) { + return; + } + ItemStack stack = vaultData.getSharedData().getDisplayItem(); + if (stack.isEmpty()) { + return; + } + this.random.setSeed(seedForItemStack(stack)); + UnderVaultClientData clientData = vaultData.getClientData(); poseStack.pushPose(); - poseStack.translate(0.5D, 0.55D, 0.5D); - poseStack.mulPose(com.mojang.math.Axis.YP.rotationDegrees((blockEntity.getLevel().getGameTime() + partialTick) * 2.0F)); - poseStack.scale(0.65F, 0.65F, 0.65F); - Minecraft.getInstance().getItemRenderer().renderStatic(new ItemStack(Items.TRIPWIRE_HOOK), - ItemDisplayContext.FIXED, packedLight, OverlayTexture.NO_OVERLAY, poseStack, buffer, - blockEntity.getLevel(), 0); + poseStack.translate(0.5F, 0.4F, 0.5F); + poseStack.mulPose(Axis.YP.rotationDegrees(Mth.rotLerp(partialTick, clientData.previousSpin(), clientData.currentSpin()))); + renderMultipleFromCount(this.itemRenderer, poseStack, bufferSource, packedLight, stack, this.random, level); poseStack.popPose(); } + + private static int seedForItemStack(ItemStack stack) { + return stack.isEmpty() ? 187 : Item.getId(stack.getItem()) + stack.getDamageValue(); + } + + private static int renderedAmount(int count) { + if (count <= 1) { + return 1; + } + if (count <= 16) { + return 2; + } + if (count <= 32) { + return 3; + } + return count <= 48 ? 4 : 5; + } + + private static void renderMultipleFromCount(ItemRenderer itemRenderer, PoseStack poseStack, MultiBufferSource bufferSource, int packedLight, + ItemStack stack, RandomSource random, Level level) { + BakedModel model = itemRenderer.getModel(stack, level, null, 0); + boolean gui3d = model.isGui3d(); + int amount = renderedAmount(stack.getCount()); + float scaleX = model.getTransforms().ground.scale.x(); + float scaleY = model.getTransforms().ground.scale.y(); + float scaleZ = model.getTransforms().ground.scale.z(); + if (!gui3d) { + float offsetX = -0.0F * (amount - 1) * 0.5F * scaleX; + float offsetY = -0.0F * (amount - 1) * 0.5F * scaleY; + float offsetZ = -0.09375F * (amount - 1) * 0.5F * scaleZ; + poseStack.translate(offsetX, offsetY, offsetZ); + } + for (int i = 0; i < amount; i++) { + poseStack.pushPose(); + if (i > 0) { + if (gui3d) { + float x = (random.nextFloat() * 2.0F - 1.0F) * 0.15F; + float y = (random.nextFloat() * 2.0F - 1.0F) * 0.15F; + float z = (random.nextFloat() * 2.0F - 1.0F) * 0.15F; + poseStack.translate(x, y, z); + } else { + float x = (random.nextFloat() * 2.0F - 1.0F) * 0.15F * 0.5F; + float y = (random.nextFloat() * 2.0F - 1.0F) * 0.15F * 0.5F; + poseStack.translate(x, y, 0.0F); + } + } + itemRenderer.render(stack, ItemDisplayContext.GROUND, false, poseStack, bufferSource, packedLight, OverlayTexture.NO_OVERLAY, model); + poseStack.popPose(); + if (!gui3d) { + poseStack.translate(0.0F * scaleX, 0.0F * scaleY, 0.09375F * scaleZ); + } + } + } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/UndertrialSpawnerRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/UndertrialSpawnerRenderer.java index 4b710d9d..ccabe5a4 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/UndertrialSpawnerRenderer.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/UndertrialSpawnerRenderer.java @@ -1,38 +1,56 @@ package com.craisinlord.antarchy.content.client.renderer; import com.craisinlord.antarchy.content.block.entity.UndertrialSpawnerBlockEntity; +import com.craisinlord.antarchy.content.block.entity.undertrial.UndertrialSpawner; +import com.craisinlord.antarchy.content.block.entity.undertrial.UndertrialSpawnerData; import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Axis; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; import net.minecraft.client.renderer.entity.EntityRenderDispatcher; +import net.minecraft.util.Mth; import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.Level; -/** 1.20 visual equivalent for the 1.21 trial-spawner display entity. */ public final class UndertrialSpawnerRenderer implements BlockEntityRenderer { - private final EntityRenderDispatcher dispatcher; + private final EntityRenderDispatcher entityRenderer; public UndertrialSpawnerRenderer(BlockEntityRendererProvider.Context context) { - this.dispatcher = context.getEntityRenderer(); + this.entityRenderer = context.getEntityRenderer(); } @Override public void render(UndertrialSpawnerBlockEntity blockEntity, float partialTick, PoseStack poseStack, MultiBufferSource buffer, int packedLight, int packedOverlay) { Level level = blockEntity.getLevel(); - if (level == null) return; - Entity display = EntityType.ZOMBIE.create(level); - if (display == null) return; - display.setPos(blockEntity.getBlockPos().getX() + 0.5D, - blockEntity.getBlockPos().getY() + 0.5D, - blockEntity.getBlockPos().getZ() + 0.5D); - float spin = (level.getGameTime() + partialTick) * 2.0F; + if (level == null) { + return; + } + UndertrialSpawner spawner = blockEntity.getTrialSpawner(); + UndertrialSpawnerData data = spawner.getData(); + Entity entity = data.getOrCreateDisplayEntity(spawner, level, spawner.getState()); + if (entity != null) { + renderEntityInSpawner(partialTick, poseStack, buffer, packedLight, entity, + entityRenderer, blockEntity.getClientSpin(partialTick), blockEntity.getClientSpin(partialTick)); + } + } + + public static void renderEntityInSpawner(float partialTick, PoseStack poseStack, MultiBufferSource buffer, int packedLight, + Entity entity, EntityRenderDispatcher dispatcher, double oldSpin, double spin) { poseStack.pushPose(); - poseStack.translate(0.0D, -0.5D, 0.0D); - dispatcher.render(display, 0.0D, 0.0D, 0.0D, spin, partialTick, - poseStack, buffer, packedLight); + poseStack.translate(0.5F, 0.0F, 0.5F); + float scale = 0.53125F; + float size = Math.max(entity.getBbWidth(), entity.getBbHeight()); + if (size > 1.0D) { + scale /= size; + } + poseStack.translate(0.0F, 0.4F, 0.0F); + poseStack.mulPose(Axis.YP.rotationDegrees((float) Mth.lerp(partialTick, oldSpin, spin) * 10.0F)); + poseStack.translate(0.0F, -0.2F, 0.0F); + poseStack.mulPose(Axis.XP.rotationDegrees(-30.0F)); + poseStack.scale(scale, scale, scale); + dispatcher.render(entity, 0.0D, 0.0D, 0.0D, 0.0F, partialTick, poseStack, buffer, packedLight); poseStack.popPose(); } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/WindVortexRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/WindVortexRenderer.java index a90d33a6..4c836e63 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/WindVortexRenderer.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/WindVortexRenderer.java @@ -94,9 +94,6 @@ public class WindVortexRenderer extends EntityRenderer { addVertex(consumer, pose, end.x + offset.x, end.y + offset.y, end.z + offset.z, red, green, blue, alpha); addVertex(consumer, pose, start.x + offset.x, start.y + offset.y, start.z + offset.z, red, green, blue, alpha); - // The lightning render type can cull one winding from some camera - // angles. Emit the opposite winding as well so every ribbon is - // visible from both sides. addVertex(consumer, pose, start.x + offset.x, start.y + offset.y, start.z + offset.z, red, green, blue, alpha); addVertex(consumer, pose, end.x + offset.x, end.y + offset.y, end.z + offset.z, red, green, blue, alpha); addVertex(consumer, pose, end.x - offset.x, end.y - offset.y, end.z - offset.z, red, green, blue, alpha); diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/glimmer/GlimmerRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/glimmer/GlimmerRenderer.java index 006fe20a..f594f9bb 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/glimmer/GlimmerRenderer.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/glimmer/GlimmerRenderer.java @@ -48,9 +48,6 @@ public class GlimmerRenderer extends GeoEntityRenderer { float growth = entity.getGrowthScale(); poseStack.scale(growth, growth, growth); - // Compute body yaw directly from the entity's own tracked fields rather than trusting - // the ambient entityYaw parameter, so the body pose and the head-offset math below stay - // self-consistent. float bodyYaw = Mth.rotLerp(partialTick, entity.yBodyRotO, entity.yBodyRot); poseStack.mulPose(Axis.YP.rotationDegrees(180.0F - bodyYaw)); poseStack.scale(-1.0F, -1.0F, 1.0F); diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/screen/GiantFryingPanScreen.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/screen/GiantFryingPanScreen.java new file mode 100644 index 00000000..9518b215 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/screen/GiantFryingPanScreen.java @@ -0,0 +1,43 @@ +package com.craisinlord.antarchy.content.client.screen; + +import com.craisinlord.antarchy.content.item.GiantFryingPanStorage; +import com.craisinlord.antarchy.content.menu.GiantFryingPanMenu; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Inventory; + +public final class GiantFryingPanScreen extends AbstractContainerScreen { + private static final ResourceLocation CONTAINER_TEXTURE = new ResourceLocation("textures/gui/container/generic_54.png"); + private static final int PAN_SECTION_HEIGHT = 35; + private static final int INVENTORY_SECTION_HEIGHT = 96; + private static final int PROGRESS_COLOR = 0xC0FF8A2A; + + public GiantFryingPanScreen(GiantFryingPanMenu menu, Inventory inventory, Component title) { + super(menu, inventory, title); + this.imageWidth = 176; + this.imageHeight = 132; + this.inventoryLabelY = this.imageHeight - 94; + } + + @Override + public void render(GuiGraphics graphics, int mouseX, int mouseY, float partialTick) { + super.render(graphics, mouseX, mouseY, partialTick); + this.renderTooltip(graphics, mouseX, mouseY); + } + + @Override + protected void renderBg(GuiGraphics graphics, float partialTick, int mouseX, int mouseY) { + graphics.blit(CONTAINER_TEXTURE, this.leftPos, this.topPos, 0, 0, this.imageWidth, PAN_SECTION_HEIGHT); + graphics.blit(CONTAINER_TEXTURE, this.leftPos, this.topPos + PAN_SECTION_HEIGHT, 0, 126, this.imageWidth, INVENTORY_SECTION_HEIGHT); + GiantFryingPanStorage storage = this.menu.storage(); + for (int slot = 0; slot < GiantFryingPanStorage.SLOT_COUNT; slot++) { + float progress = storage.cookProgress(slot); + if (progress <= 0.0F) continue; + int x = this.leftPos + 8 + slot * 18; + int y = this.topPos + GiantFryingPanMenu.PAN_ROW_Y + 16; + graphics.fill(x, y, x + Math.round(16 * progress), y + 1, PROGRESS_COLOR); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/command/GravityCommand.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/command/GravityCommand.java deleted file mode 100644 index df009da1..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/command/GravityCommand.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.craisinlord.antarchy.content.command; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityTransition; -import com.mojang.brigadier.CommandDispatcher; -import com.mojang.brigadier.context.CommandContext; -import java.util.Collection; -import net.minecraft.commands.CommandSourceStack; -import net.minecraft.commands.Commands; -import net.minecraft.commands.arguments.EntityArgument; -import net.minecraft.network.chat.Component; -import net.minecraft.world.entity.Entity; - -public final class GravityCommand { - private static final AntarchyGravityTransition COMMAND_TRANSITION = new AntarchyGravityTransition(12); - - private GravityCommand() { - } - - public static void register(CommandDispatcher dispatcher) { - dispatcher.register( - Commands.literal("gravity") - .requires(source -> source.hasPermission(2)) - .then(Commands.literal("get") - .then(Commands.argument("targets", EntityArgument.entities()) - .executes(context -> getGravity(context, EntityArgument.getEntities(context, "targets"))))) - .then(Commands.literal("set") - .then(Commands.argument("targets", EntityArgument.entities()) - .then(Commands.literal("down") - .executes(context -> setGravity(context, EntityArgument.getEntities(context, "targets"), AntarchyGravityDirection.DOWN))) - .then(Commands.literal("up") - .executes(context -> setGravity(context, EntityArgument.getEntities(context, "targets"), AntarchyGravityDirection.UP))))) - .then(Commands.literal("clear") - .then(Commands.argument("targets", EntityArgument.entities()) - .executes(context -> clearGravity(context, EntityArgument.getEntities(context, "targets"))))) - ); - } - - private static int getGravity(CommandContext context, Collection targets) { - for (Entity target : targets) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(target); - context.getSource().sendSuccess( - () -> Component.literal(target.getName().getString() + ": " + direction.getSerializedName()), - false - ); - } - - return targets.size(); - } - - private static int setGravity(CommandContext context, Collection targets, AntarchyGravityDirection direction) { - for (Entity target : targets) { - AntarchyGravityApi.setGravityDirection(target, direction, COMMAND_TRANSITION); - } - - context.getSource().sendSuccess( - () -> Component.literal("Set gravity " + direction.getSerializedName() + " for " + targets.size() + " target(s)"), - true - ); - return targets.size(); - } - - private static int clearGravity(CommandContext context, Collection targets) { - for (Entity target : targets) { - AntarchyGravityApi.setGravityDirection(target, AntarchyGravityDirection.DOWN, COMMAND_TRANSITION); - } - - context.getSource().sendSuccess( - () -> Component.literal("Reset gravity for " + targets.size() + " target(s)"), - true - ); - return targets.size(); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/command/PortalGunCommand.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/command/PortalGunCommand.java new file mode 100644 index 00000000..38112c5b --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/command/PortalGunCommand.java @@ -0,0 +1,49 @@ +package com.craisinlord.antarchy.content.command; + +import com.craisinlord.antarchy.content.portalgun.PortalGunSavedData; +import com.mojang.authlib.GameProfile; +import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.context.CommandContext; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.Commands; +import net.minecraft.commands.arguments.GameProfileArgument; +import net.minecraft.network.chat.Component; + +public final class PortalGunCommand { + private PortalGunCommand() { + } + + public static void register(CommandDispatcher dispatcher) { + dispatcher.register( + Commands.literal("portalgun") + .requires(source -> source.hasPermission(2)) + .then(Commands.literal("clear") + .then(Commands.literal("all") + .executes(PortalGunCommand::clearAll)) + .then(Commands.argument("owners", GameProfileArgument.gameProfile()) + .executes(PortalGunCommand::clearOwners))) + ); + } + + private static int clearAll(CommandContext context) { + int cleared = PortalGunSavedData.clearEverything(context.getSource().getServer()); + context.getSource().sendSuccess(() -> Component.translatable("commands.antarchy.portalgun.clear.all", cleared), true); + return cleared; + } + + private static int clearOwners(CommandContext context) throws CommandSyntaxException { + Collection profiles = GameProfileArgument.getGameProfiles(context, "owners"); + Set ownerIds = new HashSet<>(); + for (GameProfile profile : profiles) { + ownerIds.add(profile.getId()); + } + int cleared = PortalGunSavedData.clearOwnedBy(context.getSource().getServer(), ownerIds); + context.getSource().sendSuccess(() -> Component.translatable("commands.antarchy.portalgun.clear.owners", cleared, profiles.size()), true); + return cleared; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/command/QueenLocateCommand.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/command/QueenLocateCommand.java index f3a05fba..f00c6890 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/command/QueenLocateCommand.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/command/QueenLocateCommand.java @@ -3,6 +3,7 @@ package com.craisinlord.antarchy.content.command; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.block.entity.QueenTrailSpawnMarkerBlockEntity; import com.craisinlord.antarchy.content.worldgen.thoraxis.QueenTrailGrid; +import com.craisinlord.antarchy.content.entity.royal.QueenEntity; import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.context.CommandContext; import java.util.ArrayList; @@ -23,54 +24,107 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; public final class QueenLocateCommand { - private static final ResourceKey THORAXIS = ResourceKey.create(Registries.DIMENSION, - new ResourceLocation(Antarchy.MODID, "thoraxis")); - private QueenLocateCommand() {} + private static final ResourceKey THORAXIS = ResourceKey.create( + Registries.DIMENSION, + new ResourceLocation(Antarchy.MODID, "thoraxis") + ); + private static final int SEARCH_RADIUS_CELLS = 8; + private static final int MAX_SITE_CHECKS = 64; + + private QueenLocateCommand() { + } public static void register(CommandDispatcher dispatcher) { - dispatcher.register(Commands.literal("locatequeen").requires(source -> source.hasPermission(2)) + dispatcher.register(Commands.literal("locatequeen") + .requires(source -> source.hasPermission(2)) .executes(QueenLocateCommand::locate)); } private static int locate(CommandContext context) { CommandSourceStack source = context.getSource(); - ServerLevel level = source.getServer().getLevel(THORAXIS); - if (level == null) { source.sendFailure(Component.literal("Thoraxis is not available.")); return 0; } - int ox = Mth.floor(source.getPosition().x), oz = Mth.floor(source.getPosition().z); - int cx = Math.floorDiv(ox, QueenTrailGrid.SPACING), cz = Math.floorDiv(oz, QueenTrailGrid.SPACING); - List sites = new ArrayList<>(); - for (int x = cx - 8; x <= cx + 8; x++) for (int z = cz - 8; z <= cz + 8; z++) sites.add(QueenTrailGrid.site(level.getSeed(), x, z)); - sites.sort(Comparator.comparingDouble(site -> distanceSquared(ox, oz, site))); - for (int i = 0; i < Math.min(64, sites.size()); i++) { - QueenTrailGrid.Site site = sites.get(i); - level.getChunk(site.terminalX() >> 4, site.terminalZ() >> 4); - QueenTrailSpawnMarkerBlockEntity marker = findMarker(level, site); - if (marker == null) continue; + ServerLevel thoraxis = source.getServer().getLevel(THORAXIS); + if (thoraxis == null) { + source.sendFailure(Component.literal("Thoraxis is not available.")); + return 0; + } + + int originX = Mth.floor(source.getPosition().x); + int originZ = Mth.floor(source.getPosition().z); + NearestSite nearest = findNearestSite(thoraxis, originX, originZ); + if (nearest != null) { + QueenTrailGrid.Site site = nearest.site(); + QueenTrailSpawnMarkerBlockEntity marker = nearest.marker(); + QueenEntity queen = marker.spawnNow(thoraxis); + if (queen == null && !marker.isConsumed()) { + source.sendFailure(Component.literal("A Queen spawn site was found, but the Queen could not spawn at a clear location. The site can be retried later.")); + return 0; + } BlockPos spawn = marker.getSpawnPos(); - int distance = Mth.floor(Math.sqrt(distanceSquared(ox, oz, site))); - String coords = "[" + spawn.getX() + ", " + spawn.getY() + ", " + spawn.getZ() + "]"; - String tp = "/execute in " + THORAXIS.location() + " run tp @s " + spawn.getX() + " " + spawn.getY() + " " + spawn.getZ(); - source.sendSuccess(() -> Component.literal("Nearest Queen spawn in " + THORAXIS.location() + ": ") - .append(Component.literal(coords).withStyle(Style.EMPTY.withColor(net.minecraft.ChatFormatting.AQUA) - .withUnderlined(true).withClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, tp)))) + if (queen != null) { + spawn = BlockPos.containing(queen.position()); + } + int distance = Mth.floor(Math.sqrt(distanceSquared(originX, originZ, site))); + String coordinates = "[" + spawn.getX() + ", " + spawn.getY() + ", " + spawn.getZ() + "]"; + String teleportCommand = "/execute in " + THORAXIS.location() + " run tp @s " + + spawn.getX() + " " + spawn.getY() + " " + spawn.getZ(); + String state = queen == null ? " (already spawned; Queen is not currently loaded)" : ""; + source.sendSuccess(() -> Component.literal("Nearest Queen spawn in " + THORAXIS.location() + state + ": ") + .append(Component.literal(coordinates) + .withStyle(Style.EMPTY + .withColor(net.minecraft.ChatFormatting.AQUA) + .withUnderlined(true) + .withClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, teleportCommand)))) .append(Component.literal(" (" + distance + " blocks away)")), false); return distance; } + source.sendFailure(Component.literal("No configured Queen spawn was found within the search area.")); return 0; } + public static NearestSite findNearestSite(ServerLevel thoraxis, int originX, int originZ) { + int cellX = Math.floorDiv(originX, QueenTrailGrid.SPACING); + int cellZ = Math.floorDiv(originZ, QueenTrailGrid.SPACING); + List sites = new ArrayList<>(); + for (int x = cellX - SEARCH_RADIUS_CELLS; x <= cellX + SEARCH_RADIUS_CELLS; x++) { + for (int z = cellZ - SEARCH_RADIUS_CELLS; z <= cellZ + SEARCH_RADIUS_CELLS; z++) { + sites.add(QueenTrailGrid.site(thoraxis.getSeed(), x, z)); + } + } + sites.sort(Comparator.comparingDouble(site -> distanceSquared(originX, originZ, site))); + + int checks = Math.min(MAX_SITE_CHECKS, sites.size()); + for (int index = 0; index < checks; index++) { + QueenTrailGrid.Site site = sites.get(index); + thoraxis.getChunk(site.terminalX() >> 4, site.terminalZ() >> 4); + QueenTrailSpawnMarkerBlockEntity marker = findMarker(thoraxis, site); + if (marker != null) { + return new NearestSite(site, marker); + } + } + return null; + } + + public record NearestSite(QueenTrailGrid.Site site, QueenTrailSpawnMarkerBlockEntity marker) { + } + private static QueenTrailSpawnMarkerBlockEntity findMarker(ServerLevel level, QueenTrailGrid.Site site) { BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(site.terminalX(), level.getMinBuildHeight(), site.terminalZ()); for (int y = level.getMinBuildHeight(); y < level.getMaxBuildHeight(); y++) { cursor.setY(y); - BlockEntity entity = level.getBlockEntity(cursor); - if (entity instanceof QueenTrailSpawnMarkerBlockEntity marker && marker.isConfigured() && marker.getSiteId() == site.id()) return marker; + BlockEntity blockEntity = level.getBlockEntity(cursor); + if (blockEntity instanceof QueenTrailSpawnMarkerBlockEntity marker + && marker.isConfigured() + && marker.getSiteId() == site.id()) { + return marker; + } } return null; } - private static double distanceSquared(int ox, int oz, QueenTrailGrid.Site site) { - double dx = site.terminalX() - ox, dz = site.terminalZ() - oz; + + private static double distanceSquared(int originX, int originZ, QueenTrailGrid.Site site) { + double dx = site.terminalX() - originX; + double dz = site.terminalZ() - originZ; return dx * dx + dz * dz; } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/component/AntarchyItemComponent.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/component/AntarchyItemComponent.java deleted file mode 100644 index c1c932bd..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/component/AntarchyItemComponent.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.craisinlord.antarchy.content.component; - -import java.util.function.Function; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.Tag; -import net.minecraft.world.item.ItemStack; - -public final class AntarchyItemComponent { - private final String key; - private final Function writer; - private final Function reader; - - private AntarchyItemComponent(String key, Function writer, Function reader) { - this.key = key; - this.writer = writer; - this.reader = reader; - } - - public static AntarchyItemComponent ofInt(String key) { - return new AntarchyItemComponent<>(key, net.minecraft.nbt.IntTag::valueOf, tag -> ((net.minecraft.nbt.IntTag) tag).getAsInt()); - } - - public static AntarchyItemComponent ofString(String key) { - return new AntarchyItemComponent<>(key, net.minecraft.nbt.StringTag::valueOf, Tag::getAsString); - } - - public static AntarchyItemComponent of(String key, Function writer, Function reader) { - return new AntarchyItemComponent<>(key, writer, reader); - } - - public static AntarchyItemComponent ofMarker(String key) { - return new AntarchyItemComponent<>( - key, - unit -> net.minecraft.nbt.ByteTag.ONE, - tag -> net.minecraft.util.Unit.INSTANCE); - } - - public boolean has(ItemStack stack) { - return stack.hasTag() && stack.getTag().contains(this.key); - } - - public T get(ItemStack stack) { - if (!this.has(stack)) { - return null; - } - return this.reader.apply(stack.getTag().get(this.key)); - } - - public T getOrDefault(ItemStack stack, T fallback) { - T value = this.get(stack); - return value != null ? value : fallback; - } - - public void set(ItemStack stack, T value) { - CompoundTag tag = stack.getOrCreateTag(); - tag.put(this.key, this.writer.apply(value)); - } - - public void remove(ItemStack stack) { - if (stack.hasTag()) { - stack.getTag().remove(this.key); - } - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/component/AntarchyItemTag.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/component/AntarchyItemTag.java index 09a8a76c..3d40082c 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/component/AntarchyItemTag.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/component/AntarchyItemTag.java @@ -9,7 +9,11 @@ public final class AntarchyItemTag { } public static void update(ItemStack stack, Consumer updater) { - updater.accept(stack.getOrCreateTag()); + CompoundTag tag = stack.getOrCreateTag(); + updater.accept(tag); + if (tag.isEmpty()) { + stack.setTag(null); + } } public static CompoundTag getOrEmpty(ItemStack stack) { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/computer/AntarchyArchiveLocators.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/computer/AntarchyArchiveLocators.java new file mode 100644 index 00000000..30639b97 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/computer/AntarchyArchiveLocators.java @@ -0,0 +1,41 @@ +package com.craisinlord.antarchy.content.computer; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.command.QueenLocateCommand; +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; +import com.craisinlord.antarchy.content.worldgen.elythia.KingsTreeGrid; +import com.craisinlord.antos.api.archive.ArchiveLocatorRegistry; +import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.phys.AABB; + +public final class AntarchyArchiveLocators { + private AntarchyArchiveLocators() { + } + + public static void register() { + ArchiveLocatorRegistry.register(id("queen"), (level, origin) -> { + QueenLocateCommand.NearestSite nearest = QueenLocateCommand.findNearestSite(level, origin.getX(), origin.getZ()); + return nearest == null ? null : nearest.marker().getSpawnPos(); + }); + ArchiveLocatorRegistry.register(id("kings_tree"), (level, origin) -> { + BlockPos center = KingsTreeGrid.nearestTreeCenter(origin); + int surfaceY = level.getChunkSource().getGenerator().getBaseHeight(center.getX(), center.getZ(), + Heightmap.Types.WORLD_SURFACE_WG, level, level.getChunkSource().randomState()); + return new BlockPos(center.getX(), surfaceY, center.getZ()); + }); + ArchiveLocatorRegistry.register(id("brutalfly"), (level, origin) -> { + AABB searchArea = AABB.ofSize(origin.getCenter(), 1_024.0D, 1_024.0D, 1_024.0D); + return level.getEntitiesOfClass(BrutalflyEntity.class, searchArea, BrutalflyEntity::isAlive) + .stream() + .min(java.util.Comparator.comparingDouble(entity -> entity.distanceToSqr(origin.getCenter()))) + .map(entity -> entity.blockPosition()) + .orElse(null); + }); + } + + private static ResourceLocation id(String path) { + return new ResourceLocation(Antarchy.MODID, path); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/computer/AntarchyGameSavedData.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/computer/AntarchyGameSavedData.java new file mode 100644 index 00000000..9e75358b --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/computer/AntarchyGameSavedData.java @@ -0,0 +1,65 @@ +package com.craisinlord.antarchy.content.computer; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.server.MinecraftServer; +import net.minecraft.world.level.saveddata.SavedData; + +public final class AntarchyGameSavedData extends SavedData { + private static final String ID = "antarchy_computer_games"; + private final Map games = new HashMap<>(); + + public static AntarchyGameSavedData create() { return new AntarchyGameSavedData(); } + + public static AntarchyGameSavedData load(CompoundTag tag) { + AntarchyGameSavedData data = new AntarchyGameSavedData(); + for (net.minecraft.nbt.Tag raw : tag.getList("Games", net.minecraft.nbt.Tag.TAG_COMPOUND)) { + CompoundTag item = (CompoundTag) raw; + GameState state = new GameState(); + state.basiliskScore = item.getInt("BasiliskScore"); + state.basiliskHighScore = item.getInt("BasiliskHighScore"); + state.antmanScore = item.getInt("AntmanScore"); + state.antmanHighScore = item.getInt("AntmanHighScore"); + data.games.put(item.getString("Computer"), state); + } + return data; + } + + @Override public CompoundTag save(CompoundTag tag) { + ListTag list = new ListTag(); + games.forEach((key, state) -> { + CompoundTag item = new CompoundTag(); + item.putString("Computer", key); + item.putInt("BasiliskScore", state.basiliskScore); + item.putInt("BasiliskHighScore", state.basiliskHighScore); + item.putInt("AntmanScore", state.antmanScore); + item.putInt("AntmanHighScore", state.antmanHighScore); + list.add(item); + }); + tag.put("Games", list); + return tag; + } + + public static GameState get(MinecraftServer server, String key) { + AntarchyGameSavedData data = server.overworld().getDataStorage().computeIfAbsent( + AntarchyGameSavedData::load, AntarchyGameSavedData::create, ID); + return data.games.computeIfAbsent(key, ignored -> new GameState()); + } + + public static void changed(MinecraftServer server) { + server.overworld().getDataStorage().computeIfAbsent( + AntarchyGameSavedData::load, AntarchyGameSavedData::create, ID).setDirty(); + } + + public static String key(net.minecraft.resources.ResourceLocation dimension, net.minecraft.core.BlockPos pos) { + return dimension + "|" + pos.asLong(); + } + + public static final class GameState { + public int basiliskScore, basiliskHighScore, antmanScore, antmanHighScore; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/creative/CreativeTabContents.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/creative/CreativeTabContents.java index fb53cf0c..29c51c88 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/creative/CreativeTabContents.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/creative/CreativeTabContents.java @@ -1,13 +1,14 @@ package com.craisinlord.antarchy.content.creative; -import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant; +import com.craisinlord.antarchy.content.item.GiantFryingPanToolHelper; import com.craisinlord.antarchy.content.item.GlimmerBottleItem; +import com.craisinlord.antarchy.content.item.royal.RoyalGearHelper; import com.craisinlord.antarchy.content.item.ultimate.UltimateGearHelper; import java.util.HashMap; import java.util.List; import java.util.Map; -import net.minecraft.core.Holder; import net.minecraft.core.HolderLookup; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceKey; @@ -21,6 +22,8 @@ import net.minecraft.world.item.alchemy.PotionUtils; import net.minecraft.world.level.ItemLike; public final class CreativeTabContents { + private static final String MODID = "antarchy"; + private CreativeTabContents() {} private record CatalogEntry(String path, String neoTabPath, String insertAfterPath) {} @@ -71,23 +74,40 @@ public final class CreativeTabContents { entry("peach_button", "building_blocks"), entry("peach_sign", "building_blocks"), entry("peach_hanging_sign", "building_blocks"), - entry("nadir_log", "building_blocks"), - entry("nadir_wood", "building_blocks"), - entry("stripped_nadir_log", "building_blocks"), - entry("stripped_nadir_wood", "building_blocks"), - entry("nadir_planks", "building_blocks"), - entry("nadir_stairs", "building_blocks"), - entry("nadir_slab", "building_blocks"), - entry("nadir_fence", "building_blocks"), - entry("nadir_fence_gate", "building_blocks"), - entry("nadir_boat", "building_blocks"), - entry("nadir_chest_boat", "building_blocks"), - entry("nadir_door", "building_blocks"), - entry("nadir_trapdoor", "building_blocks"), - entry("nadir_pressure_plate", "building_blocks"), - entry("nadir_button", "building_blocks"), - entry("nadir_sign", "building_blocks"), - entry("nadir_hanging_sign", "building_blocks"), + entry("truffalo_log", "building_blocks"), + entry("truffalo_wood", "building_blocks"), + entry("stripped_truffalo_log", "building_blocks"), + entry("stripped_truffalo_wood", "building_blocks"), + entry("truffalo_planks", "building_blocks"), + entry("truffalo_stairs", "building_blocks"), + entry("truffalo_slab", "building_blocks"), + entry("truffalo_fence", "building_blocks"), + entry("truffalo_fence_gate", "building_blocks"), + entry("truffalo_boat", "building_blocks"), + entry("truffalo_chest_boat", "building_blocks"), + entry("truffalo_door", "building_blocks"), + entry("truffalo_trapdoor", "building_blocks"), + entry("truffalo_pressure_plate", "building_blocks"), + entry("truffalo_button", "building_blocks"), + entry("truffalo_sign", "building_blocks"), + entry("truffalo_hanging_sign", "building_blocks"), + entry("royal_log", "building_blocks"), + entry("royal_wood", "building_blocks"), + entry("stripped_royal_log", "building_blocks"), + entry("stripped_royal_wood", "building_blocks"), + entry("royal_planks", "building_blocks"), + entry("royal_stairs", "building_blocks"), + entry("royal_slab", "building_blocks"), + entry("royal_fence", "building_blocks"), + entry("royal_fence_gate", "building_blocks"), + entry("royal_boat", "building_blocks"), + entry("royal_chest_boat", "building_blocks"), + entry("royal_door", "building_blocks"), + entry("royal_trapdoor", "building_blocks"), + entry("royal_pressure_plate", "building_blocks"), + entry("royal_button", "building_blocks"), + entry("royal_sign", "building_blocks"), + entry("royal_hanging_sign", "building_blocks"), entry("shellstone", "building_blocks"), entry("shellstone_stairs", "building_blocks"), entry("shellstone_slab", "building_blocks"), @@ -106,10 +126,28 @@ public final class CreativeTabContents { entry("mossy_shellstone_brick_slab", "building_blocks"), entry("mossy_shellstone_brick_wall", "building_blocks"), entry("cracked_shellstone_bricks", "building_blocks"), + entry("shellstone_pillar", "building_blocks"), entry("blush_moss_block", "building_blocks"), entry("blush_moss_carpet", "building_blocks"), entry("lumen_froglight", "natural_blocks"), entry("roseate_froglight", "natural_blocks"), + entry("nadir_log", "building_blocks"), + entry("nadir_wood", "building_blocks"), + entry("stripped_nadir_log", "building_blocks"), + entry("stripped_nadir_wood", "building_blocks"), + entry("nadir_planks", "building_blocks"), + entry("nadir_stairs", "building_blocks"), + entry("nadir_slab", "building_blocks"), + entry("nadir_fence", "building_blocks"), + entry("nadir_fence_gate", "building_blocks"), + entry("nadir_boat", "building_blocks"), + entry("nadir_chest_boat", "building_blocks"), + entry("nadir_door", "building_blocks"), + entry("nadir_trapdoor", "building_blocks"), + entry("nadir_pressure_plate", "building_blocks"), + entry("nadir_button", "building_blocks"), + entry("nadir_sign", "building_blocks"), + entry("nadir_hanging_sign", "building_blocks"), entry("nyxite", "building_blocks"), entry("nyxite_stairs", "building_blocks"), entry("nyxite_slab", "building_blocks"), @@ -124,17 +162,27 @@ public final class CreativeTabContents { entry("nyxite_brick_stairs", "building_blocks"), entry("nyxite_brick_slab", "building_blocks"), entry("nyxite_brick_wall", "building_blocks"), + entry("mossy_nyxite_bricks", "building_blocks"), + entry("mossy_nyxite_brick_stairs", "building_blocks"), + entry("mossy_nyxite_brick_slab", "building_blocks"), + entry("mossy_nyxite_brick_wall", "building_blocks"), entry("chiseled_nyxite", "building_blocks"), + entry("nyxite_pillar", "building_blocks"), entry("pale_nyxite", "building_blocks"), entry("nyxite_spike", "building_blocks"), entry("potent_nyxite", "building_blocks"), entry("antimetal", "building_blocks"), + entry("antimetal_stairs", "building_blocks"), + entry("antimetal_slab", "building_blocks"), entry("polished_antimetal", "building_blocks"), + entry("polished_antimetal_stairs", "building_blocks"), + entry("polished_antimetal_slab", "building_blocks"), entry("antimetal_scaffolding", "building_blocks"), entry("antimetal_rail", "redstone_blocks"), entry("antimetal_powered_rail", "redstone_blocks"), entry("antimetal_detector_rail", "redstone_blocks"), entry("antimetal_activator_rail", "redstone_blocks"), + entry("upper", "redstone_blocks"), entry("umbral_moss_block", "building_blocks"), entry("umbral_moss_carpet", "building_blocks"), entry("dream_torch", "building_blocks"), @@ -151,6 +199,33 @@ public final class CreativeTabContents { entry("smooth_dream_sandstone_stairs", "building_blocks"), entry("smooth_dream_sandstone_slab", "building_blocks"), entry("cut_dream_sandstone_slab", "building_blocks"), + entry("typhonite", "building_blocks"), + entry("typhonite_bricks", "building_blocks"), + entry("chiseled_typhonite", "building_blocks"), + entry("polished_typhonite", "building_blocks"), + entry("veined_typhonite", "building_blocks"), + entry("typhonite_spike", "building_blocks"), + entry("typhonite_stairs", "building_blocks"), + entry("typhonite_slab", "building_blocks"), + entry("typhonite_wall", "building_blocks"), + entry("typhonite_brick_stairs", "building_blocks"), + entry("typhonite_brick_slab", "building_blocks"), + entry("typhonite_brick_wall", "building_blocks"), + entry("polished_typhonite_stairs", "building_blocks"), + entry("polished_typhonite_slab", "building_blocks"), + entry("polished_typhonite_wall", "building_blocks"), + entry("verdant_nyxium", "natural_blocks"), + entry("spiraling_vines", "natural_blocks"), + entry("gorevine", "natural_blocks"), + entry("whirlflower", "natural_blocks"), + entry("nadir_nyxium", "natural_blocks"), + entry("nadir_fern", "natural_blocks"), + entry("large_nadir_fern", "natural_blocks"), + entry("duskbell", "natural_blocks"), + entry("nadir_roots", "natural_blocks"), + entry("verdant_roots", "natural_blocks"), + entry("typhonite_pillar", "building_blocks"), + entry("antigravel", "natural_blocks"), entry("budding_blood_crystal", "building_blocks"), entry("blood_crystal_block", "building_blocks"), entry("blood_crystal_cluster", "building_blocks"), @@ -158,14 +233,39 @@ public final class CreativeTabContents { entry("medium_blood_crystal_bud", "building_blocks"), entry("large_blood_crystal_bud", "building_blocks"), entry("myrmite", "building_blocks"), + entry("myrmite_stairs", "building_blocks"), + entry("myrmite_slab", "building_blocks"), + entry("myrmite_wall", "building_blocks"), + entry("polished_myrmite", "building_blocks"), + entry("polished_myrmite_stairs", "building_blocks"), + entry("polished_myrmite_slab", "building_blocks"), + entry("polished_myrmite_wall", "building_blocks"), + entry("chiseled_myrmite", "building_blocks"), + entry("myrmite_bricks", "building_blocks"), + entry("myrmite_brick_stairs", "building_blocks"), + entry("myrmite_brick_slab", "building_blocks"), + entry("myrmite_brick_wall", "building_blocks"), + entry("mossy_myrmite_bricks", "building_blocks"), + entry("mossy_myrmite_brick_stairs", "building_blocks"), + entry("mossy_myrmite_brick_slab", "building_blocks"), + entry("mossy_myrmite_brick_wall", "building_blocks"), + entry("myrmite_pillar", "building_blocks"), entry("biomite", "building_blocks"), entry("biomite_turf", "building_blocks"), entry("biowart", "building_blocks"), entry("biowart_tendrils", "building_blocks"), + entry("loam", "building_blocks"), + entry("packed_loam", "building_blocks"), + entry("loam_bricks", "building_blocks"), + entry("loam_brick_stairs", "building_blocks"), + entry("loam_brick_slab", "building_blocks"), + entry("loam_brick_wall", "building_blocks"), + entry("chiseled_loam_bricks", "building_blocks"), entry("broodstone", "building_blocks"), entry("polished_broodstone", "building_blocks"), entry("chiseled_broodstone", "building_blocks"), entry("broodstone_bricks", "building_blocks"), + entry("mossy_broodstone_bricks", "building_blocks"), entry("broodstone_stairs", "building_blocks"), entry("broodstone_slab", "building_blocks"), entry("broodstone_wall", "building_blocks"), @@ -175,6 +275,10 @@ public final class CreativeTabContents { entry("broodstone_brick_stairs", "building_blocks"), entry("broodstone_brick_slab", "building_blocks"), entry("broodstone_brick_wall", "building_blocks"), + entry("mossy_broodstone_brick_stairs", "building_blocks"), + entry("mossy_broodstone_brick_slab", "building_blocks"), + entry("mossy_broodstone_brick_wall", "building_blocks"), + entry("broodstone_pillar", "building_blocks"), entry("myrmite_coal_ore", "building_blocks"), entry("broodstone_uranium_ore", "building_blocks"), entry("broodstone_titanium_ore", "building_blocks"), @@ -194,9 +298,11 @@ public final class CreativeTabContents { entry("uranium_bars", "building_blocks"), entry("uranium_bulb", "building_blocks"), entry("bluestone_block", "redstone_blocks"), + entry("vortex_lens", "redstone_blocks"), entry("bluestone_repeater", "redstone_blocks"), entry("bluestone_comparator", "redstone_blocks"), entry("bluestone_torch", "redstone_blocks"), + entry("bluestone_lamp", "redstone_blocks"), entry("titanium_block", "building_blocks"), entry("raw_titanium_block", "building_blocks"), entry("cut_titanium", "building_blocks"), @@ -211,19 +317,41 @@ public final class CreativeTabContents { entry("ouranwood_acorn", "natural_blocks"), entry("peach_leaves", "natural_blocks"), entry("peach_sapling", "natural_blocks"), + entry("truffalo_sapling", "natural_blocks"), + entry("royal_leaves", "natural_blocks"), + entry("royal_flowering_leaves", "natural_blocks"), + entry("royal_sapling", "natural_blocks"), + entry("nadir_veil", "natural_blocks"), + entry("nadir_sapling", "natural_blocks"), + entry("white_truffalo_tuft", "natural_blocks"), + entry("orange_truffalo_tuft", "natural_blocks"), + entry("magenta_truffalo_tuft", "natural_blocks"), + entry("light_blue_truffalo_tuft", "natural_blocks"), + entry("yellow_truffalo_tuft", "natural_blocks"), + entry("lime_truffalo_tuft", "natural_blocks"), + entry("pink_truffalo_tuft", "natural_blocks"), + entry("gray_truffalo_tuft", "natural_blocks"), + entry("light_gray_truffalo_tuft", "natural_blocks"), + entry("cyan_truffalo_tuft", "natural_blocks"), + entry("purple_truffalo_tuft", "natural_blocks"), + entry("blue_truffalo_tuft", "natural_blocks"), + entry("brown_truffalo_tuft", "natural_blocks"), + entry("green_truffalo_tuft", "natural_blocks"), + entry("red_truffalo_tuft", "natural_blocks"), + entry("black_truffalo_tuft", "natural_blocks"), entry("duplicator_log", "natural_blocks"), entry("duplicator_sapling", "natural_blocks"), entry("orange_milkweed", "natural_blocks"), entry("pink_milkweed", "natural_blocks"), + entry("glimmering_reed", "natural_blocks"), entry("camellia", "natural_blocks"), entry("spider_lily", "natural_blocks"), entry("lotus", "natural_blocks"), entry("giant_lily_pad", "natural_blocks"), entry("seashell", "natural_blocks"), - entry("nadir_veil", "natural_blocks"), - entry("nadir_sapling", "natural_blocks"), entry("hushweed", "natural_blocks"), entry("amber_lichen", "natural_blocks"), + entry("mucus", "natural_blocks"), entry("creepvine", "natural_blocks"), entry("hanging_creeproots", "natural_blocks"), entry("molting_vines", "natural_blocks"), @@ -231,11 +359,11 @@ public final class CreativeTabContents { entry("glowcap_mushroom_block", "natural_blocks"), entry("infested_rooted_dirt", "natural_blocks"), entry("infested_coarse_dirt", "natural_blocks"), - entry("triffid_goo_block", "natural_blocks"), + entry("flytrap_goo_block", "natural_blocks"), entry("bed_bug_egg", "natural_blocks"), - entry("creeping_horror_egg", "natural_blocks"), - entry("lurking_terror_egg", "natural_blocks"), - entry("jumpy_bug_egg", "natural_blocks"), + entry("crawling_blight_egg", "natural_blocks"), + entry("skulking_fright_egg", "natural_blocks"), + entry("springbug_egg", "natural_blocks"), entry("spit_bug_egg", "natural_blocks"), entry("jerry_egg", "natural_blocks"), entry("wasp_nest", "natural_blocks"), @@ -256,21 +384,33 @@ public final class CreativeTabContents { entry("dead_star_coral_fan", "natural_blocks"), entry("dead_star_coral_block", "natural_blocks"), entry("duct_tape", "tools_and_utilities", "shears"), + entry("bug_spray", "tools_and_utilities"), + entry("music_disc_underside", "tools_and_utilities"), + entry("music_disc_the_queen", "tools_and_utilities"), + entry("music_disc_verdance", "tools_and_utilities"), + entry("music_disc_grotesque", "tools_and_utilities"), entry("diamond_minecart", "tools_and_utilities", "minecart"), entry("bile_bucket", "tools_and_utilities"), entry("ichor_bucket", "tools_and_utilities"), entry("antiwater_bucket", "tools_and_utilities"), entry("lumen_bucket", "tools_and_utilities"), entry("cloud_bucket", "tools_and_utilities"), + entry("cheep_bucket", "tools_and_utilities"), + entry("lucid_anchor", "tools_and_utilities"), + entry("undertrial_spawner", "tools_and_utilities"), + entry("undervault", "tools_and_utilities"), + entry("undertrial_key", "tools_and_utilities"), entry("reverie_bottle", "tools_and_utilities"), entry("glimmer_bottle", "tools_and_utilities"), entry("critter_cage", "tools_and_utilities"), + entry("worm_hook", "tools_and_utilities"), entry("ultimate_pickaxe", "tools_and_utilities"), entry("ultimate_axe", "tools_and_utilities"), entry("ultimate_shovel", "tools_and_utilities"), entry("ultimate_hoe", "tools_and_utilities"), entry("battle_axe", "combat"), entry("big_bertha", "combat"), + entry("giant_frying_pan", "combat"), entry("basilisk_dagger", "combat"), entry("ultimate_helmet", "combat"), entry("ultimate_chestplate", "combat"), @@ -285,6 +425,12 @@ public final class CreativeTabContents { entry("shrink_ray", "combat"), entry("growth_ray", "combat"), entry("gravity_gun", "combat"), + entry("portal_gun", "combat"), + entry("portal_gun_atlas", "combat"), + entry("portal_gun_p_body", "combat"), + entry("portal_gun_craisin", "combat"), + entry("portal_gun_laynce", "combat"), + entry("eye_of_the_storm", "combat"), entry("water_cannon", "combat"), entry("attitude_adjuster", "combat"), entry("lucid_pearl", "combat"), @@ -297,15 +443,36 @@ public final class CreativeTabContents { entry("nightmare_leggings", "combat"), entry("nightmare_boots", "combat"), entry("nightmare_sword", "combat"), + entry("blood_gods_blade", "combat"), entry("blood_crystal_katana", "combat"), entry("blood_crystal_helmet", "combat"), entry("blood_crystal_chestplate", "combat"), entry("blood_crystal_leggings", "combat"), entry("blood_crystal_boots", "combat"), + entry("royal_guardian_sword", "combat"), + entry("royal_guardian_helmet", "combat"), + entry("royal_guardian_chestplate", "combat"), + entry("royal_guardian_leggings", "combat"), + entry("royal_guardian_boots", "combat"), + entry("royal_guardian_shield", "combat"), + entry("royal_assailant_battleaxe", "combat"), + entry("royal_assailant_staff", "combat"), + entry("temporal_tuner", "combat"), + entry("royal_assailant_helmet", "combat"), + entry("royal_assailant_chestplate", "combat"), + entry("royal_assailant_leggings", "combat"), + entry("royal_assailant_boots", "combat"), + entry("prince_egg", "functional_blocks"), + entry("princess_egg", "functional_blocks"), + entry("tigers_eye_helmet", "combat"), + entry("tigers_eye_chestplate", "combat"), + entry("tigers_eye_leggings", "combat"), + entry("tigers_eye_boots", "combat"), entry("moggles", "combat"), entry("scorpion_whip", "combat"), entry("fallen_king_crown", "combat"), entry("brutalfly_elytra", "combat"), + entry("manticore_wings", "combat"), entry("springy_boots", "combat"), entry("raw_uranium_scrap", "ingredients"), entry("raw_titanium_scrap", "ingredients"), @@ -316,15 +483,18 @@ public final class CreativeTabContents { entry("titanium_nugget", "ingredients"), entry("uranium_ingot", "ingredients"), entry("titanium_ingot", "ingredients"), - entry("cloud_shark_fin", "ingredients"), - entry("cloud_shark_fin_soup", "ingredients"), + entry("stratoshark_fin", "ingredients"), + entry("stratoshark_fin_soup", "ingredients"), entry("basilisk_fang", "ingredients"), entry("nightmare_scale", "ingredients"), entry("molevore_nose", "ingredients"), entry("moleworm", "ingredients"), + entry("worm_tooth", "ingredients"), entry("mud_pie", "ingredients"), entry("lucid_eye", "ingredients"), entry("blood_crystal_shard", "ingredients"), + entry("tigers_eye", "ingredients"), + entry("tigers_eye_block", "building_blocks"), entry("blood_crystal_apple", "ingredients"), entry("spirit_apple", "ingredients"), entry("mantis_claw", "combat"), @@ -335,13 +505,15 @@ public final class CreativeTabContents { entry("jerry_nucleus", "ingredients"), entry("stink_bug", "ingredients"), entry("brutalfly_wing", "ingredients"), + entry("manticore_wing", "ingredients"), entry("primordial_scute", "ingredients"), - entry("triffid_goo", "ingredients"), - entry("vortex_eye", "ingredients"), + entry("flytrap_goo", "ingredients"), + entry("vortex_charge", "ingredients"), entry("emperor_scorpion_stinger", "ingredients"), entry("kraken_tooth", "ingredients"), entry("kraken_tentacle", "ingredients"), - entry("jumpy_bug_leg", "ingredients"), + entry("kraken_kalamari", "ingredients"), + entry("springbug_leg", "ingredients"), entry("cornea_ear", "ingredients"), entry("corn", "ingredients"), entry("high_fructose_corn_syrup", "ingredients"), @@ -356,12 +528,37 @@ public final class CreativeTabContents { entry("raw_bug_meat", "ingredients"), entry("cooked_bug_meat", "ingredients"), entry("broodfruit", "ingredients"), + entry("broodfruit_cobbler", "ingredients"), entry("cheep", "ingredients"), + entry("cooked_cheep", "ingredients"), entry("root_beer", "ingredients"), entry("rainbow_sugar", "ingredients"), entry("big_bertha_blade", "ingredients"), entry("big_bertha_handle", "ingredients"), entry("big_bertha_hilt", "ingredients"), + entry("hoverboard", "building_blocks"), + entry("hoverboard_white", "building_blocks"), + entry("hoverboard_orange", "building_blocks"), + entry("hoverboard_magenta", "building_blocks"), + entry("hoverboard_light_blue", "building_blocks"), + entry("hoverboard_yellow", "building_blocks"), + entry("hoverboard_lime", "building_blocks"), + entry("hoverboard_pink", "building_blocks"), + entry("hoverboard_gray", "building_blocks"), + entry("hoverboard_light_gray", "building_blocks"), + entry("hoverboard_cyan", "building_blocks"), + entry("hoverboard_purple", "building_blocks"), + entry("hoverboard_blue", "building_blocks"), + entry("hoverboard_brown", "building_blocks"), + entry("hoverboard_green", "building_blocks"), + entry("hoverboard_red", "building_blocks"), + entry("hoverboard_black", "building_blocks"), + entry("ant_trap", "building_blocks"), + entry("king_spawn_egg", "spawn_eggs"), + entry("queen_spawn_egg", "spawn_eggs"), + entry("manticore_spawn_egg", "spawn_eggs"), + entry("prince_spawn_egg", "spawn_eggs"), + entry("princess_spawn_egg", "spawn_eggs"), entry("easter_bunny_spawn_egg", "spawn_eggs"), entry("flying_squirrel_spawn_egg", "spawn_eggs"), entry("caterpillar_spawn_egg", "spawn_eggs"), @@ -373,33 +570,35 @@ public final class CreativeTabContents { entry("rainbow_ant_spawn_egg", "spawn_eggs"), entry("termite_spawn_egg", "spawn_eggs"), entry("moleworm_spawn_egg", "spawn_eggs"), + entry("worm_spawn_egg", "spawn_eggs"), entry("mantis_spawn_egg", "spawn_eggs"), entry("alpha_mantis_spawn_egg", "spawn_eggs"), entry("rolly_polly_spawn_egg", "spawn_eggs"), entry("molevore_spawn_egg", "spawn_eggs"), - entry("triffid_spawn_egg", "spawn_eggs"), + entry("flytrap_spawn_egg", "spawn_eggs"), entry("apple_cow_spawn_egg", "spawn_eggs"), entry("golden_apple_cow_spawn_egg", "spawn_eggs"), entry("enchanted_golden_apple_cow_spawn_egg", "spawn_eggs"), entry("dr_trayaurus_spawn_egg", "spawn_eggs"), entry("wasp_spawn_egg", "spawn_eggs"), entry("bomber_spawn_egg", "spawn_eggs"), - entry("jumpy_bug_spawn_egg", "spawn_eggs"), + entry("springbug_spawn_egg", "spawn_eggs"), entry("spit_bug_spawn_egg", "spawn_eggs"), entry("stink_bug_spawn_egg", "spawn_eggs"), - entry("cloud_shark_spawn_egg", "spawn_eggs"), + entry("stratoshark_spawn_egg", "spawn_eggs"), entry("kraken_spawn_egg", "spawn_eggs"), entry("missile_squid_spawn_egg", "spawn_eggs"), entry("octopus_bomb_spawn_egg", "spawn_eggs"), entry("nightmare_spawn_egg", "spawn_eggs"), entry("bed_bug_spawn_egg", "spawn_eggs"), entry("lucid_spawn_egg", "spawn_eggs"), + entry("vortex_spawn_egg", "spawn_eggs"), entry("scorpion_spawn_egg", "spawn_eggs"), entry("basilisk_spawn_egg", "spawn_eggs"), entry("emperor_scorpion_spawn_egg", "spawn_eggs"), entry("toreterror_spawn_egg", "spawn_eggs"), - entry("creeping_horror_spawn_egg", "spawn_eggs"), - entry("lurking_terror_spawn_egg", "spawn_eggs"), + entry("crawling_blight_spawn_egg", "spawn_eggs"), + entry("skulking_fright_spawn_egg", "spawn_eggs"), entry("hercules_beetle_spawn_egg", "spawn_eggs"), entry("jerry_spawn_egg", "spawn_eggs"), entry("dorrie_spawn_egg", "spawn_eggs"), @@ -412,7 +611,7 @@ public final class CreativeTabContents { "dread", "long_dread", "inversion", "long_inversion", "stinky", "long_stinky", "paralysis", "long_paralysis", "haste", "strong_haste", "shrinking", "strong_shrinking", "extreme_shrinking", "growing", "strong_growing", "extreme_growing", - "time_dilation", "long_time_dilation" + "command", "long_command", "time_dilation", "long_time_dilation", "time_contraction", "long_time_contraction" ); private static final Map ORDER_INDEX = createOrderIndex(); @@ -450,10 +649,19 @@ public final class CreativeTabContents { for (String potionPath : ANTARCHY_POTION_FAMILIES) { acceptPotionFamily(output, potionPath); } + for (String diskId : List.of("antarchy:toreterror_arena", "antarchy:high_fructose_corn_syrup", + "antarchy:elythia", "antarchy:flying_squirrel", "antarchy:brutalfly", "antarchy:rainbow_ant", "antarchy:kraken", "antarchy:cavaryn", "antarchy:hercules_beetle", "antarchy:thoraxis", "antarchy:temporal_fields", "antarchy:bloodglass", "antarchy:vortex")) { + ItemStack disk = new ItemStack(com.craisinlord.antos.content.AntOSObjects.FLOPPY_DISK.get()); + com.craisinlord.antos.content.AntOSObjects.setFloppyDiskId(disk, new ResourceLocation(diskId)); + output.accept(disk); + } } public static boolean populateNeoForgeVanillaTab(ResourceKey tabKey, HolderLookup.Provider holders, NeoForgeVanillaTabOutput output) { + if (!ResourceLocation.DEFAULT_NAMESPACE.equals(tabKey.location().getNamespace())) { + return false; + } String tabPath = tabKey.location().getPath(); boolean matched = false; for (CatalogEntry entry : CATALOG) { @@ -470,6 +678,14 @@ public final class CreativeTabContents { output.accept(UltimateGearHelper.createUltimateArmorStack(item(entry.path()), holders)); continue; } + if (isRoyalArmor(entry.path())) { + output.accept(RoyalGearHelper.createRoyalArmorStack(item(entry.path()), holders)); + continue; + } + if ("giant_frying_pan".equals(entry.path())) { + output.accept(GiantFryingPanToolHelper.createStack(item(entry.path()), holders)); + continue; + } if ("ultimate_bow".equals(entry.path())) { output.accept(UltimateGearHelper.createUltimateBowStack(item(entry.path()), holders)); continue; @@ -496,6 +712,17 @@ public final class CreativeTabContents { || "ultimate_boots".equals(path); } + private static boolean isRoyalArmor(String path) { + return "royal_guardian_helmet".equals(path) + || "royal_guardian_chestplate".equals(path) + || "royal_guardian_leggings".equals(path) + || "royal_guardian_boots".equals(path) + || "royal_assailant_helmet".equals(path) + || "royal_assailant_chestplate".equals(path) + || "royal_assailant_leggings".equals(path) + || "royal_assailant_boots".equals(path); + } + private static void acceptPotionFamily(AntarchyTabOutput output, String path) { Potion potion = potion(path); if (potion == null) { @@ -512,7 +739,7 @@ public final class CreativeTabContents { } private static Item item(String path) { - return BuiltInRegistries.ITEM.get(new ResourceLocation(Antarchy.MODID, path)); + return BuiltInRegistries.ITEM.get(new ResourceLocation(MODID, path)); } private static Item vanillaItem(String path) { @@ -520,6 +747,6 @@ public final class CreativeTabContents { } private static Potion potion(String path) { - return BuiltInRegistries.POTION.get(new ResourceLocation(Antarchy.MODID, path)); + return BuiltInRegistries.POTION.get(new ResourceLocation(MODID, path)); } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/damage/AntarchyDamageSources.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/damage/AntarchyDamageSources.java index c9d80c99..c2090c58 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/damage/AntarchyDamageSources.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/damage/AntarchyDamageSources.java @@ -62,20 +62,20 @@ public final class AntarchyDamageSources { ); } - public static DamageSource triffidMauling(ServerLevel level, Entity attacker) { + public static DamageSource flytrapMauling(ServerLevel level, Entity attacker) { return new DamageSource( level.registryAccess() .registryOrThrow(Registries.DAMAGE_TYPE) - .getHolderOrThrow(AntarchyDamageTypes.TRIFFID_MAULING), + .getHolderOrThrow(AntarchyDamageTypes.FLYTRAP_MAULING), attacker ); } - public static DamageSource triffidSwallow(ServerLevel level, Entity attacker) { + public static DamageSource flytrapSwallow(ServerLevel level, Entity attacker) { return new DamageSource( level.registryAccess() .registryOrThrow(Registries.DAMAGE_TYPE) - .getHolderOrThrow(AntarchyDamageTypes.TRIFFID_SWALLOW), + .getHolderOrThrow(AntarchyDamageTypes.FLYTRAP_SWALLOW), attacker ); } @@ -125,11 +125,11 @@ public final class AntarchyDamageSources { ); } - public static DamageSource jumpyBugJump(ServerLevel level, Entity attacker) { + public static DamageSource springbugJump(ServerLevel level, Entity attacker) { return new DamageSource( level.registryAccess() .registryOrThrow(Registries.DAMAGE_TYPE) - .getHolderOrThrow(AntarchyDamageTypes.JUMPY_BUG_JUMP), + .getHolderOrThrow(AntarchyDamageTypes.SPRINGBUG_JUMP), attacker ); } @@ -153,6 +153,16 @@ public final class AntarchyDamageSources { ); } + public static DamageSource moonVacuum(ServerLevel level, @Nullable Entity causingEntity) { + return new DamageSource( + level.registryAccess() + .registryOrThrow(Registries.DAMAGE_TYPE) + .getHolderOrThrow(AntarchyDamageTypes.MOON_VACUUM), + null, + causingEntity + ); + } + private AntarchyDamageSources() { } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/damage/AntarchyDamageTypes.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/damage/AntarchyDamageTypes.java index baa21014..20b3b351 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/damage/AntarchyDamageTypes.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/damage/AntarchyDamageTypes.java @@ -43,16 +43,16 @@ public final class AntarchyDamageTypes { new ResourceLocation(Antarchy.MODID, "emperor_scorpion_sting") ); - public static final ResourceKey TRIFFID_MAULING = + public static final ResourceKey FLYTRAP_MAULING = ResourceKey.create( Registries.DAMAGE_TYPE, - new ResourceLocation(Antarchy.MODID, "triffid_mauling") + new ResourceLocation(Antarchy.MODID, "flytrap_mauling") ); - public static final ResourceKey TRIFFID_SWALLOW = + public static final ResourceKey FLYTRAP_SWALLOW = ResourceKey.create( Registries.DAMAGE_TYPE, - new ResourceLocation(Antarchy.MODID, "triffid_swallow") + new ResourceLocation(Antarchy.MODID, "flytrap_swallow") ); public static final ResourceKey CORNEA_STALK_PRICK = @@ -91,10 +91,10 @@ public final class AntarchyDamageTypes { new ResourceLocation(Antarchy.MODID, "spit_bug_disrespect") ); - public static final ResourceKey JUMPY_BUG_JUMP = + public static final ResourceKey SPRINGBUG_JUMP = ResourceKey.create( Registries.DAMAGE_TYPE, - new ResourceLocation(Antarchy.MODID, "jumpy_bug_jump") + new ResourceLocation(Antarchy.MODID, "springbug_jump") ); public static final ResourceKey HERCULES_BEETLE_OBLITERATION = @@ -103,6 +103,12 @@ public final class AntarchyDamageTypes { new ResourceLocation(Antarchy.MODID, "hercules_beetle_obliteration") ); + public static final ResourceKey MOON_VACUUM = + ResourceKey.create( + Registries.DAMAGE_TYPE, + new ResourceLocation(Antarchy.MODID, "moon_vacuum") + ); + private AntarchyDamageTypes() { } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/dispenser/BugSprayDispenseBehavior.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/dispenser/BugSprayDispenseBehavior.java new file mode 100644 index 00000000..77e8c6e2 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/dispenser/BugSprayDispenseBehavior.java @@ -0,0 +1,35 @@ +package com.craisinlord.antarchy.content.dispenser; + +import com.craisinlord.antarchy.content.item.BugSprayItem; +import net.minecraft.core.Direction; +import net.minecraft.core.Position; +import net.minecraft.core.BlockSource; +import net.minecraft.core.dispenser.DefaultDispenseItemBehavior; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.DispenserBlock; +import net.minecraft.world.phys.Vec3; + +public final class BugSprayDispenseBehavior extends DefaultDispenseItemBehavior { + @Override + protected ItemStack execute(BlockSource source, ItemStack stack) { + ServerLevel level = source.getLevel(); + + Direction direction = source.getBlockState().getValue(DispenserBlock.FACING); + Position position = DispenserBlock.getDispensePosition(source); + Vec3 origin = new Vec3(position.x(), position.y(), position.z()); + Vec3 facing = new Vec3(direction.getStepX(), direction.getStepY(), direction.getStepZ()); + BugSprayItem.spray(level, origin, facing, origin, net.minecraft.sounds.SoundSource.BLOCKS, source.getPos()); + + stack.setDamageValue(stack.getDamageValue() + 1); + if (stack.getDamageValue() >= stack.getMaxDamage()) { + stack.shrink(1); + } + return stack; + } + + @Override + protected void playSound(BlockSource source) { + source.getLevel().levelEvent(1002, source.getPos(), 0); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/AntarchySizeScaling.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/AntarchySizeScaling.java index 8eb3bd10..2a9e6266 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/AntarchySizeScaling.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/AntarchySizeScaling.java @@ -1,12 +1,14 @@ package com.craisinlord.antarchy.content.effect; import com.craisinlord.antarchy.config.AntarchySettings; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.effect.MobEffect; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.LivingEntity; import virtuoel.pehkui.api.ScaleData; import virtuoel.pehkui.api.ScaleModifier; +import virtuoel.pehkui.api.ScaleRegistries; import virtuoel.pehkui.api.ScaleTypes; import java.util.function.Supplier; @@ -16,8 +18,10 @@ public final class AntarchySizeScaling { } public static void register(Supplier shrinkingEffect, Supplier growthEffect) { - ScaleTypes.BASE.getDefaultBaseValueModifiers().add(potionModifier(shrinkingEffect, -1, AntarchySettings::shrinkingPotionDelta)); - ScaleTypes.BASE.getDefaultBaseValueModifiers().add(potionModifier(growthEffect, 1, AntarchySettings::growthPotionDelta)); + ScaleModifier shrinking = ScaleRegistries.register(ScaleRegistries.SCALE_MODIFIERS, new ResourceLocation("antarchy", "shrinking"), potionModifier(shrinkingEffect, -1, AntarchySettings::shrinkingPotionDelta)); + ScaleModifier growth = ScaleRegistries.register(ScaleRegistries.SCALE_MODIFIERS, new ResourceLocation("antarchy", "growth"), potionModifier(growthEffect, 1, AntarchySettings::growthPotionDelta)); + ScaleTypes.BASE.getDefaultBaseValueModifiers().add(shrinking); + ScaleTypes.BASE.getDefaultBaseValueModifiers().add(growth); } private static ScaleModifier potionModifier(Supplier effectSupplier, int sign, java.util.function.DoubleSupplier deltaPerLevel) { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/BleedingMobEffect.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/BleedingMobEffect.java new file mode 100644 index 00000000..8976ae05 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/BleedingMobEffect.java @@ -0,0 +1,21 @@ +package com.craisinlord.antarchy.content.effect; + +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectCategory; +import net.minecraft.world.entity.LivingEntity; + +public final class BleedingMobEffect extends MobEffect { + public BleedingMobEffect() { + super(MobEffectCategory.HARMFUL, 0x8F1020); + } + + @Override + public void applyEffectTick(LivingEntity entity, int amplifier) { + entity.hurt(entity.damageSources().magic(), 1.0F + amplifier); + } + + @Override + public boolean isDurationEffectTick(int duration, int amplifier) { + return duration % 20 == 0; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/BloodMoonMobEffect.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/BloodMoonMobEffect.java new file mode 100644 index 00000000..c06e1359 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/BloodMoonMobEffect.java @@ -0,0 +1,10 @@ +package com.craisinlord.antarchy.content.effect; + +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectCategory; + +public final class BloodMoonMobEffect extends MobEffect { + public BloodMoonMobEffect() { + super(MobEffectCategory.BENEFICIAL, 0xB51B2D); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/CommandedBehavior.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/CommandedBehavior.java index 8286d21a..83b1b93d 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/CommandedBehavior.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/CommandedBehavior.java @@ -1,13 +1,18 @@ package com.craisinlord.antarchy.content.effect; +import com.craisinlord.antarchy.config.AntarchySettings; import java.util.UUID; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.Mob; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; public final class CommandedBehavior { + private static final ResourceLocation INVESTITURE_ATTACK = new ResourceLocation("antarchy", "royal_investiture_attack"); + private static final ResourceLocation INVESTITURE_SPEED = new ResourceLocation("antarchy", "royal_investiture_speed"); private CommandedBehavior() { } @@ -26,6 +31,14 @@ public final class CommandedBehavior { clear(mob); return; } + syncInvestiture(mob, access.antarchy$isRoyalInvested()); + if (mob.tickCount % 10 == 0) { + LivingEntity commandedCandidate = findCommanderTarget(mob, commander); + if (commandedCandidate != null) { + mob.setTarget(commandedCandidate); + access.antarchy$setCommandedTargetOwned(true); + } + } LivingEntity target = mob.getTarget(); if (target != null && isProtectedAlly(mob, target)) { mob.setTarget(null); @@ -92,6 +105,33 @@ public final class CommandedBehavior { && !isProtectedAlly(mob, target) && !target.isAlliedTo(commander); } + private static LivingEntity findCommanderTarget(Mob mob, Entity commander) { + if (mob instanceof CommandedEntityAccess access && access.antarchy$isRoyalInvested() + && commander instanceof net.minecraft.world.entity.player.Player player) { + LivingEntity marked = JudgmentMarkManager.markedTarget(player); + if (isValidTarget(mob, commander, marked)) return marked; + } + LivingEntity target = commander instanceof Mob commanderMob ? commanderMob.getTarget() : null; + if (isValidTarget(mob, commander, target)) { + return target; + } + if (commander instanceof net.minecraft.world.entity.player.Player player) { + target = player.getLastHurtMob(); + if (isValidTarget(mob, commander, target)) { + return target; + } + target = player.getLastHurtByMob(); + if (isValidTarget(mob, commander, target)) { + return target; + } + } + return mob.level().getEntitiesOfClass(Mob.class, mob.getBoundingBox().inflate(32.0D), + other -> other != mob && other != commander && commander.equals(other.getTarget()) + && isValidTarget(mob, commander, other)).stream() + .min((a, b) -> Double.compare(mob.distanceToSqr(a), mob.distanceToSqr(b))) + .orElse(null); + } + private static void tryPassiveCommandedAttack(Mob mob, LivingEntity target) { if (mob.getAttribute(Attributes.ATTACK_DAMAGE) != null && mob.getAttributeValue(Attributes.ATTACK_DAMAGE) > 0.0D) { @@ -101,7 +141,9 @@ public final class CommandedBehavior { if (mob.tickCount % 20 != 0 || mob.distanceToSqr(target) > 4.0D) { return; } - if (target.hurt(mob.damageSources().mobAttack(mob), 1.0F)) { + float damage = mob instanceof CommandedEntityAccess access && access.antarchy$isRoyalInvested() + ? (float) AntarchySettings.royalGuardianMusterPassiveDamageFloor() : 1.0F; + if (target.hurt(mob.damageSources().mobAttack(mob), damage)) { mob.swing(net.minecraft.world.InteractionHand.MAIN_HAND); } } @@ -122,6 +164,29 @@ public final class CommandedBehavior { mob.setTarget(null); } access.antarchy$setCommandedTargetOwned(false); + access.antarchy$setRoyalInvested(false); + syncInvestiture(mob, false); access.antarchy$setCommanderUuid(null); } + + public static void syncInvestiture(Mob mob, boolean active) { + setModifier(mob, Attributes.ATTACK_DAMAGE, INVESTITURE_ATTACK, + active ? AntarchySettings.royalGuardianMusterAttackBonus() : 0.0D); + setModifier(mob, Attributes.MOVEMENT_SPEED, INVESTITURE_SPEED, + active ? AntarchySettings.royalGuardianMusterSpeedBonus() : 0.0D); + } + + private static void setModifier(Mob mob, net.minecraft.world.entity.ai.attributes.Attribute attribute, + ResourceLocation id, double amount) { + var instance = mob.getAttribute(attribute); + if (instance == null) return; + UUID uuid = UUID.nameUUIDFromBytes(id.toString().getBytes()); + if (amount > 0.0D) { + if (instance.getModifier(uuid) == null) { + instance.addTransientModifier(new AttributeModifier(uuid, id.toString(), amount, AttributeModifier.Operation.MULTIPLY_BASE)); + } + } else { + instance.removeModifier(uuid); + } + } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/CommandedEntityAccess.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/CommandedEntityAccess.java index 6907148d..18904cbd 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/CommandedEntityAccess.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/CommandedEntityAccess.java @@ -7,4 +7,6 @@ public interface CommandedEntityAccess { void antarchy$setCommanderUuid(UUID uuid); boolean antarchy$isCommandedTargetOwned(); void antarchy$setCommandedTargetOwned(boolean owned); + boolean antarchy$isRoyalInvested(); + void antarchy$setRoyalInvested(boolean invested); } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/ContractedMobEffect.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/ContractedMobEffect.java deleted file mode 100644 index 4f2a8f67..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/ContractedMobEffect.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.craisinlord.antarchy.content.effect; - -import net.minecraft.world.effect.MobEffect; -import net.minecraft.world.effect.MobEffectCategory; -import net.minecraft.world.entity.LivingEntity; - -/** Accelerates the affected entity's local time rate. */ -public final class ContractedMobEffect extends MobEffect { - public static final double RATE = 2.0D; - public static final double STRONG_RATE = 3.0D; - - public ContractedMobEffect() { - super(MobEffectCategory.BENEFICIAL, 0xD5A63A); - } - - @Override - public void applyEffectTick(LivingEntity entity, int amplifier) { - } - - @Override - public boolean isDurationEffectTick(int duration, int amplifier) { - return true; - } - - public static double rateForAmplifier(int amplifier) { - return amplifier > 0 ? STRONG_RATE : RATE; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/DilatedMobEffect.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/DilatedMobEffect.java deleted file mode 100644 index 57498f8b..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/DilatedMobEffect.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.craisinlord.antarchy.content.effect; - -import net.minecraft.world.effect.MobEffect; -import net.minecraft.world.effect.MobEffectCategory; -import net.minecraft.world.entity.LivingEntity; - -public final class DilatedMobEffect extends MobEffect { - public static final double RATE = 0.35D; - public static final double STRONG_RATE = 0.2D; - - public DilatedMobEffect() { - super(MobEffectCategory.HARMFUL, 0x6C4AB6); - } - - @Override - public void applyEffectTick(LivingEntity entity, int amplifier) { - } - - @Override - public boolean isDurationEffectTick(int duration, int amplifier) { - return true; - } - - public static double rateForAmplifier(int amplifier) { - return amplifier > 0 ? STRONG_RATE : RATE; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/DreadMobEffect.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/DreadMobEffect.java index 8c151303..d8d3072b 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/DreadMobEffect.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/DreadMobEffect.java @@ -7,7 +7,6 @@ import net.minecraft.world.effect.MobEffect; import net.minecraft.world.effect.MobEffectCategory; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.phys.Vec3; public final class DreadMobEffect extends MobEffect { public DreadMobEffect() { @@ -23,8 +22,7 @@ public final class DreadMobEffect extends MobEffect { int maxTicks = Math.max(minTicks, (int) Math.round(AntarchySettings.dreadHallucinationMobMaxInterval() * 20.0D)); int averageTicks = (minTicks + maxTicks) / 2; if (player.getRandom().nextInt(averageTicks) == 0) { - Vec3 spawnPos = player.position().add(0.0D, player.getBbHeight() * 0.6D, 0.0D); - NightmareBiteEntity.spawnAt(serverLevel, spawnPos, player.getYRot(), false); + NightmareBiteEntity.spawnAt(serverLevel, player, false); } } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/InvertedMobEffect.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/InvertedMobEffect.java deleted file mode 100644 index cb1092b9..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/InvertedMobEffect.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.craisinlord.antarchy.content.effect; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityTransition; -import net.minecraft.world.effect.MobEffect; -import net.minecraft.world.effect.MobEffectCategory; -import net.minecraft.world.entity.LivingEntity; - -public final class InvertedMobEffect extends MobEffect { - private static final AntarchyGravityTransition EFFECT_TRANSITION = new AntarchyGravityTransition(12); - - public InvertedMobEffect() { - super(MobEffectCategory.HARMFUL, 0x8B0000); - } - - - @Override - public void applyEffectTick(LivingEntity entity, int amplifier) { - if (!entity.level().isClientSide()) { - if (AntarchyGravityApi.getGravityDirection(entity) != AntarchyGravityDirection.UP || !AntarchyGravityApi.isGravityForced(entity)) { - AntarchyGravityApi.setForcedGravityDirection(entity, AntarchyGravityDirection.UP, EFFECT_TRANSITION); - } - } else { - // Mob effects are synced by vanilla, so this fires on the client too. - // If the gravity state hasn't been applied yet , apply it directly without position adjustment. - if (!AntarchyGravityApi.isGravityInverted(entity)) { - AntarchyGravityApi.applySyncedState(entity, AntarchyGravityDirection.UP, AntarchyGravityDirection.UP, true, 0, 0); - } - } - } - - - @Override - public boolean isDurationEffectTick(int duration, int amplifier) { - return true; - } - -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/JudgmentMarkAccess.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/JudgmentMarkAccess.java new file mode 100644 index 00000000..4b516bd6 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/JudgmentMarkAccess.java @@ -0,0 +1,7 @@ +package com.craisinlord.antarchy.content.effect; + +public interface JudgmentMarkAccess { + boolean antarchy$isJudgmentMarked(); + + void antarchy$setJudgmentMarked(boolean marked); +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/JudgmentMarkManager.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/JudgmentMarkManager.java new file mode 100644 index 00000000..962ce419 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/JudgmentMarkManager.java @@ -0,0 +1,137 @@ +package com.craisinlord.antarchy.content.effect; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.item.RoyalGuardianArmorItem; +import java.util.HashMap; +import java.util.Map; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; +import java.util.WeakHashMap; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; + +public final class JudgmentMarkManager { + private static final Map MARKS = new WeakHashMap<>(); + + private JudgmentMarkManager() { + } + + public static boolean recordSuccessfulHit(Player owner, LivingEntity target) { + if (!(owner instanceof ServerPlayer serverPlayer) || !(target.level() instanceof ServerLevel level) + || owner.level() != target.level() || !hasGuardianArmor(owner) || !target.isAlive()) { + return false; + } + + MarkBook book = MARKS.computeIfAbsent(level, ignored -> new MarkBook()); + UUID ownerId = owner.getUUID(); + Mark current = book.byOwner.get(ownerId); + boolean wasMarked = current != null && current.targetId.equals(target.getUUID()) + && current.expiresAt > level.getGameTime(); + if (current != null && !current.targetId.equals(target.getUUID())) { + removeOwnerFromTarget(book, ownerId, current.targetId); + refreshVisibleState(level, current.targetId); + } + book.byOwner.put(ownerId, new Mark(target.getUUID(), level.getGameTime() + + Math.max(1, AntarchySettings.royalGuardianJudgmentDurationTicks()))); + book.ownersByTarget.computeIfAbsent(target.getUUID(), ignored -> new HashSet<>()).add(ownerId); + refreshVisibleState(target); + return wasMarked; + } + + public static boolean isMarkedBy(Player owner, LivingEntity target) { + if (!(target.level() instanceof ServerLevel level)) { + return false; + } + MarkBook book = MARKS.get(level); + if (book == null) { + return false; + } + Mark mark = book.byOwner.get(owner.getUUID()); + return mark != null && mark.targetId.equals(target.getUUID()) && mark.expiresAt > level.getGameTime() + && hasGuardianArmor(owner); + } + + public static LivingEntity markedTarget(Player owner) { + if (!(owner instanceof ServerPlayer serverPlayer) || !(owner.level() instanceof ServerLevel level)) return null; + MarkBook book = MARKS.get(level); + Mark mark = book == null ? null : book.byOwner.get(owner.getUUID()); + if (mark == null || mark.expiresAt <= level.getGameTime() || !hasGuardianArmor(owner)) return null; + net.minecraft.world.entity.Entity entity = level.getEntity(mark.targetId); + return entity instanceof LivingEntity living && living.isAlive() ? living : null; + } + + public static void tickTarget(LivingEntity target) { + if (!(target.level() instanceof ServerLevel level)) { + return; + } + MarkBook book = MARKS.get(level); + if (book == null || book.byOwner.isEmpty()) { + return; + } + long now = level.getGameTime(); + UUID targetId = target.getUUID(); + Set ownerIds = book.ownersByTarget.get(targetId); + if (ownerIds == null || ownerIds.isEmpty()) { + if (target instanceof JudgmentMarkAccess access) access.antarchy$setJudgmentMarked(false); + return; + } + for (UUID ownerId : Set.copyOf(ownerIds)) { + Mark mark = book.byOwner.get(ownerId); + ServerPlayer owner = level.getServer().getPlayerList().getPlayer(ownerId); + if (mark == null || mark.expiresAt <= now || owner == null || owner.level() != level || !hasGuardianArmor(owner)) { + book.byOwner.remove(ownerId); + ownerIds.remove(ownerId); + } + } + if (ownerIds.isEmpty()) book.ownersByTarget.remove(targetId); + boolean active = !ownerIds.isEmpty(); + if (target instanceof JudgmentMarkAccess access) { + access.antarchy$setJudgmentMarked(active); + } + if (book.byOwner.isEmpty()) { + MARKS.remove(level); + } + } + + private static void refreshVisibleState(LivingEntity target) { + if (target instanceof JudgmentMarkAccess access) { + access.antarchy$setJudgmentMarked(true); + } + } + + private static void refreshVisibleState(ServerLevel level, UUID targetId) { + net.minecraft.world.entity.Entity entity = level.getEntity(targetId); + if (entity instanceof LivingEntity target && target instanceof JudgmentMarkAccess access) { + MarkBook book = MARKS.get(level); + boolean stillMarked = book != null && !book.ownersByTarget.getOrDefault(targetId, Set.of()).isEmpty(); + access.antarchy$setJudgmentMarked(stillMarked); + } + } + + private static void removeOwnerFromTarget(MarkBook book, UUID ownerId, UUID targetId) { + Set owners = book.ownersByTarget.get(targetId); + if (owners != null) { + owners.remove(ownerId); + if (owners.isEmpty()) book.ownersByTarget.remove(targetId); + } + } + + private static boolean hasGuardianArmor(Player player) { + return player.getItemBySlot(EquipmentSlot.HEAD).getItem() instanceof RoyalGuardianArmorItem + || player.getItemBySlot(EquipmentSlot.CHEST).getItem() instanceof RoyalGuardianArmorItem + || player.getItemBySlot(EquipmentSlot.LEGS).getItem() instanceof RoyalGuardianArmorItem + || player.getItemBySlot(EquipmentSlot.FEET).getItem() instanceof RoyalGuardianArmorItem; + } + + private record Mark(UUID targetId, long expiresAt) { + } + + private static final class MarkBook { + private final Map byOwner = new HashMap<>(); + private final Map> ownersByTarget = new HashMap<>(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/RoyalBoundaryManager.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/RoyalBoundaryManager.java new file mode 100644 index 00000000..94843b19 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/RoyalBoundaryManager.java @@ -0,0 +1,265 @@ +package com.craisinlord.antarchy.content.effect; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.item.RoyalGuardianArmorItem; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; +import java.util.WeakHashMap; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.core.particles.DustParticleOptions; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.OwnableEntity; +import net.minecraft.world.entity.projectile.Projectile; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import org.joml.Vector3f; + +public final class RoyalBoundaryManager { + private static final int ALLY_REFRESH_INTERVAL = 10; + private static final DustParticleOptions ROYAL_GOLD = new DustParticleOptions(new Vector3f(1.0F, 0.72F, 0.12F), 1.15F); + private static final Map> BOUNDARIES = new WeakHashMap<>(); + private static final Map> ARRESTED = new WeakHashMap<>(); + + private RoyalBoundaryManager() { + } + + public static boolean activate(ServerPlayer owner) { + if (!(owner.level() instanceof ServerLevel level) || !wearsGuardianChestplate(owner)) return false; + long now = level.getGameTime(); + Map boundaries = BOUNDARIES.computeIfAbsent(level, ignored -> new HashMap<>()); + net.minecraft.world.item.Item chestplate = owner.getItemBySlot(EquipmentSlot.CHEST).getItem(); + if (owner.getCooldowns().isOnCooldown(chestplate) || boundaries.containsKey(owner.getUUID())) { + owner.displayClientMessage(net.minecraft.network.chat.Component.translatable("message.antarchy.royal_boundary.recharging"), true); + return false; + } + double radius = Math.max(0.5D, AntarchySettings.royalGuardianBoundaryRadius()); + boundaries.put(owner.getUUID(), new Boundary(now + Math.max(1, AntarchySettings.royalGuardianBoundaryDurationTicks()), radius)); + owner.getCooldowns().addCooldown(chestplate, Math.max(0, AntarchySettings.royalGuardianBoundaryCooldownTicks())); + owner.displayClientMessage(net.minecraft.network.chat.Component.translatable("message.antarchy.royal_boundary.activated"), true); + level.playSound(null, owner.blockPosition(), SoundEvents.BEACON_ACTIVATE, SoundSource.PLAYERS, 1.0F, 1.25F); + burst(level, center(owner), radius, 36); + return true; + } + + public static void tickOwner(ServerPlayer owner) { + if (!(owner.level() instanceof ServerLevel level)) return; + UUID ownerId = owner.getUUID(); + for (ServerLevel otherLevel : BOUNDARIES.keySet().toArray(ServerLevel[]::new)) { + if (otherLevel != level) removeBoundary(otherLevel, ownerId); + } + Map boundaries = BOUNDARIES.get(level); + if (boundaries == null) return; + Boundary boundary = boundaries.get(ownerId); + if (boundary == null) return; + long now = level.getGameTime(); + if (!owner.isAlive() || owner.isRemoved() || !wearsGuardianChestplate(owner) || now >= boundary.expiresAt) { + boundaries.remove(ownerId); + if (boundaries.isEmpty()) BOUNDARIES.remove(level); + return; + } + if (owner.tickCount % ALLY_REFRESH_INTERVAL == 0) { + AABB area = owner.getBoundingBox().inflate(boundary.radius); + for (LivingEntity entity : level.getEntitiesOfClass(LivingEntity.class, area, + living -> living.isAlive() && living.distanceToSqr(owner) <= boundary.radius * boundary.radius && isAlly(owner, living))) { + entity.addEffect(new MobEffectInstance(MobEffects.DAMAGE_BOOST, ALLY_REFRESH_INTERVAL + 5, + Math.max(0, AntarchySettings.royalGuardianBoundaryStrengthAmplifier()), true, false, true), owner); + } + } + if (owner.tickCount % 5 == 0) renderBoundary(level, center(owner), boundary.radius); + } + + public static void clearOwner(ServerPlayer owner) { + UUID ownerId = owner.getUUID(); + for (ServerLevel level : BOUNDARIES.keySet().toArray(ServerLevel[]::new)) removeBoundary(level, ownerId); + } + + private static void removeBoundary(ServerLevel level, UUID ownerId) { + Map boundaries = BOUNDARIES.get(level); + if (boundaries != null) { + boundaries.remove(ownerId); + if (boundaries.isEmpty()) BOUNDARIES.remove(level); + } + } + + public static void prepareProjectile(Projectile projectile) { + if (!(projectile.level() instanceof ServerLevel level) || projectile.isRemoved()) return; + Map arrested = ARRESTED.get(level); + if (arrested != null && arrested.containsKey(projectile.getUUID())) { + ArrestedProjectile state = arrested.get(projectile.getUUID()); + if (!state.dropping) { + projectile.setDeltaMovement(Vec3.ZERO); + projectile.setNoGravity(true); + } + return; + } + Vec3 start = projectile.position(); + Vec3 movement = projectile.getDeltaMovement(); + if (movement.lengthSqr() > 1.0E-8D) { + tryCapture(level, projectile, start, start.add(movement)); + } + } + + public static void tickProjectile(Projectile projectile) { + if (!(projectile.level() instanceof ServerLevel level)) return; + Map arrested = ARRESTED.get(level); + ArrestedProjectile state = arrested == null ? null : arrested.get(projectile.getUUID()); + if (state != null) { + tickArrested(level, projectile, state); + return; + } + tryCapture(level, projectile, new Vec3(projectile.xo, projectile.yo, projectile.zo), projectile.position()); + } + + private static void tryCapture(ServerLevel level, Projectile projectile, Vec3 start, Vec3 end) { + Map boundaries = BOUNDARIES.get(level); + if (boundaries == null || boundaries.isEmpty() || projectile.isRemoved()) return; + var boundaryIterator = boundaries.entrySet().iterator(); + while (boundaryIterator.hasNext()) { + Map.Entry entry = boundaryIterator.next(); + ServerPlayer owner = level.getServer().getPlayerList().getPlayer(entry.getKey()); + if (owner == null || owner.level() != level || !owner.isAlive() || !wearsGuardianChestplate(owner) + || level.getGameTime() >= entry.getValue().expiresAt) { + boundaryIterator.remove(); + continue; + } + Map states = ARRESTED.computeIfAbsent(level, ignored -> new HashMap<>()); + long ownedArrests = states.values().stream().filter(arrest -> entry.getKey().equals(arrest.ownerId)).count(); + if (ownedArrests >= Math.max(0, AntarchySettings.royalGuardianBoundaryProjectileCap())) continue; + if (isProjectileAlly(owner, projectile)) continue; + Vec3 crossing = inwardIntersection(start, end, center(owner), entry.getValue().radius); + if (crossing == null) continue; + projectile.setPos(crossing.x, crossing.y, crossing.z); + projectile.setDeltaMovement(Vec3.ZERO); + boolean noGravity = projectile.isNoGravity(); + projectile.setNoGravity(true); + states.put(projectile.getUUID(), new ArrestedProjectile(entry.getKey(), + level.getGameTime() + Math.max(0, AntarchySettings.royalGuardianBoundaryArrestTicks()), false, 0L, noGravity)); + level.playSound(null, crossing.x, crossing.y, crossing.z, SoundEvents.AMETHYST_BLOCK_CHIME, SoundSource.PLAYERS, 0.65F, 1.7F); + level.sendParticles(ROYAL_GOLD, crossing.x, crossing.y, crossing.z, 18, 0.3D, 0.3D, 0.3D, 0.3D); + return; + } + if (boundaries.isEmpty()) BOUNDARIES.remove(level); + } + + private static void tickArrested(ServerLevel level, Projectile projectile, ArrestedProjectile state) { + if (projectile.isRemoved()) { + removeArrest(level, projectile.getUUID()); + return; + } + long now = level.getGameTime(); + if (!state.dropping && now < state.releaseAt) { + projectile.setDeltaMovement(Vec3.ZERO); + projectile.setNoGravity(true); + if (now % 2 == 0) { + level.sendParticles(ROYAL_GOLD, projectile.getX(), projectile.getY(), projectile.getZ(), 3, 0.12D, 0.12D, 0.12D, 0.02D); + } + if (state.releaseAt - now <= 6) projectile.setXRot((float) (90.0D * (1.0D - (state.releaseAt - now) / 6.0D))); + return; + } + if (!state.dropping) { + state.dropping = true; + state.dropUntil = now + Math.max(0, AntarchySettings.royalGuardianBoundaryDropTicks()); + projectile.setNoGravity(false); + projectile.setXRot(90.0F); + } + if (now < state.dropUntil) { + projectile.setDeltaMovement(0.0D, -0.45D, 0.0D); + projectile.setNoGravity(false); + } else { + projectile.setNoGravity(state.wasNoGravity); + removeArrest(level, projectile.getUUID()); + } + } + + private static void removeArrest(ServerLevel level, UUID projectileId) { + Map states = ARRESTED.get(level); + if (states != null) { + states.remove(projectileId); + if (states.isEmpty()) ARRESTED.remove(level); + } + } + + private static Vec3 inwardIntersection(Vec3 start, Vec3 end, Vec3 center, double radius) { + Vec3 offset = start.subtract(center); + if (offset.lengthSqr() <= radius * radius) return null; + Vec3 segment = end.subtract(start); + double a = segment.lengthSqr(); + if (a < 1.0E-8D) return null; + double b = 2.0D * offset.dot(segment); + double c = offset.lengthSqr() - radius * radius; + double discriminant = b * b - 4.0D * a * c; + if (discriminant < 0.0D) return null; + double t = (-b - Math.sqrt(discriminant)) / (2.0D * a); + return t >= 0.0D && t <= 1.0D ? start.add(segment.scale(t)) : null; + } + + private static boolean isProjectileAlly(ServerPlayer owner, Projectile projectile) { + Entity shooter = projectile.getOwner(); + return shooter == owner || (shooter != null && (shooter.isAlliedTo(owner) || owner.isAlliedTo(shooter) + || (shooter instanceof CommandedEntityAccess access && owner.getUUID().equals(access.antarchy$getCommanderUuid())))); + } + + private static boolean isAlly(ServerPlayer owner, LivingEntity entity) { + if (entity == owner || entity.isAlliedTo(owner) || owner.isAlliedTo(entity)) return true; + if (entity instanceof OwnableEntity ownable && owner.getUUID().equals(ownable.getOwnerUUID())) return true; + return entity instanceof CommandedEntityAccess access && owner.getUUID().equals(access.antarchy$getCommanderUuid()); + } + + private static boolean wearsGuardianChestplate(ServerPlayer player) { + return player.getItemBySlot(EquipmentSlot.CHEST).getItem() instanceof RoyalGuardianArmorItem armor + && armor.getArmorType() == net.minecraft.world.item.ArmorItem.Type.CHESTPLATE; + } + + private static Vec3 center(ServerPlayer owner) { + return owner.position().add(0.0D, owner.getBbHeight() * 0.5D, 0.0D); + } + + private static void renderBoundary(ServerLevel level, Vec3 center, double radius) { + for (int i = 0; i < 24; i++) { + double angle = (Math.PI * 2.0D * i) / 24.0D; + double x = center.x + Math.cos(angle) * radius; + double z = center.z + Math.sin(angle) * radius; + level.sendParticles(ROYAL_GOLD, x, center.y - 1.0D, z, 1, 0.04D, 0.1D, 0.04D, 0.02D); + if (i % 4 == 0) level.sendParticles(ParticleTypes.END_ROD, x, center.y + 1.2D, z, 1, 0.02D, 0.3D, 0.02D, 0.0D); + } + } + + private static void burst(ServerLevel level, Vec3 center, double radius, int count) { + level.sendParticles(ROYAL_GOLD, center.x, center.y, center.z, count, radius * 0.35D, 1.2D, radius * 0.35D, 0.18D); + level.sendParticles(ParticleTypes.END_ROD, center.x, center.y, center.z, count / 2, radius * 0.25D, 0.8D, radius * 0.25D, 0.08D); + } + + private static final class Boundary { + private final long expiresAt; + private final double radius; + private Boundary(long expiresAt, double radius) { + this.expiresAt = expiresAt; + this.radius = radius; + } + } + + private static final class ArrestedProjectile { + private final UUID ownerId; + private final long releaseAt; + private boolean dropping; + private long dropUntil; + private final boolean wasNoGravity; + + private ArrestedProjectile(UUID ownerId, long releaseAt, boolean dropping, long dropUntil, boolean wasNoGravity) { + this.ownerId = ownerId; + this.releaseAt = releaseAt; + this.dropping = dropping; + this.dropUntil = dropUntil; + this.wasNoGravity = wasNoGravity; + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/RoyalEffectEligibility.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/RoyalEffectEligibility.java index b18c4422..00844546 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/RoyalEffectEligibility.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/RoyalEffectEligibility.java @@ -22,6 +22,10 @@ public final class RoyalEffectEligibility { return RoyalEffectHooks.dilatedHolder() != null && instance.getEffect() == RoyalEffectHooks.dilatedHolder(); } + public static boolean isContracted(MobEffectInstance instance) { + return RoyalEffectHooks.contractedHolder() != null && instance.getEffect() == RoyalEffectHooks.contractedHolder(); + } + public static boolean canApplyCommanded(LivingEntity entity) { return entity instanceof Mob mob && !(entity instanceof Player) diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/RoyalEffectHooks.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/RoyalEffectHooks.java index 451cf5cb..e49f9770 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/RoyalEffectHooks.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/RoyalEffectHooks.java @@ -1,5 +1,6 @@ package com.craisinlord.antarchy.content.effect; +import com.craisinlord.anthology.effect.AnthologyEffects; import com.craisinlord.antarchy.Antarchy; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.Registries; @@ -10,10 +11,6 @@ import net.minecraft.world.effect.MobEffect; public final class RoyalEffectHooks { private static final ResourceKey COMMANDED_KEY = ResourceKey.create(Registries.MOB_EFFECT, new ResourceLocation(Antarchy.MODID, "commanded")); - private static final ResourceKey DILATED_KEY = ResourceKey.create(Registries.MOB_EFFECT, - new ResourceLocation(Antarchy.MODID, "dilated")); - private static final ResourceKey CONTRACTED_KEY = ResourceKey.create(Registries.MOB_EFFECT, - new ResourceLocation(Antarchy.MODID, "contracted")); private RoyalEffectHooks() { } @@ -23,10 +20,10 @@ public final class RoyalEffectHooks { } public static MobEffect dilatedHolder() { - return BuiltInRegistries.MOB_EFFECT.get(DILATED_KEY); + return AnthologyEffects.dilated(); } public static MobEffect contractedHolder() { - return BuiltInRegistries.MOB_EFFECT.get(CONTRACTED_KEY); + return AnthologyEffects.contracted(); } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/RoyalVitalityPenaltyEffect.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/RoyalVitalityPenaltyEffect.java new file mode 100644 index 00000000..a4fac1ce --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/RoyalVitalityPenaltyEffect.java @@ -0,0 +1,42 @@ +package com.craisinlord.antarchy.content.effect; + +import com.craisinlord.antarchy.Antarchy; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectCategory; +import net.minecraft.world.entity.ai.attributes.AttributeInstance; +import net.minecraft.world.entity.ai.attributes.AttributeMap; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import java.nio.charset.StandardCharsets; +import java.util.UUID; +import net.minecraft.world.entity.LivingEntity; + +public final class RoyalVitalityPenaltyEffect extends MobEffect { + public static final ResourceLocation MODIFIER_ID = + new ResourceLocation(Antarchy.MODID, "royal_vitality_penalty"); + private static final UUID MODIFIER_UUID = UUID.nameUUIDFromBytes(MODIFIER_ID.toString().getBytes(StandardCharsets.UTF_8)); + + public RoyalVitalityPenaltyEffect() { + super(MobEffectCategory.HARMFUL, 0xD8A52B); + } + + @Override + public void addAttributeModifiers(LivingEntity entity, AttributeMap attributeMap, int amplifier) { + AttributeInstance maxHealth = attributeMap.getInstance(Attributes.MAX_HEALTH); + if (maxHealth == null) return; + maxHealth.removeModifier(MODIFIER_UUID); + maxHealth.addTransientModifier(new AttributeModifier( + MODIFIER_UUID, MODIFIER_ID.toString(), -0.5D, AttributeModifier.Operation.MULTIPLY_TOTAL)); + if (entity.getHealth() > entity.getMaxHealth()) { + entity.setHealth(entity.getMaxHealth()); + } + } + + @Override + public void removeAttributeModifiers(LivingEntity entity, AttributeMap attributeMap, int amplifier) { + AttributeInstance maxHealth = attributeMap.getInstance(Attributes.MAX_HEALTH); + if (maxHealth == null) return; + maxHealth.removeModifier(MODIFIER_UUID); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/TimeDilationEligibility.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/TimeDilationEligibility.java deleted file mode 100644 index c36c9db3..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/TimeDilationEligibility.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.craisinlord.antarchy.content.effect; - -import com.craisinlord.antarchy.content.AntarchyTags; -import net.minecraft.world.entity.LivingEntity; - -/** - * Version-neutral eligibility rules for the Dilated effect. - * - * The 1.21 implementation also checks Royal armor. Those items do not exist - * in the 1.20 source set yet, so the shared 1.20 rule set intentionally - * retains the entity-tag checks here and can be extended when Royal content - * is ported. - */ -public final class TimeDilationEligibility { - private TimeDilationEligibility() { - } - - public static boolean canApply(LivingEntity entity) { - return !entity.getType().is(AntarchyTags.Entities.TIME_DILATION_IMMUNE) - && !entity.getType().is(AntarchyTags.Entities.DILATED_BLACKLIST); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/enchantment/AntarchyEnchantability.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/enchantment/AntarchyEnchantability.java new file mode 100644 index 00000000..101c8f26 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/enchantment/AntarchyEnchantability.java @@ -0,0 +1,156 @@ +package com.craisinlord.antarchy.content.enchantment; + +import com.craisinlord.antarchy.Antarchy; +import java.util.IdentityHashMap; +import java.util.Map; +import java.util.function.Predicate; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.TagKey; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.enchantment.Enchantment; +import net.minecraft.world.item.enchantment.Enchantments; +import org.jetbrains.annotations.Nullable; + +public final class AntarchyEnchantability { + private static final TagKey SWORDS = vanilla("swords"); + private static final TagKey AXES = vanilla("axes"); + private static final TagKey PICKAXES = vanilla("pickaxes"); + private static final TagKey SHOVELS = vanilla("shovels"); + private static final TagKey HOES = vanilla("hoes"); + private static final TagKey HEAD_ARMOR = vanilla("head_armor"); + private static final TagKey CHEST_ARMOR = vanilla("chest_armor"); + private static final TagKey LEG_ARMOR = vanilla("leg_armor"); + private static final TagKey FOOT_ARMOR = vanilla("foot_armor"); + private static final TagKey ENCHANTABLE_BOW = vanilla("enchantable/bow"); + private static final TagKey ENCHANTABLE_CROSSBOW = vanilla("enchantable/crossbow"); + private static final TagKey ENCHANTABLE_DURABILITY = vanilla("enchantable/durability"); + private static final TagKey ENCHANTABLE_EQUIPPABLE = vanilla("enchantable/equippable"); + private static final TagKey ENCHANTABLE_FIRE_ASPECT = vanilla("enchantable/fire_aspect"); + private static final TagKey ENCHANTABLE_MACE = vanilla("enchantable/mace"); + private static final TagKey ENCHANTABLE_TRIDENT = vanilla("enchantable/trident"); + private static final TagKey ENCHANTABLE_VANISHING = vanilla("enchantable/vanishing"); + private static final TagKey ENCHANTABLE_WEAPON = vanilla("enchantable/weapon"); + + private static final Predicate> HEAD = item -> item.is(HEAD_ARMOR); + private static final Predicate> CHEST = item -> item.is(CHEST_ARMOR); + private static final Predicate> LEGS = item -> item.is(LEG_ARMOR); + private static final Predicate> FEET = item -> item.is(FOOT_ARMOR); + private static final Predicate> ARMOR = HEAD.or(CHEST).or(LEGS).or(FEET); + private static final Predicate> SWORD = item -> item.is(SWORDS); + private static final Predicate> SHARP_WEAPON = SWORD.or(item -> item.is(AXES)); + private static final Predicate> MACE = item -> item.is(ENCHANTABLE_MACE); + private static final Predicate> WEAPON = SHARP_WEAPON.or(MACE).or(item -> item.is(ENCHANTABLE_WEAPON)); + private static final Predicate> FIRE_ASPECT = SWORD.or(MACE).or(item -> item.is(ENCHANTABLE_FIRE_ASPECT)); + private static final Predicate> MINING_LOOT = item -> item.is(AXES) || item.is(PICKAXES) || item.is(SHOVELS) || item.is(HOES); + private static final Predicate> BOW = item -> item.is(ENCHANTABLE_BOW); + private static final Predicate> CROSSBOW = item -> item.is(ENCHANTABLE_CROSSBOW); + private static final Predicate> TRIDENT = item -> item.is(ENCHANTABLE_TRIDENT); + private static final Predicate> MULTISHOT = CROSSBOW.or(item -> item.is(com.craisinlord.antarchy.content.AntarchyTags.Items.MULTISHOT_ENCHANTABLE)); + private static final Predicate> DURABILITY = ARMOR.or(SWORD).or(MINING_LOOT).or(BOW).or(CROSSBOW).or(TRIDENT).or(MACE) + .or(item -> item.is(ENCHANTABLE_DURABILITY)); + private static final Predicate> EQUIPPABLE = ARMOR.or(item -> item.is(ENCHANTABLE_EQUIPPABLE)); + private static final Predicate> VANISHING = DURABILITY.or(item -> item.is(ENCHANTABLE_VANISHING)); + + private static volatile Map rules; + + private AntarchyEnchantability() { + } + + @Nullable + public static Boolean supports(@Nullable Enchantment enchantment, @Nullable Item item) { + Rule rule = rule(enchantment, item); + return rule == null ? null : rule.supported().test(item.builtInRegistryHolder()); + } + + @Nullable + public static Boolean primary(@Nullable Enchantment enchantment, @Nullable Item item) { + Rule rule = rule(enchantment, item); + return rule == null ? null : rule.primary().test(item.builtInRegistryHolder()); + } + + @Nullable + private static Rule rule(@Nullable Enchantment enchantment, @Nullable Item item) { + if (enchantment == null || item == null) { + return null; + } + ResourceLocation itemId = BuiltInRegistries.ITEM.getKey(item); + if (!Antarchy.MODID.equals(itemId.getNamespace())) { + return null; + } + return rules().get(enchantment); + } + + private static Map rules() { + Map current = rules; + if (current != null) { + return current; + } + Map built = new IdentityHashMap<>(); + put(built, Enchantments.AQUA_AFFINITY, HEAD); + put(built, Enchantments.RESPIRATION, HEAD); + put(built, Enchantments.BINDING_CURSE, EQUIPPABLE); + put(built, Enchantments.ALL_DAMAGE_PROTECTION, ARMOR); + put(built, Enchantments.FIRE_PROTECTION, ARMOR); + put(built, Enchantments.BLAST_PROTECTION, ARMOR); + put(built, Enchantments.PROJECTILE_PROTECTION, ARMOR); + put(built, Enchantments.THORNS, ARMOR, CHEST); + put(built, Enchantments.FALL_PROTECTION, FEET); + put(built, Enchantments.DEPTH_STRIDER, FEET); + put(built, Enchantments.FROST_WALKER, FEET); + put(built, Enchantments.SOUL_SPEED, FEET); + put(built, Enchantments.SWIFT_SNEAK, LEGS); + put(built, Enchantments.SHARPNESS, SHARP_WEAPON, SWORD); + put(built, Enchantments.SMITE, WEAPON, SWORD); + put(built, Enchantments.BANE_OF_ARTHROPODS, WEAPON, SWORD); + put(built, Enchantments.FIRE_ASPECT, FIRE_ASPECT, SWORD); + put(built, Enchantments.KNOCKBACK, SWORD); + put(built, Enchantments.MOB_LOOTING, SWORD); + put(built, Enchantments.SWEEPING_EDGE, SWORD); + put(built, Enchantments.BLOCK_EFFICIENCY, MINING_LOOT); + put(built, Enchantments.SILK_TOUCH, MINING_LOOT); + put(built, Enchantments.BLOCK_FORTUNE, MINING_LOOT); + put(built, Enchantments.UNBREAKING, DURABILITY); + put(built, Enchantments.MENDING, DURABILITY); + put(built, Enchantments.VANISHING_CURSE, VANISHING); + put(built, Enchantments.POWER_ARROWS, BOW); + put(built, Enchantments.PUNCH_ARROWS, BOW); + put(built, Enchantments.FLAMING_ARROWS, BOW); + put(built, Enchantments.INFINITY_ARROWS, BOW); + put(built, Enchantments.MULTISHOT, MULTISHOT); + put(built, Enchantments.PIERCING, CROSSBOW); + put(built, Enchantments.QUICK_CHARGE, CROSSBOW); + put(built, Enchantments.LOYALTY, TRIDENT); + put(built, Enchantments.IMPALING, TRIDENT); + put(built, Enchantments.RIPTIDE, TRIDENT); + put(built, Enchantments.CHANNELING, TRIDENT); + Enchantment featherRising = AntarchyEnchantments.featherRising(); + Enchantment chronosphere = AntarchyEnchantments.chronosphere(); + put(built, featherRising, FEET); + put(built, chronosphere, CHEST); + if (featherRising != null && chronosphere != null) { + rules = built; + } + return built; + } + + private static void put(Map map, @Nullable Enchantment enchantment, Predicate> supported) { + put(map, enchantment, supported, supported); + } + + private static void put(Map map, @Nullable Enchantment enchantment, Predicate> supported, + Predicate> primary) { + if (enchantment != null) { + map.put(enchantment, new Rule(supported, primary)); + } + } + + private static TagKey vanilla(String path) { + return TagKey.create(Registries.ITEM, new ResourceLocation("minecraft", path)); + } + + private record Rule(Predicate> supported, Predicate> primary) { + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/enchantment/AntarchyEnchantments.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/enchantment/AntarchyEnchantments.java index fa93f01b..f3bb1be4 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/enchantment/AntarchyEnchantments.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/enchantment/AntarchyEnchantments.java @@ -1,41 +1,63 @@ package com.craisinlord.antarchy.content.enchantment; +import com.craisinlord.antarchy.Antarchy; import java.util.Map; import java.util.function.Supplier; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.enchantment.Enchantment; import net.minecraft.world.item.enchantment.EnchantmentHelper; -/** Loader-neutral access to the 1.20 registered enchantments. */ public final class AntarchyEnchantments { + public static final ResourceKey FEATHER_RISING = key("feather_rising"); + public static final ResourceKey CHRONOSPHERE = key("chronosphere"); private static Supplier featherRising = () -> null; private static Supplier chronosphere = () -> null; - private AntarchyEnchantments() {} + private AntarchyEnchantments() { + } public static void bind(Supplier feather, Supplier chrono) { featherRising = feather; chronosphere = chrono; } - public static Enchantment featherRising() { return featherRising.get(); } - public static Enchantment chronosphere() { return chronosphere.get(); } + public static Enchantment featherRising() { + return featherRising.get(); + } - public static int featherRisingLevel(LivingEntity entity) { return level(entity, EquipmentSlot.FEET, featherRising()); } - public static int chronosphereLevel(LivingEntity entity) { return level(entity, EquipmentSlot.CHEST, chronosphere()); } + public static Enchantment chronosphere() { + return chronosphere.get(); + } - private static int level(LivingEntity entity, EquipmentSlot slot, Enchantment enchantment) { + public static int featherRisingLevel(LivingEntity entity) { + return level(entity, EquipmentSlot.FEET, featherRising()); + } + + public static int chronosphereLevel(LivingEntity entity) { + return level(entity, EquipmentSlot.CHEST, chronosphere()); + } + + public static int level(LivingEntity entity, EquipmentSlot slot, Enchantment enchantment) { return enchantment == null ? 0 : EnchantmentHelper.getItemEnchantmentLevel(enchantment, entity.getItemBySlot(slot)); } public static void ensure(ItemStack stack, Enchantment enchantment, int level) { - if (enchantment == null) return; - Map enchantments = new java.util.HashMap<>(EnchantmentHelper.getEnchantments(stack)); + if (enchantment == null) { + return; + } + Map enchantments = new java.util.LinkedHashMap<>(EnchantmentHelper.getEnchantments(stack)); if (enchantments.getOrDefault(enchantment, 0) < level) { enchantments.put(enchantment, level); EnchantmentHelper.setEnchantments(enchantments, stack); } } + + private static ResourceKey key(String path) { + return ResourceKey.create(Registries.ENCHANTMENT, new ResourceLocation(Antarchy.MODID, path)); + } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/enchantment/ChronosphereEnchantment.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/enchantment/ChronosphereEnchantment.java index 0db329ee..9a79fa2a 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/enchantment/ChronosphereEnchantment.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/enchantment/ChronosphereEnchantment.java @@ -5,16 +5,41 @@ import net.minecraft.world.item.enchantment.Enchantment; import net.minecraft.world.item.enchantment.EnchantmentCategory; public final class ChronosphereEnchantment extends Enchantment { + public ChronosphereEnchantment() { + this(Rarity.VERY_RARE, EquipmentSlot.CHEST); + } + public ChronosphereEnchantment(Rarity rarity, EquipmentSlot... slots) { super(rarity, EnchantmentCategory.ARMOR_CHEST, slots); } @Override - public int getMaxLevel() { return 3; } + public int getMaxLevel() { + return 3; + } @Override - public int getMinCost(int level) { return 15 + (level - 1) * 15; } + public int getMinCost(int level) { + return 30 + (level - 1) * 15; + } @Override - public int getMaxCost(int level) { return getMinCost(level) + 35; } + public int getMaxCost(int level) { + return 55 + (level - 1) * 15; + } + + @Override + public boolean isTreasureOnly() { + return true; + } + + @Override + public boolean isTradeable() { + return false; + } + + @Override + public boolean isDiscoverable() { + return false; + } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/enchantment/FeatherRisingEnchantment.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/enchantment/FeatherRisingEnchantment.java index 78a88db4..7c69e730 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/enchantment/FeatherRisingEnchantment.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/enchantment/FeatherRisingEnchantment.java @@ -5,10 +5,41 @@ import net.minecraft.world.item.enchantment.Enchantment; import net.minecraft.world.item.enchantment.EnchantmentCategory; public final class FeatherRisingEnchantment extends Enchantment { + public FeatherRisingEnchantment() { + this(Rarity.RARE, EquipmentSlot.FEET); + } + public FeatherRisingEnchantment(Rarity rarity, EquipmentSlot... slots) { super(rarity, EnchantmentCategory.ARMOR_FEET, slots); } @Override - public int getMaxLevel() { return 3; } + public int getMaxLevel() { + return 1; + } + + @Override + public int getMinCost(int level) { + return 25; + } + + @Override + public int getMaxCost(int level) { + return 45; + } + + @Override + public boolean isTreasureOnly() { + return true; + } + + @Override + public boolean isTradeable() { + return false; + } + + @Override + public boolean isDiscoverable() { + return false; + } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/AlphaMantisEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/AlphaMantisEntity.java index c8aeed8d..ef9fb502 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/AlphaMantisEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/AlphaMantisEntity.java @@ -4,8 +4,12 @@ import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.boss.BossCombatUtil; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; +import com.craisinlord.anthology.gravity.GravityRotationUtil; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerBossEvent; import net.minecraft.server.level.ServerLevel; @@ -21,20 +25,37 @@ import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.MobSpawnType; import net.minecraft.world.entity.ai.attributes.AttributeSupplier; import net.minecraft.world.entity.ai.attributes.Attributes; -import net.minecraft.world.entity.ai.goal.MeleeAttackGoal; import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; import net.minecraft.world.level.block.LeavesBlock; import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.Nullable; public class AlphaMantisEntity extends MantisEntity { + private static final double ALPHA_ATTACK_START_RANGE = 6.0D; + private static final double ALPHA_ATTACK_HIT_REACH = 7.25D; + private static final double ALPHA_ATTACK_HALF_WIDTH = 3.5D; + private static final double ALPHA_ATTACK_VERTICAL_TOLERANCE = 4.25D; + private static final int PHASE_TRANSITION_TICKS = 35; + private static final double ENCOUNTER_HOME_RADIUS = 72.0D; + private static final double ENCOUNTER_LEASH_RADIUS = 96.0D; + private static final double FORCED_RETURN_RADIUS = 144.0D; + private static final int RESET_DELAY_TICKS = 300; + private static final double HOME_RETURN_SPEED = 1.05D; + private final ServerBossEvent bossEvent = new com.craisinlord.antarchy.content.boss.EntityLinkedServerBossEvent(this.getUUID(), Component.translatable("entity.antarchy.alpha_mantis"), BossEvent.BossBarColor.GREEN, BossEvent.BossBarOverlay.PROGRESS); private int summonCooldownTicks; + private int phaseTransitionTicks; + private int disengageTicks; + private boolean halfHealthTransitionComplete; + @Nullable + private BlockPos encounterHome; public AlphaMantisEntity(EntityType entityType, Level level) { super(entityType, level); @@ -50,12 +71,13 @@ public class AlphaMantisEntity extends MantisEntity { .add(Attributes.FLYING_SPEED, AntarchySettings.alphaMantisFlyingSpeed()) .add(Attributes.FOLLOW_RANGE, 48.0D) .add(Attributes.ARMOR, 8.0D) + .add(Attributes.ARMOR_TOUGHNESS, AntarchySettings.alphaMantisArmorToughness()) .add(Attributes.KNOCKBACK_RESISTANCE, 0.8D); } @Override public boolean isInvulnerableTo(DamageSource source) { - if (super.isInvulnerableTo(source)) { + if (this.phaseTransitionTicks > 0 || super.isInvulnerableTo(source)) { return true; } return BossCombatUtil.isOutOfDamageRange(this, AntarchySettings.alphaMantisDamageRange()); @@ -63,7 +85,15 @@ public class AlphaMantisEntity extends MantisEntity { @Override public boolean hurt(DamageSource source, float amount) { - return super.hurt(source, BossCombatUtil.capSingleHitAtHalfHealth(this, amount)); + if (BossCombatUtil.isMagicWarded(this) && BossCombatUtil.isMagicBurstSource(source)) { + amount *= (1.0F - (float) AntarchySettings.bossMagicWardReductionFraction()); + } + float preHealth = this.getHealth(); + boolean hurt = super.hurt(source, amount); + if (hurt) { + this.handleHalfHealthGate(preHealth); + } + return hurt; } public static boolean checkAlphaMantisSpawnRules(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { @@ -82,9 +112,14 @@ public class AlphaMantisEntity extends MantisEntity { } boolean atSurface = level.getHeightmapPos(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, pos).getY() <= pos.getY(); - boolean posOpen = level.isEmptyBlock(pos) && level.isEmptyBlock(pos.above()) && level.getFluidState(pos).isEmpty(); - boolean onSolidGround = level.getBlockState(pos.below()).isFaceSturdy(level, pos.below(), Direction.UP) + boolean hasFloorClearance = level.isEmptyBlock(pos.above()); + boolean hasCeilingClearance = level.isEmptyBlock(pos.below()); + boolean floorSupport = level.getBlockState(pos.below()).isFaceSturdy(level, pos.below(), Direction.UP) && !(level.getBlockState(pos.below()).getBlock() instanceof LeavesBlock); + boolean ceilingSupport = level.getBlockState(pos.above()).isFaceSturdy(level, pos.above(), Direction.DOWN) + && !(level.getBlockState(pos.above()).getBlock() instanceof LeavesBlock); + boolean posOpen = level.isEmptyBlock(pos) && (hasFloorClearance || hasCeilingClearance) && level.getFluidState(pos).isEmpty(); + boolean onSolidGround = floorSupport || ceilingSupport; if (!posOpen || !onSolidGround || !atSurface) { return false; @@ -108,13 +143,53 @@ public class AlphaMantisEntity extends MantisEntity { } @Override - protected MeleeAttackGoal createCombatGoal() { - return new MeleeAttackGoal(this, this.getCombatSpeed(), true); + protected double getCombatSpeed() { + return 1.05D; } @Override - protected double getCombatSpeed() { - return 1.05D; + protected double getAttackStartRange() { + return ALPHA_ATTACK_START_RANGE; + } + + @Override + protected double getAttackHitReach() { + return ALPHA_ATTACK_HIT_REACH; + } + + @Override + protected double getAttackHalfWidth() { + return ALPHA_ATTACK_HALF_WIDTH; + } + + @Override + protected double getAttackVerticalTolerance() { + return ALPHA_ATTACK_VERTICAL_TOLERANCE; + } + + @Override + protected boolean canBeginCommittedAttack(LivingEntity target) { + return this.phaseTransitionTicks <= 0 && super.canBeginCommittedAttack(target); + } + + @Override + protected double configuredMaxHealth() { + return AntarchySettings.alphaMantisHealth(); + } + + @Override + protected double configuredAttackDamage() { + return AntarchySettings.alphaMantisAttackDamage(); + } + + @Override + protected double configuredMovementSpeed() { + return AntarchySettings.alphaMantisMovementSpeed(); + } + + @Override + protected double configuredFlyingSpeed() { + return AntarchySettings.alphaMantisFlyingSpeed(); } @Override @@ -129,11 +204,18 @@ public class AlphaMantisEntity extends MantisEntity { return; } + this.tickEncounterState(); + this.tickPhaseTransition(); this.bossEvent.setProgress(this.getHealth() / this.getMaxHealth()); + this.bossEvent.setVisible(this.shouldShowBossBar()); this.tickMinionSummon(); } private void tickMinionSummon() { + if (this.phaseTransitionTicks > 0) { + return; + } + LivingEntity target = this.getTarget(); if (target == null || !target.isAlive()) { return; @@ -218,4 +300,191 @@ public class AlphaMantisEntity extends MantisEntity { super.setCustomName(name); this.bossEvent.setName(this.getDisplayName()); } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putInt("SummonCooldownTicks", this.summonCooldownTicks); + tag.putBoolean("HalfHealthTransitionComplete", this.halfHealthTransitionComplete); + if (this.encounterHome != null) { + tag.putInt("EncounterHomeX", this.encounterHome.getX()); + tag.putInt("EncounterHomeY", this.encounterHome.getY()); + tag.putInt("EncounterHomeZ", this.encounterHome.getZ()); + } + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + if (tag.contains("SummonCooldownTicks")) { + this.summonCooldownTicks = Math.max(0, tag.getInt("SummonCooldownTicks")); + } + if (tag.contains("HalfHealthTransitionComplete")) { + this.halfHealthTransitionComplete = tag.getBoolean("HalfHealthTransitionComplete"); + } + if (tag.contains("EncounterHomeX") && tag.contains("EncounterHomeY") && tag.contains("EncounterHomeZ")) { + this.encounterHome = new BlockPos(tag.getInt("EncounterHomeX"), tag.getInt("EncounterHomeY"), tag.getInt("EncounterHomeZ")); + } + this.phaseTransitionTicks = 0; + this.disengageTicks = 0; + this.finishCommittedAttack(); + this.stopFlightBurst(); + } + + @Override + public void remove(RemovalReason reason) { + super.remove(reason); + this.bossEvent.removeAllPlayers(); + } + + private void handleHalfHealthGate(float preHitHealth) { + float halfHealth = this.getMaxHealth() * 0.5F; + if (!this.halfHealthTransitionComplete && preHitHealth > halfHealth && this.getHealth() < halfHealth) { + this.setHealth(halfHealth); + this.beginHalfHealthTransition(); + } + } + + private void beginHalfHealthTransition() { + this.halfHealthTransitionComplete = true; + this.phaseTransitionTicks = PHASE_TRANSITION_TICKS; + this.finishCommittedAttack(); + this.stopFlightBurst(); + this.getNavigation().stop(); + Vec3 localVelocity = this.toLocal(this.getDeltaMovement()); + this.setDeltaMovement(this.toWorld(0.0D, localVelocity.y, 0.0D)); + this.setAggressive(false); + this.summonCooldownTicks = Math.min(this.summonCooldownTicks, AntarchySettings.alphaMantisSummonIntervalTicks() / 2); + } + + private void tickPhaseTransition() { + if (this.phaseTransitionTicks <= 0) { + return; + } + this.phaseTransitionTicks--; + this.getNavigation().stop(); + Vec3 localVelocity = this.toLocal(this.getDeltaMovement()); + this.setDeltaMovement(this.toWorld(0.0D, localVelocity.y, 0.0D)); + if (this.phaseTransitionTicks <= 0 && this.getTarget() != null) { + this.setAggressive(true); + } + } + + private void tickEncounterState() { + if (this.encounterHome == null) { + this.encounterHome = this.blockPosition(); + } + + LivingEntity target = this.getTarget(); + if (!this.isValidEncounterTarget(target)) { + if (target != null) { + this.setTarget(null); + } + target = null; + } + + if (target != null) { + this.disengageTicks = 0; + if (this.isOutsideLeashRadius()) { + this.resetEncounter(true); + } + return; + } + + if (this.isAttackLocked() || this.phaseTransitionTicks > 0) { + return; + } + + if (!this.isAtEncounterHome()) { + this.disengageTicks++; + if (this.disengageTicks >= RESET_DELAY_TICKS) { + this.resetEncounter(true); + } else { + this.navigateHome(); + } + return; + } + + this.disengageTicks = 0; + } + + private boolean isValidEncounterTarget(@Nullable LivingEntity target) { + if (target == null || !target.isAlive() || !target.level().equals(this.level())) { + return false; + } + if (target instanceof Player player && (player.isCreative() || player.isSpectator())) { + return false; + } + if (this.encounterHome == null) { + return true; + } + return target.distanceToSqr(Vec3.atCenterOf(this.encounterHome)) <= ENCOUNTER_LEASH_RADIUS * ENCOUNTER_LEASH_RADIUS; + } + + private boolean shouldShowBossBar() { + return this.getTarget() != null + || this.isAttackLocked() + || this.phaseTransitionTicks > 0 + || !this.isAtEncounterHome(); + } + + private boolean isAtEncounterHome() { + if (this.encounterHome == null) { + return true; + } + return this.distanceToSqr(Vec3.atCenterOf(this.encounterHome)) <= ENCOUNTER_HOME_RADIUS; + } + + private boolean isOutsideLeashRadius() { + if (this.encounterHome == null) { + return false; + } + return this.distanceToSqr(Vec3.atCenterOf(this.encounterHome)) > ENCOUNTER_LEASH_RADIUS * ENCOUNTER_LEASH_RADIUS; + } + + private void navigateHome() { + if (this.encounterHome == null) { + return; + } + Vec3 homeCenter = Vec3.atCenterOf(this.encounterHome); + if (this.distanceToSqr(homeCenter) > FORCED_RETURN_RADIUS * FORCED_RETURN_RADIUS) { + this.moveTo(homeCenter.x, this.encounterHome.getY(), homeCenter.z, this.getYRot(), this.getXRot()); + this.setDeltaMovement(Vec3.ZERO); + this.hasImpulse = true; + return; + } + this.getNavigation().moveTo(homeCenter.x, this.encounterHome.getY(), homeCenter.z, HOME_RETURN_SPEED); + } + + private void resetEncounter(boolean restoreHealth) { + this.finishCommittedAttack(); + this.stopFlightBurst(); + this.getNavigation().stop(); + this.setTarget(null); + this.setAggressive(false); + this.phaseTransitionTicks = 0; + this.disengageTicks = 0; + this.summonCooldownTicks = Math.max(1, AntarchySettings.alphaMantisSummonIntervalTicks() / 2); + this.halfHealthTransitionComplete = false; + if (restoreHealth) { + this.setHealth(this.getMaxHealth()); + } + if (this.encounterHome != null) { + Vec3 homeCenter = Vec3.atCenterOf(this.encounterHome); + this.moveTo(homeCenter.x, this.encounterHome.getY(), homeCenter.z, this.getYRot(), this.getXRot()); + this.setDeltaMovement(Vec3.ZERO); + } + } + + private GravityDirection gravityDirection() { + return GravityApi.getGravityDirection(this); + } + + private Vec3 toLocal(Vec3 worldVector) { + return GravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); + } + + private Vec3 toWorld(double x, double y, double z) { + return GravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); + } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/AppleCowEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/AppleCowEntity.java index 8aeb8032..5908aedd 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/AppleCowEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/AppleCowEntity.java @@ -1,5 +1,8 @@ package com.craisinlord.antarchy.content.entity; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; +import com.craisinlord.anthology.gravity.GravityRotationUtil; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; @@ -293,7 +296,7 @@ public abstract class AppleCowEntity extends Cow implements GeoEntity, Shearable } private boolean isMovingForAnimation() { - return this.getDeltaMovement().horizontalDistanceSqr() > 1.0E-4D || this.getNavigation().isInProgress(); + return this.toLocal(this.getDeltaMovement()).horizontalDistanceSqr() > 1.0E-4D || this.getNavigation().isInProgress(); } private void startSleeping(int sleepTicks) { @@ -321,13 +324,25 @@ public abstract class AppleCowEntity extends Cow implements GeoEntity, Shearable } private void applySleepStillness() { - Vec3 motion = this.getDeltaMovement(); + Vec3 motion = this.toLocal(this.getDeltaMovement()); this.getNavigation().stop(); this.setJumping(false); this.setSprinting(false); this.zza = 0.0F; this.xxa = 0.0F; - this.setDeltaMovement(0.0D, motion.y < 0.0D ? motion.y : 0.0D, 0.0D); + this.setDeltaMovement(this.toWorld(0.0D, motion.y < 0.0D ? motion.y : 0.0D, 0.0D)); + } + + private GravityDirection gravityDirection() { + return GravityApi.getGravityDirection(this); + } + + private Vec3 toLocal(Vec3 worldVector) { + return GravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); + } + + private Vec3 toWorld(double x, double y, double z) { + return GravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); } private int randomNapCooldown() { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/BedBugEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/BedBugEntity.java index a24ed6a0..739a6571 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/BedBugEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/BedBugEntity.java @@ -5,6 +5,9 @@ import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.block.BedBugEggBlock; import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; +import com.craisinlord.anthology.gravity.GravityRotationUtil; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerLevel; @@ -95,6 +98,8 @@ public class BedBugEntity extends Animal implements GeoEntity { @Nullable private ItemEntity cachedRottenFlesh; private int nextFoodSearchTick; + private int ignoredRottenFleshId = -1; + private int ignoredRottenFleshUntilTick; private int guardNestCooldown; public BedBugEntity(EntityType entityType, Level level) { @@ -122,6 +127,11 @@ public class BedBugEntity extends Animal implements GeoEntity { && Animal.checkAnimalSpawnRules(entityType, level, spawnReason, pos, random); } + @Override + public boolean removeWhenFarAway(double distanceToClosestPlayer) { + return true; + } + @Override protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); @@ -382,13 +392,16 @@ public class BedBugEntity extends Animal implements GeoEntity { } private void commitLunge(LivingEntity target, double horizontalSpeed, double verticalSpeed) { - Vec3 lunge = target.position().subtract(this.position()); - Vec3 horizontal = new Vec3(lunge.x, 0.0D, lunge.z); + GravityDirection direction = GravityApi.getGravityDirection(this); + Vec3 localLunge = GravityRotationUtil.vecWorldToPlayer(target.position().subtract(this.position()), direction); + Vec3 horizontal = new Vec3(localLunge.x, 0.0D, localLunge.z); if (horizontal.lengthSqr() < 1.0E-4D) { return; } horizontal = horizontal.normalize().scale(horizontalSpeed); - this.setDeltaMovement(this.getDeltaMovement().add(horizontal.x, verticalSpeed, horizontal.z)); + Vec3 localImpulse = new Vec3(horizontal.x, verticalSpeed, horizontal.z); + Vec3 worldImpulse = GravityRotationUtil.vecPlayerToWorld(localImpulse, direction); + this.setDeltaMovement(this.getDeltaMovement().add(worldImpulse.x, worldImpulse.y, worldImpulse.z)); this.hasImpulse = true; } @@ -443,6 +456,24 @@ public class BedBugEntity extends Animal implements GeoEntity { this.nextFoodSearchTick = 0; } + private void temporarilyIgnoreRottenFlesh(ItemEntity itemEntity) { + this.ignoredRottenFleshId = itemEntity.getId(); + this.ignoredRottenFleshUntilTick = this.tickCount + 100; + this.invalidateFoodCache(); + } + + private boolean isTemporarilyIgnoredFood(ItemEntity itemEntity) { + if (itemEntity.getId() != this.ignoredRottenFleshId) { + return false; + } + if (this.tickCount >= this.ignoredRottenFleshUntilTick) { + this.ignoredRottenFleshId = -1; + this.ignoredRottenFleshUntilTick = 0; + return false; + } + return true; + } + @Nullable private ItemEntity findNearestRottenFlesh() { return this.level().getEntitiesOfClass( @@ -450,7 +481,8 @@ public class BedBugEntity extends Animal implements GeoEntity { this.getBoundingBox().inflate(FOOD_SEARCH_RADIUS, 2.0D, FOOD_SEARCH_RADIUS), itemEntity -> itemEntity.isAlive() && !itemEntity.getItem().isEmpty() - && itemEntity.getItem().is(Items.ROTTEN_FLESH)) + && itemEntity.getItem().is(Items.ROTTEN_FLESH) + && !this.isTemporarilyIgnoredFood(itemEntity)) .stream() .min(Comparator.comparingDouble(this::distanceToSqr)) .orElse(null); @@ -574,6 +606,7 @@ public class BedBugEntity extends Animal implements GeoEntity { private ItemEntity targetFood; private double lastDistanceSqr; private int stuckTicks; + private int pathRefreshCooldown; private SeekRottenFleshGoal() { this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK)); @@ -607,6 +640,7 @@ public class BedBugEntity extends Animal implements GeoEntity { BedBugEntity.this.setTarget(null); this.lastDistanceSqr = Double.MAX_VALUE; this.stuckTicks = 0; + this.pathRefreshCooldown = 0; } @Override @@ -615,6 +649,7 @@ public class BedBugEntity extends Animal implements GeoEntity { this.targetFood = null; this.lastDistanceSqr = Double.MAX_VALUE; this.stuckTicks = 0; + this.pathRefreshCooldown = 0; } @Override @@ -624,7 +659,14 @@ public class BedBugEntity extends Animal implements GeoEntity { } BedBugEntity.this.getLookControl().setLookAt(this.targetFood, 30.0F, 30.0F); - BedBugEntity.this.getNavigation().moveTo(this.targetFood, 1.0D); + if (this.pathRefreshCooldown-- <= 0) { + if (!BedBugEntity.this.getNavigation().moveTo(this.targetFood, 1.0D)) { + BedBugEntity.this.temporarilyIgnoreRottenFlesh(this.targetFood); + this.targetFood = null; + return; + } + this.pathRefreshCooldown = 10; + } double distanceSqr = BedBugEntity.this.distanceToSqr(this.targetFood); if (distanceSqr < this.lastDistanceSqr - 0.2D) { @@ -632,7 +674,7 @@ public class BedBugEntity extends Animal implements GeoEntity { this.stuckTicks = 0; } else if (BedBugEntity.this.getNavigation().isDone() && distanceSqr > 4.0D) { if (++this.stuckTicks >= 20) { - BedBugEntity.this.invalidateFoodCache(); + BedBugEntity.this.temporarilyIgnoreRottenFlesh(this.targetFood); this.targetFood = null; return; } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/BlockSuction.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/BlockSuction.java new file mode 100644 index 00000000..6e19b54b --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/BlockSuction.java @@ -0,0 +1,40 @@ +package com.craisinlord.antarchy.content.entity; + +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.item.FallingBlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.Vec3; + +public final class BlockSuction { + private static final float MAX_EXPLOSION_RESISTANCE = 30.0F; + + private BlockSuction() { + } + + public static boolean canLift(ServerLevel level, BlockPos pos, BlockState state) { + return canLift(level, pos, state, false); + } + + public static boolean canLift(ServerLevel level, BlockPos pos, BlockState state, boolean allowCollisionless) { + return !state.isAir() + && level.getBlockEntity(pos) == null + && state.getDestroySpeed(level, pos) >= 0.0F + && state.getBlock().getExplosionResistance() <= MAX_EXPLOSION_RESISTANCE + && (allowCollisionless ? state.getFluidState().isEmpty() : !state.getCollisionShape(level, pos).isEmpty()); + } + + public static FallingBlockEntity lift(ServerLevel level, BlockPos pos, BlockState state, Vec3 target, double speed) { + FallingBlockEntity falling = FallingBlockEntity.fall(level, pos, state); + if (falling == null) { + return null; + } + Vec3 towardTarget = target.subtract(falling.position()); + if (towardTarget.lengthSqr() > 0.001D) { + falling.setDeltaMovement(towardTarget.normalize().scale(speed)); + } + falling.hasImpulse = true; + falling.hurtMarked = true; + return falling; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/BomberEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/BomberEntity.java index 8b3fa5ca..3648fd6e 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/BomberEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/BomberEntity.java @@ -2,6 +2,9 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; +import com.craisinlord.anthology.gravity.GravityRotationUtil; import java.util.Objects; import net.minecraft.core.BlockPos; import net.minecraft.core.particles.ParticleTypes; @@ -99,7 +102,7 @@ public class BomberEntity extends Monster implements GeoEntity { return level.getDifficulty() != Difficulty.PEACEFUL && level.isEmptyBlock(pos) - && level.isEmptyBlock(pos.above()) + && (level.isEmptyBlock(pos.above()) || level.isEmptyBlock(pos.below())) && Monster.checkMonsterSpawnRules(entityType, level, spawnReason, pos, random); } @@ -282,9 +285,10 @@ public class BomberEntity extends Monster implements GeoEntity { return; } - double x = this.getX(); - double y = this.getY(0.0625D); - double z = this.getZ(); + Vec3 explosionCenter = this.position().add(this.toWorld(0.0D, this.getBbHeight() * 0.0625D, 0.0D)); + double x = explosionCenter.x; + double y = explosionCenter.y; + double z = explosionCenter.z; float radius = (float) (AntarchySettings.bomberExplosionRadius() * EXPLOSION_RADIUS_MULTIPLIER); serverLevel.playSound(null, x, y, z, SoundEvents.GENERIC_EXPLODE, SoundSource.HOSTILE, 0.55F, 1.0F); serverLevel.explode( @@ -303,7 +307,7 @@ public class BomberEntity extends Monster implements GeoEntity { if (extraDamage > 0.0D) { AABB damageBox = this.getBoundingBox().inflate(radius * 2.0D); for (LivingEntity livingEntity : serverLevel.getEntitiesOfClass(LivingEntity.class, damageBox, entity -> entity.isAlive() && entity != this)) { - double distance = Math.sqrt(this.distanceToSqr(livingEntity)); + double distance = explosionCenter.distanceTo(livingEntity.position()); double falloff = radius <= 0.0F ? 0.0D : Math.max(0.0D, 1.0D - distance / radius); if (falloff <= 0.0D) { continue; @@ -329,19 +333,37 @@ public class BomberEntity extends Monster implements GeoEntity { return; } - double dx = this.getX() - sourceEntity.getX(); - double dz = this.getZ() - sourceEntity.getZ(); - double distance = Math.sqrt(dx * dx + dz * dz); + Vec3 localAway = this.toLocalPlane(this.position().subtract(sourceEntity.position())); + double distance = localAway.length(); if (distance < 1.0E-4D) { return; } double strength = 0.4D * KNOCKBACK_MULTIPLIER; - this.push(dx / distance * strength, 0.08D, dz / distance * strength); + Vec3 localImpulse = localAway.scale(strength / distance); + Vec3 worldImpulse = this.toWorld(localImpulse.x, 0.08D, localImpulse.z); + this.push(worldImpulse.x, worldImpulse.y, worldImpulse.z); } private boolean isMovingForAnimation() { - return this.getDeltaMovement().horizontalDistanceSqr() > 1.0E-4D || this.getNavigation().isInProgress(); + return this.toLocal(this.getDeltaMovement()).horizontalDistanceSqr() > 1.0E-4D || this.getNavigation().isInProgress(); + } + + private GravityDirection gravityDirection() { + return GravityApi.getGravityDirection(this); + } + + private Vec3 toLocal(Vec3 worldVector) { + return GravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); + } + + private Vec3 toWorld(double x, double y, double z) { + return GravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); + } + + private Vec3 toLocalPlane(Vec3 worldVector) { + Vec3 local = this.toLocal(worldVector); + return new Vec3(local.x, 0.0D, local.z); } private final class BomberAttackGoal extends MeleeAttackGoal { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ButterflyEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ButterflyEntity.java index a5a9d5bc..81d0fd88 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ButterflyEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ButterflyEntity.java @@ -5,6 +5,8 @@ import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityRotationUtil; import java.util.EnumSet; import java.util.Optional; import java.util.function.Predicate; @@ -182,7 +184,8 @@ public class ButterflyEntity extends Animal implements FlyingAnimal, GeoEntity { FlyingPathNavigation navigation = new FlyingPathNavigation(this, level) { @Override public boolean isStableDestination(BlockPos pos) { - return !this.level.getBlockState(pos.below()).isAir(); + BlockPos support = GravityApi.isGravityInverted(ButterflyEntity.this) ? pos.above() : pos.below(); + return !this.level.getBlockState(support).isAir(); } @Override @@ -428,7 +431,7 @@ public class ButterflyEntity extends Animal implements FlyingAnimal, GeoEntity { @Override protected void jumpInLiquid(net.minecraft.tags.TagKey fluidTag) { - this.setDeltaMovement(this.getDeltaMovement().add(0.0D, 0.01D, 0.0D)); + this.setDeltaMovement(this.getDeltaMovement().add(GravityRotationUtil.vecPlayerToWorld(0.0D, 0.01D, 0.0D, GravityApi.getGravityDirection(this)))); } @Override diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/CheepEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/CheepEntity.java index f67d2dd4..02157ab8 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/CheepEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/CheepEntity.java @@ -2,6 +2,8 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.config.AntarchySettings; import net.minecraft.nbt.CompoundTag; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundEvents; import net.minecraft.world.damagesource.DamageSource; @@ -24,6 +26,7 @@ import software.bernie.geckolib.core.animation.RawAnimation; import software.bernie.geckolib.util.GeckoLibUtil; public class CheepEntity extends AbstractFish implements GeoEntity { + private static final ResourceLocation CHEEP_BUCKET_ID = new ResourceLocation("antarchy", "cheep_bucket"); private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); private static final RawAnimation SWIM_ANIM = RawAnimation.begin().thenLoop("swim"); private static final RawAnimation ATTACK_ANIM = RawAnimation.begin().thenLoop("attack"); @@ -48,9 +51,15 @@ public class CheepEntity extends AbstractFish implements GeoEntity { .add(Attributes.MOVEMENT_SPEED, 0.5D); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, net.minecraft.world.entity.MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData, @org.jetbrains.annotations.Nullable net.minecraft.nbt.CompoundTag dataTag) { + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.cheepHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData, dataTag); + } + @Override public ItemStack getBucketItemStack() { - return new ItemStack(Items.WATER_BUCKET); + return new ItemStack(BuiltInRegistries.ITEM.getOptional(CHEEP_BUCKET_ID).orElse(Items.WATER_BUCKET)); } @Override diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/CrawlingBlightEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/CrawlingBlightEntity.java new file mode 100644 index 00000000..4910d1d3 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/CrawlingBlightEntity.java @@ -0,0 +1,247 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; +import com.craisinlord.anthology.gravity.GravityRotationUtil; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.RandomSource; +import net.minecraft.world.Difficulty; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.network.syncher.EntityDataAccessor; +import net.minecraft.network.syncher.EntityDataSerializers; +import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.ai.goal.FloatGoal; +import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; +import net.minecraft.world.entity.ai.goal.MeleeAttackGoal; +import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; +import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal; +import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; +import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.phys.Vec3; +import net.minecraft.world.level.block.state.BlockState; +import software.bernie.geckolib.animatable.GeoEntity; +import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.core.animation.AnimatableManager; +import software.bernie.geckolib.core.animation.AnimationController; +import software.bernie.geckolib.core.animation.AnimationState; +import software.bernie.geckolib.core.object.PlayState; +import software.bernie.geckolib.core.animation.RawAnimation; +import software.bernie.geckolib.util.GeckoLibUtil; + +public class CrawlingBlightEntity extends Monster implements GeoEntity { + private static final EntityDataAccessor CLIMBING = + SynchedEntityData.defineId(CrawlingBlightEntity.class, EntityDataSerializers.BOOLEAN); + + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); + private static final RawAnimation ATTACK_ANIM = RawAnimation.begin().thenLoop("attack"); + private static final byte ATTACK_ANIM_EVENT = 4; + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private int attackAnimTicks = 0; + + public CrawlingBlightEntity(EntityType type, Level level) { + super(type, level); + } + + @Override + public float maxUpStep() { + return 1.0F; + } + + @Override + protected void defineSynchedData() { + super.defineSynchedData(); + this.entityData.define(CLIMBING, false); + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.crawlingBlightHealth()) + .add(Attributes.MOVEMENT_SPEED, 0.38D) + .add(Attributes.ATTACK_DAMAGE, AntarchySettings.crawlingBlightAttackDamage()) + .add(Attributes.FOLLOW_RANGE, 16.0D); + } + + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, net.minecraft.world.entity.MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData, @org.jetbrains.annotations.Nullable net.minecraft.nbt.CompoundTag dataTag) { + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.crawlingBlightHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData, dataTag); + } + + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { + if (spawnReason == MobSpawnType.SPAWN_EGG || spawnReason == MobSpawnType.SPAWNER || spawnReason == MobSpawnType.COMMAND) { + return true; + } + BlockPos belowPos = pos.below(); + BlockPos abovePos = pos.above(); + BlockState belowState = level.getBlockState(belowPos); + BlockState aboveState = level.getBlockState(abovePos); + boolean floorSupport = !belowState.is(Blocks.BEDROCK) + && belowState.blocksMotion() + && belowState.isFaceSturdy(level, belowPos, Direction.UP) + && belowState.isCollisionShapeFullBlock(level, belowPos); + boolean ceilingSupport = !aboveState.is(Blocks.BEDROCK) + && aboveState.blocksMotion() + && aboveState.isFaceSturdy(level, abovePos, Direction.DOWN) + && aboveState.isCollisionShapeFullBlock(level, abovePos); + + return level.getDifficulty() != Difficulty.PEACEFUL + && (floorSupport || ceilingSupport) + && level.isEmptyBlock(pos) + && (level.isEmptyBlock(pos.above()) || level.isEmptyBlock(pos.below())) + && Monster.checkMonsterSpawnRules(entityType, level, spawnReason, pos, random); + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); + this.goalSelector.addGoal(1, new MeleeAttackGoal(this, 1.0D, true)); + this.goalSelector.addGoal(2, new WaterAvoidingRandomStrollGoal(this, 0.85D)); + this.goalSelector.addGoal(3, new LookAtPlayerGoal(this, Player.class, 8.0F)); + this.goalSelector.addGoal(4, new RandomLookAroundGoal(this)); + this.targetSelector.addGoal(1, new HurtByTargetGoal(this)); + this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); + } + + @Override + public boolean onClimbable() { + return this.entityData.get(CLIMBING); + } + + public boolean isWallClimbing() { + return this.entityData.get(CLIMBING) && !this.onGround(); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 3, this::mainAnimController) + .triggerableAnim("attack", ATTACK_ANIM)); + } + + private PlayState mainAnimController(AnimationState state) { + if (attackAnimTicks > 0) { + return state.setAndContinue(ATTACK_ANIM); + } + if (state.isMoving()) { + return state.setAndContinue(WALK_ANIM); + } + return state.setAndContinue(IDLE_ANIM); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return geoCache; + } + + @Override + public boolean doHurtTarget(net.minecraft.world.entity.Entity target) { + boolean result = super.doHurtTarget(target); + if (result) { + this.playSound(AntarchySoundEvents.CRAWLING_BLIGHT_BITE.get(), 1.0F, 0.95F + this.random.nextFloat() * 0.1F); + this.setAttackAnimTicks(20); + this.level().broadcastEntityEvent(this, ATTACK_ANIM_EVENT); + } + return result; + } + + private void setAttackAnimTicks(int ticks) { + int clamped = Math.max(0, ticks); + boolean wasIdle = attackAnimTicks <= 0; + attackAnimTicks = clamped; + if (wasIdle && clamped > 0) { + this.triggerAnim("main_controller", "attack"); + } else if (!wasIdle && clamped <= 0) { + this.stopTriggeredAnimation("main_controller", "attack"); + } + } + + @Override + protected SoundEvent getAmbientSound() { + return AntarchySoundEvents.CRAWLING_BLIGHT_GROWL.get(); + } + + @Override + protected SoundEvent getHurtSound(net.minecraft.world.damagesource.DamageSource source) { + return AntarchySoundEvents.CRAWLING_BLIGHT_HURT.get(); + } + + @Override + protected SoundEvent getDeathSound() { + return AntarchySoundEvents.CRAWLING_BLIGHT_HURT.get(); + } + + @Override + public void handleEntityEvent(byte id) { + if (id == ATTACK_ANIM_EVENT) { + this.setAttackAnimTicks(20); + return; + } + super.handleEntityEvent(id); + } + + @Override + public void tick() { + CavarynBurrowingMobBehavior.moveOutOfBlocks(this); + super.tick(); + CavarynBurrowingMobBehavior.moveOutOfBlocks(this); + if (attackAnimTicks > 0) { + this.setAttackAnimTicks(attackAnimTicks - 1); + } + if (this.level().isClientSide()) return; + + boolean climbing = this.horizontalCollision; + if (this.entityData.get(CLIMBING) != climbing) { + this.entityData.set(CLIMBING, climbing); + } + + if (climbing && this.getTarget() != null) { + LivingEntity target = this.getTarget(); + Vec3 toTarget = this.toLocal(target.position().subtract(this.position())); + double hDist = Math.sqrt(toTarget.x * toTarget.x + toTarget.z * toTarget.z); + double speed = this.getAttributeValue(Attributes.MOVEMENT_SPEED) * 2.8D; + if (hDist > 0.01D) { + this.setDeltaMovement(this.toWorld( + (toTarget.x / hDist) * speed, + 0.22D, + (toTarget.z / hDist) * speed + )); + } else { + Vec3 mov = this.toLocal(this.getDeltaMovement()); + this.setDeltaMovement(this.toWorld(mov.x, 0.22D, mov.z)); + } + this.getNavigation().stop(); + } + } + + private GravityDirection gravityDirection() { + return GravityApi.getGravityDirection(this); + } + + private Vec3 toLocal(Vec3 worldVector) { + return GravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); + } + + private Vec3 toWorld(double x, double y, double z) { + return GravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); + } + + @Override + public boolean isInWall() { + return false; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/CreepingHorrorEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/CreepingHorrorEntity.java deleted file mode 100644 index 57d86893..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/CreepingHorrorEntity.java +++ /dev/null @@ -1,219 +0,0 @@ -package com.craisinlord.antarchy.content.entity; - -import com.craisinlord.antarchy.config.AntarchySettings; -import com.craisinlord.antarchy.content.AntarchySoundEvents; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.util.RandomSource; -import net.minecraft.world.Difficulty; -import net.minecraft.sounds.SoundEvent; -import net.minecraft.network.syncher.EntityDataAccessor; -import net.minecraft.network.syncher.EntityDataSerializers; -import net.minecraft.network.syncher.SynchedEntityData; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.Mob; -import net.minecraft.world.entity.MobSpawnType; -import net.minecraft.world.entity.ai.attributes.AttributeSupplier; -import net.minecraft.world.entity.ai.attributes.Attributes; -import net.minecraft.world.entity.ai.goal.FloatGoal; -import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; -import net.minecraft.world.entity.ai.goal.MeleeAttackGoal; -import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; -import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal; -import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; -import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; -import net.minecraft.world.entity.monster.Monster; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.ServerLevelAccessor; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.phys.Vec3; -import net.minecraft.world.level.block.state.BlockState; -import software.bernie.geckolib.animatable.GeoEntity; -import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; -import software.bernie.geckolib.core.animation.AnimatableManager; -import software.bernie.geckolib.core.animation.AnimationController; -import software.bernie.geckolib.core.animation.AnimationState; -import software.bernie.geckolib.core.object.PlayState; -import software.bernie.geckolib.core.animation.RawAnimation; -import software.bernie.geckolib.util.GeckoLibUtil; - -public class CreepingHorrorEntity extends Monster implements GeoEntity { - private static final EntityDataAccessor CLIMBING = - SynchedEntityData.defineId(CreepingHorrorEntity.class, EntityDataSerializers.BOOLEAN); - - private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); - private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); - private static final RawAnimation ATTACK_ANIM = RawAnimation.begin().thenLoop("attack"); - private static final byte ATTACK_ANIM_EVENT = 4; - - private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); - private int attackAnimTicks = 0; - - public CreepingHorrorEntity(EntityType type, Level level) { - super(type, level); - } - - @Override - public float maxUpStep() { - return 1.0F; - } - - @Override - protected void defineSynchedData() { - super.defineSynchedData(); - this.entityData.define(CLIMBING, false); - } - - public static AttributeSupplier.Builder createAttributes() { - return Mob.createMobAttributes() - .add(Attributes.MAX_HEALTH, AntarchySettings.creepingHorrorHealth()) - .add(Attributes.MOVEMENT_SPEED, 0.38D) - .add(Attributes.ATTACK_DAMAGE, AntarchySettings.creepingHorrorAttackDamage()) - .add(Attributes.FOLLOW_RANGE, 16.0D); - } - - public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { - if (spawnReason == MobSpawnType.SPAWN_EGG || spawnReason == MobSpawnType.SPAWNER || spawnReason == MobSpawnType.COMMAND) { - return true; - } - BlockPos belowPos = pos.below(); - BlockState belowState = level.getBlockState(belowPos); - boolean validSupport = !belowState.is(Blocks.BEDROCK) - && belowState.blocksMotion() - && belowState.isFaceSturdy(level, belowPos, Direction.UP) - && belowState.isCollisionShapeFullBlock(level, belowPos); - - return level.getDifficulty() != Difficulty.PEACEFUL - && validSupport - && level.isEmptyBlock(pos) - && level.isEmptyBlock(pos.above()) - && Monster.checkMonsterSpawnRules(entityType, level, spawnReason, pos, random); - } - - @Override - protected void registerGoals() { - this.goalSelector.addGoal(0, new FloatGoal(this)); - this.goalSelector.addGoal(1, new MeleeAttackGoal(this, 1.0D, true)); - this.goalSelector.addGoal(2, new WaterAvoidingRandomStrollGoal(this, 0.85D)); - this.goalSelector.addGoal(3, new LookAtPlayerGoal(this, Player.class, 8.0F)); - this.goalSelector.addGoal(4, new RandomLookAroundGoal(this)); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this)); - this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); - } - - @Override - public boolean onClimbable() { - return this.entityData.get(CLIMBING); - } - - public boolean isWallClimbing() { - return this.entityData.get(CLIMBING) && !this.onGround(); - } - - @Override - public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "main_controller", 3, this::mainAnimController) - .triggerableAnim("attack", ATTACK_ANIM)); - } - - private PlayState mainAnimController(AnimationState state) { - if (attackAnimTicks > 0) { - return state.setAndContinue(ATTACK_ANIM); - } - if (state.isMoving()) { - return state.setAndContinue(WALK_ANIM); - } - return state.setAndContinue(IDLE_ANIM); - } - - @Override - public AnimatableInstanceCache getAnimatableInstanceCache() { - return geoCache; - } - - @Override - public boolean doHurtTarget(net.minecraft.world.entity.Entity target) { - boolean result = super.doHurtTarget(target); - if (result) { - this.playSound(AntarchySoundEvents.CREEPING_HORROR_BITE.get(), 1.0F, 0.95F + this.random.nextFloat() * 0.1F); - this.setAttackAnimTicks(20); - this.level().broadcastEntityEvent(this, ATTACK_ANIM_EVENT); - } - return result; - } - - private void setAttackAnimTicks(int ticks) { - int clamped = Math.max(0, ticks); - boolean wasIdle = attackAnimTicks <= 0; - attackAnimTicks = clamped; - if (wasIdle && clamped > 0) { - this.triggerAnim("main_controller", "attack"); - } - } - - @Override - protected SoundEvent getAmbientSound() { - return AntarchySoundEvents.CREEPING_HORROR_GROWL.get(); - } - - @Override - protected SoundEvent getHurtSound(net.minecraft.world.damagesource.DamageSource source) { - return AntarchySoundEvents.CREEPING_HORROR_HURT.get(); - } - - @Override - protected SoundEvent getDeathSound() { - return AntarchySoundEvents.CREEPING_HORROR_HURT.get(); - } - - @Override - public void handleEntityEvent(byte id) { - if (id == ATTACK_ANIM_EVENT) { - attackAnimTicks = 20; - return; - } - super.handleEntityEvent(id); - } - - @Override - public void tick() { - CavarynBurrowingMobBehavior.moveOutOfBlocks(this); - super.tick(); - CavarynBurrowingMobBehavior.moveOutOfBlocks(this); - if (attackAnimTicks > 0) { - attackAnimTicks--; - if (attackAnimTicks <= 0 && !this.level().isClientSide()) { - this.stopTriggeredAnimation("main_controller", "attack"); - } - } - if (this.level().isClientSide()) return; - - boolean climbing = this.horizontalCollision; - this.entityData.set(CLIMBING, climbing); - - if (climbing && this.getTarget() != null) { - LivingEntity target = this.getTarget(); - Vec3 toTarget = target.position().subtract(this.position()); - double hDist = Math.sqrt(toTarget.x * toTarget.x + toTarget.z * toTarget.z); - double speed = this.getAttributeValue(Attributes.MOVEMENT_SPEED) * 2.8D; - if (hDist > 0.01D) { - this.setDeltaMovement( - (toTarget.x / hDist) * speed, - 0.22D, - (toTarget.z / hDist) * speed - ); - } else { - Vec3 mov = this.getDeltaMovement(); - this.setDeltaMovement(mov.x, 0.22D, mov.z); - } - this.getNavigation().stop(); - } - } - - @Override - public boolean isInWall() { - return false; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/DiamondMinecartEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/DiamondMinecartEntity.java index c92f3a8e..4bf26ed6 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/DiamondMinecartEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/DiamondMinecartEntity.java @@ -24,21 +24,28 @@ import net.minecraft.world.level.block.RailBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.RailShape; import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.Nullable; import java.util.List; +import java.util.HashMap; +import java.util.Map; public class DiamondMinecartEntity extends Minecart { + private static final long INPUT_TIMEOUT_TICKS = 5L; + private static final long COLLISION_COOLDOWN_TICKS = 10L; private static final EntityDataAccessor SYNCED_SPEED = SynchedEntityData.defineId(DiamondMinecartEntity.class, EntityDataSerializers.FLOAT); private static final EntityDataAccessor SYNCED_FACING = SynchedEntityData.defineId(DiamondMinecartEntity.class, EntityDataSerializers.INT); private byte inputFlags = 0; + private long lastInputGameTime = Long.MIN_VALUE; private float currentSpeed = 0.0F; private Direction facingDir = Direction.SOUTH; private BlockPos lastBlockPos = null; private boolean railWarningCooldown = false; + private final Map collisionCooldowns = new HashMap<>(); private final Item dropItem; @@ -109,22 +116,47 @@ public class DiamondMinecartEntity extends Minecart { @Override protected double getMaxSpeed() { - return 0.4D; + return AntarchySettings.diamondMinecartEnabled() + ? AntarchySettings.diamondMinecartMaxSpeed() + : 0.4D; } public void onInputReceived(byte flags) { this.inputFlags = flags; + this.lastInputGameTime = this.level().getGameTime(); } @Override public void tick() { super.tick(); + if (!this.level().isClientSide) { + this.serverTick(); + } } private void serverTick() { + if (!AntarchySettings.diamondMinecartEnabled()) { + this.inputFlags = 0; + this.lastInputGameTime = Long.MIN_VALUE; + this.currentSpeed = 0.0F; + this.collisionCooldowns.clear(); + this.entityData.set(SYNCED_SPEED, 0.0F); + this.setDeltaMovement(0.0D, this.getDeltaMovement().y, 0.0D); + return; + } + + if (this.level().getGameTime() - this.lastInputGameTime > INPUT_TIMEOUT_TICKS) { + this.inputFlags = 0; + } + Player rider = this.getRidingPlayer(); boolean hasRider = rider != null; + if (!hasRider) { + this.inputFlags = 0; + this.lastInputGameTime = Long.MIN_VALUE; + } + if (this.lastBlockPos == null) { if (rider != null) { this.facingDir = getLookFacing(rider, Direction.SOUTH); @@ -176,14 +208,25 @@ public class DiamondMinecartEntity extends Minecart { if (AntarchySettings.diamondMinecartMobDamageEnabled() && this.currentSpeed > 0.15F && hasRider) { this.applyMobCollisionDamage(); } + + this.applyControlledVelocity(); + } + + private void applyControlledVelocity() { + double speed = this.currentSpeed; + this.setDeltaMovement( + this.facingDir.getStepX() * speed, + this.getDeltaMovement().y, + this.facingDir.getStepZ() * speed + ); } private void onEnteredNewBlock(BlockPos currentPos, @Nullable Player rider) { Direction previousFacing = this.facingDir; - if (rider != null && (this.inputFlags & 0x01) != 0) { - Direction lookedFacing = getLookFacing(rider, this.facingDir); - if (lookedFacing != this.facingDir.getOpposite()) { - this.facingDir = lookedFacing; + if (rider != null) { + Direction steeredFacing = getSteeredFacing(rider, this.facingDir); + if (steeredFacing != this.facingDir.getOpposite()) { + this.facingDir = steeredFacing; } } @@ -348,7 +391,10 @@ public class DiamondMinecartEntity extends Minecart { } private boolean canPlaceRailAt(BlockPos pos, BlockState existing) { - if (!isWithinRailBuildHeight(pos) || !this.level().getBlockState(pos.below()).isSolid()) { + if (!isWithinRailBuildHeight(pos) + || !this.level().hasChunkAt(pos) + || !this.level().getWorldBorder().isWithinBounds(pos) + || !this.level().getBlockState(pos.below()).isSolid()) { return false; } return BaseRailBlock.isRail(existing) || existing.isAir() || existing.canBeReplaced(); @@ -358,16 +404,44 @@ public class DiamondMinecartEntity extends Minecart { double maxDamage = AntarchySettings.diamondMinecartMaxMobDamage(); double maxSpeed = AntarchySettings.diamondMinecartMaxSpeed(); float damage = maxSpeed <= 0.0D ? 0.0F : (float) (maxDamage * (this.currentSpeed / maxSpeed)); + if (damage <= 0.0F) { + return; + } + + long gameTime = this.level().getGameTime(); + this.collisionCooldowns.entrySet().removeIf(entry -> entry.getValue() <= gameTime); + Vec3 horizontalVelocity = new Vec3(this.getDeltaMovement().x, 0.0D, this.getDeltaMovement().z); + double velocityLength = horizontalVelocity.length(); + if (velocityLength < 1.0E-4D) { + return; + } + Vec3 movementDirection = horizontalVelocity.scale(1.0D / velocityLength); DamageSource source = this.level().damageSources().generic(); AABB hitBox = this.getBoundingBox().inflate(0.2D, 0.0D, 0.2D); List nearby = this.level().getEntitiesOfClass(LivingEntity.class, hitBox, - entity -> !(entity instanceof Player player && this.hasPassenger(player))); + entity -> !(entity instanceof Player player && this.hasPassenger(player)) + && !entity.isInvulnerable()); for (LivingEntity mob : nearby) { - mob.hurt(source, damage); + if (this.collisionCooldowns.containsKey(mob.getId())) { + continue; + } + double dx = mob.getX() - this.getX(); double dz = mob.getZ() - this.getZ(); + double distance = Math.sqrt(dx * dx + dz * dz); + if (distance > 1.0E-4D) { + Vec3 toMob = new Vec3(dx / distance, 0.0D, dz / distance); + if (movementDirection.dot(toMob) < -0.2D) { + continue; + } + } + + if (!mob.hurt(source, damage)) { + continue; + } + this.collisionCooldowns.put(mob.getId(), gameTime + COLLISION_COOLDOWN_TICKS); double len = Math.sqrt(dx * dx + dz * dz); if (len > 0.001D) { mob.setDeltaMovement(mob.getDeltaMovement().add( @@ -394,6 +468,18 @@ public class DiamondMinecartEntity extends Minecart { return direction.getAxis() == Direction.Axis.Y ? fallback : direction; } + private Direction getSteeredFacing(Player rider, Direction fallback) { + boolean left = (this.inputFlags & 0x04) != 0; + boolean right = (this.inputFlags & 0x08) != 0; + if (left != right) { + return left ? fallback.getCounterClockWise() : fallback.getClockWise(); + } + if ((this.inputFlags & 0x01) != 0) { + return getLookFacing(rider, fallback); + } + return fallback; + } + private static int facingDirectionIndex(Direction dir) { return switch (dir) { case NORTH -> 0; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/DorrieEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/DorrieEntity.java index 32d248ea..8da7a49a 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/DorrieEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/DorrieEntity.java @@ -1,6 +1,9 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; +import com.craisinlord.anthology.gravity.GravityRotationUtil; import java.util.EnumSet; import java.util.List; import net.minecraft.core.BlockPos; @@ -410,14 +413,15 @@ public class DorrieEntity extends Animal implements GeoEntity { if (!this.isInWater() && !this.isInLava() && !this.onGround()) { Vec3 mov = this.getDeltaMovement(); - this.setDeltaMovement(mov.x * 0.91D, mov.y - 0.08D, mov.z * 0.91D); + Vec3 localMotion = this.toLocal(mov); + this.setDeltaMovement(this.toWorld(localMotion.x * 0.91D, localMotion.y - 0.08D, localMotion.z * 0.91D)); this.move(net.minecraft.world.entity.MoverType.SELF, this.getDeltaMovement()); return; } if (this.isInWater() || this.isInLava()) { this.moveRelative(this.getSpeed(), new Vec3(riddenInput.x, 0.0D, riddenInput.z)); - Vec3 motion = this.getDeltaMovement(); + Vec3 localMotion = this.toLocal(this.getDeltaMovement()); double vertical = 0.0D; if (this.isUnderWater()) { vertical = riddenInput.y * 0.025D; @@ -427,11 +431,11 @@ public class DorrieEntity extends Animal implements GeoEntity { if (this.pressingJump) { vertical += ASCEND_SPEED; } - this.setDeltaMovement( - motion.x * 0.92D, - motion.y * 0.90D + vertical, - motion.z * 0.92D - ); + this.setDeltaMovement(this.toWorld( + localMotion.x * 0.92D, + localMotion.y * 0.90D + vertical, + localMotion.z * 0.92D + )); this.move(net.minecraft.world.entity.MoverType.SELF, this.getDeltaMovement()); return; } @@ -444,15 +448,15 @@ public class DorrieEntity extends Animal implements GeoEntity { float power = this.getJumpCharge() / 100f; if (power > 0.05f) { Vec3 look = this.getLookAngle(); - Vec3 flatLook = new Vec3(look.x, 0.0D, look.z).normalize(); - Vec3 current = this.getDeltaMovement(); + Vec3 flatLook = this.toLocalPlane(look).normalize(); + Vec3 current = this.toLocal(this.getDeltaMovement()); double forwardAdd = 0.15D + power * 0.45D; double vertical = 0.55D + power * 0.80D; - this.setDeltaMovement( + this.setDeltaMovement(this.toWorld( current.x + flatLook.x * forwardAdd, vertical, current.z + flatLook.z * forwardAdd - ); + )); } } @@ -461,15 +465,15 @@ public class DorrieEntity extends Animal implements GeoEntity { float power = chargeTicks / (float) MAX_CHARGE_TICKS; if (power > 0.05F) { Vec3 look = this.getLookAngle(); - Vec3 flatLook = new Vec3(look.x, 0.0D, look.z).normalize(); - Vec3 current = this.getDeltaMovement(); + Vec3 flatLook = this.toLocalPlane(look).normalize(); + Vec3 current = this.toLocal(this.getDeltaMovement()); double forwardAdd = 0.15D + power * 0.45D; double vertical = 0.55D + power * 0.80D; - this.setDeltaMovement( + this.setDeltaMovement(this.toWorld( current.x + flatLook.x * forwardAdd, vertical, current.z + flatLook.z * forwardAdd - ); + )); this.hasImpulse = true; isLeaping = true; this.triggerAnim("main_controller", "jump_start"); @@ -483,11 +487,13 @@ public class DorrieEntity extends Animal implements GeoEntity { @Override protected void positionRider(Entity passenger, MoveFunction moveFunction) { if (this.hasPassenger(passenger)) { - Vec3 forward = this.getLookAngle().multiply(1.0D, 0.0D, 1.0D); + Vec3 localForward = this.toLocalPlane(this.getLookAngle()).normalize(); + Vec3 worldForward = this.toWorld(localForward); + Vec3 seatOffset = this.toWorld(0.0D, 0.5D, 0.0D).subtract(worldForward.scale(0.65D)); moveFunction.accept(passenger, - this.getX() - forward.x * 0.65D, - this.getY() + 0.5D, - this.getZ() - forward.z * 0.65D); + this.getX() + seatOffset.x, + this.getY() + seatOffset.y, + this.getZ() + seatOffset.z); } } @@ -700,10 +706,11 @@ public class DorrieEntity extends Animal implements GeoEntity { int bottom = Math.max(minY, this.level().getMinBuildHeight() + 1); for (int y = top; y >= bottom; y--) { BlockPos pos = BlockPos.containing(x, y, z); - if (!this.isWaterAt(pos) || this.isWaterAt(pos.above())) { + BlockPos localUp = this.relativeLocal(pos, 0, 1, 0); + if (!this.isWaterAt(pos) || this.isWaterAt(localUp)) { continue; } - return new Vec3(x + 0.5D, y + 0.85D, z + 0.5D); + return Vec3.atCenterOf(pos).add(this.toWorld(0.0D, 0.35D, 0.0D)); } return null; } @@ -731,10 +738,11 @@ public class DorrieEntity extends Animal implements GeoEntity { int bottom = Math.max(minY, this.level().getMinBuildHeight() + 1); for (int y = top; y >= bottom; y--) { BlockPos pos = BlockPos.containing(x, y, z); - if (!this.isWaterAt(pos) || !this.isWaterAt(pos.below())) { + BlockPos localDown = this.relativeLocal(pos, 0, -1, 0); + if (!this.isWaterAt(pos) || !this.isWaterAt(localDown)) { continue; } - return new Vec3(x + 0.5D, y + 0.3D, z + 0.5D); + return Vec3.atCenterOf(pos).add(this.toWorld(0.0D, -0.2D, 0.0D)); } return null; } @@ -750,10 +758,36 @@ public class DorrieEntity extends Animal implements GeoEntity { if (this.getControllingPassenger() instanceof Player player) { return Math.abs(player.zza) > 0.05F || Math.abs(player.xxa) > 0.05F; } - return this.getDeltaMovement().horizontalDistanceSqr() > MOVING_ANIM_THRESHOLD_SQ + return this.toLocal(this.getDeltaMovement()).horizontalDistanceSqr() > MOVING_ANIM_THRESHOLD_SQ || this.getNavigation().isInProgress(); } + private GravityDirection gravityDirection() { + return GravityApi.getGravityDirection(this); + } + + private Vec3 toLocal(Vec3 worldVector) { + return GravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); + } + + private Vec3 toWorld(Vec3 localVector) { + return GravityRotationUtil.vecPlayerToWorld(localVector, this.gravityDirection()); + } + + private Vec3 toWorld(double x, double y, double z) { + return GravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); + } + + private Vec3 toLocalPlane(Vec3 worldVector) { + Vec3 local = this.toLocal(worldVector); + return new Vec3(local.x, 0.0D, local.z); + } + + private BlockPos relativeLocal(BlockPos pos, int x, int y, int z) { + Vec3 worldOffset = this.toWorld(x, y, z); + return pos.offset(Mth.floor(worldOffset.x), Mth.floor(worldOffset.y), Mth.floor(worldOffset.z)); + } + private class DolphinSwimGoal extends Goal { private static final int COOLDOWN_MIN_TICKS = 120; private static final int COOLDOWN_MAX_TICKS = 180; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/DrTrayaurusEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/DrTrayaurusEntity.java index d186471b..63a52325 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/DrTrayaurusEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/DrTrayaurusEntity.java @@ -102,7 +102,7 @@ public class DrTrayaurusEntity extends AbstractVillager { protected void updateTrades() { MerchantOffers offers = this.getOffers(); offers.clear(); - offers.addAll(DrTrayaurusTradeManager.createOffers()); + offers.addAll(DrTrayaurusTradeManager.createOffers(this.level().registryAccess())); this.overrideXp(1); this.tradesInitialized = true; } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/EmperorScorpionEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/EmperorScorpionEntity.java index 35b3c886..af6f44b8 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/EmperorScorpionEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/EmperorScorpionEntity.java @@ -6,8 +6,12 @@ import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.boss.BossCombatUtil; import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; -import com.craisinlord.antarchy.content.entity.ScorpionEntity; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; +import com.craisinlord.anthology.gravity.GravityRotationUtil; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import net.minecraft.core.registries.Registries; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.syncher.EntityDataAccessor; @@ -16,8 +20,10 @@ import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerBossEvent; +import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundEvent; +import net.minecraft.util.Mth; import net.minecraft.util.RandomSource; import net.minecraft.world.BossEvent; import net.minecraft.world.Difficulty; @@ -33,17 +39,16 @@ import net.minecraft.world.entity.ai.attributes.AttributeSupplier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.ai.goal.FloatGoal; import net.minecraft.world.entity.ai.goal.Goal; -import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; -import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; import net.minecraft.world.entity.ai.goal.RandomStrollGoal; import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; -import net.minecraft.server.level.ServerLevel; import net.minecraft.world.DifficultyInstance; import net.minecraft.world.entity.monster.Monster; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; @@ -56,6 +61,9 @@ import software.bernie.geckolib.core.animation.RawAnimation; import software.bernie.geckolib.util.GeckoLibUtil; import java.util.EnumSet; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; public class EmperorScorpionEntity extends Monster implements GeoEntity { private static final byte CLAW_ATTACK_EVENT = 4; @@ -78,18 +86,32 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { private static final double CLAW_LUNGE_LIFT = 0.02D; private static final double STING_LUNGE_SPEED = 0.08D; private static final double STING_LUNGE_LIFT = 0.01D; - private static final double CLAW_RANGE = 5.25D; - private static final double STING_RANGE = 5.75D; + private static final double CLAW_REACH = 5.0D; + private static final double STING_REACH = 6.0D; + private static final double CLAW_HIT_REACH = 6.25D; + private static final double STING_HIT_REACH = 7.5D; + private static final double DIRECT_APPROACH_RANGE = 12.0D; + private static final float DIRECT_APPROACH_TURN_RATE = 10.0F; + private static final float DIRECT_APPROACH_ALIGN_THRESHOLD = 45.0F; private static final int HARDEN_START_TICKS = 11; private static final int HARDEN_END_TICKS = 20; private static final int HARDEN_HEAL_INTERVAL_TICKS = 20; private static final float HARDEN_HEAL_AMOUNT = 2.0F; private static final int HARDEN_MIN_DURATION_TICKS = 100; private static final int HARDEN_MAX_DURATION_TICKS = 200; + private static final double ENCOUNTER_HOME_RADIUS = 72.0D; + private static final double ENCOUNTER_LEASH_RADIUS = 96.0D; + private static final double HOME_REACHED_RADIUS = 9.0D; + private static final double FORCED_RETURN_RADIUS = 144.0D; + private static final int RESET_DELAY_TICKS = 240; + private static final double HOME_RETURN_SPEED = 1.0D; + private static final double NEARBY_SCORPION_CHECK_RADIUS = 32.0D; private static final ResourceKey THORAXIS_KEY = ResourceKey.create(Registries.DIMENSION, new ResourceLocation(Antarchy.MODID, "thoraxis")); + private static final ResourceKey DREAM_DUNES = ResourceKey.create( + Registries.BIOME, new ResourceLocation(Antarchy.MODID, "dream_dunes")); private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); @@ -114,12 +136,14 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { private int hardenDurationTicks; private int hardenHealTicks; private int hardenSummonedScorpions; - private float hardenLockedYaw; - private float hardenLockedPitch; + private int disengageTicks; private boolean attackDamageApplied; private AttackType currentAttack = AttackType.NONE; private HardenPhase hardenPhase = HardenPhase.NONE; + private AttackType previousAttack = AttackType.NONE; + @Nullable private BlockPos encounterHome; @Nullable private LivingEntity attackTarget; + private final Set summonedScorpionIds = new HashSet<>(); private boolean hasTakenDamage; public EmperorScorpionEntity(EntityType entityType, Level level) { @@ -139,6 +163,17 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { .add(Attributes.FOLLOW_RANGE, AntarchySettings.emperorScorpionFollowRange()); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, + MobSpawnType spawnReason, @Nullable net.minecraft.world.entity.SpawnGroupData spawnData, + @Nullable net.minecraft.nbt.CompoundTag dataTag) { + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.emperorScorpionHealth()); + if (ThoraxisUndersideManager.isUndersideCeilingSpot(level, this.blockPosition(), this.getType())) { + ThoraxisUndersideManager.applyUndersideInversion(this); + } + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData, dataTag); + } + @Override protected void defineSynchedData() { super.defineSynchedData(); @@ -151,8 +186,6 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { this.goalSelector.addGoal(0, new FloatGoal(this)); this.goalSelector.addGoal(1, new EmperorScorpionCombatGoal()); this.goalSelector.addGoal(5, new RandomStrollGoal(this, 0.8D)); - this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 12.0F)); - this.goalSelector.addGoal(7, new RandomLookAroundGoal(this)); this.targetSelector.addGoal(1, new HurtByTargetGoal(this)); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); } @@ -164,13 +197,17 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { @Override public boolean hurt(DamageSource source, float amount) { + if (BossCombatUtil.isMagicWarded(this) && BossCombatUtil.isMagicBurstSource(source)) { + amount *= (1.0F - (float) AntarchySettings.bossMagicWardReductionFraction()); + } if (this.isHardenedStateActive()) { return false; } - amount = BossCombatUtil.capSingleHitAtHalfHealth(this, amount); + float preHealth = this.getHealth(); boolean hurt = super.hurt(source, amount); if (hurt) { this.hasTakenDamage = true; + BossCombatUtil.clampHalfHealthCrossing(this, preHealth); } return hurt; } @@ -205,8 +242,17 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { if (!level.getLevel().dimension().equals(THORAXIS_KEY)) { return false; } - return level.getDifficulty() != Difficulty.PEACEFUL - && Monster.checkMonsterSpawnRules(entityType, level, spawnReason, pos, random); + if (level.getDifficulty() == Difficulty.PEACEFUL) { + return false; + } + if (ThoraxisUndersideManager.isUndersideCeilingSpawn(entityType, level, pos)) { + return true; + } + if (pos.getY() < 0 && level.getBiome(pos).is(DREAM_DUNES) && level.isEmptyBlock(pos)) { + BlockState below = level.getBlockState(pos.below()); + return !below.is(Blocks.BEDROCK) && below.isFaceSturdy(level, pos.below(), Direction.UP); + } + return Monster.checkMonsterSpawnRules(entityType, level, spawnReason, pos, random); } @Override @@ -214,15 +260,14 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { return 1.5F; } - @Override - public int getMaxHeadYRot() { - return 40; - } - @Override public void tick() { super.tick(); + if (!this.level().isClientSide) { + this.tickEncounterState(); + } this.bossEvent.setProgress(this.getHealth() / this.getMaxHealth()); + this.bossEvent.setVisible(this.shouldShowBossBar()); if (this.clawCooldownTicks > 0) { this.clawCooldownTicks--; @@ -289,6 +334,7 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { } this.attackTarget = target; this.currentAttack = attackType; + this.previousAttack = attackType; this.attackAnimTicks = attackType.animTicks(); this.attackDamageApplied = false; this.getNavigation().stop(); @@ -309,7 +355,6 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { return; } - this.getLookControl().setLookAt(this.attackTarget, 30.0F, 30.0F); if (!this.attackDamageApplied && this.attackAnimTicks == this.currentAttack.hitTick() && this.canHitAttackTarget(this.attackTarget, this.currentAttack)) { @@ -323,8 +368,11 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { } private boolean canHitAttackTarget(LivingEntity target, AttackType attackType) { - double range = attackType == AttackType.STING ? STING_RANGE : CLAW_RANGE; - return this.distanceToSqr(target) <= range * range && this.hasLineOfSight(target); + if (!target.isAlive() || !this.hasLineOfSight(target)) { + return false; + } + double reach = attackType == AttackType.STING ? STING_HIT_REACH : CLAW_HIT_REACH; + return this.distanceToSqr(target) <= reach * reach; } private void resetAttackState() { @@ -334,6 +382,12 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { this.attackTarget = null; } + private float approachYaw(float current, float target, float maxDeltaPerTick) { + float delta = Mth.wrapDegrees(target - current); + delta = Math.max(-maxDeltaPerTick, Math.min(maxDeltaPerTick, delta)); + return current + delta; + } + private void tickHardenState() { if (this.getHardenPhase() == HardenPhase.NONE) { if (this.hardenCooldownTicks <= 0 && this.getTarget() != null && this.getTarget().isAlive()) { @@ -350,7 +404,7 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { case CASTING -> { if (this.hardenCastTicks % this.hardenCastSpawnTicks == 0 && this.hardenSummonedScorpions < AntarchySettings.emperorScorpionMaxSummonedScorpions() - && this.countNearbyScorpionMinions() < AntarchySettings.emperorScorpionMaxNearbyScorpions()) { + && this.countOwnedNearbyScorpionMinions() < AntarchySettings.emperorScorpionMaxNearbyScorpions()) { this.summonScorpionMinion(); this.hardenSummonedScorpions++; if (this.hardenSummonedScorpions >= AntarchySettings.emperorScorpionMaxSummonedScorpions()) { @@ -363,15 +417,14 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { } } case START -> { - this.lockHardenRotation(); if (--this.hardenStateTicks <= 0) { this.beginHardened(); } } case ACTIVE -> { - this.lockHardenRotation(); - Vec3 motion = this.getDeltaMovement(); - this.setDeltaMovement(0.0D, motion.y, 0.0D); + GravityDirection direction = GravityApi.getGravityDirection(this); + Vec3 motion = GravityRotationUtil.vecWorldToPlayer(this.getDeltaMovement(), direction); + this.setDeltaMovement(GravityRotationUtil.vecPlayerToWorld(0.0D, motion.y, 0.0D, direction)); if (--this.hardenDurationTicks <= 0) { this.beginHardeningEnd(); return; @@ -382,12 +435,12 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { } } case END -> { - this.lockHardenRotation(); - Vec3 motion = this.getDeltaMovement(); - this.setDeltaMovement(0.0D, motion.y, 0.0D); + GravityDirection direction = GravityApi.getGravityDirection(this); + Vec3 motion = GravityRotationUtil.vecWorldToPlayer(this.getDeltaMovement(), direction); + this.setDeltaMovement(GravityRotationUtil.vecPlayerToWorld(0.0D, motion.y, 0.0D, direction)); if (--this.hardenStateTicks <= 0) { this.setHardenPhase(HardenPhase.NONE); - this.hardenCooldownTicks = Math.max(1, AntarchySettings.emperorScorpionSummonIntervalTicks()); + this.hardenCooldownTicks = Math.max(1, AntarchySettings.emperorScorpionHardenCooldownTicks()); } } } @@ -402,14 +455,13 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { this.hardenHealTicks = 0; this.hardenSummonedScorpions = 0; this.resetAttackState(); + this.previousAttack = AttackType.NONE; this.getNavigation().stop(); } private void beginHardening() { this.setHardenPhase(HardenPhase.START); this.hardenStateTicks = HARDEN_START_TICKS; - this.hardenLockedYaw = this.getYRot(); - this.hardenLockedPitch = this.getXRot(); this.playSound(AntarchySoundEvents.EMPEROR_SCORPION_ROAR.get(), 1.0F, 0.95F + this.random.nextFloat() * 0.05F); this.setAggressive(false); } @@ -426,13 +478,12 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { this.setAggressive(false); } - private static final double NEARBY_SCORPION_CHECK_RADIUS = 24.0D; - - private int countNearbyScorpionMinions() { + private int countOwnedNearbyScorpionMinions() { + UUID ownerId = this.getUUID(); return this.level().getEntitiesOfClass( ScorpionEntity.class, this.getBoundingBox().inflate(NEARBY_SCORPION_CHECK_RADIUS), - Entity::isAlive + scorpion -> scorpion.isAlive() && scorpion.isSummonedFor(ownerId) ).size(); } @@ -446,30 +497,56 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { return; } - Vec3 ring = Vec3.directionFromRotation(0.0F, this.random.nextFloat() * 360.0F) + Vec3 anchor = this.getTarget() != null ? this.getTarget().position() : this.position(); + GravityDirection direction = GravityApi.getGravityDirection(this); + Vec3 localRing = Vec3.directionFromRotation(0.0F, this.random.nextFloat() * 360.0F) .scale(2.75D + this.random.nextDouble() * 1.75D); - BlockPos spawnPos = BlockPos.containing(this.getX() + ring.x, this.getY(), this.getZ() + ring.z); - scorpion.moveTo(spawnPos.getX() + 0.5D, spawnPos.getY(), spawnPos.getZ() + 0.5D, this.random.nextFloat() * 360.0F, 0.0F); + Vec3 worldRing = GravityRotationUtil.vecPlayerToWorld(localRing, direction); + BlockPos spawnPos = this.findSummonSpawnPos(anchor.add(worldRing)); + Vec3 spawnCenter = Vec3.atCenterOf(spawnPos); + scorpion.moveTo(spawnCenter.x, spawnCenter.y, spawnCenter.z, this.random.nextFloat() * 360.0F, 0.0F); scorpion.finalizeSpawn(serverLevel, serverLevel.getCurrentDifficultyAt(spawnPos), MobSpawnType.MOB_SUMMONED, null, null); scorpion.setPersistenceRequired(); + scorpion.setSummonOwner(this.getUUID()); LivingEntity target = this.getTarget(); if (target != null) { scorpion.setTarget(target); } serverLevel.addFreshEntity(scorpion); + this.summonedScorpionIds.add(scorpion.getUUID()); } private void commitLunge(LivingEntity target, double horizontalSpeed, double verticalSpeed) { - Vec3 lunge = target.position().subtract(this.position()); - Vec3 horizontal = new Vec3(lunge.x, 0.0D, lunge.z); + GravityDirection direction = GravityApi.getGravityDirection(this); + Vec3 localLunge = GravityRotationUtil.vecWorldToPlayer(target.position().subtract(this.position()), direction); + Vec3 horizontal = new Vec3(localLunge.x, 0.0D, localLunge.z); if (horizontal.lengthSqr() < 1.0E-4D) { return; } horizontal = horizontal.normalize().scale(horizontalSpeed); - this.setDeltaMovement(this.getDeltaMovement().add(horizontal.x, verticalSpeed, horizontal.z)); + Vec3 localImpulse = new Vec3(horizontal.x, verticalSpeed, horizontal.z); + Vec3 worldImpulse = GravityRotationUtil.vecPlayerToWorld(localImpulse, direction); + this.setDeltaMovement(this.getDeltaMovement().add(worldImpulse.x, worldImpulse.y, worldImpulse.z)); this.hasImpulse = true; } + private BlockPos findSummonSpawnPos(Vec3 center) { + BlockPos base = BlockPos.containing(center); + Direction gravityDown = GravityRotationUtil.getGravityDownDirection(this); + Direction gravityUp = gravityDown.getOpposite(); + BlockPos fallback = base; + for (int step = -2; step <= 2; step++) { + BlockPos candidate = base.relative(gravityUp, step); + BlockPos support = candidate.relative(gravityDown); + if (this.level().isEmptyBlock(candidate) + && this.level().isEmptyBlock(candidate.relative(gravityUp)) + && this.level().getBlockState(support).isFaceSturdy(this.level(), support, gravityUp)) { + return candidate; + } + } + return fallback; + } + @Override public void handleEntityEvent(byte id) { if (id == CLAW_ATTACK_EVENT) { @@ -546,19 +623,6 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { this.entityData.set(HARDEN_PHASE, phase.ordinal()); } - private void lockHardenRotation() { - if (!this.isHardenSequenceActive()) { - return; - } - this.setYRot(this.hardenLockedYaw); - this.setYHeadRot(this.hardenLockedYaw); - this.yBodyRot = this.hardenLockedYaw; - this.yBodyRotO = this.hardenLockedYaw; - this.yHeadRotO = this.hardenLockedYaw; - this.setXRot(this.hardenLockedPitch); - this.xRotO = this.hardenLockedPitch; - } - private void updateAnimationState() { if (this.isDeadOrDying()) { this.setAnimationState(ANIM_DEATH); @@ -638,6 +702,11 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { tag.putInt("HardenHealTicks", this.hardenHealTicks); tag.putInt("HardenSummonedScorpions", this.hardenSummonedScorpions); tag.putBoolean("HasTakenDamage", this.hasTakenDamage); + if (this.encounterHome != null) { + tag.putInt("EncounterHomeX", this.encounterHome.getX()); + tag.putInt("EncounterHomeY", this.encounterHome.getY()); + tag.putInt("EncounterHomeZ", this.encounterHome.getZ()); + } } @Override @@ -672,6 +741,15 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { if (tag.contains("HasTakenDamage")) { this.hasTakenDamage = tag.getBoolean("HasTakenDamage"); } + if (tag.contains("EncounterHomeX") && tag.contains("EncounterHomeY") && tag.contains("EncounterHomeZ")) { + this.encounterHome = new BlockPos(tag.getInt("EncounterHomeX"), tag.getInt("EncounterHomeY"), tag.getInt("EncounterHomeZ")); + } + this.resetAttackState(); + if (this.getHardenPhase() == HardenPhase.CASTING) { + this.setHardenPhase(HardenPhase.NONE); + } + this.disengageTicks = 0; + this.summonedScorpionIds.clear(); } @Override @@ -694,6 +772,9 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { @Override public void remove(RemovalReason reason) { + if (!this.level().isClientSide) { + this.discardOwnedScorpions(); + } super.remove(reason); this.bossEvent.removeAllPlayers(); } @@ -702,6 +783,148 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { return this.attackAnimTicks > 0; } + private void tickEncounterState() { + if (this.encounterHome == null) { + this.encounterHome = this.blockPosition(); + } + + LivingEntity target = this.getTarget(); + if (!this.isValidEncounterTarget(target)) { + if (target != null) { + this.setTarget(null); + } + target = null; + } + + if (target != null) { + this.disengageTicks = 0; + if (this.isOutsideLeashRadius()) { + this.resetEncounter(true); + } + return; + } + + if (this.isAttackLocked() || this.isHardenSequenceActive()) { + return; + } + + if (this.hasOwnedScorpionsNearby()) { + this.disengageTicks = 0; + return; + } + + if (!this.isAtEncounterHome()) { + this.disengageTicks++; + if (this.disengageTicks >= RESET_DELAY_TICKS) { + this.resetEncounter(true); + } else { + this.navigateHome(); + } + return; + } + + this.disengageTicks = 0; + } + + private boolean isValidEncounterTarget(@Nullable LivingEntity target) { + if (target == null || !target.isAlive() || !target.level().equals(this.level())) { + return false; + } + if (target instanceof Player player && (player.isCreative() || player.isSpectator())) { + return false; + } + if (this.encounterHome == null) { + return true; + } + return target.distanceToSqr(Vec3.atCenterOf(this.encounterHome)) <= ENCOUNTER_LEASH_RADIUS * ENCOUNTER_LEASH_RADIUS; + } + + private boolean shouldShowBossBar() { + return this.getTarget() != null + || this.isAttackLocked() + || this.isHardenSequenceActive() + || this.hasOwnedScorpionsNearby() + || !this.isAtEncounterHome(); + } + + private boolean isAtEncounterHome() { + if (this.encounterHome == null) { + return true; + } + return this.distanceToSqr(Vec3.atCenterOf(this.encounterHome)) <= HOME_REACHED_RADIUS; + } + + private boolean isOutsideLeashRadius() { + if (this.encounterHome == null) { + return false; + } + return this.distanceToSqr(Vec3.atCenterOf(this.encounterHome)) > ENCOUNTER_LEASH_RADIUS * ENCOUNTER_LEASH_RADIUS; + } + + private boolean hasOwnedScorpionsNearby() { + return this.countOwnedNearbyScorpionMinions() > 0; + } + + private void navigateHome() { + if (this.encounterHome == null) { + return; + } + Vec3 homeCenter = Vec3.atCenterOf(this.encounterHome); + if (this.distanceToSqr(homeCenter) > FORCED_RETURN_RADIUS * FORCED_RETURN_RADIUS) { + this.moveTo(homeCenter.x, homeCenter.y, homeCenter.z, this.getYRot(), this.getXRot()); + this.setDeltaMovement(Vec3.ZERO); + this.hasImpulse = true; + return; + } + this.getNavigation().moveTo(homeCenter.x, homeCenter.y, homeCenter.z, HOME_RETURN_SPEED); + } + + private void resetEncounter(boolean restoreHealth) { + this.resetAttackState(); + this.getNavigation().stop(); + this.setTarget(null); + this.setAggressive(false); + this.setHardenPhase(HardenPhase.NONE); + this.hardenCastTicks = 0; + this.hardenCastSpawnTicks = 0; + this.hardenStateTicks = 0; + this.hardenDurationTicks = 0; + this.hardenHealTicks = 0; + this.hardenSummonedScorpions = 0; + this.hardenCooldownTicks = Math.max(1, AntarchySettings.emperorScorpionHardenCooldownTicks()); + this.disengageTicks = 0; + this.previousAttack = AttackType.NONE; + if (restoreHealth) { + this.setHealth(this.getMaxHealth()); + } + this.discardOwnedScorpions(); + if (this.encounterHome != null) { + Vec3 homeCenter = Vec3.atCenterOf(this.encounterHome); + this.moveTo(homeCenter.x, homeCenter.y, homeCenter.z, this.getYRot(), this.getXRot()); + this.setDeltaMovement(Vec3.ZERO); + } + } + + private void discardOwnedScorpions() { + if (!(this.level() instanceof ServerLevel serverLevel)) { + this.summonedScorpionIds.clear(); + return; + } + UUID ownerId = this.getUUID(); + for (UUID scorpionId : Set.copyOf(this.summonedScorpionIds)) { + Entity entity = serverLevel.getEntity(scorpionId); + if (entity instanceof ScorpionEntity scorpion && scorpion.isAlive() && scorpion.isSummonedFor(ownerId)) { + scorpion.remove(RemovalReason.DISCARDED); + } + } + this.level().getEntitiesOfClass( + ScorpionEntity.class, + this.getBoundingBox().inflate(NEARBY_SCORPION_CHECK_RADIUS * 2.0D), + scorpion -> scorpion.isAlive() && scorpion.isSummonedFor(ownerId) + ).forEach(scorpion -> scorpion.remove(RemovalReason.DISCARDED)); + this.summonedScorpionIds.clear(); + } + public boolean isHardenSequenceActive() { return this.getHardenPhase() != HardenPhase.NONE; } @@ -724,7 +947,12 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { } private final class EmperorScorpionCombatGoal extends Goal { - private static final double CHASE_SPEED = 1.1D; + private static final double CHASE_SPEED = 1.15D; + + private int repathCooldownTicks; + private double repathTargetX; + private double repathTargetY; + private double repathTargetZ; private EmperorScorpionCombatGoal() { this.setFlags(EnumSet.of(Goal.Flag.MOVE, Goal.Flag.LOOK)); @@ -739,12 +967,14 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { @Override public boolean canContinueToUse() { LivingEntity target = EmperorScorpionEntity.this.getTarget(); - return (target != null && target.isAlive()) || EmperorScorpionEntity.this.isAttackLocked(); + return EmperorScorpionEntity.this.isAttackLocked() + || (target != null && target.isAlive() && !EmperorScorpionEntity.this.isHardenSequenceActive()); } @Override public void start() { EmperorScorpionEntity.this.setAggressive(true); + this.repathCooldownTicks = 0; } @Override @@ -755,70 +985,100 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { @Override public void tick() { + if (EmperorScorpionEntity.this.isAttackLocked() || EmperorScorpionEntity.this.isHardenSequenceActive()) { + return; + } + LivingEntity target = EmperorScorpionEntity.this.getTarget(); if (target == null) { + return; + } + + if (EmperorScorpionEntity.this.isWithinMeleeAttackRange(target) && EmperorScorpionEntity.this.hasLineOfSight(target)) { EmperorScorpionEntity.this.getNavigation().stop(); + GravityDirection direction = GravityApi.getGravityDirection(EmperorScorpionEntity.this); + Vec3 localMotion = GravityRotationUtil.vecWorldToPlayer(EmperorScorpionEntity.this.getDeltaMovement(), direction); + Vec3 localStopped = new Vec3(0.0D, localMotion.y, 0.0D); + Vec3 worldStopped = GravityRotationUtil.vecPlayerToWorld(localStopped, direction); + EmperorScorpionEntity.this.setDeltaMovement(worldStopped); + AttackType attackType = EmperorScorpionEntity.this.selectAttack(target); + if (attackType != AttackType.NONE) { + EmperorScorpionEntity.this.beginAttack(target, attackType); + } return; } - if (EmperorScorpionEntity.this.isHardenSequenceActive()) { - this.stopMovement(); + if (EmperorScorpionEntity.this.distanceToSqr(target) <= DIRECT_APPROACH_RANGE * DIRECT_APPROACH_RANGE + && EmperorScorpionEntity.this.hasLineOfSight(target)) { + EmperorScorpionEntity.this.getNavigation().stop(); + this.approachDirectly(target); return; } - EmperorScorpionEntity.this.getLookControl().setLookAt(target, 30.0F, 30.0F); - - if (EmperorScorpionEntity.this.isAttackLocked()) { - this.stopMovement(); - return; - } - - if (!EmperorScorpionEntity.this.hasLineOfSight(target)) { - EmperorScorpionEntity.this.getNavigation().moveTo(target, CHASE_SPEED); - return; - } - - if (!EmperorScorpionEntity.this.isWithinMeleeAttackRange(target)) { - EmperorScorpionEntity.this.getNavigation().moveTo(target, CHASE_SPEED); - return; - } - - this.stopMovement(); - AttackType attackType = EmperorScorpionEntity.this.selectAttack(target); - if (attackType == AttackType.NONE) { - EmperorScorpionEntity.this.getNavigation().moveTo(target, CHASE_SPEED); - return; - } - - EmperorScorpionEntity.this.beginAttack(target, attackType); + this.tryRepath(target); } - private void stopMovement() { - EmperorScorpionEntity.this.getNavigation().stop(); - EmperorScorpionEntity.this.setSpeed(0.0F); - EmperorScorpionEntity.this.setZza(0.0F); + private void approachDirectly(LivingEntity target) { + GravityDirection direction = GravityApi.getGravityDirection(EmperorScorpionEntity.this); + Vec3 localDelta = GravityRotationUtil.vecWorldToPlayer(target.position().subtract(EmperorScorpionEntity.this.position()), direction); + double dx = localDelta.x; + double dz = localDelta.z; + if (dx * dx + dz * dz < 1.0E-4D) { + return; + } + float targetYaw = (float) (Mth.atan2(dz, dx) * (180.0D / Math.PI)) - 90.0F; + float currentYaw = EmperorScorpionEntity.this.getYRot(); + float newYaw = EmperorScorpionEntity.this.approachYaw(currentYaw, targetYaw, DIRECT_APPROACH_TURN_RATE); + EmperorScorpionEntity.this.setYRot(newYaw); + EmperorScorpionEntity.this.setYHeadRot(newYaw); + EmperorScorpionEntity.this.yBodyRot = newYaw; + EmperorScorpionEntity.this.yBodyRotO = newYaw; + + Vec3 currentMotion = GravityRotationUtil.vecWorldToPlayer(EmperorScorpionEntity.this.getDeltaMovement(), direction); + float headingError = Math.abs(Mth.wrapDegrees(targetYaw - currentYaw)); + if (headingError <= DIRECT_APPROACH_ALIGN_THRESHOLD) { + double speed = EmperorScorpionEntity.this.getAttributeValue(Attributes.MOVEMENT_SPEED) * CHASE_SPEED; + Vec3 forward = Vec3.directionFromRotation(0.0F, newYaw).scale(speed); + Vec3 worldForward = GravityRotationUtil.vecPlayerToWorld(forward.x, currentMotion.y, forward.z, direction); + EmperorScorpionEntity.this.setDeltaMovement(worldForward); + } else { + EmperorScorpionEntity.this.setDeltaMovement(GravityRotationUtil.vecPlayerToWorld(0.0D, currentMotion.y, 0.0D, direction)); + } + } + + private void tryRepath(LivingEntity target) { + if (--this.repathCooldownTicks > 0 + && target.distanceToSqr(this.repathTargetX, this.repathTargetY, this.repathTargetZ) < 1.0D) { + return; + } + this.repathTargetX = target.getX(); + this.repathTargetY = target.getY(); + this.repathTargetZ = target.getZ(); + this.repathCooldownTicks = 4 + EmperorScorpionEntity.this.random.nextInt(7); + if (!EmperorScorpionEntity.this.getNavigation().moveTo(target, CHASE_SPEED)) { + this.repathCooldownTicks += 15; + } } } @Override public boolean isWithinMeleeAttackRange(LivingEntity target) { - return this.distanceToSqr(target) <= STING_RANGE * STING_RANGE; + return this.distanceToSqr(target) <= CLAW_REACH * CLAW_REACH; } private AttackType selectAttack(LivingEntity target) { - boolean inClawRange = this.clawCooldownTicks <= 0 && this.distanceToSqr(target) <= CLAW_RANGE * CLAW_RANGE; - boolean inStingRange = this.stingCooldownTicks <= 0 && this.distanceToSqr(target) <= STING_RANGE * STING_RANGE; - boolean canClaw = inClawRange && this.hasLineOfSight(target); - boolean canSting = inStingRange && this.hasLineOfSight(target); - if (canSting && (!canClaw || this.random.nextFloat() < 0.3F)) { + double distSqr = this.distanceToSqr(target); + boolean canClaw = this.clawCooldownTicks <= 0 && distSqr <= CLAW_REACH * CLAW_REACH && this.hasLineOfSight(target); + boolean canSting = this.stingCooldownTicks <= 0 && distSqr <= STING_REACH * STING_REACH && this.hasLineOfSight(target); + if (canClaw && canSting) { + return this.previousAttack == AttackType.CLAW && this.random.nextFloat() < 0.55F ? AttackType.STING : AttackType.CLAW; + } + if (canSting) { return AttackType.STING; } if (canClaw) { return AttackType.CLAW; } - if (canSting) { - return AttackType.STING; - } return AttackType.NONE; } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/FlytrapEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/FlytrapEntity.java new file mode 100644 index 00000000..7d99d47e --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/FlytrapEntity.java @@ -0,0 +1,574 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.syncher.EntityDataAccessor; +import net.minecraft.network.syncher.EntityDataSerializers; +import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.tags.DamageTypeTags; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.ai.goal.FloatGoal; +import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; +import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; +import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.Nullable; +import software.bernie.geckolib.animatable.GeoEntity; +import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.core.animation.AnimatableManager; +import software.bernie.geckolib.core.animation.AnimationController; +import software.bernie.geckolib.core.animation.AnimationState; +import software.bernie.geckolib.core.object.PlayState; +import software.bernie.geckolib.core.animation.RawAnimation; +import software.bernie.geckolib.util.GeckoLibUtil; + +public class FlytrapEntity extends Monster implements GeoEntity { + private static final EntityDataAccessor ACTION_STATE = SynchedEntityData.defineId(FlytrapEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor AWAKE = SynchedEntityData.defineId(FlytrapEntity.class, EntityDataSerializers.BOOLEAN); + private static final int ACTION_NONE = 0; + private static final int ACTION_SWEEP = 1; + private static final int ACTION_GRAB = 2; + private static final int ACTION_DEATH = 3; + + private static final int SWEEP_TOTAL_TICKS = 20; + private static final int SWEEP_ACTIVE_START = 7; + private static final int SWEEP_ACTIVE_END = 14; + private static final int SWEEP_COOLDOWN_TICKS = 24; + private static final int GRAB_TOTAL_TICKS = 24; + private static final int GRAB_PULL_START = 6; + private static final int GRAB_PULL_END = 18; + private static final int GRAB_DAMAGE_TICK = 19; + private static final int GRAB_COOLDOWN_TICKS = 42; + private static final int DEATH_TICKS = 32; + + private static final double WAKE_RANGE = 12.0D; + private static final double SWEEP_RANGE = 4.25D; + private static final double GRAB_RANGE = 5.25D; + private static final double MIN_GRAB_RANGE = 2.0D; + private static final double FOLLOW_RANGE = 14.0D; + private static final double TURN_SPEED_DEGREES = 5.0D; + + private static final RawAnimation DORMANT_ANIM = RawAnimation.begin().thenLoop("dormant"); + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation SWEEP_ANIM = RawAnimation.begin().thenPlay("attack"); + private static final RawAnimation GRAB_ANIM = RawAnimation.begin().thenPlay("grab"); + private static final RawAnimation DEATH_ANIM = RawAnimation.begin().thenPlayAndHold("death"); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private final Map sweepHitCooldowns = new HashMap<>(); + + private int actionTicks; + private int attackCooldown; + private float actionStartYaw; + private int grabTargetId = -1; + private boolean grabDamageApplied; + private int preySearchCooldown = 0; + + public FlytrapEntity(EntityType entityType, Level level) { + super(entityType, level); + this.xpReward = 15; + } + + public static AttributeSupplier.Builder createAttributes() { + return Monster.createMonsterAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.flytrapHealth()) + .add(Attributes.ATTACK_DAMAGE, AntarchySettings.flytrapAttackDamage()) + .add(Attributes.FOLLOW_RANGE, FOLLOW_RANGE) + .add(Attributes.KNOCKBACK_RESISTANCE, 1.0D) + .add(Attributes.MOVEMENT_SPEED, 0.0D) + .add(Attributes.ARMOR_TOUGHNESS, AntarchySettings.flytrapArmorToughness()); + } + + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, + MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData, @org.jetbrains.annotations.Nullable net.minecraft.nbt.CompoundTag dataTag) { + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.flytrapHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData, dataTag); + } + + public static boolean canSpawn(EntityType entityType, LevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { + if (pos.getY() < level.getMinBuildHeight() || pos.getY() + 7 >= level.getMaxBuildHeight()) { + return false; + } + + BlockPos[] footprint = new BlockPos[] { + pos, + pos.east(), + pos.south(), + pos.east().south() + }; + + for (BlockPos footprintPos : footprint) { + if (!level.getBlockState(footprintPos).isAir()) { + return false; + } + + BlockPos below = footprintPos.below(); + if (!level.getBlockState(below).isFaceSturdy(level, below, Direction.UP)) { + return false; + } + + for (int y = 1; y <= 7; y++) { + if (!level.getBlockState(footprintPos.above(y)).isAir()) { + return false; + } + } + } + + return true; + } + + @Override + protected void defineSynchedData() { + super.defineSynchedData(); + this.entityData.define(ACTION_STATE, ACTION_NONE); + this.entityData.define(AWAKE, false); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + this.setActionState(ACTION_NONE); + this.actionTicks = 0; + this.grabTargetId = -1; + this.grabDamageApplied = false; + this.sweepHitCooldowns.clear(); + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); + this.goalSelector.addGoal(1, new LookAtPlayerGoal(this, Player.class, 16.0F)); + this.targetSelector.addGoal(1, new HurtByTargetGoal(this)); + this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, LivingEntity.class, 10, true, false, FlytrapEntity::isValidPreyTarget)); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 0, this::mainAnimController) + .triggerableAnim("attack", SWEEP_ANIM) + .triggerableAnim("grab", GRAB_ANIM) + .triggerableAnim("death", DEATH_ANIM)); + } + + private PlayState mainAnimController(AnimationState state) { + return switch (this.getActionState()) { + case ACTION_SWEEP -> state.setAndContinue(SWEEP_ANIM); + case ACTION_GRAB -> state.setAndContinue(GRAB_ANIM); + case ACTION_DEATH -> state.setAndContinue(DEATH_ANIM); + default -> state.setAndContinue(this.isAwake() ? IDLE_ANIM : DORMANT_ANIM); + }; + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + @Override + public void tick() { + super.tick(); + this.getNavigation().stop(); + Vec3 movement = this.getDeltaMovement(); + this.setDeltaMovement(0.0D, movement.y, 0.0D); + this.zza = 0.0F; + this.xxa = 0.0F; + + this.yBodyRot = this.getYRot(); + this.yHeadRot = this.getYRot(); + + if (this.level().isClientSide) { + return; + } + + this.syncConfiguredAttributes(); + + if (this.attackCooldown > 0) { + this.attackCooldown--; + } + + if (this.getActionState() == ACTION_DEATH) { + return; + } + + if (this.preySearchCooldown > 0) { + this.preySearchCooldown--; + } else { + this.preySearchCooldown = 20; + this.setAwake(this.hasNearbyPrey()); + if (!isValidLivePrey(this.getTarget())) { + this.setTarget(this.findNearestPrey()); + } + } + + LivingEntity target = this.getTarget(); + + if (this.getActionState() == ACTION_SWEEP) { + this.tickSweepAttack(); + return; + } + + if (this.getActionState() == ACTION_GRAB) { + this.tickGrabAttack(); + return; + } + + if (target != null) { + this.rotateToward(target, TURN_SPEED_DEGREES); + this.getLookControl().setLookAt(target, 30.0F, 30.0F); + this.tryStartAttack(target); + } + } + + @Override + public boolean hurt(DamageSource source, float amount) { + if (this.isInvulnerableTo(source)) { + return false; + } + if (source.is(DamageTypeTags.IS_PROJECTILE)) { + amount *= 0.33333334F; + } + return super.hurt(source, amount); + } + + @Override + public void die(DamageSource damageSource) { + if (!this.level().isClientSide && this.getActionState() != ACTION_DEATH) { + this.setActionState(ACTION_DEATH); + this.actionTicks = DEATH_TICKS; + this.attackCooldown = 0; + this.grabTargetId = -1; + this.setTarget(null); + this.getNavigation().stop(); + this.setDeltaMovement(Vec3.ZERO); + } + super.die(damageSource); + } + + @Override + protected void tickDeath() { + this.deathTime++; + if (this.deathTime >= DEATH_TICKS) { + this.remove(RemovalReason.KILLED); + } + } + + @Override + protected SoundEvent getAmbientSound() { + if (this.getActionState() != ACTION_NONE) { + return null; + } + + if (!this.isAwake()) { + return this.random.nextInt(24) == 0 ? AntarchySoundEvents.FLYTRAP_HISS.get() : null; + } + + return this.getTarget() != null ? AntarchySoundEvents.FLYTRAP_GROWL.get() : null; + } + + @Override + public int getAmbientSoundInterval() { + if (!this.isAwake()) { + return 200; + } + + return this.getTarget() != null ? 80 : 160; + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return AntarchySoundEvents.FLYTRAP_HURT.get(); + } + + @Override + protected SoundEvent getDeathSound() { + return AntarchySoundEvents.FLYTRAP_DEATH.get(); + } + + @Override + protected float getSoundVolume() { + return 0.7F; + } + + @Override + public boolean removeWhenFarAway(double distanceToClosestPlayer) { + return false; + } + + @Override + public boolean canAttack(LivingEntity target) { + return isValidPreyTarget(target); + } + + @Override + public void knockback(double strength, double x, double z) { + } + + private void tryStartAttack(LivingEntity target) { + if (this.attackCooldown > 0 || !this.hasLineOfSight(target)) { + return; + } + + double distance = this.distanceTo(target); + boolean inSweepRange = distance <= SWEEP_RANGE; + boolean inGrabRange = distance >= MIN_GRAB_RANGE && distance <= GRAB_RANGE; + + if (inSweepRange) { + if (inGrabRange && isLowHealthPrey(target) && this.random.nextFloat() < 0.25F) { + this.startGrabAttack(target); + } else { + this.startSweepAttack(target); + } + return; + } + + if (inGrabRange && (isLowHealthPrey(target) || this.random.nextFloat() < 0.08F)) { + this.startGrabAttack(target); + } + } + + private void startSweepAttack(LivingEntity target) { + this.setActionState(ACTION_SWEEP); + this.actionTicks = SWEEP_TOTAL_TICKS; + this.attackCooldown = SWEEP_COOLDOWN_TICKS; + this.actionStartYaw = this.getAngleTo(target) - 100.0F; + this.setYRot(this.actionStartYaw); + this.playSound(AntarchySoundEvents.FLYTRAP_ATTACK.get(), 0.9F, 0.75F); + } + + private void tickSweepAttack() { + int elapsed = SWEEP_TOTAL_TICKS - this.actionTicks; + float progress = elapsed / (float) SWEEP_TOTAL_TICKS; + this.setYRot(this.actionStartYaw + 200.0F * progress); + + this.tickSweepHitCooldowns(); + if (elapsed >= SWEEP_ACTIVE_START && elapsed <= SWEEP_ACTIVE_END) { + this.applySweepDamage(); + } + + this.actionTicks--; + if (this.actionTicks <= 0) { + this.setActionState(ACTION_NONE); + } + } + + private void tickSweepHitCooldowns() { + if (this.sweepHitCooldowns.isEmpty()) { + return; + } + this.sweepHitCooldowns.replaceAll((uuid, ticksRemaining) -> ticksRemaining - 1); + this.sweepHitCooldowns.values().removeIf(ticksRemaining -> ticksRemaining <= 0); + } + + private void applySweepDamage() { + if (!(this.level() instanceof ServerLevel serverLevel)) { + return; + } + + List candidates = this.level().getEntitiesOfClass( + LivingEntity.class, + this.getBoundingBox().inflate(SWEEP_RANGE, 1.0D, SWEEP_RANGE), + FlytrapEntity::isValidLivePrey + ); + + for (LivingEntity candidate : candidates) { + if (candidate == this || this.sweepHitCooldowns.containsKey(candidate.getUUID())) { + continue; + } + if (this.distanceTo(candidate) > SWEEP_RANGE) { + continue; + } + + float relativeYaw = Mth.wrapDegrees(this.getAngleTo(candidate) - this.getYRot()); + if (Math.abs(relativeYaw) > 70.0F) { + continue; + } + + this.sweepHitCooldowns.put(candidate.getUUID(), AntarchySettings.flytrapSweepHitCooldownTicks()); + candidate.hurt(AntarchyDamageSources.flytrapMauling(serverLevel, this), (float) AntarchySettings.flytrapAttackDamage()); + } + } + + private void startGrabAttack(LivingEntity target) { + this.setActionState(ACTION_GRAB); + this.actionTicks = GRAB_TOTAL_TICKS; + this.attackCooldown = GRAB_COOLDOWN_TICKS; + this.grabTargetId = target.getId(); + this.grabDamageApplied = false; + this.setYRot(this.getAngleTo(target)); + this.playSound(AntarchySoundEvents.FLYTRAP_GRAB.get(), 0.8F, 0.85F); + } + + private void tickGrabAttack() { + LivingEntity grabTarget = this.getGrabTarget(); + if (!isValidLivePrey(grabTarget)) { + this.finishGrabAttack(); + return; + } + + this.rotateToward(grabTarget, TURN_SPEED_DEGREES * 1.25D); + int elapsed = GRAB_TOTAL_TICKS - this.actionTicks; + if (elapsed >= GRAB_PULL_START && elapsed <= GRAB_PULL_END) { + this.pullTargetTowardMouth(grabTarget); + } + + if (!this.grabDamageApplied && elapsed >= GRAB_DAMAGE_TICK) { + this.grabDamageApplied = true; + if (this.level() instanceof ServerLevel serverLevel) { + grabTarget.hurt(AntarchyDamageSources.flytrapSwallow(serverLevel, this), (float) AntarchySettings.flytrapGrabDamage()); + } else { + grabTarget.hurt(this.damageSources().mobAttack(this), (float) AntarchySettings.flytrapGrabDamage()); + } + } + + this.actionTicks--; + if (this.actionTicks <= 0) { + this.finishGrabAttack(); + } + } + + private void pullTargetTowardMouth(LivingEntity target) { + Vec3 mouthPos = this.position().add(Vec3.directionFromRotation(0.0F, this.getYRot()).scale(1.45D)).add(0.0D, 2.3D, 0.0D); + Vec3 targetCenter = target.getBoundingBox().getCenter(); + Vec3 offset = mouthPos.subtract(targetCenter); + double distance = offset.length(); + if (distance < 1.0E-4D) { + return; + } + + Vec3 pull = offset.normalize().scale(Math.min(1.0D, 0.2D + distance * 0.18D)); + target.setDeltaMovement(target.getDeltaMovement().scale(0.35D).add(pull)); + target.hurtMarked = true; + target.fallDistance = 0.0F; + } + + private void finishGrabAttack() { + this.setActionState(ACTION_NONE); + this.actionTicks = 0; + this.grabTargetId = -1; + this.grabDamageApplied = false; + } + + private void rotateToward(LivingEntity target, double maxStep) { + float targetYaw = this.getAngleTo(target); + this.setYRot(this.rotateTowards(this.getYRot(), targetYaw, (float) maxStep)); + } + + private float getAngleTo(Entity target) { + double dx = target.getX() - this.getX(); + double dz = target.getZ() - this.getZ(); + return (float) (Mth.atan2(dz, dx) * (180.0F / Math.PI)) - 90.0F; + } + + private float rotateTowards(float currentYaw, float targetYaw, float maxStep) { + return currentYaw + Mth.clamp(Mth.wrapDegrees(targetYaw - currentYaw), -maxStep, maxStep); + } + + private boolean hasNearbyPrey() { + return !this.level().getEntitiesOfClass( + LivingEntity.class, + this.getBoundingBox().inflate(WAKE_RANGE, 4.0D, WAKE_RANGE), + FlytrapEntity::isValidLivePrey + ).isEmpty(); + } + + @Nullable + private LivingEntity findNearestPrey() { + List candidates = this.level().getEntitiesOfClass( + LivingEntity.class, + this.getBoundingBox().inflate(FOLLOW_RANGE, 6.0D, FOLLOW_RANGE), + FlytrapEntity::isValidLivePrey + ); + LivingEntity best = null; + double bestDistance = Double.MAX_VALUE; + for (LivingEntity candidate : candidates) { + double distance = this.distanceToSqr(candidate); + if (distance < bestDistance) { + bestDistance = distance; + best = candidate; + } + } + return best; + } + + @Nullable + private LivingEntity getGrabTarget() { + Entity entity = this.level().getEntity(this.grabTargetId); + return entity instanceof LivingEntity living ? living : null; + } + + private void syncConfiguredAttributes() { + if (this.getAttribute(Attributes.MAX_HEALTH) != null) { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(AntarchySettings.flytrapHealth()); + } + if (this.getAttribute(Attributes.ATTACK_DAMAGE) != null) { + this.getAttribute(Attributes.ATTACK_DAMAGE).setBaseValue(AntarchySettings.flytrapAttackDamage()); + } + } + + private static boolean isLowHealthPrey(LivingEntity target) { + return target.getHealth() <= Math.max((float) AntarchySettings.flytrapGrabDamage(), target.getMaxHealth() * 0.35F); + } + + private int getActionState() { + return this.entityData.get(ACTION_STATE); + } + + private void setActionState(int state) { + if (this.entityData.get(ACTION_STATE) != state) { + this.entityData.set(ACTION_STATE, state); + String trigger = switch (state) { + case ACTION_SWEEP -> "attack"; + case ACTION_GRAB -> "grab"; + case ACTION_DEATH -> "death"; + default -> null; + }; + if (trigger != null) { + this.triggerAnim("main_controller", trigger); + } + } + } + + private boolean isAwake() { + return this.entityData.get(AWAKE); + } + + private void setAwake(boolean awake) { + this.entityData.set(AWAKE, awake); + } + + private static boolean isValidLivePrey(@Nullable LivingEntity target) { + return target != null && target.isAlive() && isValidPreyTarget(target); + } + + private static boolean isValidPreyTarget(LivingEntity target) { + if (target instanceof Player player) { + return !player.isCreative() && !player.isSpectator(); + } + return target.getType().is(AntarchyTags.Entities.FLYTRAP_PREY); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/HerculesBeetleEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/HerculesBeetleEntity.java index 49c9e3b9..5d604e52 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/HerculesBeetleEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/HerculesBeetleEntity.java @@ -6,6 +6,9 @@ import com.craisinlord.antarchy.content.AntarchyGameRules; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; +import com.craisinlord.anthology.gravity.GravityRotationUtil; import com.craisinlord.antarchy.content.item.BigBerthaItem; import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakeSync; import java.util.EnumSet; @@ -56,6 +59,8 @@ import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal; import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; +import net.minecraft.world.entity.ai.goal.target.OwnerHurtByTargetGoal; +import net.minecraft.world.entity.ai.goal.target.OwnerHurtTargetGoal; import net.minecraft.world.entity.ai.navigation.FlyingPathNavigation; import net.minecraft.world.entity.ai.navigation.PathNavigation; import net.minecraft.world.entity.animal.FlyingAnimal; @@ -141,6 +146,7 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl private static final int CRY_COOLDOWN_TICKS = 120; private static final int COMBAT_RESET_TICKS = 60; private static final int IMPACT_SHAKE_TICKS = 25; + private static final int AIRBORNE_ANIMATION_HYSTERESIS_TICKS = 4; private static final double FLIGHT_SPEED = 1.38D; private static final double GROUND_SPEED = 0.34D; private static final double CHARGE_SPEED = 1.5D; @@ -200,17 +206,29 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl .add(Attributes.FLYING_SPEED, FLIGHT_SPEED) .add(Attributes.FOLLOW_RANGE, 48.0D) .add(Attributes.KNOCKBACK_RESISTANCE, 0.9D) - .add(Attributes.ARMOR, 12.0D); + .add(Attributes.ARMOR, 12.0D) + .add(Attributes.ARMOR_TOUGHNESS, AntarchySettings.herculesBeetleArmorToughness()); + } + + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, + MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData, + @org.jetbrains.annotations.Nullable net.minecraft.nbt.CompoundTag dataTag) { + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.herculesBeetleHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData, dataTag); } public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { if (spawnReason == MobSpawnType.SPAWN_EGG || spawnReason == MobSpawnType.SPAWNER || spawnReason == MobSpawnType.COMMAND) { return true; } - return level.getDifficulty() != Difficulty.PEACEFUL - && level.getBlockState(pos.below()).isFaceSturdy(level, pos.below(), Direction.UP) + boolean floorSpawn = level.getBlockState(pos.below()).isFaceSturdy(level, pos.below(), Direction.UP) && level.isEmptyBlock(pos) && level.isEmptyBlock(pos.above()); + boolean ceilingSpawn = level.getBlockState(pos.above()).isFaceSturdy(level, pos.above(), Direction.DOWN) + && level.isEmptyBlock(pos) + && level.isEmptyBlock(pos.below()); + return level.getDifficulty() != Difficulty.PEACEFUL && (floorSpawn || ceilingSpawn); } @Override @@ -250,6 +268,8 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl && !this.isKnockedDown() && !player.isCreative() && !player.isSpectator())); + this.targetSelector.addGoal(3, new OwnerHurtByTargetGoal(this)); + this.targetSelector.addGoal(4, new OwnerHurtTargetGoal(this)); } @Override @@ -403,8 +423,8 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl private void tickKnockedDown() { this.getNavigation().stop(); - Vec3 motion = this.getDeltaMovement(); - this.setDeltaMovement(0.0D, Math.min(motion.y, 0.0D), 0.0D); + Vec3 motion = this.toLocal(this.getDeltaMovement()); + this.setDeltaMovement(this.toWorld(0.0D, Math.min(motion.y, 0.0D), 0.0D)); if (this.getAnimationState() == ANIM_KNOCKED_DOWN && this.actionTicks > 0) { this.actionTicks--; if (this.actionTicks <= 0) { @@ -441,8 +461,8 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl case ANIM_OPEN_WINGS -> { this.setFlying(true); if (this.getControllingPassenger() instanceof Player) { - Vec3 motion = this.getDeltaMovement(); - this.setDeltaMovement(motion.x, Math.max(motion.y, MOUNTED_FLIGHT_LIFT), motion.z); + Vec3 motion = this.toLocal(this.getDeltaMovement()); + this.setDeltaMovement(this.toWorld(motion.x, Math.max(motion.y, MOUNTED_FLIGHT_LIFT), motion.z)); this.hasImpulse = true; } if (this.pendingChargeStart) { @@ -520,9 +540,9 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl this.setNoGravity(true); this.noPhysics = false; this.fallDistance = 0.0F; - if (this.onGround() && this.getDeltaMovement().y <= 0.0D) { - Vec3 motion = this.getDeltaMovement(); - this.setDeltaMovement(motion.x, MOUNTED_FLIGHT_LIFT, motion.z); + Vec3 motion = this.toLocal(this.getDeltaMovement()); + if (this.onGround() && motion.y <= 0.0D) { + this.setDeltaMovement(this.toWorld(motion.x, MOUNTED_FLIGHT_LIFT, motion.z)); this.hasImpulse = true; } } else { @@ -536,12 +556,11 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl this.setAnimationState(ANIM_KNOCKED_DOWN_IDLE); return; } - if (this.isFlying()) { + if (this.isFlying() || this.airborneTicks > AIRBORNE_ANIMATION_HYSTERESIS_TICKS) { this.setAnimationState(ANIM_FLY); return; } if (!this.onGround()) { - this.setAnimationState(ANIM_IDLE); return; } if (this.getControllingPassenger() instanceof Player rider) { @@ -593,6 +612,9 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl @Override public boolean hurt(DamageSource source, float amount) { + if (BossCombatUtil.isMagicWarded(this) && BossCombatUtil.isMagicBurstSource(source)) { + amount *= (1.0F - (float) AntarchySettings.bossMagicWardReductionFraction()); + } if (source.is(DamageTypeTags.IS_FALL)) { return false; } @@ -601,13 +623,16 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl amount *= 0.5F; } - amount = BossCombatUtil.capSingleHitAtHalfHealth(this, amount); + float preHealth = this.getHealth(); if (!this.level().isClientSide && !this.isTame() && !this.isKnockedDown() && !this.isDeadOrDying()) { float knockThreshold = Math.max(1.0F, this.getMaxHealth() * 0.05F); if (this.getHealth() - amount <= knockThreshold) { float allowedDamage = Math.max(0.0F, this.getHealth() - knockThreshold); boolean hurt = allowedDamage <= 0.0F || super.hurt(source, allowedDamage); + if (hurt) { + BossCombatUtil.clampHalfHealthCrossing(this, preHealth); + } if (hurt && this.isAlive()) { this.enterKnockedDown(); } @@ -615,7 +640,11 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl } } - return super.hurt(source, amount); + boolean hurt = super.hurt(source, amount); + if (hurt) { + BossCombatUtil.clampHalfHealthCrossing(this, preHealth); + } + return hurt; } @Override @@ -623,6 +652,9 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl if (super.isInvulnerableTo(source)) { return true; } + if (this.isTame()) { + return false; + } return BossCombatUtil.isOutOfDamageRange(this, AntarchySettings.herculesBeetleDamageRange()); } @@ -728,7 +760,7 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl } private boolean isMountedFlightPoseActive() { - return this.isFlying() && (!this.onGround() || this.getDeltaMovement().y > 0.08D); + return this.isFlying() && (!this.onGround() || this.toLocal(this.getDeltaMovement()).y > 0.08D); } private void startMountedFlight() { @@ -738,8 +770,8 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl this.noPhysics = false; this.fallDistance = 0.0F; this.groundedTicks = 0; - Vec3 motion = this.getDeltaMovement(); - this.setDeltaMovement(motion.x, Math.max(motion.y, MOUNTED_FLIGHT_LIFT), motion.z); + Vec3 motion = this.toLocal(this.getDeltaMovement()); + this.setDeltaMovement(this.toWorld(motion.x, Math.max(motion.y, MOUNTED_FLIGHT_LIFT), motion.z)); this.hasImpulse = true; this.setAnimationState(ANIM_FLY); } @@ -858,23 +890,24 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl ? target.hurt(AntarchyDamageSources.herculesBeetleObliteration(serverLevel, this), damage) : target.hurt(this.damageSources().mobAttack(this), damage); if (hurt) { - Vec3 push = target.position().subtract(this.position()).multiply(1.0D, 0.0D, 1.0D); + Vec3 push = this.toLocalPlane(target.position().subtract(this.position())); if (push.lengthSqr() < 1.0E-4D) { - push = this.getLookAngle().multiply(1.0D, 0.0D, 1.0D); + push = this.toLocalPlane(this.getLookAngle()); } push = push.normalize().scale(horizontalKnockback); - target.setDeltaMovement(target.getDeltaMovement().add(push.x, 1.25D, push.z)); + Vec3 worldPush = this.toWorld(push.x, 1.25D, push.z); + target.setDeltaMovement(target.getDeltaMovement().add(worldPush.x, worldPush.y, worldPush.z)); target.hurtMarked = true; } return hurt; } private void startCharge(Vec3 direction, int durationTicks, boolean mountedCharge) { - Vec3 horizontal = direction.multiply(1.0D, 0.0D, 1.0D); + Vec3 horizontal = this.toLocalPlane(direction); if (horizontal.lengthSqr() < 1.0E-4D) { - horizontal = this.getLookAngle().multiply(1.0D, 0.0D, 1.0D); + horizontal = this.toLocalPlane(this.getLookAngle()); } - this.chargeDirection = horizontal.normalize(); + this.chargeDirection = this.toWorld(horizontal.normalize()); this.pendingChargeDuration = Mth.clamp(durationTicks, MIN_MOUNTED_CHARGE_TICKS, MAX_CHARGE_TICKS); this.pendingMountedCharge = mountedCharge; @@ -929,12 +962,17 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl continue; } if (victim.hurt(AntarchyDamageSources.herculesBeetleObliteration(serverLevel, this), damage)) { - Vec3 push = victim.position().subtract(this.position()); + Vec3 push = this.toLocal(victim.position().subtract(this.position())); if (push.lengthSqr() < 1.0E-4D) { - push = this.chargeDirection; + push = this.toLocal(this.chargeDirection); } - push = push.normalize(); - victim.setDeltaMovement(victim.getDeltaMovement().add(push.x * 1.25D, 0.9D, push.z * 1.25D)); + Vec3 horizontal = new Vec3(push.x, 0.0D, push.z); + if (horizontal.lengthSqr() < 1.0E-4D) { + horizontal = this.toLocalPlane(this.getLookAngle()); + } + horizontal = horizontal.normalize(); + Vec3 worldPush = this.toWorld(horizontal.x * 1.25D, 0.9D, horizontal.z * 1.25D); + victim.setDeltaMovement(victim.getDeltaMovement().add(worldPush.x, worldPush.y, worldPush.z)); victim.hurtMarked = true; } } @@ -1144,7 +1182,8 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl @Override protected void positionRider(Entity passenger, MoveFunction moveFunction) { if (this.hasPassenger(passenger)) { - Vec3 forward = this.getLookAngle().multiply(1.0D, 0.0D, 1.0D); + Vec3 localForward = this.toLocalPlane(this.getLookAngle()); + Vec3 forward = localForward.lengthSqr() > 1.0E-4D ? this.toWorld(localForward.normalize()) : this.toWorld(0.0D, 0.0D, 1.0D); boolean mountedFlightPose = this.isMountedFlightPoseActive(); double yOffset = mountedFlightPose ? 5.3D : 3.0D; double forwardOffset = mountedFlightPose ? 2.2D : 1.25D; @@ -1152,11 +1191,12 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl yOffset -= 0.25D; forwardOffset += 0.25D; } + Vec3 seatOffset = forward.scale(forwardOffset).add(this.toWorld(0.0D, yOffset, 0.0D)); moveFunction.accept( passenger, - this.getX() + forward.x * forwardOffset, - this.getY() + yOffset, - this.getZ() + forward.z * forwardOffset + this.getX() + seatOffset.x, + this.getY() + seatOffset.y, + this.getZ() + seatOffset.z ); } } @@ -1184,14 +1224,15 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl super.travel(new Vec3(riddenInput.x, travelVector.y, riddenInput.z)); if (Math.abs(rider.zza) < 0.05F && Math.abs(rider.xxa) < 0.05F && this.onGround()) { - Vec3 dampedMotion = this.getDeltaMovement(); - this.setDeltaMovement(dampedMotion.x * MOUNTED_GROUND_BRAKE, dampedMotion.y, dampedMotion.z * MOUNTED_GROUND_BRAKE); + Vec3 dampedMotion = this.toLocal(this.getDeltaMovement()); + this.setDeltaMovement(this.toWorld(dampedMotion.x * MOUNTED_GROUND_BRAKE, dampedMotion.y, dampedMotion.z * MOUNTED_GROUND_BRAKE)); } } else { - Vec3 motion = new Vec3(0.0D, this.getDeltaMovement().y, 0.0D); + Vec3 motion = this.toLocal(this.getDeltaMovement()); this.moveRelative(this.getSpeed(), new Vec3(riddenInput.x, 0.0D, riddenInput.z)); - motion = motion.add(this.getDeltaMovement().x, riddenInput.y, this.getDeltaMovement().z); - this.setDeltaMovement(motion); + Vec3 moved = this.toLocal(this.getDeltaMovement()); + motion = new Vec3(moved.x, motion.y + riddenInput.y, moved.z); + this.setDeltaMovement(this.toWorld(motion)); this.move(MoverType.SELF, this.getDeltaMovement()); } } @@ -1245,7 +1286,10 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl @Override public boolean canAttack(LivingEntity target) { if (target instanceof Player player) { - return !this.isTame() && !player.isCreative() && !player.isSpectator() && super.canAttack(target); + if (this.isTame() && this.isOwnedBy(player)) { + return false; + } + return !player.isCreative() && !player.isSpectator() && super.canAttack(target); } return super.canAttack(target); } @@ -1255,16 +1299,20 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl return false; } if (target instanceof Player player) { - return !player.isCreative() && !player.isSpectator() && !this.isTame(); + if (this.isTame() && this.isOwnedBy(player)) { + return false; + } + return !player.isCreative() && !player.isSpectator(); } return target.canBeSeenAsEnemy(); } private void lookInDirection(Vec3 direction) { - if (direction.lengthSqr() <= 1.0E-4D) { + Vec3 localDirection = this.toLocalPlane(direction); + if (localDirection.lengthSqr() <= 1.0E-4D) { return; } - float yaw = (float) (Mth.atan2(direction.z, direction.x) * (180.0D / Math.PI)) - 90.0F; + float yaw = (float) (Mth.atan2(localDirection.z, localDirection.x) * (180.0D / Math.PI)) - 90.0F; this.setYRot(yaw); this.yBodyRot = yaw; this.yHeadRot = yaw; @@ -1282,10 +1330,10 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl private List getFrontTargets(double range, double inflation) { AABB box = this.getBoundingBox().expandTowards(this.getLookAngle().scale(range)).inflate(inflation); - Vec3 forward = this.getLookAngle().multiply(1.0D, 0.0D, 1.0D); + Vec3 forward = this.toLocalPlane(this.getLookAngle()); return this.level().getEntitiesOfClass(LivingEntity.class, box, this::canHarm).stream() .filter(entity -> { - Vec3 toTarget = entity.position().subtract(this.position()).multiply(1.0D, 0.0D, 1.0D); + Vec3 toTarget = this.toLocalPlane(entity.position().subtract(this.position())); if (forward.lengthSqr() < 1.0E-4D || toTarget.lengthSqr() < 1.0E-4D) { return true; } @@ -1294,6 +1342,27 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl .toList(); } + private GravityDirection gravityDirection() { + return GravityApi.getGravityDirection(this); + } + + private Vec3 toLocal(Vec3 worldVector) { + return GravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); + } + + private Vec3 toWorld(Vec3 localVector) { + return GravityRotationUtil.vecPlayerToWorld(localVector, this.gravityDirection()); + } + + private Vec3 toWorld(double x, double y, double z) { + return GravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); + } + + private Vec3 toLocalPlane(Vec3 worldVector) { + Vec3 local = this.toLocal(worldVector); + return new Vec3(local.x, 0.0D, local.z); + } + @Nullable private LivingEntity findFrontTarget(double range, double inflation) { List targets = this.getFrontTargets(range, inflation); @@ -1425,9 +1494,9 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl @Override public boolean canUse() { - return !HerculesBeetleEntity.this.isTame() + return !HerculesBeetleEntity.this.isKnockedDown() && !HerculesBeetleEntity.this.isLeashed() - && !HerculesBeetleEntity.this.isKnockedDown() + && !HerculesBeetleEntity.this.isVehicle() && HerculesBeetleEntity.this.getTarget() != null && HerculesBeetleEntity.this.canAttack(HerculesBeetleEntity.this.getTarget()); } @@ -1437,9 +1506,9 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl LivingEntity target = HerculesBeetleEntity.this.getTarget(); return target != null && target.isAlive() - && !HerculesBeetleEntity.this.isTame() - && !HerculesBeetleEntity.this.isLeashed() && !HerculesBeetleEntity.this.isKnockedDown() + && !HerculesBeetleEntity.this.isLeashed() + && !HerculesBeetleEntity.this.isVehicle() && HerculesBeetleEntity.this.canAttack(target); } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/HoverboardEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/HoverboardEntity.java index a34a71bd..018d5b77 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/HoverboardEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/HoverboardEntity.java @@ -2,9 +2,10 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.config.AntarchySettings; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; +import com.craisinlord.anthology.gravity.GravityRotationUtil; import com.craisinlord.antarchy.mixins.LivingEntityJumpingAccessor; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -25,6 +26,7 @@ import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.MoverType; import net.minecraft.world.entity.PathfinderMob; +import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.entity.ai.attributes.AttributeSupplier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.player.Player; @@ -66,6 +68,11 @@ public class HoverboardEntity extends PathfinderMob implements GeoEntity { this.setPersistenceRequired(); } + @Override + public boolean canBeAffected(MobEffectInstance effectInstance) { + return effectInstance.getEffect() instanceof com.craisinlord.anthology.effect.InvertedMobEffect; + } + public static AttributeSupplier.Builder createAttributes() { return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 6.0D); } @@ -133,12 +140,21 @@ public class HoverboardEntity extends PathfinderMob implements GeoEntity { if (!this.isVehicle() && !player.isSecondaryUseActive()) { if (!this.level().isClientSide) { player.startRiding(this); + this.playSound(AntarchySoundEvents.HOVERBOARD_MOUNT.get(), 1.0F, 1.0F); } return InteractionResult.sidedSuccess(this.level().isClientSide); } return super.mobInteract(player, hand); } + @Override + protected void removePassenger(Entity passenger) { + super.removePassenger(passenger); + if (!this.level().isClientSide) { + this.playSound(AntarchySoundEvents.HOVERBOARD_DISMOUNT.get(), 1.0F, 1.0F); + } + } + @Override @Nullable public LivingEntity getControllingPassenger() { @@ -156,11 +172,11 @@ public class HoverboardEntity extends PathfinderMob implements GeoEntity { if (!this.hasPassenger(passenger)) { return; } - Vec3 riderOffset = AntarchyGravityRotationUtil.vecPlayerToWorld( + Vec3 riderOffset = GravityRotationUtil.vecPlayerToWorld( 0.0D, RIDER_Y_OFFSET, 0.0D, - AntarchyGravityApi.getGravityDirection(this) + GravityApi.getGravityDirection(this) ); moveFunction.accept(passenger, this.getX() + riderOffset.x, this.getY() + riderOffset.y, this.getZ() + riderOffset.z); } @@ -204,38 +220,23 @@ public class HoverboardEntity extends PathfinderMob implements GeoEntity { } private double resolveVerticalMotion(boolean holdingJump) { - AntarchyGravityDirection gravityDirection = AntarchyGravityApi.getGravityDirection(this); + GravityDirection gravityDirection = GravityApi.getGravityDirection(this); double supportHeight = this.findSupportHeight(gravityDirection); - if (!gravityDirection.isInverted()) { - double maxY = supportHeight + MAX_HOVER_HEIGHT; - if (holdingJump) { - return this.getY() >= maxY ? 0.0D : ASCEND_SPEED; - } - if (this.getY() <= supportHeight) { - return 0.0D; - } - double heightAboveBand = this.getY() - maxY; - if (heightAboveBand > 0.0D) { - return -Mth.clamp(SETTLE_DESCEND_SPEED + heightAboveBand * FAST_DESCEND_RAMP, SETTLE_DESCEND_SPEED, FAST_DESCEND_SPEED); - } - return -SETTLE_DESCEND_SPEED; - } - - double minY = supportHeight - MAX_HOVER_HEIGHT; + double height = gravityDirection.isInverted() ? supportHeight - this.getY() : this.getY() - supportHeight; if (holdingJump) { - return this.getY() <= minY ? 0.0D : -ASCEND_SPEED; + return height >= MAX_HOVER_HEIGHT ? 0.0D : ASCEND_SPEED; } - if (this.getY() >= supportHeight) { + if (height <= 0.0D) { return 0.0D; } - double depthBelowBand = minY - this.getY(); - if (depthBelowBand > 0.0D) { - return Mth.clamp(SETTLE_DESCEND_SPEED + depthBelowBand * FAST_DESCEND_RAMP, SETTLE_DESCEND_SPEED, FAST_DESCEND_SPEED); + double heightAboveBand = height - MAX_HOVER_HEIGHT; + if (heightAboveBand > 0.0D) { + return -Mth.clamp(SETTLE_DESCEND_SPEED + heightAboveBand * FAST_DESCEND_RAMP, SETTLE_DESCEND_SPEED, FAST_DESCEND_SPEED); } - return SETTLE_DESCEND_SPEED; + return -SETTLE_DESCEND_SPEED; } - private double findSupportHeight(AntarchyGravityDirection gravityDirection) { + private double findSupportHeight(GravityDirection gravityDirection) { BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(Mth.floor(this.getX()), Mth.floor(this.getY()), Mth.floor(this.getZ())); if (!gravityDirection.isInverted()) { int minY = this.level().getMinBuildHeight(); diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/HushProjectileEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/HushProjectileEntity.java index 5d109ae1..80ffe9b3 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/HushProjectileEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/HushProjectileEntity.java @@ -115,7 +115,6 @@ public class HushProjectileEntity extends ThrowableItemProjectile { return; } - // Smoothly steer toward the target each tick Vec3 desired = toTarget.normalize().scale(TRAVEL_SPEED); this.setDeltaMovement(this.getDeltaMovement().lerp(desired, 0.1D)); } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/JerryEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/JerryEntity.java index 2316039b..ed1c8c66 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/JerryEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/JerryEntity.java @@ -2,6 +2,9 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; +import com.craisinlord.anthology.gravity.GravityRotationUtil; import com.craisinlord.antarchy.content.horde.CavarynHordeManager; import net.minecraft.nbt.CompoundTag; import net.minecraft.core.registries.BuiltInRegistries; @@ -208,7 +211,7 @@ public class JerryEntity extends Monster implements GeoEntity { return; } - Vec3 targetPos = target.getEyePosition().add(0.0D, -0.15D, 0.0D); + Vec3 targetPos = target.getEyePosition().add(this.toWorld(0.0D, -0.15D, 0.0D)); Vec3 toTarget = targetPos.subtract(this.position()); double distance = toTarget.length(); if (distance > 0.01D) { @@ -242,15 +245,15 @@ public class JerryEntity extends Monster implements GeoEntity { Stage stage = this.getStage(); Vec3 targetPos = target.getEyePosition(); - Vec3 hoverPos = targetPos.add(0.0D, 5.0D, 0.0D); + Vec3 hoverPos = targetPos.add(this.toWorld(0.0D, 5.0D, 0.0D)); Vec3 toHover = hoverPos.subtract(this.position()); Vec3 toTarget = targetPos.subtract(this.position()); double hoverDistance = toHover.length(); double targetDistance = toTarget.length(); - double horizontalDistance = this.position().subtract(targetPos).horizontalDistance(); + double horizontalDistance = this.toLocalPlane(this.position().subtract(targetPos)).length(); this.faceTarget(target); if (this.alphaDiveCooldownTicks > 0) { - this.setDeltaMovement(this.getDeltaMovement().scale(0.8D).add(toTarget.normalize().scale(0.28D)).add(0.0D, -0.08D, 0.0D)); + this.setDeltaMovement(this.getDeltaMovement().scale(0.8D).add(toTarget.normalize().scale(0.28D)).add(this.toWorld(0.0D, -0.08D, 0.0D))); } else if (hoverDistance > 0.01D) { Vec3 desiredMotion = toHover.normalize().scale(0.20D); this.setDeltaMovement(this.getDeltaMovement().scale(0.72D).add(desiredMotion)); @@ -258,7 +261,7 @@ public class JerryEntity extends Monster implements GeoEntity { if (this.alphaDiveCooldownTicks <= 0 && targetDistance < 9.0D && horizontalDistance < 7.0D) { this.alphaDiveCooldownTicks = 30; - this.setDeltaMovement(this.getDeltaMovement().add(0.0D, -0.55D, 0.0D).add(toTarget.normalize().scale(0.42D))); + this.setDeltaMovement(this.getDeltaMovement().add(this.toWorld(0.0D, -0.55D, 0.0D)).add(toTarget.normalize().scale(0.42D))); } if (targetDistance < 2.3D && this.attackCooldownTicks <= 0) { @@ -271,11 +274,12 @@ public class JerryEntity extends Monster implements GeoEntity { } private void faceTarget(LivingEntity target) { - Vec3 toTarget = target.position().subtract(this.position()); - if (toTarget.horizontalDistanceSqr() <= 0.0001D) { + Vec3 toTarget = this.toLocal(target.position().subtract(this.position())); + Vec3 horizontal = new Vec3(toTarget.x, 0.0D, toTarget.z); + if (horizontal.lengthSqr() <= 0.0001D) { return; } - float targetYaw = (float) (Mth.atan2(toTarget.z, toTarget.x) * (180.0F / Math.PI)) - 90.0F; + float targetYaw = (float) (Mth.atan2(horizontal.z, horizontal.x) * (180.0F / Math.PI)) - 90.0F; this.setYRot(Mth.approachDegrees(this.getYRot(), targetYaw, 30.0F)); this.yBodyRot = this.getYRot(); this.yHeadRot = this.getYRot(); @@ -304,6 +308,23 @@ public class JerryEntity extends Monster implements GeoEntity { : super.doHurtTarget(target); } + private GravityDirection gravityDirection() { + return GravityApi.getGravityDirection(this); + } + + private Vec3 toLocal(Vec3 worldVector) { + return GravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); + } + + private Vec3 toWorld(double x, double y, double z) { + return GravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); + } + + private Vec3 toLocalPlane(Vec3 worldVector) { + Vec3 local = this.toLocal(worldVector); + return new Vec3(local.x, 0.0D, local.z); + } + @Override @Nullable protected SoundEvent getAmbientSound() { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/JumpyBugEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/JumpyBugEntity.java deleted file mode 100644 index b53c825d..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/JumpyBugEntity.java +++ /dev/null @@ -1,947 +0,0 @@ -package com.craisinlord.antarchy.content.entity; - -import com.craisinlord.antarchy.config.AntarchySettings; -import com.craisinlord.antarchy.content.AntarchySoundEvents; -import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; -import com.mojang.serialization.Codec; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.network.syncher.EntityDataAccessor; -import net.minecraft.network.syncher.EntityDataSerializers; -import net.minecraft.network.syncher.SynchedEntityData; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.sounds.SoundEvent; -import net.minecraft.sounds.SoundEvents; -import net.minecraft.util.ByIdMap; -import net.minecraft.util.Mth; -import net.minecraft.util.RandomSource; -import net.minecraft.util.StringRepresentable; -import net.minecraft.world.Difficulty; -import net.minecraft.world.DifficultyInstance; -import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.Mob; -import net.minecraft.world.entity.MobSpawnType; -import net.minecraft.world.entity.MoverType; -import net.minecraft.world.entity.SpawnGroupData; -import net.minecraft.world.entity.ai.attributes.AttributeInstance; -import net.minecraft.world.entity.ai.attributes.AttributeSupplier; -import net.minecraft.world.entity.ai.attributes.Attributes; -import net.minecraft.world.entity.ai.goal.FloatGoal; -import net.minecraft.world.entity.ai.goal.Goal; -import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; -import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; -import net.minecraft.world.entity.ai.goal.RandomStrollGoal; -import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; -import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; -import net.minecraft.world.entity.monster.Monster; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.ServerLevelAccessor; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.Heightmap; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec3; -import org.jetbrains.annotations.Nullable; -import software.bernie.geckolib.animatable.GeoEntity; -import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; -import software.bernie.geckolib.core.animation.AnimatableManager; -import software.bernie.geckolib.core.animation.AnimationController; -import software.bernie.geckolib.core.animation.AnimationState; -import software.bernie.geckolib.core.object.PlayState; -import software.bernie.geckolib.core.animation.RawAnimation; -import software.bernie.geckolib.util.GeckoLibUtil; - -import java.util.EnumSet; -import java.util.function.IntFunction; - -public class JumpyBugEntity extends Monster implements GeoEntity { - private static final EntityDataAccessor CAMOUFLAGED = - SynchedEntityData.defineId(JumpyBugEntity.class, EntityDataSerializers.BOOLEAN); - private static final EntityDataAccessor CLINGING_TO_CEILING = - SynchedEntityData.defineId(JumpyBugEntity.class, EntityDataSerializers.BOOLEAN); - private static final EntityDataAccessor ATTACK_STATE = - SynchedEntityData.defineId(JumpyBugEntity.class, EntityDataSerializers.INT); - - private static final String POUNCE_COOLDOWN_KEY = "PounceCooldown"; - private static final String RECOVERY_TICKS_KEY = "RecoveryTicks"; - private static final String POUNCE_TICKS_KEY = "PounceTicks"; - private static final String LEAPING_TICKS_KEY = "LeapingTicks"; - - private static final double DEFAULT_MOVEMENT_SPEED = 0.25D; - private static final double DEFAULT_FOLLOW_RANGE = 16.0D; - private static final double MELEE_WALK_RANGE = 4.0D; - private static final double CHASE_LEAP_RANGE_SQR = 8.0D * 8.0D; - private static final int DEFAULT_POUNCE_COOLDOWN = 60; - private static final int POUNCE_PREFERENCE_CHANCE = 7; - private static final int DEFAULT_RECOVERY_TICKS = 20; - private static final int CHASE_JUMP_COOLDOWN = 25; - private static final double POUNCE_HORIZONTAL_SPEED = 0.92D; - private static final double POUNCE_UPWARD_SPEED = 0.75D; - private static final double CEILING_DROP_HORIZONTAL_SPEED = 1.08D; - private static final double CEILING_DROP_UPWARD_SPEED = 0.18D; - private static final double CHASE_LEAP_HORIZONTAL = 1.5D; - private static final double CHASE_LEAP_VERTICAL = 0.55D; - private static final double QUICK_MOVE_SQR = 0.14D * 0.14D; - private static final double POUNCE_LAND_DAMAGE_RANGE = 5.0D; - private static final int MAX_POUNCE_TICKS = 60; - private static final int CEILING_HORIZONTAL_SEARCH_RANGE = 6; - private static final int CEILING_EXTRA_SEARCH_HEIGHT = 8; - private static final int CEILING_DIRECT_EXTRA_HEIGHT = 2; - private static final int CEILING_SEARCH_COOLDOWN = 35; - private static final int CAMOUFLAGE_WARMUP_TICKS = 16; - private static final double CAMOUFLAGE_PLAYER_RANGE = 24.0D; - private static final double CEILING_ALIGN_DISTANCE_SQR = 1.35D * 1.35D; - private static final double CEILING_AMBUSH_RANGE_SQR = 7.0D * 7.0D; - private static final double CEILING_TRIGGER_RANGE_SQR = 5.0D * 5.0D; - - private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); - private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); - private static final RawAnimation JUMP_ANIM = RawAnimation.begin().thenPlay("jump_start").thenLoop("jump_loop"); - private static final RawAnimation JUMP_END_ANIM = RawAnimation.begin().thenPlay("jump_end"); - private static final RawAnimation HANGING_ANIM = RawAnimation.begin().thenLoop("hanging"); - private static final RawAnimation ATTACK_ANIM = RawAnimation.begin().thenPlay("attack"); - - private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); - - private int pounceCooldownTicks; - private int recoveryTicks; - private int pounceTicks; - private int leapingTicks; - private int chaseJumpCooldownTicks; - private int ceilingSearchCooldownTicks; - private int camouflageWarmupTicks; - private boolean preferPounceThisWindow = true; - private float visualAlpha = 1.0F; - private float previousVisualAlpha = 1.0F; - - public JumpyBugEntity(EntityType entityType, Level level) { - super(entityType, level); - this.xpReward = 6; - } - - public static AttributeSupplier.Builder createAttributes() { - return Mob.createMobAttributes() - .add(Attributes.MAX_HEALTH, AntarchySettings.jumpyBugHealth()) - .add(Attributes.ATTACK_DAMAGE, AntarchySettings.jumpyBugPounceDamage()) - .add(Attributes.MOVEMENT_SPEED, DEFAULT_MOVEMENT_SPEED) - .add(Attributes.FOLLOW_RANGE, DEFAULT_FOLLOW_RANGE); - } - - public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { - if (spawnReason == MobSpawnType.SPAWN_EGG || spawnReason == MobSpawnType.SPAWNER || spawnReason == MobSpawnType.COMMAND) { - return true; - } - return level.getDifficulty() != Difficulty.PEACEFUL - && Monster.checkMonsterSpawnRules(entityType, level, spawnReason, pos, random); - } - - @Override - protected void defineSynchedData() { - super.defineSynchedData(); - this.entityData.define(CAMOUFLAGED, false); - this.entityData.define(CLINGING_TO_CEILING, false); - this.entityData.define(ATTACK_STATE, AttackState.GROUND.id()); - } - - @Override - protected void registerGoals() { - this.goalSelector.addGoal(0, new FloatGoal(this)); - this.goalSelector.addGoal(1, new PounceAttackGoal()); - this.goalSelector.addGoal(2, new CloseMeleeGoal()); - this.goalSelector.addGoal(3, new HideOnCeilingGoal()); - this.goalSelector.addGoal(4, new ChaseTargetGoal()); - this.goalSelector.addGoal(5, new WanderGoal()); - this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 10.0F)); - this.goalSelector.addGoal(7, new RandomLookAroundGoal(this)); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this)); - this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); - } - - @Override - public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "main_controller", 2, this::mainAnimController) - .triggerableAnim("hanging", HANGING_ANIM) - .triggerableAnim("jump", JUMP_ANIM) - .triggerableAnim("jump_end", JUMP_END_ANIM)); - } - - @Override - public AnimatableInstanceCache getAnimatableInstanceCache() { - return this.geoCache; - } - - @Override - public void addAdditionalSaveData(CompoundTag tag) { - super.addAdditionalSaveData(tag); - tag.putInt(POUNCE_COOLDOWN_KEY, this.pounceCooldownTicks); - tag.putInt(RECOVERY_TICKS_KEY, this.recoveryTicks); - tag.putInt(POUNCE_TICKS_KEY, this.pounceTicks); - tag.putInt(LEAPING_TICKS_KEY, this.leapingTicks); - } - - @Override - public void readAdditionalSaveData(CompoundTag tag) { - super.readAdditionalSaveData(tag); - this.pounceCooldownTicks = tag.getInt(POUNCE_COOLDOWN_KEY); - this.recoveryTicks = tag.getInt(RECOVERY_TICKS_KEY); - this.pounceTicks = tag.getInt(POUNCE_TICKS_KEY); - this.leapingTicks = tag.getInt(LEAPING_TICKS_KEY); - } - - @Override - @Nullable - public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData spawnGroupData, @org.jetbrains.annotations.Nullable net.minecraft.nbt.CompoundTag dataTag) { - AttributeInstance maxHealthAttribute = this.getAttribute(Attributes.MAX_HEALTH); - if (maxHealthAttribute != null) { - maxHealthAttribute.setBaseValue(AntarchySettings.jumpyBugHealth()); - } - this.setHealth((float) AntarchySettings.jumpyBugHealth()); - return super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData, dataTag); - } - - @Override - public void tick() { - this.previousVisualAlpha = this.visualAlpha; - float targetAlpha = this.getTargetVisualAlpha(); - if (this.visualAlpha != targetAlpha) { - this.visualAlpha += (targetAlpha - this.visualAlpha) * 0.25F; - } - - CavarynBurrowingMobBehavior.moveOutOfBlocks(this); - super.tick(); - CavarynBurrowingMobBehavior.moveOutOfBlocks(this); - - if (this.level().isClientSide) { - return; - } - - if (this.pounceCooldownTicks > 0) { - this.pounceCooldownTicks--; - if (this.pounceCooldownTicks == 0) { - this.preferPounceThisWindow = this.random.nextInt(10) < POUNCE_PREFERENCE_CHANCE; - } - } - if (this.recoveryTicks > 0) { - this.recoveryTicks--; - } - if (this.chaseJumpCooldownTicks > 0) { - this.chaseJumpCooldownTicks--; - } - if (this.ceilingSearchCooldownTicks > 0) { - this.ceilingSearchCooldownTicks--; - } - - if (this.isClingingToCeiling()) { - this.tickClinging(); - } else if (this.isPouncing()) { - this.tickPouncing(); - } else if (this.isLeapingToCeiling()) { - this.tickLeapingToCeiling(); - } else { - this.setNoGravity(false); - this.noPhysics = false; - if (this.getAttackState() != AttackState.RECOVERING || this.recoveryTicks <= 0) { - this.setAttackState(AttackState.GROUND); - } - } - - this.updateCamouflage(); - } - - @Override - public boolean isInWall() { - return false; - } - - @Override - public void travel(Vec3 travelVector) { - if (this.isClingingToCeiling()) { - this.setDeltaMovement(Vec3.ZERO); - return; - } - super.travel(travelVector); - } - - @Override - public boolean hurt(DamageSource source, float amount) { - boolean hurt = super.hurt(source, amount); - if (!hurt) { - return false; - } - - this.setCamouflaged(false); - this.recoveryTicks = Math.max(this.recoveryTicks, DEFAULT_RECOVERY_TICKS); - if (this.isClingingToCeiling()) { - this.stopClinging(); - } - if (this.isPouncing()) { - this.finishPounce(false); - } - if (this.isLeapingToCeiling()) { - this.cancelLeap(); - } - return true; - } - - @Override - public boolean causeFallDamage(float fallDistance, float multiplier, DamageSource source) { - return false; - } - - @Override - public boolean doHurtTarget(Entity target) { - return target instanceof LivingEntity livingTarget && this.level() instanceof ServerLevel serverLevel - ? livingTarget.hurt(AntarchyDamageSources.jumpyBugJump(serverLevel, this), (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE)) - : super.doHurtTarget(target); - } - - @Override - protected SoundEvent getAmbientSound() { - return AntarchySoundEvents.JUMPY_BUG_IDLE.get(); - } - - @Override - protected SoundEvent getHurtSound(DamageSource damageSource) { - return AntarchySoundEvents.JUMPY_BUG_HURT.get(); - } - - @Override - protected SoundEvent getDeathSound() { - return AntarchySoundEvents.JUMPY_BUG_HURT.get(); - } - - @Override - protected void playStepSound(BlockPos pos, BlockState blockState) { - this.playSound(SoundEvents.SPIDER_STEP, 0.12F, 1.1F); - } - - public boolean isCamouflaged() { - return this.entityData.get(CAMOUFLAGED); - } - - public boolean isClingingToCeiling() { - return this.entityData.get(CLINGING_TO_CEILING); - } - - public boolean isPouncing() { - return this.getAttackState() == AttackState.POUNCING; - } - - public boolean isLeapingToCeiling() { - return this.getAttackState() == AttackState.LEAPING_TO_CEILING; - } - - public float getVisualAlpha(float partialTick) { - return Mth.lerp(partialTick, this.previousVisualAlpha, this.visualAlpha); - } - - public AttackState getAttackState() { - return AttackState.BY_ID.apply(this.entityData.get(ATTACK_STATE)); - } - - private void setCamouflaged(boolean value) { - this.entityData.set(CAMOUFLAGED, value); - } - - private void setClingingToCeiling(boolean value) { - this.entityData.set(CLINGING_TO_CEILING, value); - } - - private void setAttackState(AttackState state) { - AttackState previous = this.getAttackState(); - if (previous == state) { - return; - } - this.entityData.set(ATTACK_STATE, state.id()); - - String trigger = switch (state) { - case CLINGING -> "hanging"; - case POUNCING, LEAPING_TO_CEILING -> "jump"; - case RECOVERING -> "jump_end"; - default -> null; - }; - if (trigger != null) { - this.triggerAnim("main_controller", trigger); - } - - if (previous == AttackState.CLINGING) { - this.stopTriggeredAnimation("main_controller", "hanging"); - } - if ((previous == AttackState.POUNCING || previous == AttackState.LEAPING_TO_CEILING) - && state != AttackState.POUNCING && state != AttackState.LEAPING_TO_CEILING) { - this.stopTriggeredAnimation("main_controller", "jump"); - } - } - - private float getTargetVisualAlpha() { - return this.isCamouflaged() ? (float) AntarchySettings.jumpyBugCamouflageAlpha() : 1.0F; - } - - private PlayState mainAnimController(AnimationState state) { - AttackState attackState = this.getAttackState(); - if (attackState == AttackState.CLINGING) { - return state.setAndContinue(HANGING_ANIM); - } - if ((attackState == AttackState.POUNCING || attackState == AttackState.LEAPING_TO_CEILING) && !this.onGround()) { - return state.setAndContinue(JUMP_ANIM); - } - if (attackState == AttackState.RECOVERING) { - return state.setAndContinue(JUMP_END_ANIM); - } - return state.setAndContinue(state.isMoving() ? WALK_ANIM : IDLE_ANIM); - } - - private void tickClinging() { - BlockPos clingPos = this.findCeilingWithinRange(this.directCeilingSearchHeight()); - if (clingPos == null) { - this.stopClinging(); - return; - } - - this.setAttackState(AttackState.CLINGING); - this.setCamouflaged(true); - this.setNoGravity(true); - this.noPhysics = true; - this.getNavigation().stop(); - this.setDeltaMovement(Vec3.ZERO); - this.move(MoverType.SELF, Vec3.ZERO); - this.setPos(this.getX(), clingPos.getY() - this.getBbHeight() - 0.01D, this.getZ()); - } - - private void tickPouncing() { - this.setAttackState(AttackState.POUNCING); - this.setCamouflaged(false); - this.pounceTicks++; - - if ((this.onGround() && this.pounceTicks > 8) || this.pounceTicks > MAX_POUNCE_TICKS) { - LivingEntity target = this.getTarget(); - if (target != null && target.isAlive() && this.distanceToSqr(target) <= POUNCE_LAND_DAMAGE_RANGE * POUNCE_LAND_DAMAGE_RANGE) { - if (this.level() instanceof ServerLevel serverLevel) { - target.hurt(AntarchyDamageSources.jumpyBugJump(serverLevel, this), (float) AntarchySettings.jumpyBugPounceDamage()); - } else { - target.hurt(this.damageSources().mobAttack(this), (float) AntarchySettings.jumpyBugPounceDamage()); - } - } - this.finishPounce(false); - } - } - - private void tickLeapingToCeiling() { - this.leapingTicks++; - if (this.leapingTicks > 80) { - this.cancelLeap(); - return; - } - this.getNavigation().stop(); - BlockPos ceiling = this.findCeilingWithinRange(this.directCeilingSearchHeight()); - if (ceiling != null) { - this.leapingTicks = 0; - this.beginClinging(); - } - } - - private void updateCamouflage() { - if (this.isPouncing() || this.isLeapingToCeiling()) { - this.setCamouflaged(false); - this.camouflageWarmupTicks = 0; - return; - } - - if (this.isClingingToCeiling()) { - this.setCamouflaged(true); - this.camouflageWarmupTicks = CAMOUFLAGE_WARMUP_TICKS; - return; - } - - boolean playerNearby = this.level().getNearestPlayer(this, CAMOUFLAGE_PLAYER_RANGE) != null; - boolean idle = this.getTarget() == null - && this.recoveryTicks <= 0 - && this.getDeltaMovement().horizontalDistanceSqr() < 0.003D - && this.onGround(); - boolean movingQuickly = this.getDeltaMovement().lengthSqr() > QUICK_MOVE_SQR; - boolean inAmbushCover = this.findCeilingWithinRange(this.directCeilingSearchHeight()) != null; - if (!playerNearby || !idle || movingQuickly || !inAmbushCover) { - this.setCamouflaged(false); - this.camouflageWarmupTicks = 0; - return; - } - - if (this.camouflageWarmupTicks < CAMOUFLAGE_WARMUP_TICKS) { - this.camouflageWarmupTicks++; - } - this.setCamouflaged(this.camouflageWarmupTicks >= CAMOUFLAGE_WARMUP_TICKS); - } - - @Nullable - private BlockPos findCeilingWithinRange(int maxBlocks) { - BlockPos origin = this.blockPosition(); - for (int dy = 1; dy <= maxBlocks; dy++) { - BlockPos candidate = origin.above(dy); - if (this.isUsableCeiling(candidate)) { - return candidate; - } - } - return null; - } - - @Nullable - private BlockPos findCeilingForLeap() { - BlockPos origin = this.blockPosition(); - BlockPos best = null; - double bestScore = Double.MAX_VALUE; - LivingEntity target = this.getTarget(); - int minHeight = this.minimumCeilingHeight(); - int maxHeight = minHeight + CEILING_EXTRA_SEARCH_HEIGHT; - - for (int dx = -CEILING_HORIZONTAL_SEARCH_RANGE; dx <= CEILING_HORIZONTAL_SEARCH_RANGE; dx++) { - for (int dz = -CEILING_HORIZONTAL_SEARCH_RANGE; dz <= CEILING_HORIZONTAL_SEARCH_RANGE; dz++) { - int horizontalDistance = Math.abs(dx) + Math.abs(dz); - if (horizontalDistance > CEILING_HORIZONTAL_SEARCH_RANGE) { - continue; - } - for (int dy = minHeight; dy <= maxHeight; dy++) { - BlockPos candidate = origin.offset(dx, dy, dz); - if (!this.isUsableCeiling(candidate)) { - continue; - } - - double score = horizontalDistance * 1.4D + dy * 0.25D; - if (target != null) { - score += candidate.distSqr(target.blockPosition()) * 0.04D; - } - if (score < bestScore) { - bestScore = score; - best = candidate.immutable(); - } - } - } - } - - return best; - } - - private boolean isCeilingBlock(BlockPos pos) { - return this.level().getBlockState(pos).isFaceSturdy(this.level(), pos, Direction.DOWN); - } - - private int minimumCeilingHeight() { - return Math.max(2, Mth.ceil(this.getBbHeight()) + 1); - } - - private int directCeilingSearchHeight() { - return this.minimumCeilingHeight() + CEILING_DIRECT_EXTRA_HEIGHT; - } - - private boolean isUsableCeiling(BlockPos pos) { - if (!this.isCeilingBlock(pos)) { - return false; - } - double x = pos.getX() + 0.5D; - double y = pos.getY() - this.getBbHeight() - 0.01D; - double z = pos.getZ() + 0.5D; - return this.canOccupy(x, y, z); - } - - private boolean canOccupy(double x, double y, double z) { - double halfWidth = this.getBbWidth() * 0.5D; - AABB box = new AABB( - x - halfWidth, - y, - z - halfWidth, - x + halfWidth, - y + this.getBbHeight(), - z + halfWidth - ); - return this.level().noCollision(this, box); - } - - private boolean isAlignedBelowCeiling(BlockPos ceilingPos) { - double x = ceilingPos.getX() + 0.5D; - double z = ceilingPos.getZ() + 0.5D; - double dx = this.getX() - x; - double dz = this.getZ() - z; - return dx * dx + dz * dz <= CEILING_ALIGN_DISTANCE_SQR; - } - - private void beginClinging() { - this.setClingingToCeiling(true); - this.setAttackState(AttackState.CLINGING); - this.setNoGravity(true); - this.noPhysics = true; - this.getNavigation().stop(); - this.setDeltaMovement(Vec3.ZERO); - } - - private void stopClinging() { - this.setClingingToCeiling(false); - this.setAttackState(AttackState.GROUND); - this.setNoGravity(false); - this.noPhysics = false; - } - - private void beginLeapToCeiling(BlockPos ceilingPos) { - this.setAttackState(AttackState.LEAPING_TO_CEILING); - this.setCamouflaged(false); - this.camouflageWarmupTicks = 0; - this.leapingTicks = 0; - this.getNavigation().stop(); - - double dy = ceilingPos.getY() - this.getY(); - double upwardSpeed = Math.min(2.5D, Math.sqrt(0.16D * Math.max(dy, 1.0D)) + 0.4D); - double dx = ceilingPos.getX() + 0.5D - this.getX(); - double dz = ceilingPos.getZ() + 0.5D - this.getZ(); - this.setDeltaMovement(Mth.clamp(dx * 0.18D, -0.35D, 0.35D), upwardSpeed, Mth.clamp(dz * 0.18D, -0.35D, 0.35D)); - this.hasImpulse = true; - this.playSound(AntarchySoundEvents.JUMPY_BUG_JUMP.get(), 1.0F, 0.95F + this.random.nextFloat() * 0.1F); - } - - private void cancelLeap() { - this.leapingTicks = 0; - this.setAttackState(AttackState.GROUND); - this.setNoGravity(false); - this.noPhysics = false; - } - - private void beginPounce(LivingEntity target) { - this.stopClinging(); - this.setTarget(target); - this.setAttackState(AttackState.POUNCING); - this.setCamouflaged(false); - this.getNavigation().stop(); - this.pounceCooldownTicks = DEFAULT_POUNCE_COOLDOWN; - this.pounceTicks = 0; - - Vec3 from = this.position(); - Vec3 to = target.getEyePosition().subtract(from); - Vec3 horizontal = new Vec3(to.x, 0.0D, to.z); - Vec3 direction = horizontal.lengthSqr() > 1.0E-4D ? horizontal.normalize() : target.getLookAngle(); - double upward = POUNCE_UPWARD_SPEED + Mth.clamp(to.y * 0.08D, -0.04D, 0.22D); - this.setDeltaMovement(direction.x * POUNCE_HORIZONTAL_SPEED, upward, direction.z * POUNCE_HORIZONTAL_SPEED); - this.hasImpulse = true; - this.playSound(AntarchySoundEvents.JUMPY_BUG_JUMP.get(), 1.0F, 0.95F + this.random.nextFloat() * 0.1F); - } - - private void beginCeilingDrop(LivingEntity target) { - this.stopClinging(); - this.setTarget(target); - this.setAttackState(AttackState.POUNCING); - this.setCamouflaged(false); - this.camouflageWarmupTicks = 0; - this.getNavigation().stop(); - this.pounceCooldownTicks = DEFAULT_POUNCE_COOLDOWN; - this.pounceTicks = 0; - - Vec3 to = target.position().add(0.0D, target.getBbHeight() * 0.35D, 0.0D).subtract(this.position()); - Vec3 horizontal = new Vec3(to.x, 0.0D, to.z); - Vec3 direction = horizontal.lengthSqr() > 1.0E-4D ? horizontal.normalize() : target.getLookAngle(); - this.setDeltaMovement(direction.x * CEILING_DROP_HORIZONTAL_SPEED, CEILING_DROP_UPWARD_SPEED, direction.z * CEILING_DROP_HORIZONTAL_SPEED); - this.hasImpulse = true; - this.playSound(AntarchySoundEvents.JUMPY_BUG_JUMP.get(), 1.0F, 0.9F + this.random.nextFloat() * 0.1F); - } - - private void finishPounce(boolean keepMomentum) { - this.pounceTicks = 0; - if (!keepMomentum) { - Vec3 movement = this.getDeltaMovement(); - this.setDeltaMovement(movement.x * 0.25D, Math.max(0.0D, movement.y), movement.z * 0.25D); - } - this.setAttackState(AttackState.RECOVERING); - this.recoveryTicks = DEFAULT_RECOVERY_TICKS; - } - - private boolean canUseAmbush() { - return !this.isPouncing() - && !this.isLeapingToCeiling() - && this.recoveryTicks <= 0; - } - - public enum AttackState implements StringRepresentable { - GROUND(0, "ground"), - CLINGING(1, "clinging"), - POUNCING(2, "pouncing"), - RECOVERING(3, "recovering"), - LEAPING_TO_CEILING(4, "leaping_to_ceiling"); - - private static final IntFunction BY_ID = ByIdMap.continuous(AttackState::id, values(), ByIdMap.OutOfBoundsStrategy.ZERO); - public static final Codec CODEC = StringRepresentable.fromEnum(AttackState::values); - - private final int id; - private final String name; - - AttackState(int id, String name) { - this.id = id; - this.name = name; - } - - public int id() { - return this.id; - } - - @Override - public String getSerializedName() { - return this.name; - } - } - - private final class CloseMeleeGoal extends Goal { - private static final double MELEE_RANGE_SQR = 5.0D * 5.0D; - private static final double CONTINUE_RANGE_SQR = 7.0D * 7.0D; - private static final int ATTACK_COOLDOWN = 20; - private int attackCooldown; - - private CloseMeleeGoal() { - this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK)); - } - - @Override - public boolean canUse() { - LivingEntity target = JumpyBugEntity.this.getTarget(); - return target != null - && target.isAlive() - && !JumpyBugEntity.this.isPouncing() - && !JumpyBugEntity.this.isLeapingToCeiling() - && !JumpyBugEntity.this.isClingingToCeiling() - && JumpyBugEntity.this.distanceToSqr(target) <= MELEE_RANGE_SQR; - } - - @Override - public boolean canContinueToUse() { - LivingEntity target = JumpyBugEntity.this.getTarget(); - return target != null - && target.isAlive() - && !JumpyBugEntity.this.isPouncing() - && !JumpyBugEntity.this.isLeapingToCeiling() - && !JumpyBugEntity.this.isClingingToCeiling() - && JumpyBugEntity.this.distanceToSqr(target) <= CONTINUE_RANGE_SQR; - } - - @Override - public void start() { - this.attackCooldown = 0; - } - - @Override - public void tick() { - LivingEntity target = JumpyBugEntity.this.getTarget(); - if (target == null) return; - - JumpyBugEntity.this.getLookControl().setLookAt(target, 30.0F, 30.0F); - JumpyBugEntity.this.getNavigation().moveTo(target, 1.1D); - - if (this.attackCooldown > 0) { - this.attackCooldown--; - } - if (this.attackCooldown <= 0 && JumpyBugEntity.this.distanceToSqr(target) <= MELEE_RANGE_SQR) { - JumpyBugEntity.this.doHurtTarget(target); - this.attackCooldown = ATTACK_COOLDOWN; - } - } - } - - private final class PounceAttackGoal extends Goal { - private PounceAttackGoal() { - this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK, Flag.JUMP)); - } - - @Override - public boolean canUse() { - LivingEntity target = JumpyBugEntity.this.getTarget(); - return target != null - && target.isAlive() - && JumpyBugEntity.this.canUseAmbush() - && JumpyBugEntity.this.pounceCooldownTicks <= 0 - && JumpyBugEntity.this.preferPounceThisWindow - && (JumpyBugEntity.this.hasLineOfSight(target) || JumpyBugEntity.this.distanceToSqr(target) <= 9.0D); - } - - @Override - public boolean canContinueToUse() { - return JumpyBugEntity.this.isPouncing(); - } - - @Override - public void start() { - LivingEntity target = JumpyBugEntity.this.getTarget(); - if (target != null) { - JumpyBugEntity.this.beginPounce(target); - } - } - } - - private final class HideOnCeilingGoal extends Goal { - @Nullable - private BlockPos targetCeiling; - - private HideOnCeilingGoal() { - this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK, Flag.JUMP)); - } - - @Override - public boolean canUse() { - if (!JumpyBugEntity.this.canUseAmbush() || JumpyBugEntity.this.isClingingToCeiling()) { - return false; - } - if (JumpyBugEntity.this.ceilingSearchCooldownTicks > 0) { - return false; - } - LivingEntity target = JumpyBugEntity.this.getTarget(); - boolean targetFarAway = target != null - && JumpyBugEntity.this.distanceToSqr(target) > 12.0D * 12.0D; - boolean noTarget = target == null; - if (!noTarget && !targetFarAway) { - return false; - } - if (JumpyBugEntity.this.random.nextInt(noTarget ? 8 : 14) != 0) { - return false; - } - this.targetCeiling = JumpyBugEntity.this.findCeilingForLeap(); - JumpyBugEntity.this.ceilingSearchCooldownTicks = CEILING_SEARCH_COOLDOWN; - return this.targetCeiling != null; - } - - @Override - public boolean canContinueToUse() { - if (JumpyBugEntity.this.isClingingToCeiling() || JumpyBugEntity.this.isLeapingToCeiling()) { - return true; - } - LivingEntity target = JumpyBugEntity.this.getTarget(); - boolean allowedTarget = target == null || JumpyBugEntity.this.distanceToSqr(target) > CEILING_AMBUSH_RANGE_SQR; - return this.targetCeiling != null - && allowedTarget - && JumpyBugEntity.this.canUseAmbush(); - } - - @Override - public void start() { - if (this.targetCeiling != null) { - BlockPos ceiling = this.targetCeiling; - if (JumpyBugEntity.this.isAlignedBelowCeiling(ceiling) && ceiling.getY() - JumpyBugEntity.this.getY() <= JumpyBugEntity.this.directCeilingSearchHeight()) { - JumpyBugEntity.this.beginClinging(); - } - } - } - - @Override - public void stop() { - if (JumpyBugEntity.this.isClingingToCeiling()) { - JumpyBugEntity.this.stopClinging(); - } else if (JumpyBugEntity.this.isLeapingToCeiling()) { - JumpyBugEntity.this.cancelLeap(); - } - this.targetCeiling = null; - } - - @Override - public void tick() { - if (JumpyBugEntity.this.isClingingToCeiling()) { - LivingEntity target = JumpyBugEntity.this.getTarget(); - if (target != null) { - JumpyBugEntity.this.getLookControl().setLookAt(target, 30.0F, 30.0F); - if (JumpyBugEntity.this.pounceCooldownTicks <= 0 - && JumpyBugEntity.this.distanceToSqr(target) <= CEILING_TRIGGER_RANGE_SQR - && JumpyBugEntity.this.hasLineOfSight(target)) { - JumpyBugEntity.this.beginCeilingDrop(target); - } - } - return; - } - - if (JumpyBugEntity.this.isLeapingToCeiling() || this.targetCeiling == null) { - return; - } - - BlockPos ceiling = this.targetCeiling; - JumpyBugEntity.this.getLookControl().setLookAt(ceiling.getX() + 0.5D, ceiling.getY() - 1.0D, ceiling.getZ() + 0.5D, 20.0F, 20.0F); - if (!JumpyBugEntity.this.isUsableCeiling(ceiling)) { - this.targetCeiling = null; - return; - } - - if (JumpyBugEntity.this.isAlignedBelowCeiling(ceiling)) { - if (JumpyBugEntity.this.onGround()) { - JumpyBugEntity.this.beginLeapToCeiling(ceiling); - } - } else { - JumpyBugEntity.this.getNavigation().moveTo(ceiling.getX() + 0.5D, JumpyBugEntity.this.getY(), ceiling.getZ() + 0.5D, 1.05D); - } - } - } - - private final class ChaseTargetGoal extends Goal { - private ChaseTargetGoal() { - this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK)); - } - - @Override - public boolean canUse() { - LivingEntity target = JumpyBugEntity.this.getTarget(); - return target != null - && target.isAlive() - && !JumpyBugEntity.this.isClingingToCeiling() - && !JumpyBugEntity.this.isPouncing() - && !JumpyBugEntity.this.isLeapingToCeiling() - && JumpyBugEntity.this.recoveryTicks <= 0; - } - - @Override - public boolean canContinueToUse() { - return this.canUse(); - } - - @Override - public void tick() { - LivingEntity target = JumpyBugEntity.this.getTarget(); - if (target == null) { - return; - } - - JumpyBugEntity.this.getLookControl().setLookAt(target, 30.0F, 30.0F); - double distSqr = JumpyBugEntity.this.distanceToSqr(target); - - if (distSqr <= MELEE_WALK_RANGE * MELEE_WALK_RANGE) { - JumpyBugEntity.this.getNavigation().moveTo(target, 1.05D); - } else if (distSqr > CHASE_LEAP_RANGE_SQR) { - if (JumpyBugEntity.this.onGround() && JumpyBugEntity.this.chaseJumpCooldownTicks <= 0) { - Vec3 dir = target.position().subtract(JumpyBugEntity.this.position()).normalize(); - JumpyBugEntity.this.setDeltaMovement( - dir.x * CHASE_LEAP_HORIZONTAL, - CHASE_LEAP_VERTICAL, - dir.z * CHASE_LEAP_HORIZONTAL - ); - JumpyBugEntity.this.hasImpulse = true; - JumpyBugEntity.this.chaseJumpCooldownTicks = CHASE_JUMP_COOLDOWN; - } - JumpyBugEntity.this.getNavigation().stop(); - } else { - JumpyBugEntity.this.getNavigation().moveTo(target, 1.05D); - } - } - } - - private final class WanderGoal extends RandomStrollGoal { - private WanderGoal() { - super(JumpyBugEntity.this, 0.8D); - } - - @Override - public boolean canUse() { - return !JumpyBugEntity.this.isClingingToCeiling() - && !JumpyBugEntity.this.isPouncing() - && !JumpyBugEntity.this.isLeapingToCeiling() - && JumpyBugEntity.this.getTarget() == null - && super.canUse(); - } - - @Override - public boolean canContinueToUse() { - return !JumpyBugEntity.this.isClingingToCeiling() - && !JumpyBugEntity.this.isPouncing() - && !JumpyBugEntity.this.isLeapingToCeiling() - && super.canContinueToUse(); - } - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/LurkingTerrorEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/LurkingTerrorEntity.java deleted file mode 100644 index ede8c015..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/LurkingTerrorEntity.java +++ /dev/null @@ -1,197 +0,0 @@ -package com.craisinlord.antarchy.content.entity; - -import com.craisinlord.antarchy.config.AntarchySettings; -import com.craisinlord.antarchy.content.AntarchySoundEvents; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.util.RandomSource; -import net.minecraft.world.Difficulty; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.Mob; -import net.minecraft.world.entity.MobSpawnType; -import net.minecraft.world.entity.ai.attributes.AttributeSupplier; -import net.minecraft.world.entity.ai.attributes.Attributes; -import net.minecraft.world.entity.ai.control.FlyingMoveControl; -import net.minecraft.world.entity.ai.goal.FloatGoal; -import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; -import net.minecraft.world.entity.ai.goal.MeleeAttackGoal; -import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; -import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal; -import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; -import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; -import net.minecraft.world.entity.ai.navigation.FlyingPathNavigation; -import net.minecraft.world.entity.ai.navigation.PathNavigation; -import net.minecraft.world.entity.monster.Monster; -import net.minecraft.world.entity.player.Player; -import net.minecraft.sounds.SoundEvent; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.ServerLevelAccessor; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockState; -import software.bernie.geckolib.animatable.GeoEntity; -import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; -import software.bernie.geckolib.core.animation.AnimatableManager; -import software.bernie.geckolib.core.animation.AnimationController; -import software.bernie.geckolib.core.animation.AnimationState; -import software.bernie.geckolib.core.object.PlayState; -import software.bernie.geckolib.core.animation.RawAnimation; -import software.bernie.geckolib.util.GeckoLibUtil; - -public class LurkingTerrorEntity extends Monster implements GeoEntity { - private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); - private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); - private static final RawAnimation FLY_ANIM = RawAnimation.begin().thenLoop("fly"); - private static final RawAnimation ATTACK_LAND_ANIM = RawAnimation.begin().thenLoop("attackland"); - private static final RawAnimation ATTACK_AIR_ANIM = RawAnimation.begin().thenLoop("attackair"); - private static final byte ATTACK_ANIM_EVENT = 5; - - private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); - private int attackAnimTicks = 0; - - public LurkingTerrorEntity(EntityType type, Level level) { - super(type, level); - this.moveControl = new FlyingMoveControl(this, 10, true); - } - - public static AttributeSupplier.Builder createAttributes() { - return Mob.createMobAttributes() - .add(Attributes.MAX_HEALTH, AntarchySettings.lurkingTerrorHealth()) - .add(Attributes.MOVEMENT_SPEED, 0.35D) - .add(Attributes.ATTACK_DAMAGE, AntarchySettings.lurkingTerrorAttackDamage()) - .add(Attributes.FOLLOW_RANGE, 16.0D) - .add(Attributes.FLYING_SPEED, 0.55D); - } - - public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { - if (spawnReason == MobSpawnType.SPAWN_EGG || spawnReason == MobSpawnType.SPAWNER || spawnReason == MobSpawnType.COMMAND) { - return true; - } - BlockPos belowPos = pos.below(); - BlockState belowState = level.getBlockState(belowPos); - boolean validSupport = !belowState.is(Blocks.BEDROCK) - && belowState.blocksMotion() - && belowState.isFaceSturdy(level, belowPos, Direction.UP) - && belowState.isCollisionShapeFullBlock(level, belowPos); - - return level.getDifficulty() != Difficulty.PEACEFUL - && validSupport - && level.isEmptyBlock(pos) - && level.isEmptyBlock(pos.above()) - && Monster.checkMonsterSpawnRules(entityType, level, spawnReason, pos, random); - } - - @Override - protected PathNavigation createNavigation(Level level) { - FlyingPathNavigation nav = new FlyingPathNavigation(this, level); - nav.setCanOpenDoors(false); - nav.setCanFloat(true); - nav.setCanPassDoors(true); - return nav; - } - - @Override - protected void registerGoals() { - this.goalSelector.addGoal(0, new FloatGoal(this)); - this.goalSelector.addGoal(1, new MeleeAttackGoal(this, 1.0D, true)); - this.goalSelector.addGoal(2, new WaterAvoidingRandomStrollGoal(this, 0.85D)); - this.goalSelector.addGoal(3, new LookAtPlayerGoal(this, Player.class, 8.0F)); - this.goalSelector.addGoal(4, new RandomLookAroundGoal(this)); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this)); - this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); - } - - @Override - public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "main_controller", 3, this::mainAnimController) - .triggerableAnim("attackland", ATTACK_LAND_ANIM) - .triggerableAnim("attackair", ATTACK_AIR_ANIM)); - } - - private PlayState mainAnimController(AnimationState state) { - if (attackAnimTicks > 0) { - if (!this.onGround()) { - return state.setAndContinue(ATTACK_AIR_ANIM); - } - return state.setAndContinue(ATTACK_LAND_ANIM); - } - if (!this.onGround()) { - return state.setAndContinue(FLY_ANIM); - } - if (state.isMoving()) { - return state.setAndContinue(WALK_ANIM); - } - return state.setAndContinue(IDLE_ANIM); - } - - @Override - public AnimatableInstanceCache getAnimatableInstanceCache() { - return geoCache; - } - - @Override - public boolean doHurtTarget(net.minecraft.world.entity.Entity target) { - boolean result = super.doHurtTarget(target); - if (result) { - this.playSound(AntarchySoundEvents.LURKING_TERROR_BITE.get(), 1.0F, 0.95F + this.random.nextFloat() * 0.1F); - this.setAttackAnimTicks(20); - this.level().broadcastEntityEvent(this, ATTACK_ANIM_EVENT); - } - return result; - } - - @Override - protected SoundEvent getAmbientSound() { - return AntarchySoundEvents.LURKING_TERROR_SNARL.get(); - } - - @Override - protected SoundEvent getHurtSound(net.minecraft.world.damagesource.DamageSource source) { - return AntarchySoundEvents.LURKING_TERROR_HURT.get(); - } - - @Override - protected SoundEvent getDeathSound() { - return AntarchySoundEvents.LURKING_TERROR_HURT.get(); - } - - @Override - public void handleEntityEvent(byte id) { - if (id == ATTACK_ANIM_EVENT) { - this.setAttackAnimTicks(20); - return; - } - super.handleEntityEvent(id); - } - - @Override - public void tick() { - CavarynBurrowingMobBehavior.moveOutOfBlocks(this); - super.tick(); - CavarynBurrowingMobBehavior.moveOutOfBlocks(this); - if (!this.level().isClientSide() && !this.onGround() && this.tickCount % 80 == 0) { - this.playSound(AntarchySoundEvents.LURKING_TERROR_FLY_LOOP.get(), 0.45F, 0.95F + this.random.nextFloat() * 0.1F); - } - if (!this.level().isClientSide() && attackAnimTicks > 0) this.setAttackAnimTicks(attackAnimTicks - 1); - } - - private void setAttackAnimTicks(int ticks) { - int clamped = Math.max(0, ticks); - if (this.attackAnimTicks <= 0 && clamped > 0) { - this.triggerAnim("main_controller", this.onGround() ? "attackland" : "attackair"); - } else if (this.attackAnimTicks > 0 && clamped <= 0) { - this.stopTriggeredAnimation("main_controller", "attackland"); - this.stopTriggeredAnimation("main_controller", "attackair"); - } - this.attackAnimTicks = clamped; - } - - @Override - public boolean isInWall() { - return false; - } - - @Override - public boolean causeFallDamage(float fallDistance, float multiplier, net.minecraft.world.damagesource.DamageSource source) { - return false; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ManticoreEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ManticoreEntity.java index 9a97a65b..7974ff3a 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ManticoreEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ManticoreEntity.java @@ -2,9 +2,10 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.entity.royal.QueenEntity; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; import java.util.List; import java.util.UUID; @@ -12,6 +13,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvent; import net.minecraft.util.RandomSource; import net.minecraft.world.Difficulty; import net.minecraft.world.DifficultyInstance; @@ -57,7 +59,6 @@ import software.bernie.geckolib.util.GeckoLibUtil; public class ManticoreEntity extends Monster implements GeoEntity { private static final String SUMMONER_KEY = "QueenSummoner"; private static final String PLAYER_SUMMONER_KEY = "PlayerSummoner"; - private static final String PLAYER_SUMMON_LIFETIME_KEY = "PlayerSummonLifetime"; private static final int LOST_SUMMONER_GRACE_TICKS = 200; private static final int TAKEOFF_COOLDOWN_TICKS = 40; private static final int STING_COOLDOWN_TICKS = 60; @@ -79,8 +80,6 @@ public class ManticoreEntity extends Monster implements GeoEntity { private UUID summonerId; @Nullable private UUID playerSummonerId; - private int playerSummonLifetime; - private int playerSummonAge; private int lostSummonerTicks; private int takeoffCooldown; private int stingCooldown; @@ -100,27 +99,27 @@ public class ManticoreEntity extends Monster implements GeoEntity { public static AttributeSupplier.Builder createAttributes() { return Mob.createMobAttributes() .add(Attributes.MAX_HEALTH, AntarchySettings.manticoreHealth()) - .add(Attributes.MOVEMENT_SPEED, 0.3D) - .add(Attributes.FLYING_SPEED, 0.6D) + .add(Attributes.MOVEMENT_SPEED, 0.55D) + .add(Attributes.FLYING_SPEED, 2.6D) .add(Attributes.ATTACK_DAMAGE, AntarchySettings.manticoreAttackDamage()) .add(Attributes.FOLLOW_RANGE, 28.0D) .add(Attributes.KNOCKBACK_RESISTANCE, 0.2D); } public static boolean canSpawn(EntityType type, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { - if (spawnReason == MobSpawnType.SPAWN_EGG || spawnReason == MobSpawnType.SPAWNER - || spawnReason == MobSpawnType.COMMAND || spawnReason == MobSpawnType.MOB_SUMMONED) { + if (spawnReason == MobSpawnType.SPAWN_EGG || spawnReason == MobSpawnType.SPAWNER || spawnReason == MobSpawnType.COMMAND + || spawnReason == MobSpawnType.MOB_SUMMONED) { return true; } - if (pos.getY() >= 0) { + if (pos.getY() >= 0 || level.getDifficulty() == Difficulty.PEACEFUL) { return false; } + if (ThoraxisUndersideManager.isUndersideCeilingSpawn(type, level, pos)) { + return true; + } BlockState below = level.getBlockState(pos.below()); - BlockState above = level.getBlockState(pos.above()); boolean floorSupport = !below.is(Blocks.BEDROCK) && below.isFaceSturdy(level, pos.below(), Direction.UP); - boolean ceilingSupport = !above.is(Blocks.BEDROCK) && above.isFaceSturdy(level, pos.above(), Direction.DOWN); - return level.getDifficulty() != Difficulty.PEACEFUL - && (floorSupport || ceilingSupport) + return floorSupport && level.isEmptyBlock(pos) && Monster.checkMonsterSpawnRules(type, level, spawnReason, pos, random); } @@ -158,11 +157,9 @@ public class ManticoreEntity extends Monster implements GeoEntity { this.setPersistenceRequired(); } - public void markPlayerSummoned(UUID playerId, int lifetimeTicks) { + public void markPlayerSummoned(UUID playerId) { this.playerSummonerId = playerId; this.summonerId = null; - this.playerSummonLifetime = lifetimeTicks; - this.playerSummonAge = 0; this.lostSummonerTicks = 0; this.setPersistenceRequired(); } @@ -199,7 +196,7 @@ public class ManticoreEntity extends Monster implements GeoEntity { @Override public boolean removeWhenFarAway(double distanceToClosestPlayer) { - return this.summonerId == null && super.removeWhenFarAway(distanceToClosestPlayer); + return this.summonerId == null && this.playerSummonerId == null && super.removeWhenFarAway(distanceToClosestPlayer); } @Override @@ -221,6 +218,9 @@ public class ManticoreEntity extends Monster implements GeoEntity { this.triggerAnim("controller", flying ? "fly_start" : "fly_land"); this.wasFlyingLastTick = flying; } + if (flying && this.tickCount % 16 == 0) { + this.playSound(AntarchySoundEvents.MANTICORE_FLY.get(), 0.65F, 0.9F + this.random.nextFloat() * 0.2F); + } if (this.takeoffCooldown > 0) { this.takeoffCooldown--; @@ -230,8 +230,9 @@ public class ManticoreEntity extends Monster implements GeoEntity { } this.tickQueenSummonCleanup(); + this.tickPlayerSummonCleanup(); - this.tickPlayerSummon(); + this.tickPlayerSummonTarget(); this.tickQueenSummonTarget(); LivingEntity target = this.getTarget(); @@ -246,17 +247,12 @@ public class ManticoreEntity extends Monster implements GeoEntity { } } - private void tickPlayerSummon() { + private void tickPlayerSummonTarget() { if (this.playerSummonerId == null || !(this.level() instanceof ServerLevel serverLevel)) { return; } - if (++this.playerSummonAge >= this.playerSummonLifetime) { - this.discard(); - return; - } Entity entity = serverLevel.getEntity(this.playerSummonerId); if (!(entity instanceof Player player) || !player.isAlive()) { - this.discard(); return; } LivingEntity target = player.getLastHurtMob(); @@ -322,6 +318,20 @@ public class ManticoreEntity extends Monster implements GeoEntity { } } + private void tickPlayerSummonCleanup() { + if (this.playerSummonerId == null || !(this.level() instanceof ServerLevel serverLevel)) { + return; + } + Entity summoner = serverLevel.getEntity(this.playerSummonerId); + if (summoner instanceof Player player && player.isAlive()) { + this.lostSummonerTicks = 0; + return; + } + if (++this.lostSummonerTicks > LOST_SUMMONER_GRACE_TICKS) { + this.discard(); + } + } + private void takeoff() { this.takeoffCooldown = TAKEOFF_COOLDOWN_TICKS; this.setDeltaMovement(this.getDeltaMovement().add(0.0D, 0.55D, 0.0D)); @@ -374,7 +384,7 @@ public class ManticoreEntity extends Monster implements GeoEntity { } private static Vec3 oppositeGravity(Entity entity) { - return AntarchyGravityApi.isGravityInverted(entity) ? new Vec3(0.0D, -1.0D, 0.0D) : new Vec3(0.0D, 1.0D, 0.0D); + return GravityApi.isGravityInverted(entity) ? new Vec3(0.0D, -1.0D, 0.0D) : new Vec3(0.0D, 1.0D, 0.0D); } private void tickQueenSummonInversionRule() { @@ -384,8 +394,8 @@ public class ManticoreEntity extends Monster implements GeoEntity { if (this.hasEffect(AntarchyObjects.INVERTED_EFFECT.get())) { this.removeEffect(AntarchyObjects.INVERTED_EFFECT.get()); } - if (AntarchyGravityApi.isGravityInverted(this) && AntarchyGravityApi.isGravityForced(this)) { - AntarchyGravityApi.setGravityDirection(this, AntarchyGravityDirection.DOWN, false); + if (GravityApi.isGravityInverted(this) && GravityApi.isGravityForced(this)) { + GravityApi.setGravityDirection(this, GravityDirection.DOWN, false); } this.setNoGravity(false); } @@ -397,6 +407,7 @@ public class ManticoreEntity extends Monster implements GeoEntity { void performSting(LivingEntity enemy) { this.swing(InteractionHand.MAIN_HAND); + this.playSound(AntarchySoundEvents.MANTICORE_BITE.get(), 0.9F, 0.95F + this.random.nextFloat() * 0.1F); if (enemy.hurt(this.damageSources().mobAttack(this), (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE))) { enemy.addEffect(new MobEffectInstance(MobEffects.POISON, AntarchySettings.manticoreStingPoisonTicks(), 0), this); } @@ -412,11 +423,22 @@ public class ManticoreEntity extends Monster implements GeoEntity { public boolean doHurtTarget(Entity target) { boolean hurt = super.doHurtTarget(target); if (hurt) { + this.playSound(AntarchySoundEvents.MANTICORE_BITE.get(), 0.9F, 0.95F + this.random.nextFloat() * 0.1F); this.triggerAnim("controller", this.onGround() ? "bite" : "fly_bite"); } return hurt; } + @Override + protected SoundEvent getAmbientSound() { + return AntarchySoundEvents.MANTICORE_IDLE.get(); + } + + @Override + protected void playStepSound(BlockPos pos, BlockState state) { + this.playSound(AntarchySoundEvents.MANTICORE_WALK.get(), 0.55F, 0.9F + this.random.nextFloat() * 0.2F); + } + @Override public boolean causeFallDamage(float fallDistance, float multiplier, DamageSource source) { return false; @@ -443,7 +465,6 @@ public class ManticoreEntity extends Monster implements GeoEntity { } if (this.playerSummonerId != null) { tag.putUUID(PLAYER_SUMMONER_KEY, this.playerSummonerId); - tag.putInt(PLAYER_SUMMON_LIFETIME_KEY, this.playerSummonLifetime); } } @@ -452,8 +473,6 @@ public class ManticoreEntity extends Monster implements GeoEntity { super.readAdditionalSaveData(tag); this.summonerId = tag.hasUUID(SUMMONER_KEY) ? tag.getUUID(SUMMONER_KEY) : null; this.playerSummonerId = tag.hasUUID(PLAYER_SUMMONER_KEY) ? tag.getUUID(PLAYER_SUMMONER_KEY) : null; - this.playerSummonLifetime = tag.getInt(PLAYER_SUMMON_LIFETIME_KEY); - this.playerSummonAge = 0; this.lostSummonerTicks = 0; } @@ -486,7 +505,7 @@ public class ManticoreEntity extends Monster implements GeoEntity { private final ManticoreEntity manticore; ManticoreAttackGoal(ManticoreEntity manticore) { - super(manticore, 1.1D, true); + super(manticore, 1.6D, true); this.manticore = manticore; } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/MantisEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/MantisEntity.java index dc152490..c2e92883 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/MantisEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/MantisEntity.java @@ -7,6 +7,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.entity.Entity; import net.minecraft.sounds.SoundEvent; +import net.minecraft.util.Mth; import net.minecraft.util.RandomSource; import net.minecraft.world.Difficulty; import net.minecraft.world.damagesource.DamageSource; @@ -15,15 +16,17 @@ import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.MobSpawnType; import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.AttributeInstance; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.ai.goal.FloatGoal; -import net.minecraft.world.entity.ai.goal.MeleeAttackGoal; +import net.minecraft.world.entity.ai.goal.Goal; import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal; import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; import net.minecraft.world.entity.ai.navigation.GroundPathNavigation; import net.minecraft.world.entity.ai.navigation.PathNavigation; import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.entity.SpawnGroupData; import net.minecraft.world.level.block.LeavesBlock; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; @@ -33,8 +36,6 @@ import net.minecraft.world.phys.AABB; import net.minecraft.world.level.pathfinder.BlockPathTypes; import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.Nullable; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import software.bernie.geckolib.animatable.GeoEntity; import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; import software.bernie.geckolib.core.animation.AnimatableManager; @@ -44,8 +45,9 @@ import software.bernie.geckolib.core.object.PlayState; import software.bernie.geckolib.core.animation.RawAnimation; import software.bernie.geckolib.util.GeckoLibUtil; +import java.util.EnumSet; + public class MantisEntity extends Monster implements GeoEntity { - private static final Logger LOGGER = LoggerFactory.getLogger(MantisEntity.class); private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); private static final RawAnimation FLY_ANIM = RawAnimation.begin().thenLoop("fly"); @@ -59,15 +61,30 @@ public class MantisEntity extends Monster implements GeoEntity { private static final int ANIM_FLY_ATTACK = 4; private static final double WANDER_SPEED = 0.48D; private static final double COMBAT_SPEED = 0.75D; + private static final int ATTACK_ANIM_TICKS = 20; + private static final int ATTACK_COMMIT_REMAINING_TICKS = 14; + private static final int ATTACK_HIT_REMAINING_TICKS = 10; + private static final int ATTACK_COOLDOWN_TICKS = 8; + private static final double ATTACK_START_RANGE = 4.25D; + private static final double ATTACK_HIT_REACH = 5.25D; + private static final double ATTACK_HALF_WIDTH = 2.6D; + private static final double ATTACK_VERTICAL_TOLERANCE = 3.0D; + private static final float WINDUP_TURN_RATE = 18.0F; private static final net.minecraft.network.syncher.EntityDataAccessor ANIMATION_STATE = net.minecraft.network.syncher.SynchedEntityData.defineId(MantisEntity.class, net.minecraft.network.syncher.EntityDataSerializers.INT); private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); protected int attackAnimationTicks; + protected int attackCooldownTicks; protected int flyBurstTicks; protected int flyCooldownTicks; - private int debugLogTicks = 0; + @Nullable + protected LivingEntity committedAttackTarget; + protected float committedAttackYaw; + protected boolean attackDamageApplied; + protected boolean attackStartedInFlight; + private int configSyncTicks; public MantisEntity(EntityType entityType, Level level) { super(entityType, level); @@ -89,6 +106,13 @@ public class MantisEntity extends Monster implements GeoEntity { .add(Attributes.ARMOR, 4.0D); } + @Override + public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData spawnData, @org.jetbrains.annotations.Nullable net.minecraft.nbt.CompoundTag dataTag) { + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, this.configuredMaxHealth()); + this.syncConfiguredAttributes(false); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData, dataTag); + } + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { if (spawnReason == MobSpawnType.SPAWN_EGG || spawnReason == MobSpawnType.SPAWNER @@ -105,9 +129,14 @@ public class MantisEntity extends Monster implements GeoEntity { } boolean atSurface = level.getHeightmapPos(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, pos).getY() <= pos.getY(); - boolean posOpen = level.isEmptyBlock(pos) && level.isEmptyBlock(pos.above()) && level.getFluidState(pos).isEmpty(); - boolean onSolidGround = level.getBlockState(pos.below()).isFaceSturdy(level, pos.below(), Direction.UP) + boolean hasFloorClearance = level.isEmptyBlock(pos.above()); + boolean hasCeilingClearance = level.isEmptyBlock(pos.below()); + boolean floorSupport = level.getBlockState(pos.below()).isFaceSturdy(level, pos.below(), Direction.UP) && !(level.getBlockState(pos.below()).getBlock() instanceof LeavesBlock); + boolean ceilingSupport = level.getBlockState(pos.above()).isFaceSturdy(level, pos.above(), Direction.DOWN) + && !(level.getBlockState(pos.above()).getBlock() instanceof LeavesBlock); + boolean posOpen = level.isEmptyBlock(pos) && (hasFloorClearance || hasCeilingClearance) && level.getFluidState(pos).isEmpty(); + boolean onSolidGround = floorSupport || ceilingSupport; if (!posOpen || !onSolidGround) { return false; @@ -119,12 +148,10 @@ public class MantisEntity extends Monster implements GeoEntity { boolean ignoreLightLevel = AntarchySettings.mantisIgnoreLightLevel(); - // Daytime overworld spawns can't pass the vanilla darkness check, so no light gate here if (level.getLevel().isDay() && level.getBiome(pos).is(AntarchyTags.Biomes.MANTIS_OVERWORLD_SPAWN_BIOMES)) { return atSurface && level.canSeeSky(pos); } - // Elythia meadow (and any future mantis_spawn_biomes): nighttime, no sky-access requirement if (level.getLevel().isNight() && level.getBiome(pos).is(AntarchyTags.Biomes.MANTIS_SPAWN_BIOMES)) { return atSurface && (ignoreLightLevel || Monster.checkMonsterSpawnRules(entityType, level, spawnReason, pos, random)); } @@ -137,7 +164,7 @@ public class MantisEntity extends Monster implements GeoEntity { MantisEntity.class, new AABB(pos).inflate(64.0D), Entity::isAlive - ).size() < 3; + ).size() < 4; } @Override @@ -154,12 +181,11 @@ public class MantisEntity extends Monster implements GeoEntity { HurtByTargetGoal hurtByTargetGoal = new HurtByTargetGoal(this); this.targetSelector.addGoal(1, hurtByTargetGoal); - // randomInterval lowered from default 10 to 5 for faster re-acquisition this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, 5, true, false, null)); } - protected MeleeAttackGoal createCombatGoal() { - return new MeleeAttackGoal(this, this.getCombatSpeed(), true); + protected Goal createCombatGoal() { + return new MantisCombatGoal(); } protected WaterAvoidingRandomStrollGoal createIdleStrollGoal() { @@ -201,8 +227,23 @@ public class MantisEntity extends Monster implements GeoEntity { public void tick() { super.tick(); if (!this.level().isClientSide) { + if (this.configSyncTicks-- <= 0) { + this.configSyncTicks = 20; + this.syncConfiguredAttributes(true); + } + if (this.attackAnimationTicks > 0) { - this.attackAnimationTicks--; + this.tickCommittedAttack(); + if (this.attackAnimationTicks > 0) { + this.attackAnimationTicks--; + if (this.attackAnimationTicks <= 0) { + this.finishCommittedAttack(); + } + } + } + + if (this.attackCooldownTicks > 0) { + this.attackCooldownTicks--; } if (this.flyBurstTicks > 0) { @@ -226,7 +267,6 @@ public class MantisEntity extends Monster implements GeoEntity { this.setNoGravity(this.isFlyingNow()); this.updateAnimationState(); - this.tickDebugLog(); } this.updateFlightRotation(); @@ -234,12 +274,11 @@ public class MantisEntity extends Monster implements GeoEntity { @Override public boolean doHurtTarget(net.minecraft.world.entity.Entity target) { - boolean hurt = super.doHurtTarget(target); - if (hurt) { - this.attackAnimationTicks = 10; - this.playSound(AntarchySoundEvents.MANTIS_ATTACK.get(), 1.0F, 0.95F + this.random.nextFloat() * 0.1F); + if (target instanceof LivingEntity livingTarget && this.canBeginCommittedAttack(livingTarget)) { + this.beginCommittedAttack(livingTarget); + return true; } - return hurt; + return false; } @Override @@ -279,6 +318,22 @@ public class MantisEntity extends Monster implements GeoEntity { return COMBAT_SPEED; } + protected double configuredMaxHealth() { + return AntarchySettings.mantisHealth(); + } + + protected double configuredAttackDamage() { + return AntarchySettings.mantisAttackDamage(); + } + + protected double configuredMovementSpeed() { + return AntarchySettings.mantisMovementSpeed(); + } + + protected double configuredFlyingSpeed() { + return AntarchySettings.mantisFlyingSpeed(); + } + protected void onActiveTarget(LivingEntity target) { } @@ -295,6 +350,110 @@ public class MantisEntity extends Monster implements GeoEntity { this.setNoGravity(false); } + protected boolean isAttackLocked() { + return this.attackAnimationTicks > 0; + } + + protected boolean canBeginCommittedAttack(LivingEntity target) { + return !this.isAttackLocked() + && this.attackCooldownTicks <= 0 + && target.isAlive() + && this.distanceToSqr(target) <= this.getAttackStartRange() * this.getAttackStartRange() + && this.hasLineOfSight(target); + } + + protected void beginCommittedAttack(LivingEntity target) { + this.committedAttackTarget = target; + this.committedAttackYaw = this.yBodyRot; + this.attackAnimationTicks = ATTACK_ANIM_TICKS; + this.attackCooldownTicks = ATTACK_COOLDOWN_TICKS; + this.attackDamageApplied = false; + this.attackStartedInFlight = this.isFlyingNow(); + this.getNavigation().stop(); + this.setAggressive(true); + this.playSound(AntarchySoundEvents.MANTIS_ATTACK.get(), 1.0F, 0.95F + this.random.nextFloat() * 0.1F); + } + + protected void tickCommittedAttack() { + this.getNavigation().stop(); + LivingEntity target = this.committedAttackTarget; + if (target == null || !target.isAlive() || !target.level().equals(this.level())) { + this.finishCommittedAttack(); + return; + } + + if (this.attackAnimationTicks > ATTACK_COMMIT_REMAINING_TICKS) { + this.faceTargetForAttack(target, WINDUP_TURN_RATE); + this.committedAttackYaw = this.yBodyRot; + } else { + this.lockAttackYaw(); + } + + if (!this.attackDamageApplied && this.attackAnimationTicks == ATTACK_HIT_REMAINING_TICKS) { + this.attackDamageApplied = true; + if (this.canHitCommittedAttackTarget(target)) { + this.applyCommittedAttackDamage(target); + } + } + } + + protected void finishCommittedAttack() { + this.attackAnimationTicks = 0; + this.attackDamageApplied = false; + this.attackStartedInFlight = false; + this.committedAttackTarget = null; + } + + protected boolean canHitCommittedAttackTarget(LivingEntity target) { + if (!target.isAlive() || !this.hasLineOfSight(target)) { + return false; + } + + Vec3 forward = Vec3.directionFromRotation(0.0F, this.committedAttackYaw).normalize(); + Vec3 toTarget = target.position().subtract(this.position()); + double forwardDistance = toTarget.x * forward.x + toTarget.z * forward.z; + if (forwardDistance < 0.0D || forwardDistance > this.getAttackHitReach()) { + return false; + } + + double sideDistance = Math.abs(toTarget.x * forward.z - toTarget.z * forward.x); + if (sideDistance > this.getAttackHalfWidth()) { + return false; + } + + double verticalDistance = Math.abs((target.getY() + target.getBbHeight() * 0.5D) - (this.getY() + this.getBbHeight() * 0.5D)); + return verticalDistance <= this.getAttackVerticalTolerance(); + } + + protected boolean applyCommittedAttackDamage(LivingEntity target) { + return super.doHurtTarget(target); + } + + protected void faceTargetForAttack(LivingEntity target, float maxTurnDegrees) { + double dx = target.getX() - this.getX(); + double dz = target.getZ() - this.getZ(); + if (dx * dx + dz * dz < 1.0E-4D) { + return; + } + float targetYaw = (float) (Mth.atan2(dz, dx) * (180.0D / Math.PI)) - 90.0F; + float yaw = this.approachYaw(this.getYRot(), targetYaw, maxTurnDegrees); + this.setYRot(yaw); + this.setYHeadRot(yaw); + this.yBodyRot = yaw; + } + + protected float approachYaw(float currentYaw, float targetYaw, float maxTurnDegrees) { + float delta = Mth.wrapDegrees(targetYaw - currentYaw); + delta = Math.max(-maxTurnDegrees, Math.min(maxTurnDegrees, delta)); + return currentYaw + delta; + } + + protected void lockAttackYaw() { + this.setYRot(this.committedAttackYaw); + this.setYHeadRot(this.committedAttackYaw); + this.yBodyRot = this.committedAttackYaw; + } + private void startFlightBurst() { this.flyBurstTicks = 40 + this.random.nextInt(30); this.flyCooldownTicks = 160 + this.random.nextInt(80); @@ -324,7 +483,7 @@ public class MantisEntity extends Monster implements GeoEntity { private void updateAnimationState() { if (this.attackAnimationTicks > 0) { - this.setAnimationState(this.isFlyingNow() ? ANIM_FLY_ATTACK : ANIM_ATTACK); + this.setAnimationState(this.attackStartedInFlight || this.isFlyingNow() ? ANIM_FLY_ATTACK : ANIM_ATTACK); return; } @@ -355,36 +514,111 @@ public class MantisEntity extends Monster implements GeoEntity { this.yHeadRot = this.getYRot(); } - private boolean isFlyingNow() { return this.flyBurstTicks > 0; } - private void tickDebugLog() { - if (++this.debugLogTicks < 100) { - return; - } - this.debugLogTicks = 0; - LivingEntity target = this.getTarget(); - int animState = this.getAnimationState(); - LOGGER.debug( - "[Mantis id={}] pos={},{},{} target={} anim={} attackTicks={} flyBurst={} flyCooldown={} onGround={} navDone={}", - this.getId(), - (int) this.getX(), (int) this.getY(), (int) this.getZ(), - target != null ? target.getName().getString() : "none", - animState, - this.attackAnimationTicks, - this.flyBurstTicks, - this.flyCooldownTicks, - this.onGround(), - this.getNavigation().isDone() - ); + protected double getAttackStartRange() { + return ATTACK_START_RANGE; } + protected double getAttackHitReach() { + return ATTACK_HIT_REACH; + } + protected double getAttackHalfWidth() { + return ATTACK_HALF_WIDTH; + } + protected double getAttackVerticalTolerance() { + return ATTACK_VERTICAL_TOLERANCE; + } + + private void syncConfiguredAttributes(boolean rescaleCurrentHealth) { + syncAttribute(this.getAttribute(Attributes.MAX_HEALTH), this.configuredMaxHealth(), rescaleCurrentHealth); + syncAttribute(this.getAttribute(Attributes.ATTACK_DAMAGE), this.configuredAttackDamage(), false); + syncAttribute(this.getAttribute(Attributes.MOVEMENT_SPEED), this.configuredMovementSpeed(), false); + syncAttribute(this.getAttribute(Attributes.FLYING_SPEED), this.configuredFlyingSpeed(), false); + } + + private void syncAttribute(@Nullable AttributeInstance attributeInstance, double desiredValue, boolean rescaleCurrentHealth) { + if (attributeInstance == null) { + return; + } + + double previousValue = attributeInstance.getBaseValue(); + if (Math.abs(previousValue - desiredValue) < 1.0E-6D) { + return; + } + + attributeInstance.setBaseValue(desiredValue); + if (!rescaleCurrentHealth) { + this.setHealth((float) this.getMaxHealth()); + return; + } + + float currentHealth = this.getHealth(); + float syncedHealth = previousValue > 0.0D + ? (float) net.minecraft.util.Mth.clamp((currentHealth / (float) previousValue) * desiredValue, 0.0D, desiredValue) + : (float) desiredValue; + this.setHealth(syncedHealth); + } + + private final class MantisCombatGoal extends Goal { + private int repathTicks; + + private MantisCombatGoal() { + this.setFlags(EnumSet.of(Goal.Flag.MOVE, Goal.Flag.LOOK)); + } + + @Override + public boolean canUse() { + LivingEntity target = MantisEntity.this.getTarget(); + return target != null && target.isAlive(); + } + + @Override + public boolean canContinueToUse() { + LivingEntity target = MantisEntity.this.getTarget(); + return MantisEntity.this.isAttackLocked() || (target != null && target.isAlive()); + } + + @Override + public void start() { + MantisEntity.this.setAggressive(true); + this.repathTicks = 0; + } + + @Override + public void stop() { + if (!MantisEntity.this.isAttackLocked()) { + MantisEntity.this.setAggressive(false); + MantisEntity.this.getNavigation().stop(); + } + } + + @Override + public void tick() { + if (MantisEntity.this.isAttackLocked()) { + return; + } + + LivingEntity target = MantisEntity.this.getTarget(); + if (target == null || !target.isAlive()) { + return; + } + + if (MantisEntity.this.canBeginCommittedAttack(target)) { + MantisEntity.this.beginCommittedAttack(target); + return; + } + + MantisEntity.this.getLookControl().setLookAt(target, 30.0F, 30.0F); + if (--this.repathTicks <= 0) { + this.repathTicks = 4 + MantisEntity.this.random.nextInt(5); + MantisEntity.this.getNavigation().moveTo(target, MantisEntity.this.getCombatSpeed()); + } + } + } } - - - diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/MissileSquidEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/MissileSquidEntity.java index cea2956a..57930bfa 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/MissileSquidEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/MissileSquidEntity.java @@ -3,6 +3,10 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; +import com.craisinlord.anthology.gravity.GravityRotationUtil; +import com.craisinlord.anthology.gravity.GravityTransition; import net.minecraft.core.BlockPos; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.nbt.CompoundTag; @@ -68,6 +72,7 @@ public class MissileSquidEntity extends Monster implements GeoEntity { private static final double PATROL_SPEED = 0.28D; private static final double ATTACH_RANGE_SQR = 2.25D; private static final int LATCH_DAMAGE_INTERVAL = 15; + private static final float LATCH_DAMAGE = 2.0F; private static final int ANIM_IDLE = 0; private static final int ANIM_SWIM = 1; private static final int ANIM_ATTACK = 2; @@ -108,6 +113,13 @@ public class MissileSquidEntity extends Monster implements GeoEntity { .add(Attributes.KNOCKBACK_RESISTANCE, AntarchySettings.missileSquidKnockbackResistance()); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, + MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData, @org.jetbrains.annotations.Nullable net.minecraft.nbt.CompoundTag dataTag) { + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.missileSquidHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData, dataTag); + } + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { return level.getDifficulty() != Difficulty.PEACEFUL && pos.getY() <= level.getSeaLevel() - 10 @@ -401,6 +413,9 @@ public class MissileSquidEntity extends Monster implements GeoEntity { this.launchOwnerUuid = owner != null ? owner.getUUID() : null; this.setTarget(null); this.setNoGravity(false); + if (owner != null && GravityApi.isGravityInverted(owner)) { + GravityApi.setAirborneGravityDirection(this, GravityApi.getGravityDirection(owner), true, GravityTransition.INSTANT); + } this.setDeltaMovement(velocity); this.hasImpulse = true; this.updateAnimationState(); @@ -438,7 +453,7 @@ public class MissileSquidEntity extends Monster implements GeoEntity { this.move(MoverType.SELF, velocity); Vec3 movedVelocity = this.getDeltaMovement(); if (!this.isNoGravity()) { - movedVelocity = movedVelocity.add(0.0D, -0.08D, 0.0D); + movedVelocity = movedVelocity.add(this.toWorld(0.0D, -0.08D, 0.0D)); } this.setDeltaMovement(movedVelocity.scale(this.isInWater() ? 0.9D : 0.98D)); @@ -505,9 +520,9 @@ public class MissileSquidEntity extends Monster implements GeoEntity { } private void tickGroundAggroMovement(LivingEntity target) { - Vec3 horizontal = target.position().subtract(this.position()).multiply(1.0D, 0.0D, 1.0D); + Vec3 horizontal = this.toLocalPlane(target.position().subtract(this.position())); if (horizontal.lengthSqr() > 1.0E-4D && this.onGround()) { - Vec3 lunge = horizontal.normalize().scale(0.16D).add(0.0D, 0.24D, 0.0D); + Vec3 lunge = this.toWorld(horizontal.normalize().scale(0.16D).add(new Vec3(0.0D, 0.24D, 0.0D))); this.setDeltaMovement(this.getDeltaMovement().add(lunge)); this.hasImpulse = true; } @@ -532,7 +547,7 @@ public class MissileSquidEntity extends Monster implements GeoEntity { } private void updateSwimRotation() { - Vec3 velocity = this.getDeltaMovement(); + Vec3 velocity = this.toLocal(this.getDeltaMovement()); if (velocity.horizontalDistanceSqr() > 1.0E-4D) { float targetYaw = (float) (Mth.atan2(velocity.z, velocity.x) * (180.0D / Math.PI)) - 90.0F; this.setYRot(Mth.approachDegrees(this.getYRot(), targetYaw, 10.0F)); @@ -573,7 +588,6 @@ public class MissileSquidEntity extends Monster implements GeoEntity { return this.canTargetEntity(target) && super.canAttack(target); } - @Nullable private LivingEntity getAttachedTarget() { if (this.attachedTargetId < 0) { @@ -634,7 +648,7 @@ public class MissileSquidEntity extends Monster implements GeoEntity { if (this.biteCooldown <= 0) { Vec3 previousMovement = target.getDeltaMovement(); - boolean hurt = target.hurt(this.damageSources().mobAttack(this), (float) AntarchySettings.jumpyBugLatchDamage()); + boolean hurt = target.hurt(this.damageSources().mobAttack(this), LATCH_DAMAGE); target.setDeltaMovement(previousMovement); if (hurt) { this.playActionAnimation(ANIM_ATTACK, ATTACK_ANIM_TICKS); @@ -650,15 +664,11 @@ public class MissileSquidEntity extends Monster implements GeoEntity { } private Vec3 createLatchAnchor(LivingEntity target) { - return target.position().add( - 0.0D, - target.getBbHeight() + 0.15D, - 0.0D - ); + return target.position().add(this.toWorld(0.0D, target.getBbHeight() + 0.15D, 0.0D)); } private void updateAttachedRotation(LivingEntity target) { - Vec3 direction = target.position().subtract(this.position()); + Vec3 direction = this.toLocal(target.position().subtract(this.position())); if (direction.horizontalDistanceSqr() > 1.0E-4D) { float targetYaw = (float)(Mth.atan2(direction.z, direction.x) * (180.0D / Math.PI)) - 90.0F; this.setYRot(targetYaw); @@ -713,11 +723,32 @@ public class MissileSquidEntity extends Monster implements GeoEntity { if (this.launchedFromSquidzooka || this.getTarget() != null || velocity.lengthSqr() > 1.0E-3D - || (this.isInWater() && velocity.horizontalDistanceSqr() > 1.0E-4D)) { + || (this.isInWater() && this.toLocal(velocity).horizontalDistanceSqr() > 1.0E-4D)) { this.setAnimationState(ANIM_SWIM); return; } this.setAnimationState(ANIM_IDLE); } + + private GravityDirection gravityDirection() { + return GravityApi.getGravityDirection(this); + } + + private Vec3 toLocal(Vec3 worldVector) { + return GravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); + } + + private Vec3 toWorld(double x, double y, double z) { + return GravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); + } + + private Vec3 toWorld(Vec3 localVector) { + return GravityRotationUtil.vecPlayerToWorld(localVector, this.gravityDirection()); + } + + private Vec3 toLocalPlane(Vec3 worldVector) { + Vec3 local = this.toLocal(worldVector); + return new Vec3(local.x, 0.0D, local.z); + } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/MolevoreEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/MolevoreEntity.java index 26666b34..c4abb023 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/MolevoreEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/MolevoreEntity.java @@ -4,6 +4,9 @@ import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; +import com.craisinlord.anthology.gravity.GravityRotationUtil; import java.util.HashSet; import java.util.Set; import java.util.UUID; @@ -470,12 +473,13 @@ public class MolevoreEntity extends Monster implements GeoEntity { } if (entity.hurt(this.damageSources().mobAttack(this), (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE))) { - Vec3 push = entity.position().subtract(this.position()).multiply(1.0D, 0.0D, 1.0D); + Vec3 push = this.toLocalPlane(entity.position().subtract(this.position())); if (push.lengthSqr() < 1.0E-4D) { - push = this.getViewVector(1.0F).multiply(1.0D, 0.0D, 1.0D); + push = this.toLocalPlane(this.getViewVector(1.0F)); } push = push.normalize().scale(0.8D); - entity.push(push.x, 0.25D, push.z); + Vec3 worldPush = this.toWorld(push.x, 0.25D, push.z); + entity.push(worldPush.x, worldPush.y, worldPush.z); entity.hurtMarked = true; } } @@ -488,12 +492,12 @@ public class MolevoreEntity extends Monster implements GeoEntity { } private void startSpinCharge(LivingEntity target) { - Vec3 horizontal = target.position().subtract(this.position()).multiply(1.0D, 0.0D, 1.0D); + Vec3 horizontal = this.toLocalPlane(target.position().subtract(this.position())); if (horizontal.lengthSqr() < 1.0E-4D) { return; } - this.spinDirection = horizontal.normalize(); + this.spinDirection = this.toWorld(horizontal.normalize()); this.spinHitEntities.clear(); this.setActionState(ACTION_SPIN_CHARGE); this.actionTicks = SPIN_TOTAL_TICKS; @@ -509,15 +513,15 @@ public class MolevoreEntity extends Monster implements GeoEntity { if (target != null && inWindup) { this.getLookControl().setLookAt(target, 35.0F, 20.0F); - Vec3 horizontal = target.position().subtract(this.position()).multiply(1.0D, 0.0D, 1.0D); + Vec3 horizontal = this.toLocalPlane(target.position().subtract(this.position())); if (horizontal.lengthSqr() > 1.0E-4D) { - this.spinDirection = horizontal.normalize(); + this.spinDirection = this.toWorld(horizontal.normalize()); } this.setDeltaMovement(this.getDeltaMovement().scale(0.2D)); } else { Vec3 lookTarget = this.position().add(this.spinDirection); - this.getLookControl().setLookAt(lookTarget.x, this.getEyeY(), lookTarget.z, 360.0F, 0.0F); - Vec3 motion = this.spinDirection.scale(SPIN_SPEED).add(0.0D, this.onGround() ? 0.08D : 0.0D, 0.0D); + this.getLookControl().setLookAt(lookTarget.x, lookTarget.y, lookTarget.z, 360.0F, 0.0F); + Vec3 motion = this.spinDirection.scale(SPIN_SPEED).add(this.toWorld(0.0D, this.onGround() ? 0.08D : 0.0D, 0.0D)); this.setDeltaMovement(motion); this.hasImpulse = true; this.performSpinChargeHit(); @@ -548,8 +552,15 @@ public class MolevoreEntity extends Monster implements GeoEntity { } if (entity.hurt(this.damageSources().mobAttack(this), (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE) * 1.65F)) { - Vec3 push = this.spinDirection.lengthSqr() > 0.0D ? this.spinDirection : entity.position().subtract(this.position()).normalize(); - entity.push(push.x * 1.15D, 0.35D, push.z * 1.15D); + Vec3 push = this.spinDirection.lengthSqr() > 0.0D + ? this.toLocalPlane(this.spinDirection) + : this.toLocalPlane(entity.position().subtract(this.position())); + if (push.lengthSqr() < 1.0E-4D) { + push = this.toLocalPlane(this.getViewVector(1.0F)); + } + push = push.normalize(); + Vec3 worldPush = this.toWorld(push.x * 1.15D, 0.35D, push.z * 1.15D); + entity.push(worldPush.x, worldPush.y, worldPush.z); entity.hurtMarked = true; this.playSound(AntarchySoundEvents.MOLEVORE_ATTACK.get(), 1.0F, 0.65F + this.random.nextFloat() * 0.1F); } @@ -588,21 +599,21 @@ public class MolevoreEntity extends Monster implements GeoEntity { Vec3 forward = this.getViewVector(1.0F).normalize(); Vec3 digCenter = this.position() .add(forward.scale(1.0D)) - .add(0.0D, -0.5D, 0.0D); + .add(this.toWorld(0.0D, -0.5D, 0.0D)); double halfWidth = 0.9D; double digDepth = 1.5D; BlockPos min = BlockPos.containing(digCenter.x - halfWidth, digCenter.y - digDepth, digCenter.z - halfWidth); BlockPos max = BlockPos.containing(digCenter.x + halfWidth, digCenter.y + 0.4D, digCenter.z + halfWidth); - Vec3 hForward = forward.multiply(1.0D, 0.0D, 1.0D); + Vec3 hForward = this.toLocalPlane(forward); for (BlockPos pos : BlockPos.betweenClosed(min, max)) { BlockState state = this.level().getBlockState(pos); if (!state.is(AntarchyTags.Blocks.MOLEVORE_BREAKABLE_BLOCKS) || state.isAir()) { continue; } if (hForward.lengthSqr() > 1.0E-4D) { - Vec3 toBlock = Vec3.atCenterOf(pos).subtract(this.position()).multiply(1.0D, 0.0D, 1.0D); + Vec3 toBlock = this.toLocalPlane(Vec3.atCenterOf(pos).subtract(this.position())); if (toBlock.lengthSqr() > 1.0E-4D && hForward.normalize().dot(toBlock.normalize()) < -0.2D) { continue; } @@ -637,12 +648,12 @@ public class MolevoreEntity extends Monster implements GeoEntity { } Vec3 forward = direction.normalize(); - Vec3 center = this.position().add(forward.scale(range * 0.5D)).add(0.0D, this.getBbHeight() * 0.4D, 0.0D); + Vec3 center = this.position().add(forward.scale(range * 0.5D)).add(this.toWorld(0.0D, this.getBbHeight() * 0.4D, 0.0D)); BlockPos min = BlockPos.containing(center.x - halfWidth, center.y - verticalRange * 0.5D, center.z - halfWidth); BlockPos max = BlockPos.containing(center.x + halfWidth, center.y + verticalRange * 0.5D, center.z + halfWidth); boolean broke = false; - Vec3 hForward = forward.multiply(1.0D, 0.0D, 1.0D); + Vec3 hForward = this.toLocalPlane(forward); for (BlockPos pos : BlockPos.betweenClosed(min, max)) { BlockState state = this.level().getBlockState(pos); if (!state.is(AntarchyTags.Blocks.MOLEVORE_BREAKABLE_BLOCKS) || state.isAir()) { @@ -650,7 +661,7 @@ public class MolevoreEntity extends Monster implements GeoEntity { } Vec3 blockCenter = Vec3.atCenterOf(pos); - Vec3 toBlock = blockCenter.subtract(this.position()).multiply(1.0D, 0.0D, 1.0D); + Vec3 toBlock = this.toLocalPlane(blockCenter.subtract(this.position())); if (hForward.lengthSqr() > 1.0E-4D && toBlock.lengthSqr() > 1.0E-4D && hForward.normalize().dot(toBlock.normalize()) < -0.15D) { continue; @@ -663,14 +674,31 @@ public class MolevoreEntity extends Monster implements GeoEntity { } private boolean isInFront(Vec3 position, double minimumDot) { - Vec3 forward = this.getViewVector(1.0F).multiply(1.0D, 0.0D, 1.0D); - Vec3 toTarget = position.subtract(this.position()).multiply(1.0D, 0.0D, 1.0D); + Vec3 forward = this.toLocalPlane(this.getViewVector(1.0F)); + Vec3 toTarget = this.toLocalPlane(position.subtract(this.position())); if (forward.lengthSqr() < 1.0E-4D || toTarget.lengthSqr() < 1.0E-4D) { return true; } return forward.normalize().dot(toTarget.normalize()) >= minimumDot; } + private GravityDirection gravityDirection() { + return GravityApi.getGravityDirection(this); + } + + private Vec3 toWorld(double x, double y, double z) { + return GravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); + } + + private Vec3 toWorld(Vec3 localVector) { + return GravityRotationUtil.vecPlayerToWorld(localVector, this.gravityDirection()); + } + + private Vec3 toLocalPlane(Vec3 worldVector) { + Vec3 local = GravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); + return new Vec3(local.x, 0.0D, local.z); + } + private int getActionState() { return this.entityData.get(ACTION_STATE); } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/OctopusBombEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/OctopusBombEntity.java index aa74e715..a0b2664d 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/OctopusBombEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/OctopusBombEntity.java @@ -89,7 +89,6 @@ public class OctopusBombEntity extends Monster implements GeoEntity { private boolean spawnedByKraken; - // Explosive impact (fired from the R.P.O. Launcher) private boolean explosiveImpact; private java.util.UUID explosiveLauncherId; private int explosiveArmTicks; @@ -141,9 +140,7 @@ public class OctopusBombEntity extends Monster implements GeoEntity { this.goalSelector.addGoal(5, new LookAtPlayerGoal(this, Player.class, 20.0F)); this.goalSelector.addGoal(6, new RandomLookAroundGoal(this)); - // Only retaliate when hit — neutral otherwise this.targetSelector.addGoal(1, new HurtByTargetGoal(this)); - // When spawned by Kraken and flying, target nearest player this.targetSelector.addGoal(2, new KrakenSummonTargetGoal(this)); } @@ -216,7 +213,6 @@ public class OctopusBombEntity extends Monster implements GeoEntity { if (this.attackCooldown > 0) this.attackCooldown--; if (this.inkSprayCooldown > 0) this.inkSprayCooldown--; - // Ink spray — always active regardless of aggro state this.tickInkSpray(); LivingEntity target = this.getTarget(); @@ -359,6 +355,14 @@ public class OctopusBombEntity extends Monster implements GeoEntity { public void launchAsExplosiveProjectile(net.minecraft.world.entity.Entity launcher, Vec3 velocity) { this.explosiveImpact = true; this.explosiveLauncherId = launcher != null ? launcher.getUUID() : null; + if (launcher != null && com.craisinlord.anthology.gravity.GravityApi.isGravityInverted(launcher)) { + com.craisinlord.anthology.gravity.GravityApi.setAirborneGravityDirection( + this, + com.craisinlord.anthology.gravity.GravityApi.getGravityDirection(launcher), + true, + com.craisinlord.anthology.gravity.GravityTransition.INSTANT + ); + } this.setDeltaMovement(velocity); this.hasImpulse = true; } @@ -369,10 +373,9 @@ public class OctopusBombEntity extends Monster implements GeoEntity { float angle = this.random.nextFloat() * (float) (Math.PI * 2); this.wanderDx = Mth.cos(angle) * 0.015f; this.wanderDz = Mth.sin(angle) * 0.015f; - this.wanderDy = -0.01f + this.random.nextFloat() * 0.01f; // slight downward bias + this.wanderDy = -0.01f + this.random.nextFloat() * 0.01f; } - // Surface avoidance: if the block above is not water, push down float dy = this.wanderDy; if (!this.level().getFluidState(this.blockPosition().above()).is(net.minecraft.tags.FluidTags.WATER)) { dy = -0.03f; @@ -657,9 +660,6 @@ public class OctopusBombEntity extends Monster implements GeoEntity { } } - // ------------------------------------------------------------------------- - // Inner goal: only target players when spawned by Kraken in fly mode - // ------------------------------------------------------------------------- private static final class KrakenSummonTargetGoal extends NearestAttackableTargetGoal { private final OctopusBombEntity octopus; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/OuranwoodDeerEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/OuranwoodDeerEntity.java index 4c10a41e..b250c581 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/OuranwoodDeerEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/OuranwoodDeerEntity.java @@ -3,6 +3,9 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; +import com.craisinlord.anthology.gravity.GravityRotationUtil; import java.util.EnumSet; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.syncher.EntityDataAccessor; @@ -160,6 +163,7 @@ public class OuranwoodDeerEntity extends Animal implements GeoEntity { public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData spawnGroupData, @org.jetbrains.annotations.Nullable net.minecraft.nbt.CompoundTag dataTag) { DeerSpawnData deerSpawnData = spawnGroupData instanceof DeerSpawnData data ? data : new DeerSpawnData(); SpawnGroupData result = super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData, dataTag); + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.ouranwoodDeerHealth()); if (spawnReason == MobSpawnType.NATURAL || spawnReason == MobSpawnType.CHUNK_GENERATION || spawnReason == MobSpawnType.SPAWN_EGG) { this.setVariant(Variant.values()[this.random.nextInt(Variant.values().length)]); @@ -221,7 +225,7 @@ public class OuranwoodDeerEntity extends Animal implements GeoEntity { } private PlayState mainAnimController(AnimationState state) { - double speedSqr = this.getDeltaMovement().horizontalDistanceSqr(); + double speedSqr = this.toLocal(this.getDeltaMovement()).horizontalDistanceSqr(); if (this.hurtTime > 0 || speedSqr > RUN_SPEED_THRESHOLD_SQR) { return state.setAndContinue(RUN_ANIM); } @@ -241,6 +245,14 @@ public class OuranwoodDeerEntity extends Animal implements GeoEntity { return MIN_QUIRK_COOLDOWN + this.random.nextInt(MAX_QUIRK_COOLDOWN - MIN_QUIRK_COOLDOWN + 1); } + private GravityDirection gravityDirection() { + return GravityApi.getGravityDirection(this); + } + + private Vec3 toLocal(Vec3 worldVector) { + return GravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); + } + @Override public AnimatableInstanceCache getAnimatableInstanceCache() { return this.geoCache; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ReverieEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ReverieEntity.java index 0c7c4abb..63a0d244 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ReverieEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ReverieEntity.java @@ -7,10 +7,9 @@ import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.fluid.AntarchyFluidChecks; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; -import com.craisinlord.antarchy.content.movement.DreamSandLowGravityAccess; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; +import com.craisinlord.anthology.gravity.GravityRotationUtil; import java.util.EnumSet; import java.util.List; import java.util.UUID; @@ -650,12 +649,9 @@ public class ReverieEntity extends PathfinderMob implements FlyingAnimal, GeoEnt if (this.isPlayerInsideAntiwater(focus)) { return false; } - if (focus instanceof DreamSandLowGravityAccess access && access.antarchy$getDreamSandLandingGraceTicks() > 0) { - return false; - } - AntarchyGravityDirection gravityDirection = AntarchyGravityApi.getGravityDirection(focus); - Vec3 localMotion = AntarchyGravityRotationUtil.vecWorldToPlayer(focus.getDeltaMovement(), gravityDirection); + GravityDirection gravityDirection = GravityApi.getGravityDirection(focus); + Vec3 localMotion = GravityRotationUtil.vecWorldToPlayer(focus.getDeltaMovement(), gravityDirection); double descentThreshold = Math.max(0.02D, this.cfgDangerousFallSpeed); boolean invertedGravity = gravityDirection.isInverted(); if (invertedGravity ? localMotion.y < descentThreshold : localMotion.y > -descentThreshold) { @@ -999,7 +995,7 @@ public class ReverieEntity extends PathfinderMob implements FlyingAnimal, GeoEnt } private int getGravitySupportDistance(Player focus, int maxDistanceBlocks) { - Direction gravityDown = AntarchyGravityRotationUtil.getGravityDownDirection(focus); + Direction gravityDown = GravityRotationUtil.getGravityDownDirection(focus); Direction supportFace = gravityDown.getOpposite(); BlockPos cursor = focus.blockPosition(); for (int distance = 1; distance <= maxDistanceBlocks; distance++) { @@ -1038,7 +1034,7 @@ public class ReverieEntity extends PathfinderMob implements FlyingAnimal, GeoEnt double radius = Mth.lerp(1.0D - orbitBlend, desiredMin * 0.35D, desiredMax * 0.85D); Vec3 tetherAnchor = focus.position().add(focus.getDeltaMovement().scale(0.75D)); double angle = orbitTime * (this.getId() % 2 == 0 ? 1.0D : -1.0D); - double verticalOffset = AntarchyGravityApi.isGravityInverted(focus) ? -2.15D : 1.15D; + double verticalOffset = GravityApi.isGravityInverted(focus) ? -2.15D : 1.15D; double y = tetherAnchor.y + verticalOffset + Math.sin(orbitTime * 0.8D) * 0.2D; return new Vec3( tetherAnchor.x + Math.cos(angle) * radius, @@ -1048,7 +1044,7 @@ public class ReverieEntity extends PathfinderMob implements FlyingAnimal, GeoEnt } private Vec3 getPurpleProtectTarget(Player focus) { - double verticalOffset = AntarchyGravityApi.isGravityInverted(focus) ? -0.95D : 0.95D; + double verticalOffset = GravityApi.isGravityInverted(focus) ? -0.95D : 0.95D; Vec3 tetherAnchor = focus.position().add(focus.getDeltaMovement().scale(0.85D)); Vec3 sideOffset = Vec3.directionFromRotation(0.0F, focus.getYRot() + 90.0F).scale(0.45D); return new Vec3( diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/RollyPollyEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/RollyPollyEntity.java index f440655c..7426d448 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/RollyPollyEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/RollyPollyEntity.java @@ -4,9 +4,13 @@ import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; +import com.craisinlord.anthology.gravity.GravityRotationUtil; import java.util.EnumSet; import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import net.minecraft.core.particles.ItemParticleOption; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.nbt.CompoundTag; @@ -21,6 +25,7 @@ import net.minecraft.advancements.CriteriaTriggers; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; +import net.minecraft.world.Difficulty; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.AgeableMob; import net.minecraft.world.entity.EntityType; @@ -32,6 +37,7 @@ import net.minecraft.world.entity.ai.attributes.AttributeInstance; import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.entity.ai.attributes.AttributeSupplier; import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.ai.goal.BreedGoal; import net.minecraft.world.entity.ai.goal.FloatGoal; import net.minecraft.world.entity.ai.goal.FollowOwnerGoal; import net.minecraft.world.entity.ai.goal.Goal; @@ -78,7 +84,6 @@ public class RollyPollyEntity extends TamableAnimal implements GeoEntity { private static final int ANIM_ROLL_UP = 2; private static final int ANIM_UNROLL = 4; - // wheel_mode is 0.75s, normal_mode is ~0.42s private static final int ROLL_UP_TICKS = 15; private static final int UNROLL_TICKS = 9; private static final int DEFENSIVE_CURL_TICKS = 100; @@ -108,7 +113,17 @@ public class RollyPollyEntity extends TamableAnimal implements GeoEntity { return true; } - return Mob.checkMobSpawnRules(entityType, level, spawnReason, pos, random); + BlockPos belowPos = pos.below(); + BlockPos abovePos = pos.above(); + if (level.getDifficulty() == Difficulty.PEACEFUL) { + return false; + } + return level.getBlockState(pos).isAir() + && (level.getBlockState(pos.above()).isAir() || level.getBlockState(pos.below()).isAir()) + && level.getFluidState(pos).isEmpty() + && (level.getFluidState(pos.above()).isEmpty() || level.getFluidState(pos.below()).isEmpty()) + && (level.getBlockState(belowPos).isFaceSturdy(level, belowPos, Direction.UP) + || level.getBlockState(abovePos).isFaceSturdy(level, abovePos, Direction.DOWN)); } public static AttributeSupplier.Builder createAttributes() { @@ -120,6 +135,14 @@ public class RollyPollyEntity extends TamableAnimal implements GeoEntity { .add(Attributes.FOLLOW_RANGE, 16.0D); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, + net.minecraft.world.entity.MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData, + @org.jetbrains.annotations.Nullable net.minecraft.nbt.CompoundTag dataTag) { + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.rollyPollyHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData, dataTag); + } + @Override protected void defineSynchedData() { super.defineSynchedData(); @@ -133,30 +156,30 @@ public class RollyPollyEntity extends TamableAnimal implements GeoEntity { this.goalSelector.addGoal(1, new PanicGoal(this, 1.4D) { @Override public boolean canUse() { - // Curled-up or tamed rolly pollies stand their ground return !RollyPollyEntity.this.isRolled() && !RollyPollyEntity.this.isTame() && super.canUse(); } }); this.goalSelector.addGoal(2, new BowlingAttackGoal()); - this.goalSelector.addGoal(3, new FertilizeCropGoal()); - this.goalSelector.addGoal(4, new EatCompostItemGoal()); - this.goalSelector.addGoal(5, new SnuggleOnBedGoal()); - this.goalSelector.addGoal(6, new TemptGoal(this, 1.1D, Ingredient.of(AntarchyTags.Items.ROLLY_POLLY_FOOD), false) { + this.goalSelector.addGoal(3, new BreedGoal(this, 1.0D)); + this.goalSelector.addGoal(4, new FertilizeCropGoal()); + this.goalSelector.addGoal(5, new EatCompostItemGoal()); + this.goalSelector.addGoal(6, new SnuggleOnBedGoal()); + this.goalSelector.addGoal(7, new TemptGoal(this, 1.1D, Ingredient.of(AntarchyTags.Items.ROLLY_POLLY_FOOD), false) { @Override public boolean canUse() { return !RollyPollyEntity.this.isRolled() && super.canUse(); } }); - this.goalSelector.addGoal(7, new FollowOwnerGoal(this, 1.1D, 10.0F, 2.0F, false)); - this.goalSelector.addGoal(8, new RollingStrollGoal()); - this.goalSelector.addGoal(9, new WaterAvoidingRandomStrollGoal(this, 1.0D) { + this.goalSelector.addGoal(8, new FollowOwnerGoal(this, 1.1D, 10.0F, 2.0F, false)); + this.goalSelector.addGoal(9, new RollingStrollGoal()); + this.goalSelector.addGoal(10, new WaterAvoidingRandomStrollGoal(this, 1.0D) { @Override public boolean canUse() { return !RollyPollyEntity.this.isRolled() && super.canUse(); } }); - this.goalSelector.addGoal(10, new LookAtPlayerGoal(this, Player.class, 8.0F)); - this.goalSelector.addGoal(11, new RandomLookAroundGoal(this)); + this.goalSelector.addGoal(11, new LookAtPlayerGoal(this, Player.class, 8.0F)); + this.goalSelector.addGoal(12, new RandomLookAroundGoal(this)); this.targetSelector.addGoal(1, new OwnerHurtByTargetGoal(this)); this.targetSelector.addGoal(2, new OwnerHurtTargetGoal(this)); } @@ -170,7 +193,8 @@ public class RollyPollyEntity extends TamableAnimal implements GeoEntity { public InteractionResult mobInteract(Player player, InteractionHand hand) { ItemStack stack = player.getItemInHand(hand); - if (this.isFood(stack) && (!this.isTame() || this.getHealth() < this.getMaxHealth())) { + if (this.isFood(stack) && (!this.isTame() || this.getHealth() < this.getMaxHealth() + || (this.canFallInLove() && !this.isBaby()))) { if (!this.level().isClientSide) { if (!player.getAbilities().instabuild) { stack.shrink(1); @@ -188,9 +212,11 @@ public class RollyPollyEntity extends TamableAnimal implements GeoEntity { } else { this.level().broadcastEntityEvent(this, (byte) 6); } - } else { + } else if (this.getHealth() < this.getMaxHealth()) { this.heal(4.0F); this.level().broadcastEntityEvent(this, (byte) 7); + } else { + this.setInLove(player); } } return InteractionResult.sidedSuccess(this.level().isClientSide); @@ -217,7 +243,7 @@ public class RollyPollyEntity extends TamableAnimal implements GeoEntity { @Override @Nullable public AgeableMob getBreedOffspring(ServerLevel level, AgeableMob otherParent) { - return null; + return com.craisinlord.antarchy.content.AntarchyObjects.ROLLY_POLLY.get().create(level); } private static boolean isCompostable(ItemStack stack) { @@ -291,7 +317,6 @@ public class RollyPollyEntity extends TamableAnimal implements GeoEntity { amount *= 0.25F; } boolean hurt = super.hurt(source, amount); - // Wild rolly pollies curl up defensively when attacked if (hurt && !this.level().isClientSide && !this.isTame() && this.isAlive() && !this.isRolled() && this.rollTransitionTicks <= 0) { this.defensiveCurlTicks = DEFENSIVE_CURL_TICKS; @@ -330,7 +355,7 @@ public class RollyPollyEntity extends TamableAnimal implements GeoEntity { } private void tickRollSound() { - if (!this.isRolled() || this.rollTransitionTicks > 0 || this.getDeltaMovement().horizontalDistanceSqr() <= 0.003D) { + if (!this.isRolled() || this.rollTransitionTicks > 0 || this.toLocal(this.getDeltaMovement()).horizontalDistanceSqr() <= 0.003D) { this.rollSoundCooldown = 0; return; } @@ -683,9 +708,12 @@ public class RollyPollyEntity extends TamableAnimal implements GeoEntity { return; } - double dx = RollyPollyEntity.this.getX() - target.getX(); - double dz = RollyPollyEntity.this.getZ() - target.getZ(); - target.knockback(AntarchySettings.rollyPollyBowlingKnockback(), dx, dz); + Vec3 localAway = RollyPollyEntity.this.toLocalPlane(RollyPollyEntity.this.position().subtract(target.position())); + if (localAway.lengthSqr() < 1.0E-4D) { + localAway = new Vec3(1.0D, 0.0D, 0.0D); + } + Vec3 worldAway = RollyPollyEntity.this.toWorld(localAway.normalize()); + target.knockback(AntarchySettings.rollyPollyBowlingKnockback(), worldAway.x, worldAway.z); RollyPollyEntity.this.playSound(AntarchySoundEvents.ROLLY_POLLY_ROLL.get(), 1.0F, 0.8F + RollyPollyEntity.this.random.nextFloat() * 0.2F); } } @@ -831,8 +859,8 @@ public class RollyPollyEntity extends TamableAnimal implements GeoEntity { RollyPollyEntity.this.startUnroll(); } } else { - RollyPollyEntity.this.getNavigation().moveTo( - this.bedPos.getX() + 0.5D, this.bedPos.getY() + 1.0D, this.bedPos.getZ() + 0.5D, 1.1D); + Vec3 bedTarget = Vec3.atCenterOf(this.bedPos).add(RollyPollyEntity.this.toWorld(0.0D, 0.5D, 0.0D)); + RollyPollyEntity.this.getNavigation().moveTo(bedTarget.x, bedTarget.y, bedTarget.z, 1.1D); } return; } @@ -844,4 +872,25 @@ public class RollyPollyEntity extends TamableAnimal implements GeoEntity { } } } + + private GravityDirection gravityDirection() { + return GravityApi.getGravityDirection(this); + } + + private Vec3 toLocal(Vec3 worldVector) { + return GravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); + } + + private Vec3 toWorld(Vec3 localVector) { + return GravityRotationUtil.vecPlayerToWorld(localVector, this.gravityDirection()); + } + + private Vec3 toWorld(double x, double y, double z) { + return GravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); + } + + private Vec3 toLocalPlane(Vec3 worldVector) { + Vec3 local = this.toLocal(worldVector); + return new Vec3(local.x, 0.0D, local.z); + } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ScorpionEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ScorpionEntity.java index 5b72140d..64c36495 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ScorpionEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ScorpionEntity.java @@ -2,6 +2,10 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; +import com.craisinlord.anthology.gravity.GravityRotationUtil; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.syncher.EntityDataAccessor; @@ -34,6 +38,9 @@ import net.minecraft.world.entity.monster.Monster; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; import software.bernie.geckolib.animatable.GeoEntity; import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; import software.bernie.geckolib.core.animation.AnimatableManager; @@ -44,11 +51,18 @@ import software.bernie.geckolib.core.animation.RawAnimation; import software.bernie.geckolib.util.GeckoLibUtil; import org.jetbrains.annotations.Nullable; +import java.util.UUID; + public class ScorpionEntity extends Monster implements GeoEntity { + private static final ResourceKey DREAM_DUNES = ResourceKey.create( + Registries.BIOME, + new ResourceLocation("antarchy", "dream_dunes") + ); private static final byte ATTACK_ANIM_EVENT = 4; private static final EntityDataAccessor TEXTURE_VARIANT = SynchedEntityData.defineId(ScorpionEntity.class, EntityDataSerializers.INT); private static final String TEXTURE_VARIANT_KEY = "TextureVariant"; + private static final String SUMMON_OWNER_KEY = "SummonOwner"; public static final int BLUE_VARIANT = 0; public static final int GREEN_VARIANT = 1; @@ -67,12 +81,18 @@ public class ScorpionEntity extends Monster implements GeoEntity { private int attackCooldownTicks = 0; private boolean attackDamageApplied = false; @Nullable private LivingEntity attackTarget; + @Nullable private UUID summonOwner; public ScorpionEntity(EntityType entityType, Level level) { super(entityType, level); this.xpReward = 5; } + @Override + public boolean fireImmune() { + return true; + } + public static AttributeSupplier.Builder createAttributes() { return Mob.createMobAttributes() .add(Attributes.MAX_HEALTH, AntarchySettings.scorpionHealth()) @@ -90,6 +110,12 @@ public class ScorpionEntity extends Monster implements GeoEntity { || spawnReason == MobSpawnType.COMMAND) { return true; } + if (pos.getY() >= 0 && level.getBiome(pos).is(DREAM_DUNES) && random.nextBoolean()) { + return false; + } + if (ThoraxisUndersideManager.isUndersideCeilingSpawn(entityType, level, pos)) { + return level.getDifficulty() != Difficulty.PEACEFUL; + } return level.getDifficulty() != Difficulty.PEACEFUL && Monster.checkMonsterSpawnRules(entityType, level, spawnReason, pos, random); } @@ -115,6 +141,10 @@ public class ScorpionEntity extends Monster implements GeoEntity { @Override public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnType, @Nullable SpawnGroupData spawnGroupData, @org.jetbrains.annotations.Nullable net.minecraft.nbt.CompoundTag dataTag) { this.assignRandomTextureVariant(); + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.scorpionHealth()); + if (ThoraxisUndersideManager.isUndersideCeilingSpot(level, this.blockPosition(), this.getType())) { + ThoraxisUndersideManager.applyUndersideInversion(this); + } return super.finalizeSpawn(level, difficulty, spawnType, spawnGroupData, dataTag); } @@ -125,6 +155,10 @@ public class ScorpionEntity extends Monster implements GeoEntity { this.attackCooldownTicks--; } if (this.attackAnimTicks > 0) { + if (!this.isAlive()) { + this.resetAttackState(); + return; + } if (!this.level().isClientSide) { this.tickAttackWindup(); } @@ -167,7 +201,8 @@ public class ScorpionEntity extends Monster implements GeoEntity { this.getLookControl().setLookAt(this.attackTarget, 30.0F, 30.0F); if (!this.attackDamageApplied - && this.attackAnimTicks == ATTACK_HIT_TICK + && this.attackAnimTicks > 0 + && this.attackAnimTicks <= ATTACK_HIT_TICK && this.distanceToSqr(this.attackTarget) <= this.getAttackReachSqr(this.attackTarget)) { this.attackDamageApplied = true; this.doHurtTarget(this.attackTarget); @@ -190,13 +225,16 @@ public class ScorpionEntity extends Monster implements GeoEntity { } private void commitLunge(LivingEntity target, double horizontalSpeed, double verticalSpeed) { - Vec3 lunge = target.position().subtract(this.position()); - Vec3 horizontal = new Vec3(lunge.x, 0.0D, lunge.z); + GravityDirection direction = GravityApi.getGravityDirection(this); + Vec3 localLunge = GravityRotationUtil.vecWorldToPlayer(target.position().subtract(this.position()), direction); + Vec3 horizontal = new Vec3(localLunge.x, 0.0D, localLunge.z); if (horizontal.lengthSqr() < 1.0E-4D) { return; } horizontal = horizontal.normalize().scale(horizontalSpeed); - this.setDeltaMovement(this.getDeltaMovement().add(horizontal.x, verticalSpeed, horizontal.z)); + Vec3 localImpulse = new Vec3(horizontal.x, verticalSpeed, horizontal.z); + Vec3 worldImpulse = GravityRotationUtil.vecPlayerToWorld(localImpulse, direction); + this.setDeltaMovement(this.getDeltaMovement().add(worldImpulse.x, worldImpulse.y, worldImpulse.z)); this.hasImpulse = true; } @@ -239,6 +277,9 @@ public class ScorpionEntity extends Monster implements GeoEntity { public void addAdditionalSaveData(CompoundTag tag) { super.addAdditionalSaveData(tag); tag.putInt(TEXTURE_VARIANT_KEY, this.getTextureVariant()); + if (this.summonOwner != null) { + tag.putUUID(SUMMON_OWNER_KEY, this.summonOwner); + } } @Override @@ -249,6 +290,7 @@ public class ScorpionEntity extends Monster implements GeoEntity { } else { this.assignRandomTextureVariant(); } + this.summonOwner = tag.hasUUID(SUMMON_OWNER_KEY) ? tag.getUUID(SUMMON_OWNER_KEY) : null; } @Override @@ -279,6 +321,19 @@ public class ScorpionEntity extends Monster implements GeoEntity { this.entityData.set(TEXTURE_VARIANT, variant == GREEN_VARIANT ? GREEN_VARIANT : BLUE_VARIANT); } + public void setSummonOwner(@Nullable UUID summonOwner) { + this.summonOwner = summonOwner; + } + + @Nullable + public UUID getSummonOwner() { + return this.summonOwner; + } + + public boolean isSummonedFor(UUID ownerId) { + return ownerId.equals(this.summonOwner); + } + private void assignRandomTextureVariant() { this.setTextureVariant(this.random.nextBoolean() ? BLUE_VARIANT : GREEN_VARIANT); } @@ -293,6 +348,18 @@ public class ScorpionEntity extends Monster implements GeoEntity { if (ScorpionEntity.this.attackTarget != null) { ScorpionEntity.this.getLookControl().setLookAt(ScorpionEntity.this.attackTarget, 30.0F, 30.0F); } + if (ScorpionEntity.this.isAttackLocked()) { + ScorpionEntity.this.getNavigation().stop(); + return; + } + LivingEntity target = ScorpionEntity.this.getTarget(); + if (target != null && ThoraxisUndersideManager.shouldInvertInUnderside(ScorpionEntity.this)) { + ScorpionEntity.this.getNavigation().stop(); + ScorpionEntity.this.getMoveControl().setWantedPosition( + target.getX(), target.getY(), target.getZ(), 1.15D); + this.checkAndPerformAttack(target, ScorpionEntity.this.distanceToSqr(target)); + return; + } super.tick(); } @@ -306,8 +373,9 @@ public class ScorpionEntity extends Monster implements GeoEntity { if (ScorpionEntity.this.isAttackLocked()) { return; } - if (distToEnemySqr <= this.getAttackReachSqr(enemy) && this.isTimeToAttack() && ScorpionEntity.this.attackCooldownTicks <= 0) { - this.resetAttackCooldown(); + if (this.isTimeToAttack() && distToEnemySqr <= this.getAttackReachSqr(enemy) + && ScorpionEntity.this.getSensing().hasLineOfSight(enemy) + && ScorpionEntity.this.attackCooldownTicks <= 0) { ScorpionEntity.this.beginAttack(enemy); return; } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/SkulkingFrightEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/SkulkingFrightEntity.java new file mode 100644 index 00000000..4a14f371 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/SkulkingFrightEntity.java @@ -0,0 +1,210 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.RandomSource; +import net.minecraft.world.Difficulty; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.ai.control.FlyingMoveControl; +import net.minecraft.world.entity.ai.goal.FloatGoal; +import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; +import net.minecraft.world.entity.ai.goal.MeleeAttackGoal; +import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; +import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal; +import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; +import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; +import net.minecraft.world.entity.ai.navigation.FlyingPathNavigation; +import net.minecraft.world.entity.ai.navigation.PathNavigation; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.entity.player.Player; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import software.bernie.geckolib.animatable.GeoEntity; +import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.core.animation.AnimatableManager; +import software.bernie.geckolib.core.animation.AnimationController; +import software.bernie.geckolib.core.animation.AnimationState; +import software.bernie.geckolib.core.object.PlayState; +import software.bernie.geckolib.core.animation.RawAnimation; +import software.bernie.geckolib.util.GeckoLibUtil; + +public class SkulkingFrightEntity extends Monster implements GeoEntity { + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); + private static final RawAnimation FLY_ANIM = RawAnimation.begin().thenLoop("fly"); + private static final RawAnimation ATTACK_LAND_ANIM = RawAnimation.begin().thenLoop("attackland"); + private static final RawAnimation ATTACK_AIR_ANIM = RawAnimation.begin().thenLoop("attackair"); + private static final byte ATTACK_ANIM_EVENT = 5; + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private int attackAnimTicks = 0; + + public SkulkingFrightEntity(EntityType type, Level level) { + super(type, level); + this.moveControl = new FlyingMoveControl(this, 10, true); + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.skulkingFrightHealth()) + .add(Attributes.MOVEMENT_SPEED, 0.35D) + .add(Attributes.ATTACK_DAMAGE, AntarchySettings.skulkingFrightAttackDamage()) + .add(Attributes.FOLLOW_RANGE, 16.0D) + .add(Attributes.FLYING_SPEED, 0.55D); + } + + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, + MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData, @org.jetbrains.annotations.Nullable net.minecraft.nbt.CompoundTag dataTag) { + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.skulkingFrightHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData, dataTag); + } + + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { + if (spawnReason == MobSpawnType.SPAWN_EGG || spawnReason == MobSpawnType.SPAWNER || spawnReason == MobSpawnType.COMMAND) { + return true; + } + BlockPos belowPos = pos.below(); + BlockPos abovePos = pos.above(); + BlockState belowState = level.getBlockState(belowPos); + BlockState aboveState = level.getBlockState(abovePos); + boolean floorSupport = !belowState.is(Blocks.BEDROCK) + && belowState.blocksMotion() + && belowState.isFaceSturdy(level, belowPos, Direction.UP) + && belowState.isCollisionShapeFullBlock(level, belowPos); + boolean ceilingSupport = !aboveState.is(Blocks.BEDROCK) + && aboveState.blocksMotion() + && aboveState.isFaceSturdy(level, abovePos, Direction.DOWN) + && aboveState.isCollisionShapeFullBlock(level, abovePos); + + return level.getDifficulty() != Difficulty.PEACEFUL + && (floorSupport || ceilingSupport) + && level.isEmptyBlock(pos) + && (level.isEmptyBlock(pos.above()) || level.isEmptyBlock(pos.below())) + && Monster.checkMonsterSpawnRules(entityType, level, spawnReason, pos, random); + } + + @Override + protected PathNavigation createNavigation(Level level) { + FlyingPathNavigation nav = new FlyingPathNavigation(this, level); + nav.setCanOpenDoors(false); + nav.setCanFloat(true); + nav.setCanPassDoors(true); + return nav; + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); + this.goalSelector.addGoal(1, new MeleeAttackGoal(this, 1.0D, true)); + this.goalSelector.addGoal(2, new WaterAvoidingRandomStrollGoal(this, 0.85D)); + this.goalSelector.addGoal(3, new LookAtPlayerGoal(this, Player.class, 8.0F)); + this.goalSelector.addGoal(4, new RandomLookAroundGoal(this)); + this.targetSelector.addGoal(1, new HurtByTargetGoal(this)); + this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 3, this::mainAnimController) + .triggerableAnim("attackland", ATTACK_LAND_ANIM) + .triggerableAnim("attackair", ATTACK_AIR_ANIM)); + } + + private PlayState mainAnimController(AnimationState state) { + if (attackAnimTicks > 0) { + if (!this.onGround()) { + return state.setAndContinue(ATTACK_AIR_ANIM); + } + return state.setAndContinue(ATTACK_LAND_ANIM); + } + if (!this.onGround()) { + return state.setAndContinue(FLY_ANIM); + } + if (state.isMoving()) { + return state.setAndContinue(WALK_ANIM); + } + return state.setAndContinue(IDLE_ANIM); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return geoCache; + } + + @Override + public boolean doHurtTarget(net.minecraft.world.entity.Entity target) { + boolean result = super.doHurtTarget(target); + if (result) { + this.playSound(AntarchySoundEvents.SKULKING_FRIGHT_BITE.get(), 1.0F, 0.95F + this.random.nextFloat() * 0.1F); + this.setAttackAnimTicks(20); + this.level().broadcastEntityEvent(this, ATTACK_ANIM_EVENT); + } + return result; + } + + @Override + protected SoundEvent getAmbientSound() { + return AntarchySoundEvents.SKULKING_FRIGHT_SNARL.get(); + } + + @Override + protected SoundEvent getHurtSound(net.minecraft.world.damagesource.DamageSource source) { + return AntarchySoundEvents.SKULKING_FRIGHT_HURT.get(); + } + + @Override + protected SoundEvent getDeathSound() { + return AntarchySoundEvents.SKULKING_FRIGHT_HURT.get(); + } + + @Override + public void handleEntityEvent(byte id) { + if (id == ATTACK_ANIM_EVENT) { + this.setAttackAnimTicks(20); + return; + } + super.handleEntityEvent(id); + } + + @Override + public void tick() { + CavarynBurrowingMobBehavior.moveOutOfBlocks(this); + super.tick(); + CavarynBurrowingMobBehavior.moveOutOfBlocks(this); + if (!this.level().isClientSide() && !this.onGround() && this.tickCount % 80 == 0) { + this.playSound(AntarchySoundEvents.SKULKING_FRIGHT_FLY_LOOP.get(), 0.45F, 0.95F + this.random.nextFloat() * 0.1F); + } + if (attackAnimTicks > 0) this.setAttackAnimTicks(attackAnimTicks - 1); + } + + private void setAttackAnimTicks(int ticks) { + int clamped = Math.max(0, ticks); + if (this.attackAnimTicks <= 0 && clamped > 0) { + this.triggerAnim("main_controller", this.onGround() ? "attackland" : "attackair"); + } else if (this.attackAnimTicks > 0 && clamped <= 0) { + this.stopTriggeredAnimation("main_controller", "attackland"); + this.stopTriggeredAnimation("main_controller", "attackair"); + } + this.attackAnimTicks = clamped; + } + + @Override + public boolean isInWall() { + return false; + } + + @Override + public boolean causeFallDamage(float fallDistance, float multiplier, net.minecraft.world.damagesource.DamageSource source) { + return false; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/SpitBugEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/SpitBugEntity.java index 71ce6756..2d18516e 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/SpitBugEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/SpitBugEntity.java @@ -3,6 +3,9 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; +import com.craisinlord.anthology.gravity.GravityRotationUtil; import net.minecraft.core.BlockPos; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.network.syncher.EntityDataAccessor; @@ -24,7 +27,6 @@ import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.ai.goal.FloatGoal; import net.minecraft.world.entity.ai.goal.Goal; import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; -import net.minecraft.world.entity.ai.goal.MeleeAttackGoal; import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal; import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; @@ -59,7 +61,6 @@ public class SpitBugEntity extends Monster implements GeoEntity { private static final double ATTACK_DAMAGE = 5.0D; private static final double FOLLOW_RANGE = 24.0D; private static final double SPIT_RANGE_SQR = 14.0D * 14.0D; - private static final double MELEE_RANGE_SQR = 3.5D * 3.5D; private static final int SPIT_COOLDOWN_TICKS = 55; private static final int SPIT_ANIMATION_TICKS = 18; private static final int SPIT_RELEASE_TICKS = 8; @@ -91,7 +92,7 @@ public class SpitBugEntity extends Monster implements GeoEntity { } return level.getDifficulty() != Difficulty.PEACEFUL && level.isEmptyBlock(pos) - && level.isEmptyBlock(pos.above()) + && (level.isEmptyBlock(pos.above()) || level.isEmptyBlock(pos.below())) && Monster.checkMonsterSpawnRules(entityType, level, spawnReason, pos, random); } @@ -105,10 +106,9 @@ public class SpitBugEntity extends Monster implements GeoEntity { protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); this.goalSelector.addGoal(1, new SpitAttackGoal()); - this.goalSelector.addGoal(2, new MeleeAttackGoal(this, 1.0D, false)); - this.goalSelector.addGoal(3, new WaterAvoidingRandomStrollGoal(this, 0.9D)); - this.goalSelector.addGoal(4, new LookAtPlayerGoal(this, Player.class, 12.0F)); - this.goalSelector.addGoal(5, new RandomLookAroundGoal(this)); + this.goalSelector.addGoal(2, new WaterAvoidingRandomStrollGoal(this, 0.9D)); + this.goalSelector.addGoal(3, new LookAtPlayerGoal(this, Player.class, 12.0F)); + this.goalSelector.addGoal(4, new RandomLookAroundGoal(this)); this.targetSelector.addGoal(1, new HurtByTargetGoal(this)); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); } @@ -193,8 +193,7 @@ public class SpitBugEntity extends Monster implements GeoEntity { return this.spitCooldownTicks <= 0 && this.spitAnimationTicks <= 0 && this.hasLineOfSight(target) - && this.distanceToSqr(target) <= SPIT_RANGE_SQR - && this.distanceToSqr(target) > MELEE_RANGE_SQR; + && this.distanceToSqr(target) <= SPIT_RANGE_SQR; } private void startSpitAttack() { @@ -225,7 +224,7 @@ public class SpitBugEntity extends Monster implements GeoEntity { SpitBugProjectileEntity projectile = new SpitBugProjectileEntity(projectileType, this, serverLevel); Vec3 origin = this.position() - .add(0.0D, this.getBbHeight() * 0.55D, 0.0D) + .add(this.toWorld(0.0D, this.getBbHeight() * 0.55D, 0.0D)) .add(this.getViewVector(0.0F).scale(1.35D)); Vec3 aimPoint = target.getEyePosition().add(target.getDeltaMovement().scale(0.45D)); Vec3 direction = aimPoint.subtract(origin).normalize(); @@ -236,6 +235,14 @@ public class SpitBugEntity extends Monster implements GeoEntity { this.playSound(AntarchySoundEvents.SPIT_BUG_SPIT.get(), 1.0F, 0.85F + this.random.nextFloat() * 0.15F); } + private GravityDirection gravityDirection() { + return GravityApi.getGravityDirection(this); + } + + private Vec3 toWorld(double x, double y, double z) { + return GravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); + } + private final class SpitAttackGoal extends Goal { SpitAttackGoal() { this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK)); @@ -261,6 +268,11 @@ public class SpitBugEntity extends Monster implements GeoEntity { SpitBugEntity.this.getLookControl().setLookAt(target, 30.0F, 30.0F); + if (SpitBugEntity.this.spitAnimationTicks > 0) { + SpitBugEntity.this.getNavigation().stop(); + return; + } + if (SpitBugEntity.this.canSpitAt(target)) { SpitBugEntity.this.getNavigation().stop(); SpitBugEntity.this.startSpitAttack(); diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/SpringbugEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/SpringbugEntity.java new file mode 100644 index 00000000..7d219e8c --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/SpringbugEntity.java @@ -0,0 +1,980 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; +import com.craisinlord.anthology.gravity.GravityRotationUtil; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.syncher.EntityDataAccessor; +import net.minecraft.network.syncher.EntityDataSerializers; +import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.util.ByIdMap; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.util.StringRepresentable; +import net.minecraft.world.Difficulty; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.entity.MoverType; +import net.minecraft.world.entity.SpawnGroupData; +import net.minecraft.world.entity.ai.attributes.AttributeInstance; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.ai.goal.FloatGoal; +import net.minecraft.world.entity.ai.goal.Goal; +import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; +import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; +import net.minecraft.world.entity.ai.goal.RandomStrollGoal; +import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; +import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.Nullable; +import software.bernie.geckolib.animatable.GeoEntity; +import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.core.animation.AnimatableManager; +import software.bernie.geckolib.core.animation.AnimationController; +import software.bernie.geckolib.core.animation.AnimationState; +import software.bernie.geckolib.core.object.PlayState; +import software.bernie.geckolib.core.animation.RawAnimation; +import software.bernie.geckolib.util.GeckoLibUtil; + +import java.util.EnumSet; +import java.util.function.IntFunction; + +public class SpringbugEntity extends Monster implements GeoEntity { + private static final EntityDataAccessor CAMOUFLAGED = + SynchedEntityData.defineId(SpringbugEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor CLINGING_TO_CEILING = + SynchedEntityData.defineId(SpringbugEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor ATTACK_STATE = + SynchedEntityData.defineId(SpringbugEntity.class, EntityDataSerializers.INT); + + private static final String POUNCE_COOLDOWN_KEY = "PounceCooldown"; + private static final String RECOVERY_TICKS_KEY = "RecoveryTicks"; + private static final String POUNCE_TICKS_KEY = "PounceTicks"; + private static final String LEAPING_TICKS_KEY = "LeapingTicks"; + + private static final double DEFAULT_MOVEMENT_SPEED = 0.25D; + private static final double DEFAULT_FOLLOW_RANGE = 16.0D; + private static final double MELEE_WALK_RANGE = 4.0D; + private static final double CHASE_LEAP_RANGE_SQR = 8.0D * 8.0D; + private static final int DEFAULT_POUNCE_COOLDOWN = 60; + private static final int POUNCE_PREFERENCE_CHANCE = 7; + private static final int DEFAULT_RECOVERY_TICKS = 20; + private static final int CHASE_JUMP_COOLDOWN = 25; + private static final double POUNCE_HORIZONTAL_SPEED = 0.92D; + private static final double POUNCE_UPWARD_SPEED = 0.75D; + private static final double CEILING_DROP_HORIZONTAL_SPEED = 1.08D; + private static final double CEILING_DROP_UPWARD_SPEED = 0.18D; + private static final double CHASE_LEAP_HORIZONTAL = 1.5D; + private static final double CHASE_LEAP_VERTICAL = 0.55D; + private static final double QUICK_MOVE_SQR = 0.14D * 0.14D; + private static final double POUNCE_LAND_DAMAGE_RANGE = 5.0D; + private static final int MAX_POUNCE_TICKS = 60; + private static final int CEILING_HORIZONTAL_SEARCH_RANGE = 6; + private static final int CEILING_EXTRA_SEARCH_HEIGHT = 8; + private static final int CEILING_DIRECT_EXTRA_HEIGHT = 2; + private static final int CEILING_SEARCH_COOLDOWN = 35; + private static final int CAMOUFLAGE_WARMUP_TICKS = 16; + private static final double CAMOUFLAGE_PLAYER_RANGE = 24.0D; + private static final double CEILING_ALIGN_DISTANCE_SQR = 1.35D * 1.35D; + private static final double CEILING_AMBUSH_RANGE_SQR = 7.0D * 7.0D; + private static final double CEILING_TRIGGER_RANGE_SQR = 5.0D * 5.0D; + + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); + private static final RawAnimation JUMP_ANIM = RawAnimation.begin().thenPlay("jump_start").thenLoop("jump_loop"); + private static final RawAnimation JUMP_END_ANIM = RawAnimation.begin().thenPlay("jump_end"); + private static final RawAnimation HANGING_ANIM = RawAnimation.begin().thenLoop("hanging"); + private static final RawAnimation ATTACK_ANIM = RawAnimation.begin().thenPlay("attack"); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + private int pounceCooldownTicks; + private int recoveryTicks; + private int pounceTicks; + private int leapingTicks; + private int chaseJumpCooldownTicks; + private int ceilingSearchCooldownTicks; + private int camouflageWarmupTicks; + private boolean preferPounceThisWindow = true; + private float visualAlpha = 1.0F; + private float previousVisualAlpha = 1.0F; + + public SpringbugEntity(EntityType entityType, Level level) { + super(entityType, level); + this.xpReward = 6; + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.springbugHealth()) + .add(Attributes.ATTACK_DAMAGE, AntarchySettings.springbugPounceDamage()) + .add(Attributes.MOVEMENT_SPEED, DEFAULT_MOVEMENT_SPEED) + .add(Attributes.FOLLOW_RANGE, DEFAULT_FOLLOW_RANGE); + } + + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { + if (spawnReason == MobSpawnType.SPAWN_EGG || spawnReason == MobSpawnType.SPAWNER || spawnReason == MobSpawnType.COMMAND) { + return true; + } + return level.getDifficulty() != Difficulty.PEACEFUL + && Monster.checkMonsterSpawnRules(entityType, level, spawnReason, pos, random); + } + + @Override + protected void defineSynchedData() { + super.defineSynchedData(); + this.entityData.define(CAMOUFLAGED, false); + this.entityData.define(CLINGING_TO_CEILING, false); + this.entityData.define(ATTACK_STATE, AttackState.GROUND.id()); + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); + this.goalSelector.addGoal(1, new PounceAttackGoal()); + this.goalSelector.addGoal(2, new CloseMeleeGoal()); + this.goalSelector.addGoal(3, new HideOnCeilingGoal()); + this.goalSelector.addGoal(4, new ChaseTargetGoal()); + this.goalSelector.addGoal(5, new WanderGoal()); + this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 10.0F)); + this.goalSelector.addGoal(7, new RandomLookAroundGoal(this)); + this.targetSelector.addGoal(1, new HurtByTargetGoal(this)); + this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 2, this::mainAnimController) + .triggerableAnim("hanging", HANGING_ANIM) + .triggerableAnim("jump", JUMP_ANIM) + .triggerableAnim("jump_end", JUMP_END_ANIM)); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putInt(POUNCE_COOLDOWN_KEY, this.pounceCooldownTicks); + tag.putInt(RECOVERY_TICKS_KEY, this.recoveryTicks); + tag.putInt(POUNCE_TICKS_KEY, this.pounceTicks); + tag.putInt(LEAPING_TICKS_KEY, this.leapingTicks); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + this.pounceCooldownTicks = tag.getInt(POUNCE_COOLDOWN_KEY); + this.recoveryTicks = tag.getInt(RECOVERY_TICKS_KEY); + this.pounceTicks = tag.getInt(POUNCE_TICKS_KEY); + this.leapingTicks = tag.getInt(LEAPING_TICKS_KEY); + } + + @Override + @Nullable + public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData spawnGroupData, @org.jetbrains.annotations.Nullable net.minecraft.nbt.CompoundTag dataTag) { + AttributeInstance maxHealthAttribute = this.getAttribute(Attributes.MAX_HEALTH); + if (maxHealthAttribute != null) { + maxHealthAttribute.setBaseValue(AntarchySettings.springbugHealth()); + } + this.setHealth((float) AntarchySettings.springbugHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData, dataTag); + } + + @Override + public void tick() { + this.previousVisualAlpha = this.visualAlpha; + float targetAlpha = this.getTargetVisualAlpha(); + if (this.visualAlpha != targetAlpha) { + this.visualAlpha += (targetAlpha - this.visualAlpha) * 0.25F; + } + + CavarynBurrowingMobBehavior.moveOutOfBlocks(this); + super.tick(); + CavarynBurrowingMobBehavior.moveOutOfBlocks(this); + + if (this.level().isClientSide) { + return; + } + + if (this.pounceCooldownTicks > 0) { + this.pounceCooldownTicks--; + if (this.pounceCooldownTicks == 0) { + this.preferPounceThisWindow = this.random.nextInt(10) < POUNCE_PREFERENCE_CHANCE; + } + } + if (this.recoveryTicks > 0) { + this.recoveryTicks--; + } + if (this.chaseJumpCooldownTicks > 0) { + this.chaseJumpCooldownTicks--; + } + if (this.ceilingSearchCooldownTicks > 0) { + this.ceilingSearchCooldownTicks--; + } + + if (this.isClingingToCeiling()) { + this.tickClinging(); + } else if (this.isPouncing()) { + this.tickPouncing(); + } else if (this.isLeapingToCeiling()) { + this.tickLeapingToCeiling(); + } else { + this.setNoGravity(false); + this.noPhysics = false; + if (this.getAttackState() != AttackState.RECOVERING || this.recoveryTicks <= 0) { + this.setAttackState(AttackState.GROUND); + } + } + + this.updateCamouflage(); + } + + @Override + public boolean isInWall() { + return false; + } + + @Override + public void travel(Vec3 travelVector) { + if (this.isClingingToCeiling()) { + this.setDeltaMovement(Vec3.ZERO); + return; + } + super.travel(travelVector); + } + + @Override + public boolean hurt(DamageSource source, float amount) { + boolean hurt = super.hurt(source, amount); + if (!hurt) { + return false; + } + + this.setCamouflaged(false); + this.recoveryTicks = Math.max(this.recoveryTicks, DEFAULT_RECOVERY_TICKS); + if (this.isClingingToCeiling()) { + this.stopClinging(); + } + if (this.isPouncing()) { + this.finishPounce(false); + } + if (this.isLeapingToCeiling()) { + this.cancelLeap(); + } + return true; + } + + @Override + public boolean causeFallDamage(float fallDistance, float multiplier, DamageSource source) { + return false; + } + + @Override + public boolean doHurtTarget(Entity target) { + return target instanceof LivingEntity livingTarget && this.level() instanceof ServerLevel serverLevel + ? livingTarget.hurt(AntarchyDamageSources.springbugJump(serverLevel, this), (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE)) + : super.doHurtTarget(target); + } + + @Override + protected SoundEvent getAmbientSound() { + return AntarchySoundEvents.SPRINGBUG_IDLE.get(); + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return AntarchySoundEvents.SPRINGBUG_HURT.get(); + } + + @Override + protected SoundEvent getDeathSound() { + return AntarchySoundEvents.SPRINGBUG_HURT.get(); + } + + @Override + protected void playStepSound(BlockPos pos, BlockState blockState) { + this.playSound(SoundEvents.SPIDER_STEP, 0.12F, 1.1F); + } + + public boolean isCamouflaged() { + return this.entityData.get(CAMOUFLAGED); + } + + public boolean isClingingToCeiling() { + return this.entityData.get(CLINGING_TO_CEILING); + } + + public boolean isPouncing() { + return this.getAttackState() == AttackState.POUNCING; + } + + public boolean isLeapingToCeiling() { + return this.getAttackState() == AttackState.LEAPING_TO_CEILING; + } + + public float getVisualAlpha(float partialTick) { + return Mth.lerp(partialTick, this.previousVisualAlpha, this.visualAlpha); + } + + public AttackState getAttackState() { + return AttackState.BY_ID.apply(this.entityData.get(ATTACK_STATE)); + } + + private void setCamouflaged(boolean value) { + this.entityData.set(CAMOUFLAGED, value); + } + + private void setClingingToCeiling(boolean value) { + this.entityData.set(CLINGING_TO_CEILING, value); + } + + private void setAttackState(AttackState state) { + AttackState previous = this.getAttackState(); + if (previous == state) { + return; + } + this.entityData.set(ATTACK_STATE, state.id()); + + String trigger = switch (state) { + case CLINGING -> "hanging"; + case POUNCING, LEAPING_TO_CEILING -> "jump"; + case RECOVERING -> "jump_end"; + default -> null; + }; + if (trigger != null) { + this.triggerAnim("main_controller", trigger); + } + + if (previous == AttackState.CLINGING) { + this.stopTriggeredAnimation("main_controller", "hanging"); + } + if ((previous == AttackState.POUNCING || previous == AttackState.LEAPING_TO_CEILING) + && state != AttackState.POUNCING && state != AttackState.LEAPING_TO_CEILING) { + this.stopTriggeredAnimation("main_controller", "jump"); + } + } + + private float getTargetVisualAlpha() { + return this.isCamouflaged() ? (float) AntarchySettings.springbugCamouflageAlpha() : 1.0F; + } + + private PlayState mainAnimController(AnimationState state) { + AttackState attackState = this.getAttackState(); + if (attackState == AttackState.CLINGING) { + return state.setAndContinue(HANGING_ANIM); + } + if ((attackState == AttackState.POUNCING || attackState == AttackState.LEAPING_TO_CEILING) && !this.onGround()) { + return state.setAndContinue(JUMP_ANIM); + } + if (attackState == AttackState.RECOVERING) { + return state.setAndContinue(JUMP_END_ANIM); + } + return state.setAndContinue(state.isMoving() ? WALK_ANIM : IDLE_ANIM); + } + + private void tickClinging() { + BlockPos clingPos = this.findCeilingWithinRange(this.directCeilingSearchHeight()); + if (clingPos == null) { + this.stopClinging(); + return; + } + + this.setAttackState(AttackState.CLINGING); + this.setCamouflaged(true); + this.setNoGravity(true); + this.noPhysics = true; + this.getNavigation().stop(); + this.setDeltaMovement(Vec3.ZERO); + this.move(MoverType.SELF, Vec3.ZERO); + this.setPos(this.getX(), GravityApi.isGravityInverted(this) ? clingPos.getY() + 1.01D : clingPos.getY() - this.getBbHeight() - 0.01D, this.getZ()); + } + + private void tickPouncing() { + this.setAttackState(AttackState.POUNCING); + this.setCamouflaged(false); + this.pounceTicks++; + + if ((this.onGround() && this.pounceTicks > 8) || this.pounceTicks > MAX_POUNCE_TICKS) { + LivingEntity target = this.getTarget(); + if (target != null && target.isAlive() && this.distanceToSqr(target) <= POUNCE_LAND_DAMAGE_RANGE * POUNCE_LAND_DAMAGE_RANGE) { + if (this.level() instanceof ServerLevel serverLevel) { + target.hurt(AntarchyDamageSources.springbugJump(serverLevel, this), (float) AntarchySettings.springbugPounceDamage()); + } else { + target.hurt(this.damageSources().mobAttack(this), (float) AntarchySettings.springbugPounceDamage()); + } + } + this.finishPounce(false); + } + } + + private void tickLeapingToCeiling() { + this.leapingTicks++; + if (this.leapingTicks > 80) { + this.cancelLeap(); + return; + } + this.getNavigation().stop(); + BlockPos ceiling = this.findCeilingWithinRange(this.directCeilingSearchHeight()); + if (ceiling != null) { + this.leapingTicks = 0; + this.beginClinging(); + } + } + + private void updateCamouflage() { + if (this.isPouncing() || this.isLeapingToCeiling()) { + this.setCamouflaged(false); + this.camouflageWarmupTicks = 0; + return; + } + + if (this.isClingingToCeiling()) { + this.setCamouflaged(true); + this.camouflageWarmupTicks = CAMOUFLAGE_WARMUP_TICKS; + return; + } + + boolean playerNearby = this.level().getNearestPlayer(this, CAMOUFLAGE_PLAYER_RANGE) != null; + boolean idle = this.getTarget() == null + && this.recoveryTicks <= 0 + && this.toLocal(this.getDeltaMovement()).horizontalDistanceSqr() < 0.003D + && this.onGround(); + boolean movingQuickly = this.getDeltaMovement().lengthSqr() > QUICK_MOVE_SQR; + boolean inAmbushCover = this.findCeilingWithinRange(this.directCeilingSearchHeight()) != null; + if (!playerNearby || !idle || movingQuickly || !inAmbushCover) { + this.setCamouflaged(false); + this.camouflageWarmupTicks = 0; + return; + } + + if (this.camouflageWarmupTicks < CAMOUFLAGE_WARMUP_TICKS) { + this.camouflageWarmupTicks++; + } + this.setCamouflaged(this.camouflageWarmupTicks >= CAMOUFLAGE_WARMUP_TICKS); + } + + @Nullable + private BlockPos findCeilingWithinRange(int maxBlocks) { + BlockPos origin = this.blockPosition(); + for (int dy = 1; dy <= maxBlocks; dy++) { + BlockPos candidate = this.relativeLocal(origin, 0, dy, 0); + if (this.isUsableCeiling(candidate)) { + return candidate; + } + } + return null; + } + + @Nullable + private BlockPos findCeilingForLeap() { + BlockPos origin = this.blockPosition(); + BlockPos best = null; + double bestScore = Double.MAX_VALUE; + LivingEntity target = this.getTarget(); + int minHeight = this.minimumCeilingHeight(); + int maxHeight = minHeight + CEILING_EXTRA_SEARCH_HEIGHT; + + for (int dx = -CEILING_HORIZONTAL_SEARCH_RANGE; dx <= CEILING_HORIZONTAL_SEARCH_RANGE; dx++) { + for (int dz = -CEILING_HORIZONTAL_SEARCH_RANGE; dz <= CEILING_HORIZONTAL_SEARCH_RANGE; dz++) { + int horizontalDistance = Math.abs(dx) + Math.abs(dz); + if (horizontalDistance > CEILING_HORIZONTAL_SEARCH_RANGE) { + continue; + } + for (int dy = minHeight; dy <= maxHeight; dy++) { + BlockPos candidate = this.relativeLocal(origin, dx, dy, dz); + if (!this.isUsableCeiling(candidate)) { + continue; + } + + double score = horizontalDistance * 1.4D + dy * 0.25D; + if (target != null) { + score += candidate.distSqr(target.blockPosition()) * 0.04D; + } + if (score < bestScore) { + bestScore = score; + best = candidate.immutable(); + } + } + } + } + + return best; + } + + private boolean isCeilingBlock(BlockPos pos) { + return this.level().getBlockState(pos).isFaceSturdy(this.level(), pos, this.gravityDownDirection()); + } + + private int minimumCeilingHeight() { + return Math.max(2, Mth.ceil(this.getBbHeight()) + 1); + } + + private int directCeilingSearchHeight() { + return this.minimumCeilingHeight() + CEILING_DIRECT_EXTRA_HEIGHT; + } + + private boolean isUsableCeiling(BlockPos pos) { + if (!this.isCeilingBlock(pos)) { + return false; + } + double x = pos.getX() + 0.5D; + double y = GravityApi.isGravityInverted(this) + ? pos.getY() + 1.01D + : pos.getY() - this.getBbHeight() - 0.01D; + double z = pos.getZ() + 0.5D; + return this.canOccupy(x, y, z); + } + + private boolean canOccupy(double x, double y, double z) { + double halfWidth = this.getBbWidth() * 0.5D; + AABB box = new AABB( + x - halfWidth, + y, + z - halfWidth, + x + halfWidth, + y + this.getBbHeight(), + z + halfWidth + ); + return this.level().noCollision(this, box); + } + + private boolean isAlignedBelowCeiling(BlockPos ceilingPos) { + double x = ceilingPos.getX() + 0.5D; + double z = ceilingPos.getZ() + 0.5D; + double dx = this.getX() - x; + double dz = this.getZ() - z; + return dx * dx + dz * dz <= CEILING_ALIGN_DISTANCE_SQR; + } + + private void beginClinging() { + this.setClingingToCeiling(true); + this.setAttackState(AttackState.CLINGING); + this.setNoGravity(true); + this.noPhysics = true; + this.getNavigation().stop(); + this.setDeltaMovement(Vec3.ZERO); + } + + private void stopClinging() { + this.setClingingToCeiling(false); + this.setAttackState(AttackState.GROUND); + this.setNoGravity(false); + this.noPhysics = false; + } + + private void beginLeapToCeiling(BlockPos ceilingPos) { + this.setAttackState(AttackState.LEAPING_TO_CEILING); + this.setCamouflaged(false); + this.camouflageWarmupTicks = 0; + this.leapingTicks = 0; + this.getNavigation().stop(); + + Vec3 localDelta = this.toLocal(Vec3.atCenterOf(ceilingPos).subtract(this.position())); + double dy = localDelta.y; + double upwardSpeed = Math.min(2.5D, Math.sqrt(0.16D * Math.max(dy, 1.0D)) + 0.4D); + this.setDeltaMovement(this.toWorld( + Mth.clamp(localDelta.x * 0.18D, -0.35D, 0.35D), + upwardSpeed, + Mth.clamp(localDelta.z * 0.18D, -0.35D, 0.35D) + )); + this.hasImpulse = true; + this.playSound(AntarchySoundEvents.SPRINGBUG_JUMP.get(), 1.0F, 0.95F + this.random.nextFloat() * 0.1F); + } + + private void cancelLeap() { + this.leapingTicks = 0; + this.setAttackState(AttackState.GROUND); + this.setNoGravity(false); + this.noPhysics = false; + } + + private void beginPounce(LivingEntity target) { + this.stopClinging(); + this.setTarget(target); + this.setAttackState(AttackState.POUNCING); + this.setCamouflaged(false); + this.getNavigation().stop(); + this.pounceCooldownTicks = DEFAULT_POUNCE_COOLDOWN; + this.pounceTicks = 0; + + Vec3 to = this.toLocal(target.getEyePosition().subtract(this.position())); + Vec3 horizontal = new Vec3(to.x, 0.0D, to.z); + Vec3 direction = horizontal.lengthSqr() > 1.0E-4D ? horizontal.normalize() : this.toLocalPlane(target.getLookAngle()).normalize(); + double upward = POUNCE_UPWARD_SPEED + Mth.clamp(to.y * 0.08D, -0.04D, 0.22D); + this.setDeltaMovement(this.toWorld(direction.x * POUNCE_HORIZONTAL_SPEED, upward, direction.z * POUNCE_HORIZONTAL_SPEED)); + this.hasImpulse = true; + this.playSound(AntarchySoundEvents.SPRINGBUG_JUMP.get(), 1.0F, 0.95F + this.random.nextFloat() * 0.1F); + } + + private void beginCeilingDrop(LivingEntity target) { + this.stopClinging(); + this.setTarget(target); + this.setAttackState(AttackState.POUNCING); + this.setCamouflaged(false); + this.camouflageWarmupTicks = 0; + this.getNavigation().stop(); + this.pounceCooldownTicks = DEFAULT_POUNCE_COOLDOWN; + this.pounceTicks = 0; + + Vec3 to = this.toLocal(target.position().add(this.toWorld(0.0D, target.getBbHeight() * 0.35D, 0.0D)).subtract(this.position())); + Vec3 horizontal = new Vec3(to.x, 0.0D, to.z); + Vec3 direction = horizontal.lengthSqr() > 1.0E-4D ? horizontal.normalize() : this.toLocalPlane(target.getLookAngle()).normalize(); + this.setDeltaMovement(this.toWorld(direction.x * CEILING_DROP_HORIZONTAL_SPEED, CEILING_DROP_UPWARD_SPEED, direction.z * CEILING_DROP_HORIZONTAL_SPEED)); + this.hasImpulse = true; + this.playSound(AntarchySoundEvents.SPRINGBUG_JUMP.get(), 1.0F, 0.9F + this.random.nextFloat() * 0.1F); + } + + private void finishPounce(boolean keepMomentum) { + this.pounceTicks = 0; + if (!keepMomentum) { + Vec3 movement = this.toLocal(this.getDeltaMovement()); + this.setDeltaMovement(this.toWorld(movement.x * 0.25D, Math.max(0.0D, movement.y), movement.z * 0.25D)); + } + this.setAttackState(AttackState.RECOVERING); + this.recoveryTicks = DEFAULT_RECOVERY_TICKS; + } + + private boolean canUseAmbush() { + return !this.isPouncing() + && !this.isLeapingToCeiling() + && this.recoveryTicks <= 0; + } + + public enum AttackState implements StringRepresentable { + GROUND(0, "ground"), + CLINGING(1, "clinging"), + POUNCING(2, "pouncing"), + RECOVERING(3, "recovering"), + LEAPING_TO_CEILING(4, "leaping_to_ceiling"); + + private static final IntFunction BY_ID = ByIdMap.continuous(AttackState::id, values(), ByIdMap.OutOfBoundsStrategy.ZERO); + public static final Codec CODEC = StringRepresentable.fromEnum(AttackState::values); + + private final int id; + private final String name; + + AttackState(int id, String name) { + this.id = id; + this.name = name; + } + + public int id() { + return this.id; + } + + @Override + public String getSerializedName() { + return this.name; + } + } + + private final class CloseMeleeGoal extends Goal { + private static final double MELEE_RANGE_SQR = 5.0D * 5.0D; + private static final double CONTINUE_RANGE_SQR = 7.0D * 7.0D; + private static final int ATTACK_COOLDOWN = 20; + private int attackCooldown; + + private CloseMeleeGoal() { + this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK)); + } + + @Override + public boolean canUse() { + LivingEntity target = SpringbugEntity.this.getTarget(); + return target != null + && target.isAlive() + && !SpringbugEntity.this.isPouncing() + && !SpringbugEntity.this.isLeapingToCeiling() + && !SpringbugEntity.this.isClingingToCeiling() + && SpringbugEntity.this.distanceToSqr(target) <= MELEE_RANGE_SQR; + } + + @Override + public boolean canContinueToUse() { + LivingEntity target = SpringbugEntity.this.getTarget(); + return target != null + && target.isAlive() + && !SpringbugEntity.this.isPouncing() + && !SpringbugEntity.this.isLeapingToCeiling() + && !SpringbugEntity.this.isClingingToCeiling() + && SpringbugEntity.this.distanceToSqr(target) <= CONTINUE_RANGE_SQR; + } + + @Override + public void start() { + this.attackCooldown = 0; + } + + @Override + public void tick() { + LivingEntity target = SpringbugEntity.this.getTarget(); + if (target == null) return; + + SpringbugEntity.this.getLookControl().setLookAt(target, 30.0F, 30.0F); + SpringbugEntity.this.getNavigation().moveTo(target, 1.1D); + + if (this.attackCooldown > 0) { + this.attackCooldown--; + } + if (this.attackCooldown <= 0 && SpringbugEntity.this.distanceToSqr(target) <= MELEE_RANGE_SQR) { + SpringbugEntity.this.doHurtTarget(target); + this.attackCooldown = ATTACK_COOLDOWN; + } + } + } + + private final class PounceAttackGoal extends Goal { + private PounceAttackGoal() { + this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK, Flag.JUMP)); + } + + @Override + public boolean canUse() { + LivingEntity target = SpringbugEntity.this.getTarget(); + return target != null + && target.isAlive() + && SpringbugEntity.this.canUseAmbush() + && SpringbugEntity.this.pounceCooldownTicks <= 0 + && SpringbugEntity.this.preferPounceThisWindow + && (SpringbugEntity.this.hasLineOfSight(target) || SpringbugEntity.this.distanceToSqr(target) <= 9.0D); + } + + @Override + public boolean canContinueToUse() { + return SpringbugEntity.this.isPouncing(); + } + + @Override + public void start() { + LivingEntity target = SpringbugEntity.this.getTarget(); + if (target != null) { + SpringbugEntity.this.beginPounce(target); + } + } + } + + private final class HideOnCeilingGoal extends Goal { + @Nullable + private BlockPos targetCeiling; + + private HideOnCeilingGoal() { + this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK, Flag.JUMP)); + } + + @Override + public boolean canUse() { + if (!SpringbugEntity.this.canUseAmbush() || SpringbugEntity.this.isClingingToCeiling()) { + return false; + } + if (SpringbugEntity.this.ceilingSearchCooldownTicks > 0) { + return false; + } + LivingEntity target = SpringbugEntity.this.getTarget(); + boolean targetFarAway = target != null + && SpringbugEntity.this.distanceToSqr(target) > 12.0D * 12.0D; + boolean noTarget = target == null; + if (!noTarget && !targetFarAway) { + return false; + } + if (SpringbugEntity.this.random.nextInt(noTarget ? 8 : 14) != 0) { + return false; + } + this.targetCeiling = SpringbugEntity.this.findCeilingForLeap(); + SpringbugEntity.this.ceilingSearchCooldownTicks = CEILING_SEARCH_COOLDOWN; + return this.targetCeiling != null; + } + + @Override + public boolean canContinueToUse() { + if (SpringbugEntity.this.isClingingToCeiling() || SpringbugEntity.this.isLeapingToCeiling()) { + return true; + } + LivingEntity target = SpringbugEntity.this.getTarget(); + boolean allowedTarget = target == null || SpringbugEntity.this.distanceToSqr(target) > CEILING_AMBUSH_RANGE_SQR; + return this.targetCeiling != null + && allowedTarget + && SpringbugEntity.this.canUseAmbush(); + } + + @Override + public void start() { + if (this.targetCeiling != null) { + BlockPos ceiling = this.targetCeiling; + if (SpringbugEntity.this.isAlignedBelowCeiling(ceiling) && ceiling.getY() - SpringbugEntity.this.getY() <= SpringbugEntity.this.directCeilingSearchHeight()) { + SpringbugEntity.this.beginClinging(); + } + } + } + + @Override + public void stop() { + if (SpringbugEntity.this.isClingingToCeiling()) { + SpringbugEntity.this.stopClinging(); + } else if (SpringbugEntity.this.isLeapingToCeiling()) { + SpringbugEntity.this.cancelLeap(); + } + this.targetCeiling = null; + } + + @Override + public void tick() { + if (SpringbugEntity.this.isClingingToCeiling()) { + LivingEntity target = SpringbugEntity.this.getTarget(); + if (target != null) { + SpringbugEntity.this.getLookControl().setLookAt(target, 30.0F, 30.0F); + if (SpringbugEntity.this.pounceCooldownTicks <= 0 + && SpringbugEntity.this.distanceToSqr(target) <= CEILING_TRIGGER_RANGE_SQR + && SpringbugEntity.this.hasLineOfSight(target)) { + SpringbugEntity.this.beginCeilingDrop(target); + } + } + return; + } + + if (SpringbugEntity.this.isLeapingToCeiling() || this.targetCeiling == null) { + return; + } + + BlockPos ceiling = this.targetCeiling; + SpringbugEntity.this.getLookControl().setLookAt(ceiling.getX() + 0.5D, ceiling.getY() - 1.0D, ceiling.getZ() + 0.5D, 20.0F, 20.0F); + if (!SpringbugEntity.this.isUsableCeiling(ceiling)) { + this.targetCeiling = null; + return; + } + + if (SpringbugEntity.this.isAlignedBelowCeiling(ceiling)) { + if (SpringbugEntity.this.onGround()) { + SpringbugEntity.this.beginLeapToCeiling(ceiling); + } + } else { + SpringbugEntity.this.getNavigation().moveTo(ceiling.getX() + 0.5D, SpringbugEntity.this.getY(), ceiling.getZ() + 0.5D, 1.05D); + } + } + } + + private final class ChaseTargetGoal extends Goal { + private ChaseTargetGoal() { + this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK)); + } + + @Override + public boolean canUse() { + LivingEntity target = SpringbugEntity.this.getTarget(); + return target != null + && target.isAlive() + && !SpringbugEntity.this.isClingingToCeiling() + && !SpringbugEntity.this.isPouncing() + && !SpringbugEntity.this.isLeapingToCeiling() + && SpringbugEntity.this.recoveryTicks <= 0; + } + + @Override + public boolean canContinueToUse() { + return this.canUse(); + } + + @Override + public void tick() { + LivingEntity target = SpringbugEntity.this.getTarget(); + if (target == null) { + return; + } + + SpringbugEntity.this.getLookControl().setLookAt(target, 30.0F, 30.0F); + double distSqr = SpringbugEntity.this.distanceToSqr(target); + + if (distSqr <= MELEE_WALK_RANGE * MELEE_WALK_RANGE) { + SpringbugEntity.this.getNavigation().moveTo(target, 1.05D); + } else if (distSqr > CHASE_LEAP_RANGE_SQR) { + if (SpringbugEntity.this.onGround() && SpringbugEntity.this.chaseJumpCooldownTicks <= 0) { + Vec3 dir = SpringbugEntity.this.toLocalPlane(target.position().subtract(SpringbugEntity.this.position())).normalize(); + SpringbugEntity.this.setDeltaMovement(SpringbugEntity.this.toWorld( + dir.x * CHASE_LEAP_HORIZONTAL, + CHASE_LEAP_VERTICAL, + dir.z * CHASE_LEAP_HORIZONTAL + )); + SpringbugEntity.this.hasImpulse = true; + SpringbugEntity.this.chaseJumpCooldownTicks = CHASE_JUMP_COOLDOWN; + } + SpringbugEntity.this.getNavigation().stop(); + } else { + SpringbugEntity.this.getNavigation().moveTo(target, 1.05D); + } + } + } + + private final class WanderGoal extends RandomStrollGoal { + private WanderGoal() { + super(SpringbugEntity.this, 0.8D); + } + + @Override + public boolean canUse() { + return !SpringbugEntity.this.isClingingToCeiling() + && !SpringbugEntity.this.isPouncing() + && !SpringbugEntity.this.isLeapingToCeiling() + && SpringbugEntity.this.getTarget() == null + && super.canUse(); + } + + @Override + public boolean canContinueToUse() { + return !SpringbugEntity.this.isClingingToCeiling() + && !SpringbugEntity.this.isPouncing() + && !SpringbugEntity.this.isLeapingToCeiling() + && super.canContinueToUse(); + } + } + + private GravityDirection gravityDirection() { + return GravityApi.getGravityDirection(this); + } + + private Direction gravityDownDirection() { + return this.gravityDirection().isInverted() ? Direction.UP : Direction.DOWN; + } + + private Vec3 toLocal(Vec3 worldVector) { + return GravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); + } + + private Vec3 toWorld(double x, double y, double z) { + return GravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); + } + + private Vec3 toLocalPlane(Vec3 worldVector) { + Vec3 local = this.toLocal(worldVector); + return new Vec3(local.x, 0.0D, local.z); + } + + private BlockPos relativeLocal(BlockPos origin, int x, int y, int z) { + Vec3 worldOffset = this.toWorld(x, y, z); + return origin.offset(Mth.floor(worldOffset.x), Mth.floor(worldOffset.y), Mth.floor(worldOffset.z)); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/StinkBugEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/StinkBugEntity.java index 468a74a3..bd474bde 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/StinkBugEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/StinkBugEntity.java @@ -4,9 +4,9 @@ import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.effect.StinkyBehavior; import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; import net.minecraft.util.RandomSource; -import net.minecraft.world.Difficulty; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.AgeableMob; import net.minecraft.world.entity.EntityType; @@ -29,6 +29,7 @@ import net.minecraft.world.item.Items; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.Difficulty; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; @@ -72,8 +73,17 @@ public class StinkBugEntity extends Animal implements GeoEntity { if (spawnReason == MobSpawnType.SPAWN_EGG || spawnReason == MobSpawnType.SPAWNER || spawnReason == MobSpawnType.COMMAND) { return true; } - return level.getDifficulty() != Difficulty.PEACEFUL - && Mob.checkMobSpawnRules(entityType, level, spawnReason, pos, random); + BlockPos belowPos = pos.below(); + BlockPos abovePos = pos.above(); + if (level.getDifficulty() == Difficulty.PEACEFUL) { + return false; + } + return level.getBlockState(pos).isAir() + && (level.getBlockState(pos.above()).isAir() || level.getBlockState(pos.below()).isAir()) + && level.getFluidState(pos).isEmpty() + && (level.getFluidState(pos.above()).isEmpty() || level.getFluidState(pos.below()).isEmpty()) + && (level.getBlockState(belowPos).isFaceSturdy(level, belowPos, Direction.UP) + || level.getBlockState(abovePos).isFaceSturdy(level, abovePos, Direction.DOWN)); } @Override diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java index 87c872d4..fe923612 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java @@ -154,6 +154,13 @@ public class ToreterrorEntity extends Monster implements GeoEntity { .add(Attributes.ARMOR_TOUGHNESS, 4.0D); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, + MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData, @org.jetbrains.annotations.Nullable net.minecraft.nbt.CompoundTag dataTag) { + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.toreterrorHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData, dataTag); + } + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, net.minecraft.util.RandomSource random) { boolean sturdy = level.getBlockState(pos.below()).isFaceSturdy(level, pos.below(), Direction.UP); return level.getDifficulty() != Difficulty.PEACEFUL && sturdy; @@ -219,10 +226,10 @@ public class ToreterrorEntity extends Monster implements GeoEntity { super.tick(); if (this.level().isClientSide) { if (this.isJumpShaking()) { - com.craisinlord.antarchy.content.client.CameraShakeClientState.register( + com.craisinlord.anthology.shake.client.CameraShake.register( this, - com.craisinlord.antarchy.content.client.CameraShakeClientState.TORETERROR_RANGE, - com.craisinlord.antarchy.content.client.CameraShakeClientState.TORETERROR_STRENGTH, + 48.0D, + 1.0F, this::isJumpShaking ); } @@ -263,6 +270,9 @@ public class ToreterrorEntity extends Monster implements GeoEntity { @Override public boolean hurt(DamageSource source, float amount) { + if (BossCombatUtil.isMagicWarded(this) && BossCombatUtil.isMagicBurstSource(source)) { + amount *= (1.0F - (float) AntarchySettings.bossMagicWardReductionFraction()); + } if (source.is(net.minecraft.world.damagesource.DamageTypes.DROWN)) return false; if (source.is(DamageTypeTags.IS_PROJECTILE)) { amount *= (float) AntarchySettings.toreterrorProjectileDamageMultiplier(); @@ -455,7 +465,7 @@ public class ToreterrorEntity extends Monster implements GeoEntity { } this.shootAnimTicks--; if (this.shootAnimTicks <= 0) { - this.shootCooldown = (int) (AntarchySettings.waterCannonCooldownSeconds() * 20.0D) + this.random.nextInt(60); + this.shootCooldown = 100 + this.random.nextInt(60); } } @@ -764,11 +774,9 @@ public class ToreterrorEntity extends Monster implements GeoEntity { double dh = Math.sqrt(diff.x * diff.x + diff.z * diff.z); double dy = diff.y; double gravity = AntarchySettings.waterBombGravity(); - // Choose travel time based on horizontal distance at minSpeed, minimum 8 ticks double t = Math.max(8.0, dh / minSpeed); double vx = diff.x / t; double vz = diff.z / t; - // Compensate for gravity accumulating over t ticks double vy = dy / t + 0.5 * gravity * t; return new Vec3(vx, vy, vz); } @@ -880,7 +888,7 @@ public class ToreterrorEntity extends Monster implements GeoEntity { ToreterrorEntity.this.shootBomberFiredSecond = false; ToreterrorEntity.this.rapidFireNextTick = 0; float roll = ToreterrorEntity.this.random.nextFloat(); - if (roll < (float) AntarchySettings.toreterrorRangedWaterBombChance()) ToreterrorEntity.this.shootAttackType = ATTACK_RAPID_FIRE; + if (roll < 0.5F) ToreterrorEntity.this.shootAttackType = ATTACK_RAPID_FIRE; else ToreterrorEntity.this.shootAttackType = ATTACK_BOMBERS; } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/TriffidEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/TriffidEntity.java deleted file mode 100644 index 718058fe..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/TriffidEntity.java +++ /dev/null @@ -1,549 +0,0 @@ -package com.craisinlord.antarchy.content.entity; - -import com.craisinlord.antarchy.config.AntarchySettings; -import com.craisinlord.antarchy.content.AntarchySoundEvents; -import com.craisinlord.antarchy.content.AntarchyTags; -import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.UUID; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.network.syncher.EntityDataAccessor; -import net.minecraft.network.syncher.EntityDataSerializers; -import net.minecraft.network.syncher.SynchedEntityData; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.sounds.SoundEvent; -import net.minecraft.util.Mth; -import net.minecraft.util.RandomSource; -import net.minecraft.tags.DamageTypeTags; -import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.MobSpawnType; -import net.minecraft.world.entity.ai.attributes.AttributeSupplier; -import net.minecraft.world.entity.ai.attributes.Attributes; -import net.minecraft.world.entity.ai.goal.FloatGoal; -import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; -import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; -import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; -import net.minecraft.world.entity.monster.Monster; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.LevelAccessor; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec3; -import org.jetbrains.annotations.Nullable; -import software.bernie.geckolib.animatable.GeoEntity; -import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; -import software.bernie.geckolib.core.animation.AnimatableManager; -import software.bernie.geckolib.core.animation.AnimationController; -import software.bernie.geckolib.core.animation.AnimationState; -import software.bernie.geckolib.core.object.PlayState; -import software.bernie.geckolib.core.animation.RawAnimation; -import software.bernie.geckolib.util.GeckoLibUtil; - -public class TriffidEntity extends Monster implements GeoEntity { - private static final EntityDataAccessor ACTION_STATE = SynchedEntityData.defineId(TriffidEntity.class, EntityDataSerializers.INT); - private static final EntityDataAccessor AWAKE = SynchedEntityData.defineId(TriffidEntity.class, EntityDataSerializers.BOOLEAN); - private static final int ACTION_NONE = 0; - private static final int ACTION_SWEEP = 1; - private static final int ACTION_GRAB = 2; - private static final int ACTION_DEATH = 3; - - private static final int SWEEP_TOTAL_TICKS = 20; - private static final int SWEEP_ACTIVE_START = 7; - private static final int SWEEP_ACTIVE_END = 14; - private static final int SWEEP_COOLDOWN_TICKS = 24; - private static final int GRAB_TOTAL_TICKS = 24; - private static final int GRAB_PULL_START = 6; - private static final int GRAB_PULL_END = 18; - private static final int GRAB_DAMAGE_TICK = 19; - private static final int GRAB_COOLDOWN_TICKS = 42; - private static final int DEATH_TICKS = 32; - - private static final double WAKE_RANGE = 12.0D; - private static final double SWEEP_RANGE = 4.25D; - private static final double GRAB_RANGE = 5.25D; - private static final double MIN_GRAB_RANGE = 2.0D; - private static final double FOLLOW_RANGE = 14.0D; - private static final double TURN_SPEED_DEGREES = 5.0D; - - private static final RawAnimation DORMANT_ANIM = RawAnimation.begin().thenLoop("dormant"); - private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); - private static final RawAnimation SWEEP_ANIM = RawAnimation.begin().thenPlay("attack"); - private static final RawAnimation GRAB_ANIM = RawAnimation.begin().thenPlay("grab"); - private static final RawAnimation DEATH_ANIM = RawAnimation.begin().thenPlayAndHold("death"); - - private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); - private final Set sweepHitEntities = new HashSet<>(); - - private int actionTicks; - private int attackCooldown; - private float actionStartYaw; - private int grabTargetId = -1; - private boolean grabDamageApplied; - private int preySearchCooldown = 0; - - public TriffidEntity(EntityType entityType, Level level) { - super(entityType, level); - this.xpReward = 15; - } - - public static AttributeSupplier.Builder createAttributes() { - return Monster.createMonsterAttributes() - .add(Attributes.MAX_HEALTH, AntarchySettings.triffidHealth()) - .add(Attributes.ATTACK_DAMAGE, AntarchySettings.triffidAttackDamage()) - .add(Attributes.FOLLOW_RANGE, FOLLOW_RANGE) - .add(Attributes.KNOCKBACK_RESISTANCE, 1.0D) - .add(Attributes.MOVEMENT_SPEED, 0.0D); - } - - public static boolean canSpawn(EntityType entityType, LevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { - if (pos.getY() < level.getMinBuildHeight() || pos.getY() + 7 >= level.getMaxBuildHeight()) { - return false; - } - - BlockPos[] footprint = new BlockPos[] { - pos, - pos.east(), - pos.south(), - pos.east().south() - }; - - for (BlockPos footprintPos : footprint) { - if (!level.getBlockState(footprintPos).isAir()) { - return false; - } - - BlockPos below = footprintPos.below(); - if (!level.getBlockState(below).isFaceSturdy(level, below, Direction.UP)) { - return false; - } - - for (int y = 1; y <= 7; y++) { - if (!level.getBlockState(footprintPos.above(y)).isAir()) { - return false; - } - } - } - - return true; - } - - @Override - protected void defineSynchedData() { - super.defineSynchedData(); - this.entityData.define(ACTION_STATE, ACTION_NONE); - this.entityData.define(AWAKE, false); - } - - @Override - protected void registerGoals() { - this.goalSelector.addGoal(0, new FloatGoal(this)); - this.goalSelector.addGoal(1, new LookAtPlayerGoal(this, Player.class, 16.0F)); - this.targetSelector.addGoal(1, new HurtByTargetGoal(this)); - this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, LivingEntity.class, 10, true, false, TriffidEntity::isValidPreyTarget)); - } - - @Override - public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "main_controller", 0, this::mainAnimController) - .triggerableAnim("attack", SWEEP_ANIM) - .triggerableAnim("grab", GRAB_ANIM) - .triggerableAnim("death", DEATH_ANIM)); - } - - private PlayState mainAnimController(AnimationState state) { - return switch (this.getActionState()) { - case ACTION_SWEEP -> state.setAndContinue(SWEEP_ANIM); - case ACTION_GRAB -> state.setAndContinue(GRAB_ANIM); - case ACTION_DEATH -> state.setAndContinue(DEATH_ANIM); - default -> state.setAndContinue(this.isAwake() ? IDLE_ANIM : DORMANT_ANIM); - }; - } - - @Override - public AnimatableInstanceCache getAnimatableInstanceCache() { - return this.geoCache; - } - - @Override - public void tick() { - super.tick(); - this.getNavigation().stop(); - Vec3 movement = this.getDeltaMovement(); - this.setDeltaMovement(0.0D, movement.y, 0.0D); - this.zza = 0.0F; - this.xxa = 0.0F; - - this.yBodyRot = this.getYRot(); - this.yHeadRot = this.getYRot(); - - if (this.level().isClientSide) { - return; - } - - this.syncConfiguredAttributes(); - - if (this.attackCooldown > 0) { - this.attackCooldown--; - } - - if (this.getActionState() == ACTION_DEATH) { - return; - } - - if (this.preySearchCooldown > 0) { - this.preySearchCooldown--; - } else { - this.preySearchCooldown = 20; - this.setAwake(this.hasNearbyPrey()); - if (!isValidLivePrey(this.getTarget())) { - this.setTarget(this.findNearestPrey()); - } - } - - LivingEntity target = this.getTarget(); - - if (this.getActionState() == ACTION_SWEEP) { - this.tickSweepAttack(); - return; - } - - if (this.getActionState() == ACTION_GRAB) { - this.tickGrabAttack(); - return; - } - - if (target != null) { - this.rotateToward(target, TURN_SPEED_DEGREES); - this.getLookControl().setLookAt(target, 30.0F, 30.0F); - this.tryStartAttack(target); - } - } - - @Override - public boolean hurt(DamageSource source, float amount) { - if (this.isInvulnerableTo(source)) { - return false; - } - if (source.is(DamageTypeTags.IS_PROJECTILE)) { - amount *= 0.33333334F; - } - return super.hurt(source, amount); - } - - @Override - public void die(DamageSource damageSource) { - if (!this.level().isClientSide && this.getActionState() != ACTION_DEATH) { - this.setActionState(ACTION_DEATH); - this.actionTicks = DEATH_TICKS; - this.attackCooldown = 0; - this.grabTargetId = -1; - this.setTarget(null); - this.getNavigation().stop(); - this.setDeltaMovement(Vec3.ZERO); - } - super.die(damageSource); - } - - @Override - protected void tickDeath() { - this.deathTime++; - if (this.deathTime >= DEATH_TICKS) { - this.remove(RemovalReason.KILLED); - } - } - - @Override - protected SoundEvent getAmbientSound() { - if (this.getActionState() != ACTION_NONE) { - return null; - } - - if (!this.isAwake()) { - return this.random.nextInt(24) == 0 ? AntarchySoundEvents.TRIFFID_HISS.get() : null; - } - - return this.getTarget() != null ? AntarchySoundEvents.TRIFFID_GROWL.get() : null; - } - - @Override - public int getAmbientSoundInterval() { - if (!this.isAwake()) { - return 200; - } - - return this.getTarget() != null ? 80 : 160; - } - - @Override - protected SoundEvent getHurtSound(DamageSource damageSource) { - return AntarchySoundEvents.TRIFFID_HURT.get(); - } - - @Override - protected SoundEvent getDeathSound() { - return AntarchySoundEvents.TRIFFID_DEATH.get(); - } - - @Override - protected float getSoundVolume() { - return 0.7F; - } - - @Override - public boolean removeWhenFarAway(double distanceToClosestPlayer) { - return false; - } - - @Override - public boolean canAttack(LivingEntity target) { - return isValidPreyTarget(target); - } - - @Override - public void knockback(double strength, double x, double z) { - } - - private void tryStartAttack(LivingEntity target) { - if (this.attackCooldown > 0 || !this.hasLineOfSight(target)) { - return; - } - - double distance = this.distanceTo(target); - boolean inSweepRange = distance <= SWEEP_RANGE; - boolean inGrabRange = distance >= MIN_GRAB_RANGE && distance <= GRAB_RANGE; - - if (inSweepRange) { - if (inGrabRange && isLowHealthPrey(target) && this.random.nextFloat() < 0.25F) { - this.startGrabAttack(target); - } else { - this.startSweepAttack(target); - } - return; - } - - if (inGrabRange && (isLowHealthPrey(target) || this.random.nextFloat() < 0.08F)) { - this.startGrabAttack(target); - } - } - - private void startSweepAttack(LivingEntity target) { - this.setActionState(ACTION_SWEEP); - this.actionTicks = SWEEP_TOTAL_TICKS; - this.attackCooldown = SWEEP_COOLDOWN_TICKS; - this.actionStartYaw = this.getAngleTo(target) - 100.0F; - this.sweepHitEntities.clear(); - this.setYRot(this.actionStartYaw); - this.playSound(AntarchySoundEvents.TRIFFID_ATTACK.get(), 0.9F, 0.75F); - } - - private void tickSweepAttack() { - int elapsed = SWEEP_TOTAL_TICKS - this.actionTicks; - float progress = elapsed / (float) SWEEP_TOTAL_TICKS; - this.setYRot(this.actionStartYaw + 200.0F * progress); - - if (elapsed >= SWEEP_ACTIVE_START && elapsed <= SWEEP_ACTIVE_END) { - this.applySweepDamage(); - } - - this.actionTicks--; - if (this.actionTicks <= 0) { - this.setActionState(ACTION_NONE); - this.sweepHitEntities.clear(); - } - } - - private void applySweepDamage() { - if (!(this.level() instanceof ServerLevel serverLevel)) { - return; - } - - List candidates = this.level().getEntitiesOfClass( - LivingEntity.class, - this.getBoundingBox().inflate(SWEEP_RANGE, 1.0D, SWEEP_RANGE), - TriffidEntity::isValidLivePrey - ); - - for (LivingEntity candidate : candidates) { - if (candidate == this || this.sweepHitEntities.contains(candidate.getUUID())) { - continue; - } - if (this.distanceTo(candidate) > SWEEP_RANGE) { - continue; - } - - float relativeYaw = Mth.wrapDegrees(this.getAngleTo(candidate) - this.getYRot()); - if (Math.abs(relativeYaw) > 70.0F) { - continue; - } - - if (candidate.hurt(AntarchyDamageSources.triffidMauling(serverLevel, this), (float) AntarchySettings.triffidAttackDamage())) { - this.sweepHitEntities.add(candidate.getUUID()); - } - } - } - - private void startGrabAttack(LivingEntity target) { - this.setActionState(ACTION_GRAB); - this.actionTicks = GRAB_TOTAL_TICKS; - this.attackCooldown = GRAB_COOLDOWN_TICKS; - this.grabTargetId = target.getId(); - this.grabDamageApplied = false; - this.setYRot(this.getAngleTo(target)); - this.playSound(AntarchySoundEvents.TRIFFID_GRAB.get(), 0.8F, 0.85F); - } - - private void tickGrabAttack() { - LivingEntity grabTarget = this.getGrabTarget(); - if (!isValidLivePrey(grabTarget)) { - this.finishGrabAttack(); - return; - } - - this.rotateToward(grabTarget, TURN_SPEED_DEGREES * 1.25D); - int elapsed = GRAB_TOTAL_TICKS - this.actionTicks; - if (elapsed >= GRAB_PULL_START && elapsed <= GRAB_PULL_END) { - this.pullTargetTowardMouth(grabTarget); - } - - if (!this.grabDamageApplied && elapsed >= GRAB_DAMAGE_TICK) { - this.grabDamageApplied = true; - if (this.level() instanceof ServerLevel serverLevel) { - grabTarget.hurt(AntarchyDamageSources.triffidSwallow(serverLevel, this), (float) AntarchySettings.triffidGrabDamage()); - } else { - grabTarget.hurt(this.damageSources().mobAttack(this), (float) AntarchySettings.triffidGrabDamage()); - } - } - - this.actionTicks--; - if (this.actionTicks <= 0) { - this.finishGrabAttack(); - } - } - - private void pullTargetTowardMouth(LivingEntity target) { - Vec3 mouthPos = this.position().add(Vec3.directionFromRotation(0.0F, this.getYRot()).scale(1.45D)).add(0.0D, 2.3D, 0.0D); - Vec3 targetCenter = target.getBoundingBox().getCenter(); - Vec3 offset = mouthPos.subtract(targetCenter); - double distance = offset.length(); - if (distance < 1.0E-4D) { - return; - } - - Vec3 pull = offset.normalize().scale(Math.min(1.0D, 0.2D + distance * 0.18D)); - target.setDeltaMovement(target.getDeltaMovement().scale(0.35D).add(pull)); - target.hurtMarked = true; - target.fallDistance = 0.0F; - } - - private void finishGrabAttack() { - this.setActionState(ACTION_NONE); - this.actionTicks = 0; - this.grabTargetId = -1; - this.grabDamageApplied = false; - } - - private void rotateToward(LivingEntity target, double maxStep) { - float targetYaw = this.getAngleTo(target); - this.setYRot(this.rotateTowards(this.getYRot(), targetYaw, (float) maxStep)); - } - - private float getAngleTo(Entity target) { - double dx = target.getX() - this.getX(); - double dz = target.getZ() - this.getZ(); - return (float) (Mth.atan2(dz, dx) * (180.0F / Math.PI)) - 90.0F; - } - - private float rotateTowards(float currentYaw, float targetYaw, float maxStep) { - return currentYaw + Mth.clamp(Mth.wrapDegrees(targetYaw - currentYaw), -maxStep, maxStep); - } - - private boolean hasNearbyPrey() { - return !this.level().getEntitiesOfClass( - LivingEntity.class, - this.getBoundingBox().inflate(WAKE_RANGE, 4.0D, WAKE_RANGE), - TriffidEntity::isValidLivePrey - ).isEmpty(); - } - - @Nullable - private LivingEntity findNearestPrey() { - List candidates = this.level().getEntitiesOfClass( - LivingEntity.class, - this.getBoundingBox().inflate(FOLLOW_RANGE, 6.0D, FOLLOW_RANGE), - TriffidEntity::isValidLivePrey - ); - LivingEntity best = null; - double bestDistance = Double.MAX_VALUE; - for (LivingEntity candidate : candidates) { - double distance = this.distanceToSqr(candidate); - if (distance < bestDistance) { - bestDistance = distance; - best = candidate; - } - } - return best; - } - - @Nullable - private LivingEntity getGrabTarget() { - Entity entity = this.level().getEntity(this.grabTargetId); - return entity instanceof LivingEntity living ? living : null; - } - - private void syncConfiguredAttributes() { - if (this.getAttribute(Attributes.MAX_HEALTH) != null) { - this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(AntarchySettings.triffidHealth()); - } - if (this.getAttribute(Attributes.ATTACK_DAMAGE) != null) { - this.getAttribute(Attributes.ATTACK_DAMAGE).setBaseValue(AntarchySettings.triffidAttackDamage()); - } - } - - private static boolean isLowHealthPrey(LivingEntity target) { - return target.getHealth() <= Math.max((float) AntarchySettings.triffidGrabDamage(), target.getMaxHealth() * 0.35F); - } - - private int getActionState() { - return this.entityData.get(ACTION_STATE); - } - - private void setActionState(int state) { - if (this.entityData.get(ACTION_STATE) != state) { - this.entityData.set(ACTION_STATE, state); - String trigger = switch (state) { - case ACTION_SWEEP -> "attack"; - case ACTION_GRAB -> "grab"; - case ACTION_DEATH -> "death"; - default -> null; - }; - if (trigger != null) { - this.triggerAnim("main_controller", trigger); - } - } - } - - private boolean isAwake() { - return this.entityData.get(AWAKE); - } - - private void setAwake(boolean awake) { - this.entityData.set(AWAKE, awake); - } - - private static boolean isValidLivePrey(@Nullable LivingEntity target) { - return target != null && target.isAlive() && isValidPreyTarget(target); - } - - private static boolean isValidPreyTarget(LivingEntity target) { - if (target instanceof Player player) { - return !player.isCreative() && !player.isSpectator(); - } - return target.getType().is(AntarchyTags.Entities.TRIFFID_PREY); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/UpwardFallingBlockEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/UpwardFallingBlockEntity.java index 7a09e0bd..57e98eb6 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/UpwardFallingBlockEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/UpwardFallingBlockEntity.java @@ -1,19 +1,22 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.content.block.AntimetalScaffoldingBlock; +import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtUtils; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.resources.ResourceKey; +import net.minecraft.server.level.ServerLevel; import net.minecraft.tags.BlockTags; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.MoverType; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.PointedDripstoneBlock; import net.minecraft.world.level.block.state.BlockState; @@ -31,13 +34,19 @@ public class UpwardFallingBlockEntity extends Entity { private static final double RISE_ACCEL = 0.04; private static final double DRAG = 0.98; private static final int MAX_TICKS = 200; + private static final int MAX_LIVE_PER_LEVEL = 200; + private static final double MIN_TRAVEL_FOR_DAMAGE = 1.5; + + private static final Object2IntOpenHashMap> LIVE_COUNT = new Object2IntOpenHashMap<>(); public int time = 0; + private boolean breaksOnLeaves = true; private double distanceTraveled = 0.0; + private boolean counted = false; public UpwardFallingBlockEntity(EntityType type, Level level) { super(type, level); - this.blocksBuilding = true; + this.noPhysics = true; } @Override @@ -49,16 +58,56 @@ public class UpwardFallingBlockEntity extends Entity { return this.entityData.get(DATA_BLOCK_STATE); } - public static void fallUp(Level level, BlockPos pos, BlockState state) { - if (level.isClientSide) return; - // Prevent stacking multiple entities from the same block position - if (!level.getEntitiesOfClass(UpwardFallingBlockEntity.class, new AABB(pos)).isEmpty()) return; + protected double getRiseAccel() { + return RISE_ACCEL; + } - level.removeBlock(pos, false); - UpwardFallingBlockEntity entity = new UpwardFallingBlockEntity(TYPE.get(), level); + public static void fallUp(Level level, BlockPos pos, BlockState state) { + fallUp(level, pos, state, true); + } + + public static void fallUp(Level level, BlockPos pos, BlockState state, boolean breaksOnLeaves) { + if (!(level instanceof ServerLevel serverLevel)) { + return; + } + + ResourceKey dimension = serverLevel.dimension(); + int live = LIVE_COUNT.getInt(dimension); + if (live >= MAX_LIVE_PER_LEVEL) { + live = serverLevel.getEntities(TYPE.get(), Entity::isAlive).size(); + if (live <= 0) { + LIVE_COUNT.removeInt(dimension); + } else { + LIVE_COUNT.put(dimension, live); + } + } + + if (live >= MAX_LIVE_PER_LEVEL) { + return; + } + + serverLevel.removeBlock(pos, false); + UpwardFallingBlockEntity entity = new UpwardFallingBlockEntity(TYPE.get(), serverLevel); entity.entityData.set(DATA_BLOCK_STATE, state); + entity.breaksOnLeaves = breaksOnLeaves; entity.setPos(pos.getX() + 0.5, pos.getY(), pos.getZ() + 0.5); - level.addFreshEntity(entity); + if (serverLevel.addFreshEntity(entity)) { + entity.counted = true; + LIVE_COUNT.addTo(serverLevel.dimension(), 1); + } + } + + @Override + public void remove(Entity.RemovalReason reason) { + if (this.counted) { + this.counted = false; + ResourceKey key = this.level().dimension(); + int remaining = LIVE_COUNT.addTo(key, -1) - 1; + if (remaining <= 0) { + LIVE_COUNT.removeInt(key); + } + } + super.remove(reason); } @Override @@ -75,8 +124,8 @@ public class UpwardFallingBlockEntity extends Entity { } double beforeY = getY(); - setDeltaMovement(getDeltaMovement().add(0.0, RISE_ACCEL, 0.0)); - move(MoverType.SELF, getDeltaMovement()); + setDeltaMovement(getDeltaMovement().add(0.0, getRiseAccel(), 0.0)); + setPos(getX(), getY() + getDeltaMovement().y, getZ()); setDeltaMovement(getDeltaMovement().scale(DRAG)); distanceTraveled += Math.max(0.0, getY() - beforeY); @@ -88,25 +137,40 @@ public class UpwardFallingBlockEntity extends Entity { return; } - damageEntitiesAlongPath(blockState); + if (distanceTraveled > MIN_TRAVEL_FOR_DAMAGE) { + damageEntitiesAlongPath(blockState); + } BlockPos headPos = BlockPos.containing(getX(), getBoundingBox().maxY, getZ()); BlockState above = level().getBlockState(headPos); - // Leaves block the entity but can't hold scaffolding — drop as item - if (above.is(BlockTags.LEAVES)) { + if (above.is(BlockTags.LEAVES) && this.breaksOnLeaves) { dropAndRemove(blockState); return; } boolean hitScaffolding = above.getBlock() instanceof AntimetalScaffoldingBlock; - if (this.verticalCollision || hitScaffolding) { - dropAndRemove(blockState); + boolean hitCeiling = !above.isAir() && !above.getCollisionShape(level(), headPos).isEmpty(); + if (hitCeiling || hitScaffolding) { + placeAtLanding(blockState, headPos.below()); return; } } + private void placeAtLanding(BlockState state, BlockPos landingPos) { + if (!level().isClientSide) { + BlockState existing = level().getBlockState(landingPos); + if (existing.canBeReplaced()) { + level().setBlock(landingPos, state, Block.UPDATE_ALL); + } else { + dropAndRemove(state); + return; + } + } + discard(); + } + private void damageEntitiesAlongPath(BlockState state) { float damage = getImpactDamage(state); if (damage <= 0.0F) { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/WaspEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/WaspEntity.java index 4fb56416..b584315f 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/WaspEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/WaspEntity.java @@ -3,6 +3,9 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; +import com.craisinlord.anthology.gravity.GravityRotationUtil; import java.util.EnumSet; import java.util.Objects; import net.minecraft.core.BlockPos; @@ -100,7 +103,7 @@ public class WaspEntity extends Monster implements GeoEntity, FlyingAnimal { return level.getDifficulty() != Difficulty.PEACEFUL && level.isEmptyBlock(pos) - && level.isEmptyBlock(pos.above()); + && (level.isEmptyBlock(pos.above()) || level.isEmptyBlock(pos.below())); } @Override @@ -304,7 +307,7 @@ public class WaspEntity extends Monster implements GeoEntity, FlyingAnimal { @Override public Vec3 getLeashOffset() { - return new Vec3(0.0D, 0.2D, 0.0D); + return this.toWorld(0.0D, 0.2D, 0.0D); } public boolean isPandaVariant() { @@ -328,6 +331,14 @@ public class WaspEntity extends Monster implements GeoEntity, FlyingAnimal { return !this.onGround(); } + private GravityDirection gravityDirection() { + return GravityApi.getGravityDirection(this); + } + + private Vec3 toWorld(double x, double y, double z) { + return GravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); + } + private void realignHitbox() { double halfWidth = this.getBbWidth() * 0.5D; double height = this.getBbHeight(); diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/WormEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/WormEntity.java index 7d680d09..a4efb6f4 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/WormEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/WormEntity.java @@ -37,7 +37,12 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.MultifaceBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; import net.minecraft.world.phys.Vec3; +import net.minecraft.world.entity.EntityDimensions; +import net.minecraft.world.entity.Pose; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.entity.SpawnGroupData; import software.bernie.geckolib.animatable.GeoEntity; import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; import software.bernie.geckolib.core.animation.AnimatableManager; @@ -48,6 +53,42 @@ import software.bernie.geckolib.core.animation.RawAnimation; import software.bernie.geckolib.util.GeckoLibUtil; public class WormEntity extends Monster implements GeoEntity { + public enum GrowthStage { + SMALL(0, EntityDimensions.scalable(0.55F, 0.8F), 8.0D, 0.29D, 2.0D, 20.0D, 0.05D, 2), + MEDIUM(1, EntityDimensions.scalable(0.9F, 1.5F), 20.0D, 0.25D, 4.0D, 24.0D, 0.2D, 5), + LARGE(2, EntityDimensions.scalable(1.35F, 2.75F), 36.0D, 0.22D, 7.0D, 28.0D, 0.45D, 8); + + private final int id; + private final EntityDimensions dimensions; + private final double health; + private final double speed; + private final double damage; + private final double followRange; + private final double knockbackResistance; + private final int xp; + + GrowthStage(int id, EntityDimensions dimensions, double health, double speed, double damage, + double followRange, double knockbackResistance, int xp) { + this.id = id; + this.dimensions = dimensions; + this.health = health; + this.speed = speed; + this.damage = damage; + this.followRange = followRange; + this.knockbackResistance = knockbackResistance; + this.xp = xp; + } + + public static GrowthStage byId(int id) { + for (GrowthStage stage : values()) { + if (stage.id == id) return stage; + } + return LARGE; + } + } + + private static final int SMALL_GROWTH_TICKS = 20 * 60 * 2; + private static final int MEDIUM_GROWTH_TICKS = 20 * 60 * 3; private static final ResourceKey WORMY_CAVES = ResourceKey.create( Registries.BIOME, new ResourceLocation(Antarchy.MODID, "wormy_caves") @@ -57,6 +98,7 @@ public class WormEntity extends Monster implements GeoEntity { private static final int MUCUS_TRAIL_INTERVAL = 6; private static final double MUCUS_TRAIL_MIN_DISTANCE_SQR = 0.36D; private static final EntityDataAccessor ANIMATION_STATE = SynchedEntityData.defineId(WormEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor GROWTH_STAGE = SynchedEntityData.defineId(WormEntity.class, EntityDataSerializers.INT); private static final int ANIM_INGROUND = 0; private static final int ANIM_CRAWL = 1; private static final int ANIM_ATTACK = 2; @@ -67,6 +109,7 @@ public class WormEntity extends Monster implements GeoEntity { private int attackAnimationTicks; private int mucusTrailCooldown; private Vec3 lastMucusTrailPosition; + private int growthAge; public WormEntity(EntityType entityType, Level level) { super(entityType, level); @@ -103,6 +146,67 @@ public class WormEntity extends Monster implements GeoEntity { protected void defineSynchedData() { super.defineSynchedData(); this.entityData.define(ANIMATION_STATE, ANIM_INGROUND); + this.entityData.define(GROWTH_STAGE, GrowthStage.LARGE.id); + } + + public GrowthStage getGrowthStage() { + return GrowthStage.byId(this.entityData.get(GROWTH_STAGE)); + } + + public void setGrowthStage(GrowthStage stage) { + if (this.entityData.get(GROWTH_STAGE) == stage.id) return; + this.entityData.set(GROWTH_STAGE, stage.id); + this.refreshDimensions(); + this.applyStageAttributes(); + } + + private void applyStageAttributes() { + GrowthStage stage = this.getGrowthStage(); + if (this.getAttribute(Attributes.MAX_HEALTH) != null) this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(stage.health); + if (this.getAttribute(Attributes.MOVEMENT_SPEED) != null) this.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(stage.speed); + if (this.getAttribute(Attributes.ATTACK_DAMAGE) != null) this.getAttribute(Attributes.ATTACK_DAMAGE).setBaseValue(stage.damage); + if (this.getAttribute(Attributes.FOLLOW_RANGE) != null) this.getAttribute(Attributes.FOLLOW_RANGE).setBaseValue(stage.followRange); + if (this.getAttribute(Attributes.KNOCKBACK_RESISTANCE) != null) this.getAttribute(Attributes.KNOCKBACK_RESISTANCE).setBaseValue(stage.knockbackResistance); + this.xpReward = stage.xp; + if (!this.level().isClientSide) this.setHealth(Math.min(this.getHealth(), (float) stage.health)); + } + + @Override + public EntityDimensions getDimensions(Pose pose) { + return this.getGrowthStage().dimensions.scale(this.getScale()); + } + + @Override + public void onSyncedDataUpdated(EntityDataAccessor key) { + super.onSyncedDataUpdated(key); + if (GROWTH_STAGE.equals(key)) this.refreshDimensions(); + } + + @Override + public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnReason, SpawnGroupData spawnData, @org.jetbrains.annotations.Nullable CompoundTag dataTag) { + SpawnGroupData result = super.finalizeSpawn(level, difficulty, spawnReason, spawnData, dataTag); + if (spawnReason == MobSpawnType.NATURAL || spawnReason == MobSpawnType.CHUNK_GENERATION || spawnReason == MobSpawnType.SPAWN_EGG) { + float roll = this.random.nextFloat(); + this.setGrowthStage(roll < 0.4F ? GrowthStage.SMALL : roll < 0.6F ? GrowthStage.MEDIUM : GrowthStage.LARGE); + this.growthAge = 0; + } + return result; + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putInt("GrowthStage", this.getGrowthStage().id); + tag.putInt("GrowthAge", this.growthAge); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + this.entityData.set(GROWTH_STAGE, tag.contains("GrowthStage") ? tag.getInt("GrowthStage") : GrowthStage.LARGE.id); + this.growthAge = tag.getInt("GrowthAge"); + this.refreshDimensions(); + this.applyStageAttributes(); } @Override @@ -153,6 +257,7 @@ public class WormEntity extends Monster implements GeoEntity { if (this.level().isClientSide) { return; } + this.tickGrowth(); this.tickMucusTrail(); if (this.attackAnimationTicks > 0) { this.attackAnimationTicks--; @@ -160,7 +265,21 @@ public class WormEntity extends Monster implements GeoEntity { this.updateAnimationState(); } + private void tickGrowth() { + GrowthStage stage = this.getGrowthStage(); + if (stage == GrowthStage.LARGE) return; + this.growthAge++; + if (stage == GrowthStage.SMALL && this.growthAge >= SMALL_GROWTH_TICKS) { + this.growthAge = 0; + this.setGrowthStage(GrowthStage.MEDIUM); + } else if (stage == GrowthStage.MEDIUM && this.growthAge >= MEDIUM_GROWTH_TICKS) { + this.growthAge = 0; + this.setGrowthStage(GrowthStage.LARGE); + } + } + private void tickMucusTrail() { + if (this.getGrowthStage() == GrowthStage.SMALL) return; if (this.mucusTrailCooldown > 0) { this.mucusTrailCooldown--; } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/WormHookProjectileEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/WormHookProjectileEntity.java index 1a37212a..c57da896 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/WormHookProjectileEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/WormHookProjectileEntity.java @@ -15,10 +15,6 @@ import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.EntityHitResult; import net.minecraft.world.phys.HitResult; -/** - * Thrown out by the worm hook item. Sticks into the first block it hits and stays there, - * anchoring a swing rope back to the thrower until the player detaches. - */ public class WormHookProjectileEntity extends ThrowableItemProjectile { private boolean stuck = false; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/AntArrivalScheduler.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/AntArrivalScheduler.java new file mode 100644 index 00000000..17d67704 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/AntArrivalScheduler.java @@ -0,0 +1,94 @@ +package com.craisinlord.antarchy.content.entity.ant; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import net.minecraft.core.BlockPos; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerChunkCache; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.level.TicketType; +import net.minecraft.world.level.ChunkPos; + +public final class AntArrivalScheduler { + private static final TicketType ARRIVAL_TICKET = TicketType.create("antarchy_ant_arrival", Comparator.comparingLong(ChunkPos::toLong), 300); + private static final int MAX_WAIT_TICKS = 200; + private static final Map PENDING = new LinkedHashMap<>(); + + private AntArrivalScheduler() { + } + + static void request(ServerPlayer player, ServerLevel destination, BlockPos center, int searchRadius, Runnable onLoaded) { + ChunkPos centerChunk = new ChunkPos(center); + int chunkRadius = (searchRadius >> 4) + 1; + destination.getChunkSource().addRegionTicket(ARRIVAL_TICKET, centerChunk, chunkRadius + 1, centerChunk); + PendingArrival arrival = new PendingArrival(player, destination, centerChunk, chunkRadius, onLoaded); + if (arrival.isLoaded()) { + PENDING.remove(player.getUUID()); + onLoaded.run(); + return; + } + PENDING.put(player.getUUID(), arrival); + } + + public static void tick(MinecraftServer server) { + if (PENDING.isEmpty()) { + return; + } + List ready = new ArrayList<>(); + Iterator iterator = PENDING.values().iterator(); + while (iterator.hasNext()) { + PendingArrival arrival = iterator.next(); + if (arrival.destination.getServer() != server || arrival.player.hasDisconnected() || arrival.player.isRemoved()) { + iterator.remove(); + continue; + } + arrival.waitedTicks++; + if (arrival.waitedTicks >= MAX_WAIT_TICKS || arrival.isLoaded()) { + iterator.remove(); + ready.add(arrival); + } + } + for (PendingArrival arrival : ready) { + arrival.onLoaded.run(); + } + } + + public static void clear() { + PENDING.clear(); + } + + private static final class PendingArrival { + private final ServerPlayer player; + private final ServerLevel destination; + private final ChunkPos center; + private final int chunkRadius; + private final Runnable onLoaded; + private int waitedTicks; + + private PendingArrival(ServerPlayer player, ServerLevel destination, ChunkPos center, int chunkRadius, Runnable onLoaded) { + this.player = player; + this.destination = destination; + this.center = center; + this.chunkRadius = chunkRadius; + this.onLoaded = onLoaded; + } + + private boolean isLoaded() { + ServerChunkCache chunks = this.destination.getChunkSource(); + for (int chunkX = this.center.x - this.chunkRadius; chunkX <= this.center.x + this.chunkRadius; chunkX++) { + for (int chunkZ = this.center.z - this.chunkRadius; chunkZ <= this.center.z + this.chunkRadius; chunkZ++) { + if (chunks.getChunkNow(chunkX, chunkZ) == null) { + return false; + } + } + } + return true; + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/AntTeleportHelper.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/AntTeleportHelper.java index a8fcbf49..1d09e24c 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/AntTeleportHelper.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/AntTeleportHelper.java @@ -1,16 +1,18 @@ package com.craisinlord.antarchy.content.entity.ant; import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.portal.PermanentPortalType; import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; +import java.util.function.Consumer; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceKey; -import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; +import net.minecraft.network.chat.Component; import net.minecraft.server.level.PlayerRespawnLogic; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; @@ -27,13 +29,19 @@ import net.minecraft.world.entity.vehicle.DismountHelper; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.Nullable; public final class AntTeleportHelper { private static final double COMPANION_FOLLOW_RADIUS = 16.0D; + private static final int ARRIVAL_SEARCH_RADIUS = 24; + private static final int ARRIVAL_VERTICAL_SEARCH = 24; + private static final int EXPANDED_ARRIVAL_SEARCH_RADIUS = 48; + private static final int EXPANDED_ARRIVAL_VERTICAL_SEARCH = 48; private AntTeleportHelper() { } @@ -116,17 +124,13 @@ public final class AntTeleportHelper { return InteractionResult.PASS; } - Vec3 destinationPos = getDestinationPosition(player, destination); - teleportPlayerWithCompanions(player, destination, destinationPos); - player.playSound(SoundEvents.ENDERMAN_TELEPORT, 1.0F, 1.0F); + arriveWithCompanions(player, destination); return InteractionResult.CONSUME; } public static InteractionResult teleportPlayerToReturnDestination(ServerPlayer player) { ServerLevel destination = resolveReturnDestinationLevel(player); - Vec3 destinationPos = getDestinationPosition(player, destination); - teleportPlayerWithCompanions(player, destination, destinationPos); - player.playSound(SoundEvents.ENDERMAN_TELEPORT, 1.0F, 1.0F); + arriveWithCompanions(player, destination); return InteractionResult.CONSUME; } @@ -163,9 +167,7 @@ public final class AntTeleportHelper { return InteractionResult.PASS; } - Vec3 destinationPos = getDestinationPosition(player, destination); - teleportPlayerWithCompanions(player, destination, destinationPos); - player.playSound(SoundEvents.ENDERMAN_TELEPORT, 1.0F, 1.0F); + arriveWithCompanions(player, destination); return InteractionResult.CONSUME; } @@ -239,6 +241,42 @@ public final class AntTeleportHelper { return InteractionResult.CONSUME; } + private static void arriveWithCompanions(ServerPlayer player, ServerLevel destination) { + prepareArrival(player, destination, destinationPos -> { + if (destinationPos == null) { + failArrival(player); + return; + } + teleportPlayerWithCompanions(player, destination, destinationPos); + player.playSound(SoundEvents.ENDERMAN_TELEPORT, 1.0F, 1.0F); + }); + } + + public static void prepareArrival(ServerPlayer player, ServerLevel destination, Consumer onArrival) { + BlockPos preferredPos = preferredArrivalPos(player, destination); + AntArrivalScheduler.request(player, destination, preferredPos, ARRIVAL_SEARCH_RADIUS, () -> { + int[] yRange = getDimensionYRange(destination); + if (yRange == null) { + onArrival.accept(findSafeArrivalPositionAnywhere(player, destination, preferredPos)); + return; + } + Vec3 safePos = findSafeArrivalPositionInYRange( + player, destination, preferredPos, yRange[0], yRange[1], ARRIVAL_SEARCH_RADIUS, ARRIVAL_VERTICAL_SEARCH); + if (safePos != null) { + onArrival.accept(safePos); + return; + } + AntArrivalScheduler.request(player, destination, preferredPos, EXPANDED_ARRIVAL_SEARCH_RADIUS, () -> { + Vec3 expandedSafePos = findSafeArrivalPositionInYRange( + player, destination, preferredPos, yRange[0], yRange[1], + EXPANDED_ARRIVAL_SEARCH_RADIUS, EXPANDED_ARRIVAL_VERTICAL_SEARCH); + onArrival.accept(expandedSafePos != null + ? expandedSafePos + : createEmergencyArrivalPlatform(destination, preferredPos, yRange[0], yRange[1])); + }); + }); + } + public static ServerLevel resolveReturnDestinationLevel(ServerPlayer player) { ResourceKey respawnDimension = player.getRespawnDimension(); ServerLevel destination = player.server.getLevel(respawnDimension); @@ -249,34 +287,42 @@ public final class AntTeleportHelper { return player.server.overworld(); } + @Nullable public static Vec3 getDestinationPosition(ServerPlayer player, ServerLevel destination) { + return findSafeArrivalPosition(player, destination, preferredArrivalPos(player, destination)); + } + + private static BlockPos preferredArrivalPos(ServerPlayer player, ServerLevel destination) { BlockPos respawnPos = player.getRespawnPosition(); - BlockPos preferredPos; if (respawnPos != null && destination.dimension() == player.getRespawnDimension()) { - preferredPos = respawnPos; - } else { - preferredPos = destination.dimension() == Level.END ? ServerLevel.END_SPAWN_POINT : destination.getSharedSpawnPos(); + return respawnPos; } - - Vec3 safeArrivalPos = findSafeArrivalPosition(player, destination, preferredPos); - if (safeArrivalPos != null) { - return safeArrivalPos; - } - - if (destination.hasChunkAt(preferredPos)) { - return Vec3.atBottomCenterOf(preferredPos); - } - - return Vec3.atBottomCenterOf(getClampedFallbackPosition(destination, preferredPos)); + return destination.dimension() == Level.END ? ServerLevel.END_SPAWN_POINT : destination.getSharedSpawnPos(); } @Nullable private static Vec3 findSafeArrivalPosition(ServerPlayer player, ServerLevel destination, BlockPos preferredPos) { + loadArrivalSearchArea(destination, preferredPos, ARRIVAL_SEARCH_RADIUS); int[] yRange = getDimensionYRange(destination); if (yRange != null) { - return findSafeArrivalPositionInYRange(player, destination, preferredPos, yRange[0], yRange[1]); + Vec3 safePos = findSafeArrivalPositionInYRange( + player, destination, preferredPos, yRange[0], yRange[1], ARRIVAL_SEARCH_RADIUS, ARRIVAL_VERTICAL_SEARCH); + if (safePos != null) { + return safePos; + } + + loadArrivalSearchArea(destination, preferredPos, EXPANDED_ARRIVAL_SEARCH_RADIUS); + Vec3 expandedSafePos = findSafeArrivalPositionInYRange( + player, destination, preferredPos, yRange[0], yRange[1], + EXPANDED_ARRIVAL_SEARCH_RADIUS, EXPANDED_ARRIVAL_VERTICAL_SEARCH); + return expandedSafePos != null ? expandedSafePos : createEmergencyArrivalPlatform(destination, preferredPos, yRange[0], yRange[1]); } + return findSafeArrivalPositionAnywhere(player, destination, preferredPos); + } + + @Nullable + private static Vec3 findSafeArrivalPositionAnywhere(ServerPlayer player, ServerLevel destination, BlockPos preferredPos) { Set candidates = new LinkedHashSet<>(); BlockPos adjustedPreferredPos = preferredPos; addArrivalCandidate(candidates, preferredPos); @@ -288,7 +334,7 @@ public final class AntTeleportHelper { addArrivalCandidate(candidates, PlayerRespawnLogic.getSpawnPosInChunk(destination, new ChunkPos(adjustedPreferredPos))); } - for (int radius = 0; radius <= 4; radius++) { + for (int radius = 0; radius <= ARRIVAL_SEARCH_RADIUS; radius++) { for (int xOffset = -radius; xOffset <= radius; xOffset++) { for (int zOffset = -radius; zOffset <= radius; zOffset++) { if (radius > 0 && Math.abs(xOffset) != radius && Math.abs(zOffset) != radius) { @@ -311,24 +357,82 @@ public final class AntTeleportHelper { } } + return createEmergencyArrivalPlatform(destination, preferredPos, destination.getMinBuildHeight() + 1, destination.getMaxBuildHeight() - 3); + } + + @Nullable + private static Vec3 createEmergencyArrivalPlatform(ServerLevel destination, BlockPos preferredPos, int minY, int maxY) { + int y = Mth.clamp(preferredPos.getY(), minY, maxY); + int centerX = preferredPos.getX(); + int centerZ = preferredPos.getZ(); + for (int radius = 0; radius <= EXPANDED_ARRIVAL_SEARCH_RADIUS; radius++) { + for (int xOff = -radius; xOff <= radius; xOff++) { + for (int zOff = -radius; zOff <= radius; zOff++) { + if (radius > 0 && Math.abs(xOff) != radius && Math.abs(zOff) != radius) continue; + int x = centerX + xOff; + int z = centerZ + zOff; + BlockPos floor = new BlockPos(x, y - 1, z); + boolean withinBorder = true; + for (int dx = -2; dx <= 2 && withinBorder; dx++) { + for (int dz = -2; dz <= 2; dz++) { + BlockPos check = floor.offset(dx, 0, dz); + if (!destination.getWorldBorder().isWithinBounds(check) || !destination.hasChunkAt(check.above(3))) { + withinBorder = false; + break; + } + } + } + if (!withinBorder) continue; + for (int dx = -2; dx <= 2; dx++) { + for (int dz = -2; dz <= 2; dz++) { + BlockPos pad = floor.offset(dx, 0, dz); + destination.setBlock(pad, Blocks.COBBLESTONE.defaultBlockState(), Block.UPDATE_ALL); + for (int dy = 1; dy <= 3; dy++) { + destination.setBlock(pad.above(dy), Blocks.AIR.defaultBlockState(), Block.UPDATE_ALL); + } + } + } + Vec3 safePos = new Vec3(x + 0.5D, y, z + 0.5D); + if (isValidArrivalPosition(destination, safePos)) return safePos; + } + } + } return null; } + private static void loadArrivalSearchArea(ServerLevel destination, BlockPos preferredPos, int searchRadius) { + ChunkPos center = new ChunkPos(preferredPos); + int chunkRadius = (searchRadius >> 4) + 1; + for (int chunkX = center.x - chunkRadius; chunkX <= center.x + chunkRadius; chunkX++) { + for (int chunkZ = center.z - chunkRadius; chunkZ <= center.z + chunkRadius; chunkZ++) { + destination.getChunk(chunkX, chunkZ); + } + } + } + @Nullable private static int[] getDimensionYRange(ServerLevel destination) { ResourceKey dim = destination.dimension(); + if (dim == PermanentPortalType.ELYTHIA.primaryDimension()) { + return new int[]{64, 240}; + } if (dim == AntarchySettings.termiteDestinationDimension()) { return new int[]{100, 200}; } if (dim == AntarchySettings.brownAntDestinationDimension()) { - return new int[]{75, 120}; + return new int[]{60, 240}; + } + if (dim == AntarchySettings.redAntDestinationDimension()) { + return new int[]{0, 220}; } return null; } @Nullable - private static Vec3 findSafeArrivalPositionInYRange(ServerPlayer player, ServerLevel destination, BlockPos preferredPos, int minY, int maxY) { - for (int radius = 0; radius <= 8; radius++) { + private static Vec3 findSafeArrivalPositionInYRange(ServerPlayer player, ServerLevel destination, BlockPos preferredPos, int minY, int maxY, int searchRadius, int verticalSearch) { + Set surfaceCandidates = new LinkedHashSet<>(); + boolean elythia = destination.dimension() == PermanentPortalType.ELYTHIA.primaryDimension(); + for (int radius = 0; radius <= searchRadius; radius++) { for (int xOff = -radius; xOff <= radius; xOff++) { for (int zOff = -radius; zOff <= radius; zOff++) { if (radius > 0 && Math.abs(xOff) != radius && Math.abs(zOff) != radius) { @@ -336,7 +440,53 @@ public final class AntTeleportHelper { } int x = preferredPos.getX() + xOff; int z = preferredPos.getZ() + zOff; - for (int y = maxY; y >= minY + 1; y--) { + BlockPos column = new BlockPos(x, preferredPos.getY(), z); + if (!destination.hasChunkAt(column)) { + continue; + } + + BlockPos surface = destination.getHeightmapPos(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, column); + if (elythia) { + surfaceCandidates.add(surface); + surfaceCandidates.add(surface.above()); + } else { + addArrivalCandidate(surfaceCandidates, surface); + addArrivalCandidate(surfaceCandidates, destination.getHeightmapPos(Heightmap.Types.WORLD_SURFACE, column)); + } + + for (int yOffset = 1; yOffset <= verticalSearch; yOffset++) { + surfaceCandidates.add(surface.above(yOffset)); + if (!elythia) { + surfaceCandidates.add(surface.below(yOffset)); + } + } + } + } + } + + for (BlockPos candidate : surfaceCandidates) { + if (candidate.getY() < minY || candidate.getY() > maxY) { + continue; + } + Vec3 safePos = tryFindSafeDismount(player, destination, candidate); + if (safePos != null && safePos.y >= minY && safePos.y <= maxY) { + return safePos; + } + } + + if (elythia) { + return null; + } + + for (int radius = 0; radius <= searchRadius; radius++) { + for (int xOff = -radius; xOff <= radius; xOff++) { + for (int zOff = -radius; zOff <= radius; zOff++) { + if (radius > 0 && Math.abs(xOff) != radius && Math.abs(zOff) != radius) { + continue; + } + int x = preferredPos.getX() + xOff; + int z = preferredPos.getZ() + zOff; + for (int y = minY + 1; y <= maxY; y++) { Vec3 safePos = tryFindSafeDismount(player, destination, new BlockPos(x, y, z)); if (safePos != null && safePos.y >= minY && safePos.y <= maxY) { return safePos; @@ -387,6 +537,37 @@ public final class AntTeleportHelper { } private static boolean isValidArrivalPosition(ServerLevel destination, Vec3 safePos) { + if (destination.dimension() == PermanentPortalType.ELYTHIA.primaryDimension()) { + BlockPos feet = BlockPos.containing(safePos); + BlockPos supportPos = feet.below(); + if (!destination.hasChunkAt(supportPos)) { + return false; + } + BlockState support = destination.getBlockState(supportPos); + if (!support.isFaceSturdy(destination, supportPos, Direction.UP) + || !support.getFluidState().isEmpty() + || support.is(net.minecraft.tags.BlockTags.LEAVES)) { + return false; + } + + int nearbySupports = 0; + for (Direction direction : Direction.Plane.HORIZONTAL) { + for (int yOffset = -2; yOffset <= 2; yOffset++) { + BlockPos nearby = supportPos.relative(direction).offset(0, yOffset, 0); + BlockState nearbyState = destination.getBlockState(nearby); + if (nearbyState.isFaceSturdy(destination, nearby, Direction.UP) + && nearbyState.getFluidState().isEmpty() + && !nearbyState.is(net.minecraft.tags.BlockTags.LEAVES)) { + nearbySupports++; + break; + } + } + } + if (nearbySupports < 2) { + return false; + } + } + if (destination.dimension() != AntarchySettings.termiteDestinationDimension()) { return true; } @@ -414,9 +595,8 @@ public final class AntTeleportHelper { return true; } - private static BlockPos getClampedFallbackPosition(ServerLevel destination, BlockPos preferredPos) { - int minY = destination.getMinBuildHeight() + 1; - int maxY = destination.getMaxBuildHeight() - 1; - return new BlockPos(preferredPos.getX(), Mth.clamp(preferredPos.getY(), minY, maxY), preferredPos.getZ()); + private static InteractionResult failArrival(ServerPlayer player) { + player.displayClientMessage(Component.translatable("message.antarchy.teleport_arrival_failed"), true); + return InteractionResult.CONSUME; } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/BaseAntEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/BaseAntEntity.java index b175f9b8..09b5b0ea 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/BaseAntEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/BaseAntEntity.java @@ -94,6 +94,7 @@ public abstract class BaseAntEntity extends Animal implements GeoEntity { private static final int NEST_SEARCH_INTERVAL_TICKS = 80; private static final int FOOD_NEST_SEARCH_INTERVAL_TICKS = 20; private static final int CHEST_SEARCH_INTERVAL_TICKS = 20; + private static final int CHEST_VALIDATION_INTERVAL_TICKS = 10; private static final int SHARED_CHEST_MEMORY_TICKS = 120; private static final double FOOD_CHEST_SEARCH_RADIUS = 20.0D; private static final int GROUND_FOOD_CACHE_INTERVAL_TICKS = 20; @@ -135,6 +136,10 @@ public abstract class BaseAntEntity extends Animal implements GeoEntity { private BlockPos targetFoodChestPos; private int nextFoodChestSearchTick; @Nullable + private BlockPos cachedFoodChestValidationPos; + private boolean cachedFoodChestValidationResult; + private int nextFoodChestValidationTick; + @Nullable private BlockPos recentFoodChestPos; private int recentFoodChestExpireTick; @Nullable @@ -741,17 +746,36 @@ public abstract class BaseAntEntity extends Animal implements GeoEntity { } } + if (bestPos != null) { + this.cachedFoodChestValidationPos = bestPos; + this.cachedFoodChestValidationResult = true; + this.nextFoodChestValidationTick = this.tickCount + CHEST_VALIDATION_INTERVAL_TICKS; + } return bestPos; } private boolean isValidFoodChest(BlockPos chestPos) { + if (this.cachedFoodChestValidationPos != null + && this.cachedFoodChestValidationPos.equals(chestPos) + && this.tickCount < this.nextFoodChestValidationTick) { + return this.cachedFoodChestValidationResult; + } + BlockEntity blockEntity = this.level().getBlockEntity(chestPos); - return blockEntity instanceof ChestBlockEntity chestBlockEntity && this.findStealableFoodSlot(chestBlockEntity) >= 0; + boolean valid = blockEntity instanceof ChestBlockEntity chestBlockEntity + && this.findStealableFoodSlot(chestBlockEntity) >= 0; + this.cachedFoodChestValidationPos = chestPos.immutable(); + this.cachedFoodChestValidationResult = valid; + this.nextFoodChestValidationTick = this.tickCount + CHEST_VALIDATION_INTERVAL_TICKS; + return valid; } private void clearFoodChestTarget() { this.targetFoodChestPos = null; this.nextFoodChestSearchTick = 0; + this.cachedFoodChestValidationPos = null; + this.cachedFoodChestValidationResult = false; + this.nextFoodChestValidationTick = 0; } private boolean stealFoodFromChest(BlockPos chestPos) { @@ -1291,6 +1315,7 @@ public abstract class BaseAntEntity extends Animal implements GeoEntity { return AntTeleportHelper.resolveReturnDestinationLevel(player); } + @Nullable protected Vec3 getDestinationPosition(ServerLevel destination, ServerPlayer player) { return AntTeleportHelper.getDestinationPosition(player, destination); } @@ -1382,13 +1407,16 @@ public abstract class BaseAntEntity extends Animal implements GeoEntity { return null; } - if (leader.targetFoodChestPos != null && this.isValidFoodChest(leader.targetFoodChestPos)) { + if (leader.targetFoodChestPos != null + && leader.cachedFoodChestValidationPos != null + && leader.cachedFoodChestValidationPos.equals(leader.targetFoodChestPos) + && leader.cachedFoodChestValidationResult + && leader.tickCount < leader.nextFoodChestValidationTick) { return leader.targetFoodChestPos; } if (leader.recentFoodChestPos != null - && leader.tickCount <= leader.recentFoodChestExpireTick - && this.isValidFoodChest(leader.recentFoodChestPos)) { + && leader.tickCount <= leader.recentFoodChestExpireTick) { return leader.recentFoodChestPos; } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/RainbowAntEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/RainbowAntEntity.java index f1fdfd58..d8a18f68 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/RainbowAntEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/RainbowAntEntity.java @@ -2,6 +2,7 @@ package com.craisinlord.antarchy.content.entity.ant; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.compat.infinity.InfinityCompat; +import com.craisinlord.antarchy.compat.infinity.InfinityWarpResult; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.portal.RainbowPortalIgniter; @@ -62,7 +63,8 @@ public class RainbowAntEntity extends BaseAntEntity implements GeoEntity { return AntTeleportHelper.teleportPlayerToDimension(player, AntarchySettings.rainbowAntNonInfinityFallbackDimension()); } - if (!InfinityCompat.get().requestWarp(player, dimensionId)) { + InfinityWarpResult result = InfinityCompat.get().requestWarp(player, dimensionId); + if (result == InfinityWarpResult.REJECTED) { player.displayClientMessage(Component.translatable("message.antarchy.rainbow_ant_failed_dimension_create"), true); return InteractionResult.CONSUME; } @@ -76,11 +78,6 @@ public class RainbowAntEntity extends BaseAntEntity implements GeoEntity { return this.hasActiveInfinityDestination() || super.requiresCustomPersistence(); } - /** - * Called on death. If this ant has already been activated (fed its reagent) and Infinity integration is - * enabled, looks for a nearby unlit obsidian Nether-portal frame and, if found, ignites it as a permanent - * physical Infinity Dimensions portal to this ant's assigned dimension. - */ public boolean tryIgniteInfinityPortalOnDeath() { if (!this.infinityActivated) { return false; @@ -120,9 +117,14 @@ public class RainbowAntEntity extends BaseAntEntity implements GeoEntity { if (this.isInInfinityDimension(serverPlayer.serverLevel())) { ServerLevel returnLevel = this.resolveReturnDestinationLevel(serverPlayer); - Vec3 returnPos = this.getDestinationPosition(returnLevel, serverPlayer); - serverPlayer.teleportTo(returnLevel, returnPos.x, returnPos.y, returnPos.z, serverPlayer.getYRot(), serverPlayer.getXRot()); - serverPlayer.playSound(SoundEvents.ENDERMAN_TELEPORT, 1.0F, 1.0F); + AntTeleportHelper.prepareArrival(serverPlayer, returnLevel, returnPos -> { + if (returnPos == null) { + serverPlayer.displayClientMessage(Component.translatable("message.antarchy.teleport_arrival_failed"), true); + return; + } + serverPlayer.teleportTo(returnLevel, returnPos.x, returnPos.y, returnPos.z, serverPlayer.getYRot(), serverPlayer.getXRot()); + serverPlayer.playSound(SoundEvents.ENDERMAN_TELEPORT, 1.0F, 1.0F); + }); return InteractionResult.CONSUME; } @@ -351,9 +353,13 @@ public class RainbowAntEntity extends BaseAntEntity implements GeoEntity { } private boolean teleportToInfinity(ServerPlayer player, ResourceLocation dimensionId) { - if (!InfinityCompat.get().requestWarp(player, dimensionId)) { + InfinityWarpResult result = InfinityCompat.get().requestWarp(player, dimensionId); + if (result == InfinityWarpResult.FAILED_GENERATION) { this.deleteGeneratedArtifacts(player.server, dimensionId); - this.markForRerollOnNextReagent(); + player.displayClientMessage(Component.translatable("message.antarchy.rainbow_ant_failed_dimension_create"), true); + return false; + } + if (result == InfinityWarpResult.REJECTED) { player.displayClientMessage(Component.translatable("message.antarchy.rainbow_ant_failed_dimension_create"), true); return false; } @@ -372,9 +378,7 @@ public class RainbowAntEntity extends BaseAntEntity implements GeoEntity { .resolve(dimensionId.getPath()); this.deletePathRecursively(datapackPath); - if (dimensionPath != null) { - this.deletePathRecursively(dimensionPath); - } + this.deletePathRecursively(dimensionPath); } private void deletePathRecursively(Path path) { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/TermiteEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/TermiteEntity.java index 304d521d..8a398744 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/TermiteEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/TermiteEntity.java @@ -16,6 +16,7 @@ import net.minecraft.world.entity.EntityType; import net.minecraft.world.item.Item; import net.minecraft.world.level.GameRules; import net.minecraft.world.level.Level; +import net.minecraft.world.level.LightLayer; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.RotatedPillarBlock; import net.minecraft.world.level.block.SoundType; @@ -32,6 +33,8 @@ public class TermiteEntity extends BaseAntEntity implements GeoEntity { private static final int WOOD_REPATH_INTERVAL_TICKS = 6; private static final int WOOD_SEARCH_RADIUS_HORIZONTAL = 12; private static final int WOOD_SEARCH_RADIUS_VERTICAL = 4; + private static final int LIGHT_FLEE_SEARCH_RADIUS = 6; + private static final int LIGHT_FLEE_SEARCH_INTERVAL_TICKS = 10; private static final Vec3i[] IMMEDIATE_WOOD_OFFSETS = { new Vec3i(0, 1, 0), new Vec3i(0, 0, -1), @@ -48,6 +51,7 @@ public class TermiteEntity extends BaseAntEntity implements GeoEntity { private int nextWoodBiteTick; private int nextWoodSearchTick; private int nextWoodRepathTick; + private int nextLightFleeSearchTick; public TermiteEntity(EntityType entityType, Level level) { super(entityType, level); @@ -113,6 +117,12 @@ public class TermiteEntity extends BaseAntEntity implements GeoEntity { @Override protected boolean handlePriorityForaging() { + if (this.isBlockLit(this.blockPosition())) { + this.targetWoodPos = null; + this.fleeBlockLight(); + return true; + } + if (!this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) || !this.level().getGameRules().getBoolean(AntarchyGameRules.RULE_DO_TERMITE_GREIFING)) { this.targetWoodPos = null; @@ -142,6 +152,45 @@ public class TermiteEntity extends BaseAntEntity implements GeoEntity { return true; } + private void fleeBlockLight() { + if (this.tickCount < this.nextLightFleeSearchTick && !this.getNavigation().isDone()) { + return; + } + this.nextLightFleeSearchTick = this.tickCount + LIGHT_FLEE_SEARCH_INTERVAL_TICKS; + + BlockPos origin = this.blockPosition(); + BlockPos bestPos = null; + int bestLight = this.level().getBrightness(LightLayer.BLOCK, origin); + double bestDistance = -1.0D; + BlockPos.MutableBlockPos candidate = new BlockPos.MutableBlockPos(); + for (int dx = -LIGHT_FLEE_SEARCH_RADIUS; dx <= LIGHT_FLEE_SEARCH_RADIUS; dx++) { + for (int dz = -LIGHT_FLEE_SEARCH_RADIUS; dz <= LIGHT_FLEE_SEARCH_RADIUS; dz++) { + if (dx * dx + dz * dz > LIGHT_FLEE_SEARCH_RADIUS * LIGHT_FLEE_SEARCH_RADIUS) continue; + for (int dy = -2; dy <= 2; dy++) { + candidate.set(origin.getX() + dx, origin.getY() + dy, origin.getZ() + dz); + if (!this.isWalkableStandPos(candidate)) continue; + int light = this.level().getBrightness(LightLayer.BLOCK, candidate); + double distance = candidate.distSqr(origin); + if (light > bestLight || (light == bestLight && distance <= bestDistance)) continue; + bestPos = candidate.immutable(); + bestLight = light; + bestDistance = distance; + } + } + } + + if (bestPos == null) { + this.getNavigation().stop(); + return; + } + Path path = this.getNavigation().createPath(bestPos, 0); + if (path == null || !path.canReach()) { + this.getNavigation().stop(); + return; + } + this.getNavigation().moveTo(bestPos.getX() + 0.5D, bestPos.getY(), bestPos.getZ() + 0.5D, 1.2D); + } + private boolean tryEatNearbyWood() { if (this.tickCount < this.nextWoodBiteTick) { return false; @@ -151,7 +200,7 @@ public class TermiteEntity extends BaseAntEntity implements GeoEntity { for (Vec3i offset : IMMEDIATE_WOOD_OFFSETS) { BlockPos targetPos = basePos.offset(offset); BlockState targetState = this.level().getBlockState(targetPos); - if (!this.isTermiteEdible(targetState)) { + if (this.isBlockLit(targetPos) || !this.isTermiteEdible(targetState)) { continue; } @@ -211,7 +260,6 @@ public class TermiteEntity extends BaseAntEntity implements GeoEntity { } continue; } - // North/South faces (dz = ±r) for (int dx = -r; dx <= r; dx++) { candidate.set(ox + dx, oy + dy, oz - r); if (this.isValidWoodTarget(candidate)) { @@ -224,7 +272,6 @@ public class TermiteEntity extends BaseAntEntity implements GeoEntity { if (d < bestDistSq) { bestDistSq = d; bestPos = candidate.immutable(); } } } - // East/West faces (dx = ±r, corners already covered above) for (int dz = -r + 1; dz <= r - 1; dz++) { candidate.set(ox - r, oy + dy, oz + dz); if (this.isValidWoodTarget(candidate)) { @@ -244,7 +291,12 @@ public class TermiteEntity extends BaseAntEntity implements GeoEntity { } private boolean isValidWoodTarget(BlockPos targetPos) { - return this.isTermiteEdible(this.level().getBlockState(targetPos)); + return !this.isBlockLit(targetPos) && this.isTermiteEdible(this.level().getBlockState(targetPos)); + } + + private boolean isBlockLit(BlockPos pos) { + return AntarchySettings.termitesFearBlockLight() + && this.level().getBrightness(LightLayer.BLOCK, pos) > 0; } private boolean isTermiteEdible(BlockState state) { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/basilisk/BasiliskEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/basilisk/BasiliskEntity.java index b8f5ed8b..060230df 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/basilisk/BasiliskEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/basilisk/BasiliskEntity.java @@ -4,9 +4,11 @@ import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.antarchy.content.boss.BossCombatUtil; import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundEvent; import net.minecraft.util.Mth; @@ -63,6 +65,8 @@ public class BasiliskEntity extends Monster implements GeoEntity { SynchedEntityData.defineId(BasiliskEntity.class, EntityDataSerializers.INT); private static final byte ATTACK_ENTITY_EVENT = 4; private static final int DEATH_TICKS = 25; + private static final String TAG_HISS_COOLDOWN = "BasiliskHissCooldown"; + private static final String TAG_PREY_PETRIFY_COOLDOWN = "BasiliskPreyPetrifyCooldown"; private static final int ANIM_IDLE = 0; private static final int ANIM_WALK = 1; @@ -74,13 +78,15 @@ public class BasiliskEntity extends Monster implements GeoEntity { private static final RawAnimation ATTACK_ANIM = RawAnimation.begin().thenPlay("attack"); private static final RawAnimation DEATH_ANIM = RawAnimation.begin().thenPlay("death"); - private static final float TURN_RATE_DEG_PER_TICK = 10.0F; + private static final float MIN_TURN_RATE_DEG_PER_TICK = 5.5F; + private static final float MAX_TURN_RATE_DEG_PER_TICK = 13.5F; private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); private int attackAnimTicks = 0; private boolean attackDamagePending = false; private int attackCooldown = 0; + private float committedAttackYaw = Float.NaN; private int hissCooldown = AntarchySettings.basiliskHissCooldownTicks(); private int hissChargeTimer = 0; @@ -107,7 +113,22 @@ public class BasiliskEntity extends Monster implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, AntarchySettings.basiliskAttackDamage()) .add(Attributes.ARMOR, AntarchySettings.basiliskArmor()) .add(Attributes.KNOCKBACK_RESISTANCE, AntarchySettings.basiliskKnockbackResistance()) - .add(Attributes.FOLLOW_RANGE, AntarchySettings.basiliskFollowRange()); + .add(Attributes.FOLLOW_RANGE, AntarchySettings.basiliskFollowRange()) + .add(Attributes.ARMOR_TOUGHNESS, AntarchySettings.basiliskArmorToughness()); + } + + @Override + public boolean hurt(DamageSource source, float amount) { + if (BossCombatUtil.isMagicWarded(this) && BossCombatUtil.isMagicBurstSource(source)) { + amount *= (1.0F - (float) AntarchySettings.bossMagicWardReductionFraction()); + } + return super.hurt(source, amount); + } + + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, net.minecraft.world.entity.MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData, @org.jetbrains.annotations.Nullable net.minecraft.nbt.CompoundTag dataTag) { + com.craisinlord.antarchy.content.entity.ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.basiliskHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData, dataTag); } public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, @@ -119,9 +140,9 @@ public class BasiliskEntity extends Monster implements GeoEntity { } return level.getDifficulty() != Difficulty.PEACEFUL - && pos.getY() >= 60 && pos.getY() <= 90 + && pos.getY() >= 60 && pos.getY() <= 100 && level.getMaxLocalRawBrightness(pos) <= AntarchySettings.basiliskSpawnMaxLightLevel() - && level.getEntitiesOfClass(BasiliskEntity.class, new AABB(pos).inflate(40.0D), Entity::isAlive).isEmpty() + && level.getEntitiesOfClass(BasiliskEntity.class, new AABB(pos).inflate(36.0D), Entity::isAlive).isEmpty() && Monster.checkMonsterSpawnRules(entityType, level, spawnReason, pos, random); } @@ -160,9 +181,12 @@ public class BasiliskEntity extends Monster implements GeoEntity { private void performAoeAttack() { if (this.level().isClientSide) return; - // Start the animation; damage fires later in tick() when attackAnimTicks reaches the damage threshold + this.committedAttackYaw = this.resolveCommittedAttackYaw(); this.attackAnimTicks = AntarchySettings.basiliskAttackAnimTicks(); this.attackDamagePending = true; + this.stopActiveMovement(); + this.lockBodyYaw(this.committedAttackYaw); + this.setAnimationState(ANIM_ATTACK); this.level().broadcastEntityEvent(this, ATTACK_ENTITY_EVENT); } @@ -173,33 +197,42 @@ public class BasiliskEntity extends Monster implements GeoEntity { this.attackDamagePending = false; - Vec3 forward = Vec3.directionFromRotation(0, this.yBodyRot); + float attackYaw = Float.isNaN(this.committedAttackYaw) ? this.yBodyRot : this.committedAttackYaw; + Vec3 forward = Vec3.directionFromRotation(0, attackYaw); Vec3 right = new Vec3(-forward.z, 0, forward.x); - Vec3 origin = this.position(); - double attackReach = AntarchySettings.basiliskAttackReach(); + Vec3 attackOrigin = this.position(); + double attackReach = AntarchySettings.basiliskAttackReach() + 4.0D; + double verticalMin = attackOrigin.y - 0.9D; + double verticalMax = attackOrigin.y + 2.6D; List candidates = this.level().getEntitiesOfClass( LivingEntity.class, - this.getBoundingBox().inflate(Math.max(8.0D, attackReach + 3.5D)), + new AABB(attackOrigin, attackOrigin).inflate(attackReach + 1.5D, 3.0D, attackReach + 1.5D), e -> e != this && e.isAlive() ); - boolean hitAnything = false; for (LivingEntity entity : candidates) { - Vec3 toEntity = entity.position().subtract(origin); + if (!this.canAttack(entity) || this.isAlliedTo(entity) || !this.hasLineOfSight(entity)) { + continue; + } + + AABB entityBox = entity.getBoundingBox(); + if (entityBox.maxY < verticalMin || entityBox.minY > verticalMax) { + continue; + } + + Vec3 toEntity = entityBox.getCenter().subtract(attackOrigin); double fwdDist = toEntity.dot(forward); double sideDist = toEntity.dot(right); - double upDist = toEntity.y; - if (fwdDist >= 2.0 && fwdDist <= 7.0 && Math.abs(sideDist) <= 2.25 && upDist >= -1.0 && upDist <= 3.0) { - if (entity.hurt(AntarchyDamageSources.basiliskBite(serverLevel, this), - (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE))) { - hitAnything = true; - } + double sideAllowance = 1.35D + entity.getBbWidth() * 0.5D + Math.max(0.0D, fwdDist * 0.2D); + if (fwdDist < 1.0D || fwdDist > attackReach || Math.abs(sideDist) > sideAllowance) { + continue; } - } - if (hitAnything) { - this.playSound(AntarchySoundEvents.BASILISK_BITE.get(), 1.1F, 0.95F + this.random.nextFloat() * 0.08F); + entity.hurt( + AntarchyDamageSources.basiliskBite(serverLevel, this), + (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE) + ); } } @@ -210,6 +243,12 @@ public class BasiliskEntity extends Monster implements GeoEntity { if (this.attackAnimTicks > 0) { this.attackAnimTicks--; } + if (this.level() instanceof ServerLevel && this.attackAnimTicks > 0 && !Float.isNaN(this.committedAttackYaw)) { + this.lockBodyYaw(this.committedAttackYaw); + } + if (this.attackAnimTicks <= 0) { + this.committedAttackYaw = Float.NaN; + } if (this.isDeadOrDying()) { this.updateAnimationState(); @@ -228,6 +267,10 @@ public class BasiliskEntity extends Monster implements GeoEntity { } private void tickPlayerPetrification() { + if (this.isCommittedAttackActive()) { + return; + } + if (this.hissChargeTimer > 0) { Player target = this.getPendingPlayerTarget(); if (!this.canMaintainGazeOn(target)) { @@ -236,7 +279,7 @@ public class BasiliskEntity extends Monster implements GeoEntity { return; } - this.getNavigation().stop(); + this.stopActiveMovement(); this.getLookControl().setLookAt(target, 30.0F, 30.0F); this.hissChargeTimer--; if (this.hissChargeTimer == 0) { @@ -274,7 +317,7 @@ public class BasiliskEntity extends Monster implements GeoEntity { this.pendingTargetId = target.getUUID(); this.hissChargeTimer = AntarchySettings.basiliskHissChargeTicks(); this.hissCooldown = AntarchySettings.basiliskHissCooldownTicks(); - this.getNavigation().stop(); + this.stopActiveMovement(); this.getLookControl().setLookAt(target, 30.0F, 30.0F); } @@ -284,7 +327,7 @@ public class BasiliskEntity extends Monster implements GeoEntity { return; } - if (this.getTarget() != null || this.hissChargeTimer > 0) { + if (this.getTarget() != null || this.hissChargeTimer > 0 || this.isCommittedAttackActive()) { return; } @@ -448,17 +491,34 @@ public class BasiliskEntity extends Monster implements GeoEntity { public void die(DamageSource damageSource) { if (!this.level().isClientSide) { this.setAnimationState(ANIM_DEATH); - this.attackAnimTicks = 0; - this.attackDamagePending = false; - this.attackCooldown = 0; - this.hissChargeTimer = 0; - this.pendingTargetId = null; - this.getNavigation().stop(); + this.resetTransientCombatState(); + this.hissCooldown = AntarchySettings.basiliskHissCooldownTicks(); + this.preyPetrifyCooldown = AntarchySettings.basiliskPreyPetrifyCooldownTicks(); this.setDeltaMovement(Vec3.ZERO); } super.die(damageSource); } + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putInt(TAG_HISS_COOLDOWN, this.hissCooldown); + tag.putInt(TAG_PREY_PETRIFY_COOLDOWN, this.preyPetrifyCooldown); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + this.hissCooldown = tag.contains(TAG_HISS_COOLDOWN) + ? Math.max(0, tag.getInt(TAG_HISS_COOLDOWN)) + : AntarchySettings.basiliskHissCooldownTicks(); + this.preyPetrifyCooldown = tag.contains(TAG_PREY_PETRIFY_COOLDOWN) + ? Math.max(0, tag.getInt(TAG_PREY_PETRIFY_COOLDOWN)) + : AntarchySettings.basiliskPreyPetrifyCooldownTicks(); + this.resetTransientCombatState(); + this.setAnimationState(ANIM_IDLE); + } + @Override protected void tickDeath() { this.deathTime++; @@ -561,19 +621,68 @@ public class BasiliskEntity extends Monster implements GeoEntity { return 0.7F; } - /** Limits body rotation to TURN_RATE_DEG_PER_TICK so the long snake turns gradually. */ + private boolean isCommittedAttackActive() { + return this.attackAnimTicks > 0; + } + + private boolean isBusyWithAction() { + return this.hissChargeTimer > 0 || this.isCommittedAttackActive(); + } + + private float resolveCommittedAttackYaw() { + LivingEntity target = this.getTarget(); + if (target != null) { + Vec3 toTarget = target.position().subtract(this.position()); + if (toTarget.horizontalDistanceSqr() > 1.0E-6D) { + return (float)(Mth.atan2(toTarget.z, toTarget.x) * (180.0D / Math.PI)) - 90.0F; + } + } + return this.yBodyRot; + } + + private void lockBodyYaw(float yaw) { + this.setYRot(yaw); + this.yRotO = yaw; + this.yBodyRot = yaw; + this.yBodyRotO = yaw; + this.yHeadRot = yaw; + this.yHeadRotO = yaw; + } + + private void stopActiveMovement() { + this.getNavigation().stop(); + if (this.getMoveControl() instanceof BasiliskMoveControl moveControl) { + moveControl.halt(); + } + this.setSpeed(0.0F); + this.setZza(0.0F); + } + + private void resetTransientCombatState() { + this.attackAnimTicks = 0; + this.attackDamagePending = false; + this.attackCooldown = 0; + this.committedAttackYaw = Float.NaN; + this.hissChargeTimer = 0; + this.pendingTargetId = null; + this.stopActiveMovement(); + } + private static final class BasiliskMoveControl extends MoveControl { private BasiliskMoveControl(Mob mob) { super(mob); } - /** Call this to prevent the move control from reapplying speed this tick. */ public void halt() { this.operation = MoveControl.Operation.WAIT; } @Override public void tick() { + if (((BasiliskEntity) this.mob).isBusyWithAction()) { + this.mob.setZza(0.0F); + return; + } if (this.operation == MoveControl.Operation.MOVE_TO) { this.operation = MoveControl.Operation.WAIT; double dx = this.wantedX - this.mob.getX(); @@ -583,12 +692,20 @@ public class BasiliskEntity extends Monster implements GeoEntity { this.mob.setZza(0.0F); return; } + float turnRate = this.getDynamicTurnRate(); float targetYaw = (float)(Mth.atan2(dz, dx) * (180.0 / Math.PI)) - 90.0F; - this.mob.setYRot(this.rotlerp(this.mob.getYRot(), targetYaw, TURN_RATE_DEG_PER_TICK)); + this.mob.setYRot(this.rotlerp(this.mob.getYRot(), targetYaw, turnRate)); this.mob.setSpeed((float)(this.speedModifier * this.mob.getAttributeValue(Attributes.MOVEMENT_SPEED))); this.mob.setZza(1.0F); } } + + private float getDynamicTurnRate() { + double baseSpeed = Math.max(0.01D, this.mob.getAttributeValue(Attributes.MOVEMENT_SPEED)); + double intendedSpeed = Math.max(0.0D, this.speedModifier * baseSpeed); + double normalizedSpeed = Mth.clamp(intendedSpeed / (baseSpeed * 1.2D), 0.0D, 1.0D); + return Mth.lerp((float) normalizedSpeed, MAX_TURN_RATE_DEG_PER_TICK, MIN_TURN_RATE_DEG_PER_TICK); + } } private final class PersistentNearestAttackableTargetGoal extends NearestAttackableTargetGoal { @@ -605,19 +722,18 @@ public class BasiliskEntity extends Monster implements GeoEntity { @Override public void tick() { + if (BasiliskEntity.this.hissChargeTimer > 0 || BasiliskEntity.this.attackAnimTicks > 0) { + this.stopMovement(); + return; + } + LivingEntity target = BasiliskEntity.this.getTarget(); if (target != null) { BasiliskEntity.this.getLookControl().setLookAt(target, 30.0F, 30.0F); } - // super handles path recalc and cooldown timer super.tick(); - if (BasiliskEntity.this.hissChargeTimer > 0 || BasiliskEntity.this.attackAnimTicks > 0) { - this.stopMovement(); - return; - } - if (target != null && BasiliskEntity.this.isWithinMeleeAttackRange(target)) { this.stopMovement(); this.checkAndPerformAttack(target, BasiliskEntity.this.distanceToSqr(target)); @@ -625,14 +741,14 @@ public class BasiliskEntity extends Monster implements GeoEntity { } private void stopMovement() { - BasiliskEntity.this.getNavigation().stop(); - ((BasiliskMoveControl) BasiliskEntity.this.getMoveControl()).halt(); - BasiliskEntity.this.setSpeed(0.0F); - BasiliskEntity.this.setZza(0.0F); + BasiliskEntity.this.stopActiveMovement(); } @Override public boolean canUse() { + if (BasiliskEntity.this.isBusyWithAction()) { + return false; + } LivingEntity target = BasiliskEntity.this.getTarget(); if (target == null || !target.isAlive()) return false; if (target instanceof Player p && (p.isCreative() || p.isSpectator())) return false; @@ -642,7 +758,7 @@ public class BasiliskEntity extends Monster implements GeoEntity { @Override public void start() { LivingEntity target = BasiliskEntity.this.getTarget(); - if (target != null) { + if (target != null && !BasiliskEntity.this.isBusyWithAction()) { BasiliskEntity.this.getNavigation().moveTo(target, 1.2D); } BasiliskEntity.this.setAggressive(true); @@ -650,7 +766,14 @@ public class BasiliskEntity extends Monster implements GeoEntity { @Override public boolean canContinueToUse() { - return BasiliskEntity.this.attackAnimTicks > 0 || super.canContinueToUse(); + return BasiliskEntity.this.isBusyWithAction() || super.canContinueToUse(); + } + + @Override + public void stop() { + super.stop(); + BasiliskEntity.this.setAggressive(false); + this.stopMovement(); } @Override diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/basilisk/BasiliskMultipartLayout.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/basilisk/BasiliskMultipartLayout.java index 92895960..87a87660 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/basilisk/BasiliskMultipartLayout.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/basilisk/BasiliskMultipartLayout.java @@ -1,7 +1,7 @@ package com.craisinlord.antarchy.content.entity.basilisk; -import com.craisinlord.antarchy.content.entity.multipart.MultipartLayout; -import com.craisinlord.antarchy.content.entity.multipart.MultipartPartDefinition; +import com.craisinlord.anthology.multipart.MultipartLayout; +import com.craisinlord.anthology.multipart.MultipartPartDefinition; import net.minecraft.world.entity.Entity; import net.minecraft.world.phys.Vec3; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/brutalfly/BrutalflyEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/brutalfly/BrutalflyEntity.java index 4e9c440b..503cf1d3 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/brutalfly/BrutalflyEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/brutalfly/BrutalflyEntity.java @@ -4,6 +4,8 @@ import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.boss.BossCombatUtil; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityRotationUtil; import java.util.EnumSet; import java.util.Objects; import net.minecraft.core.BlockPos; @@ -109,7 +111,6 @@ public class BrutalflyEntity extends Monster implements GeoEntity { private double currentStrafeAngleOffset = this.random.nextDouble() * (Math.PI * 2.0D); private boolean spawnedDeathButterflies; - // Cocoon state (server-side) @Nullable BlockPos anchorPos; private int cocoonHits; @@ -275,12 +276,10 @@ public class BrutalflyEntity extends Monster implements GeoEntity { this.cocoonHitCooldownTicks--; } - // Pin position to hang from anchor if (this.anchorPos != null) { this.setPos(this.anchorPos.getX() + 0.5, this.anchorPos.getY() - 1.5, this.anchorPos.getZ() + 0.5); this.setDeltaMovement(Vec3.ZERO); - // Hatch immediately if anchor log was broken if (!this.isHatching && !this.level().getBlockState(this.anchorPos).is(BlockTags.LOGS)) { this.startHatching(); return; @@ -301,7 +300,6 @@ public class BrutalflyEntity extends Monster implements GeoEntity { return; } - // Count down hit animation if (this.cocoonAnimTicks > 0) { this.cocoonAnimTicks--; if (this.cocoonAnimTicks <= 0) { @@ -310,9 +308,7 @@ public class BrutalflyEntity extends Monster implements GeoEntity { return; } - // Occasionally play idle animation if (this.getAnimationState() == ANIM_COCOON_IDLE) { - // Will be reset to COCOON after idle ticks counted down } else if (this.tickCount % 200 == 17 && this.random.nextFloat() < 0.4F) { this.setAnimationState(ANIM_COCOON_IDLE); this.cocoonAnimTicks = COCOON_IDLE_ANIM_TICKS; @@ -370,6 +366,9 @@ public class BrutalflyEntity extends Monster implements GeoEntity { @Override public boolean hurt(DamageSource source, float amount) { + if (BossCombatUtil.isMagicWarded(this) && BossCombatUtil.isMagicBurstSource(source)) { + amount *= (1.0F - (float) AntarchySettings.bossMagicWardReductionFraction()); + } if (this.postCocoonInvulnerableTicks > 0) { return false; } @@ -391,7 +390,12 @@ public class BrutalflyEntity extends Monster implements GeoEntity { } return true; } - return super.hurt(source, BossCombatUtil.capSingleHitAtHalfHealth(this, amount)); + float preHealth = this.getHealth(); + boolean hurt = super.hurt(source, amount); + if (hurt) { + BossCombatUtil.clampHalfHealthCrossing(this, preHealth); + } + return hurt; } @Override @@ -560,7 +564,9 @@ public class BrutalflyEntity extends Monster implements GeoEntity { private boolean shouldSwipe(LivingEntity target, FightPhase phase) { double horizontalDistanceSqr = new Vec3(target.getX() - this.getX(), 0.0D, target.getZ() - this.getZ()).lengthSqr(); - boolean beneathBoss = horizontalDistanceSqr <= 16.0D && target.getY() <= this.getY() + 2.0D; + Vec3 localDelta = GravityRotationUtil.vecWorldToPlayer(target.position().subtract(this.position()), GravityApi.getGravityDirection(this)); + horizontalDistanceSqr = new Vec3(localDelta.x, 0.0D, localDelta.z).lengthSqr(); + boolean beneathBoss = horizontalDistanceSqr <= 16.0D && localDelta.y <= 2.0D; return beneathBoss || this.distanceToSqr(target) <= phase.swipeRangeSqr; } @@ -571,7 +577,7 @@ public class BrutalflyEntity extends Monster implements GeoEntity { } private void tickSwipe(LivingEntity target) { - Vec3 divePoint = target.position().add(0.0D, 1.0D, 0.0D); + Vec3 divePoint = target.position().add(GravityRotationUtil.vecPlayerToWorld(0.0D, 1.0D, 0.0D, GravityApi.getGravityDirection(this))); this.getMoveControl().setWantedPosition(divePoint.x, divePoint.y, divePoint.z, 1.45D); if (this.animationTicks == 8) { @@ -600,7 +606,7 @@ public class BrutalflyEntity extends Monster implements GeoEntity { dz = this.random.nextDouble() - 0.5D; } target.knockback(SWIPE_KNOCKBACK, -dx, -dz); - target.setDeltaMovement(target.getDeltaMovement().add(0.0D, 0.3D, 0.0D)); + target.setDeltaMovement(target.getDeltaMovement().add(GravityRotationUtil.vecPlayerToWorld(0.0D, 0.3D, 0.0D, GravityApi.getGravityDirection(this)))); } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/cloud_shark/CloudSharkEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/cloud_shark/CloudSharkEntity.java deleted file mode 100644 index f487f6dd..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/cloud_shark/CloudSharkEntity.java +++ /dev/null @@ -1,658 +0,0 @@ -package com.craisinlord.antarchy.content.entity.cloud_shark; - -import com.craisinlord.antarchy.config.AntarchySettings; -import com.craisinlord.antarchy.content.AntarchySoundEvents; -import net.minecraft.core.BlockPos; -import net.minecraft.core.particles.ParticleTypes; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.sounds.SoundEvent; -import net.minecraft.util.Mth; -import net.minecraft.util.RandomSource; -import net.minecraft.world.Difficulty; -import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.Mob; -import net.minecraft.world.entity.MobSpawnType; -import net.minecraft.world.entity.ai.attributes.AttributeSupplier; -import net.minecraft.world.entity.ai.attributes.Attributes; -import net.minecraft.world.entity.ai.control.FlyingMoveControl; -import net.minecraft.world.entity.ai.goal.Goal; -import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; -import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; -import net.minecraft.world.entity.ai.navigation.FlyingPathNavigation; -import net.minecraft.world.entity.ai.navigation.PathNavigation; -import net.minecraft.world.entity.monster.Monster; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.ServerLevelAccessor; -import net.minecraft.world.level.levelgen.Heightmap; -import net.minecraft.world.phys.Vec3; -import org.jetbrains.annotations.Nullable; -import software.bernie.geckolib.animatable.GeoEntity; -import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; -import software.bernie.geckolib.core.animation.AnimatableManager; -import software.bernie.geckolib.core.animation.AnimationController; -import software.bernie.geckolib.core.animation.AnimationState; -import software.bernie.geckolib.core.object.PlayState; -import software.bernie.geckolib.core.animation.RawAnimation; -import software.bernie.geckolib.util.GeckoLibUtil; - -import java.util.EnumSet; -import java.util.UUID; - -public class CloudSharkEntity extends Monster implements GeoEntity { - private static final double PATROL_SPEED = 0.95D; - private static final double STRAFE_SPEED = 1.2D; - private static final double DIVE_SPEED = 1.9D; - private static final double RECOVERY_SPEED = 1.15D; - private static final double ORBIT_SPEED = 1.1D; - private static final double REJOIN_SPEED = 1.25D; - private static final int STRAFE_MIN_TICKS = 14; - private static final int STRAFE_MAX_TICKS = 28; - private static final int DIVE_RECOVERY_TICKS = 12; - private static final int DIVE_TOTAL_TICKS = 26; - private static final int PATROL_MIN_TICKS = 20; - private static final int PATROL_MAX_TICKS = 40; - private static final int FLY_SOUND_INTERVAL_TICKS = 80; - - private static final int SHARKNADO_REFRESH_INTERVAL = 20; - - private static final double REJOIN_SNAP_DIST_SQR = 9.0D; - private static final int ANIM_IDLE = 0; - private static final int ANIM_SWIM = 1; - private static final int ANIM_ATTACK = 2; - private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); - private static final RawAnimation SWIM_ANIM = RawAnimation.begin().thenLoop("swim"); - private static final RawAnimation ATTACK_ANIM = RawAnimation.begin().thenPlay("attack"); - - private static final net.minecraft.network.syncher.EntityDataAccessor ANIMATION_STATE = - net.minecraft.network.syncher.SynchedEntityData.defineId( - CloudSharkEntity.class, net.minecraft.network.syncher.EntityDataSerializers.INT); - @Nullable private Vec3 patrolTarget; - @Nullable private Vec3 recoveryTarget; - @Nullable private Vec3 strafeTarget; - @Nullable private Vec3 diveStrikeTarget; - private int patrolRetargetTicks; - private int currentStrafeDuration = this.nextStrafeDuration(); - private int strafeTicks = this.currentStrafeDuration; - private int attackTicks; - private int diveCooldown = 20; - private float orbitDirection = 1.0F; - private boolean dealtDamageThisDive; - private double currentStrafeRadius = 4.75D; - private double currentStrafeHeightOffset = 2.6D; - private double currentStrafeAngleOffset; - private int flySoundCooldown; - - @Nullable private UUID sharknadoId; - private int sharknadoTier = -1; - private int sharknadoSlotIndex = -1; - private SharknadoMobState sharknadoMobState = SharknadoMobState.SOLO; - - private int nextSharknadoRefreshTick = 0; - - private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); - - public CloudSharkEntity(EntityType entityType, Level level) { - super(entityType, level); - this.moveControl = new FlyingMoveControl(this, 20, true); - this.xpReward = 8; - } - - public static AttributeSupplier.Builder createAttributes() { - return Mob.createMobAttributes() - .add(Attributes.MAX_HEALTH, AntarchySettings.cloudSharkHealth()) - .add(Attributes.ATTACK_DAMAGE, AntarchySettings.cloudSharkAttackDamage()) - .add(Attributes.MOVEMENT_SPEED, AntarchySettings.cloudSharkMovementSpeed()) - .add(Attributes.FLYING_SPEED, AntarchySettings.cloudSharkFlyingSpeed()) - .add(Attributes.FOLLOW_RANGE, 40.0D) - .add(Attributes.KNOCKBACK_RESISTANCE, AntarchySettings.cloudSharkKnockbackResistance()); - } - - public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, - MobSpawnType spawnReason, BlockPos pos, RandomSource random) { - return level.getDifficulty() != Difficulty.PEACEFUL - && level.isEmptyBlock(pos) - && level.isEmptyBlock(pos.above()) - && level.getFluidState(pos).isEmpty(); - } - - @Override - protected void defineSynchedData() { - super.defineSynchedData(); - this.entityData.define(ANIMATION_STATE, ANIM_IDLE); - } - - @Override - protected void registerGoals() { - this.goalSelector.addGoal(1, new SharknadoOrbitGoal(this)); - - HurtByTargetGoal hurtByTargetGoal = new HurtByTargetGoal(this); - hurtByTargetGoal.setAlertOthers(CloudSharkEntity.class); - this.targetSelector.addGoal(1, hurtByTargetGoal); - this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, CloudSharkEntity::isTargetablePlayer)); - } - - private static boolean isTargetablePlayer(LivingEntity target) { - return !(target instanceof Player player) || (!player.isCreative() && !player.isSpectator()); - } - - @Override - protected PathNavigation createNavigation(Level level) { - FlyingPathNavigation navigation = new FlyingPathNavigation(this, level); - navigation.setCanOpenDoors(false); - navigation.setCanFloat(true); - navigation.setCanPassDoors(true); - return navigation; - } - - @Override - public void tick() { - super.tick(); - this.setNoGravity(true); - - if (this.level().isClientSide) { - this.tickClientParticles(); - this.updateFlightRotation(); - return; - } - - if (this.diveCooldown > 0) this.diveCooldown--; - if (this.tickCount >= this.nextSharknadoRefreshTick) { - this.nextSharknadoRefreshTick = this.tickCount + SHARKNADO_REFRESH_INTERVAL; - if (this.sharknadoMobState == SharknadoMobState.SOLO) { - this.refreshSharknado(); - } else { - this.validateSharknadoMembership(); - } - } - if (this.tickCount % 200 == 0 && this.level() instanceof ServerLevel serverLevel) { - SharknadoManager.get(serverLevel).cleanup(serverLevel); - } - switch (this.sharknadoMobState) { - case ORBITING -> { - if (this.sharknadoId != null && this.level() instanceof ServerLevel serverLevel) { - SharknadoManager.get(serverLevel).tickSharknado(this.sharknadoId, serverLevel); - } - this.updateFlightRotation(); - this.updateAnimationState(); - return; - } - case REJOINING -> { - this.tickRejoin(); - this.updateFlightRotation(); - this.updateAnimationState(); - return; - } - default -> { - } - } - LivingEntity target = this.getTarget(); - if ((target == null || !target.isAlive()) && this.tickCount % 10 == 0) { - Player nearbyPlayer = this.level().getNearestPlayer(this, 32.0D); - if (nearbyPlayer != null && isTargetablePlayer(nearbyPlayer) && this.canAttack(nearbyPlayer)) { - this.setTarget(nearbyPlayer); - target = nearbyPlayer; - } - } - - if (target != null && target.isAlive()) { - this.tickCombatMovement(target); - } else { - this.tickPatrolMovement(); - } - - this.tickFlySound(); - - this.updateFlightRotation(); - this.updateAnimationState(); - } - - - private void refreshSharknado() { - if (!(this.level() instanceof ServerLevel serverLevel)) return; - if (this.getTarget() != null && this.getTarget().isAlive()) return; - SharknadoManager.get(serverLevel).tryFormOrJoin(this, serverLevel); - } - - - private void validateSharknadoMembership() { - if (this.sharknadoId == null) { - this.forceResetToSolo(); - return; - } - if (!(this.level() instanceof ServerLevel serverLevel)) return; - if (!SharknadoManager.get(serverLevel).isInSharknado(this.getUUID())) { - this.forceResetToSolo(); - } - } - - - void onJoinSharknado(UUID id, int tier, int slot) { - this.sharknadoId = id; - this.sharknadoTier = tier; - this.sharknadoSlotIndex = slot; - this.sharknadoMobState = SharknadoMobState.ORBITING; - this.patrolTarget = null; - this.strafeTarget = null; - this.diveStrikeTarget = null; - this.setTarget(null); - } - - - void onLeaveSharknado() { - this.forceResetToSolo(); - } - - - void launchFromSharknado(Player target) { - this.sharknadoMobState = SharknadoMobState.LAUNCHED; - this.setTarget(target); - this.attackTicks = 0; - this.diveCooldown = 0; - this.dealtDamageThisDive = false; - this.recoveryTarget = null; - this.diveStrikeTarget = null; - this.startNewStrafeCycle(); - } - - - boolean isOrbiting() { - return this.sharknadoMobState == SharknadoMobState.ORBITING; - } - - private void forceResetToSolo() { - this.sharknadoId = null; - this.sharknadoTier = -1; - this.sharknadoSlotIndex = -1; - this.sharknadoMobState = SharknadoMobState.SOLO; - this.recoveryTarget = null; - this.strafeTarget = null; - this.diveStrikeTarget = null; - this.nextSharknadoRefreshTick = this.tickCount + SHARKNADO_REFRESH_INTERVAL; - } - - - private void tickRejoin() { - if (this.sharknadoId == null || !(this.level() instanceof ServerLevel serverLevel)) { - this.forceResetToSolo(); - return; - } - Vec3 orbitTarget = SharknadoManager.get(serverLevel) - .getOrbitTarget(this.sharknadoId, this.sharknadoTier, this.sharknadoSlotIndex); - if (orbitTarget == null) { - this.forceResetToSolo(); - return; - } - this.getMoveControl().setWantedPosition(orbitTarget.x, orbitTarget.y, orbitTarget.z, REJOIN_SPEED); - if (this.distanceToSqr(orbitTarget) < REJOIN_SNAP_DIST_SQR) { - this.sharknadoMobState = SharknadoMobState.ORBITING; - this.setTarget(null); - } - } - - @Override - public boolean doHurtTarget(Entity target) { - boolean hurt = super.doHurtTarget(target); - if (hurt && target instanceof LivingEntity livingTarget) { - Vec3 push = livingTarget.position().subtract(this.position()); - Vec3 horizontal = new Vec3(push.x, 0.0D, push.z); - if (horizontal.lengthSqr() < 1.0E-4D) horizontal = this.getForward().multiply(1.0D, 0.0D, 1.0D); - if (horizontal.lengthSqr() < 1.0E-4D) horizontal = new Vec3(1.0D, 0.0D, 0.0D); - horizontal = horizontal.normalize(); - Vec3 sideways = new Vec3(-horizontal.z, 0.0D, horizontal.x); - if (this.random.nextBoolean()) sideways = sideways.scale(-1.0D); - Vec3 knockback = horizontal.scale(0.7D).add(sideways.scale(0.45D)); - livingTarget.push(knockback.x, 0.28D, knockback.z); - this.playSound(AntarchySoundEvents.CLOUD_SHARK_BITE.get(), 1.0F, 0.85F + this.random.nextFloat() * 0.2F); - } - return hurt; - } - - @Override - public boolean causeFallDamage(float fallDistance, float multiplier, DamageSource source) { - return false; - } - - @Override - protected void checkFallDamage(double y, boolean onGround, - net.minecraft.world.level.block.state.BlockState state, BlockPos pos) {} - - @Override - protected SoundEvent getAmbientSound() { return null; } - - @Override - protected SoundEvent getHurtSound(DamageSource damageSource) { return AntarchySoundEvents.CLOUD_SHARK_HURT.get(); } - - @Override - protected SoundEvent getDeathSound() { return AntarchySoundEvents.CLOUD_SHARK_DEATH.get(); } - - @Override - protected float getSoundVolume() { return 0.9F; } - - @Override - protected boolean shouldDespawnInPeaceful() { return true; } - - @Override - public void remove(Entity.RemovalReason reason) { - if (!this.level().isClientSide - && this.sharknadoId != null - && this.level() instanceof ServerLevel serverLevel) { - SharknadoManager.get(serverLevel).unregisterShark(this); - } - super.remove(reason); - } - - @Override - public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "main_controller", 0, this::mainAnimController) - .triggerableAnim("attack", ATTACK_ANIM)); - } - - @Override - public AnimatableInstanceCache getAnimatableInstanceCache() { return this.geoCache; } - - private void tickFlySound() { - if (this.flySoundCooldown > 0) { - this.flySoundCooldown--; - } - - boolean isFlyingAnim = this.getAnimationState() == ANIM_SWIM; - boolean isMoving = this.getDeltaMovement().horizontalDistanceSqr() > 0.0125D; - if (!isFlyingAnim || !isMoving) { - this.flySoundCooldown = 0; - return; - } - - if (this.flySoundCooldown > 0) { - return; - } - - this.playSound(AntarchySoundEvents.CLOUD_SHARK_FLY.get(), 0.7F, 1.0F); - this.flySoundCooldown = FLY_SOUND_INTERVAL_TICKS; - } - - private void tickPatrolMovement() { - this.resetCombatFlightState(); - - if (this.patrolRetargetTicks-- <= 0 - || this.patrolTarget == null - || this.position().distanceToSqr(this.patrolTarget) < 5.0D) { - this.patrolRetargetTicks = PATROL_MIN_TICKS - + this.random.nextInt(PATROL_MAX_TICKS - PATROL_MIN_TICKS + 1); - this.patrolTarget = this.findPatrolTarget(); - } - if (this.patrolTarget != null) { - this.getMoveControl().setWantedPosition( - this.patrolTarget.x, this.patrolTarget.y, this.patrolTarget.z, PATROL_SPEED); - } - } - - private void tickCombatMovement(LivingEntity target) { - this.patrolTarget = null; - if (this.strafeTarget == null || this.strafeTicks <= 0) { - this.startNewStrafeCycle(); - } - - if (this.attackTicks > 0) { - this.tickDive(target); - return; - } - - this.strafeTarget = this.getStrafePoint(target); - this.getMoveControl().setWantedPosition( - this.strafeTarget.x, this.strafeTarget.y, this.strafeTarget.z, STRAFE_SPEED); - - if (--this.strafeTicks <= 0) { - if (this.random.nextFloat() < 0.6F) this.orbitDirection *= -1.0F; - this.startNewStrafeCycle(); - } - - if (this.canStartDive(target)) this.startDive(target); - } - - private void tickDive(LivingEntity target) { - boolean recovering = this.attackTicks <= DIVE_RECOVERY_TICKS; - if (!recovering) { - Vec3 strikeTarget = this.diveStrikeTarget != null - ? this.diveStrikeTarget - : this.createDiveStrikeTarget(target); - this.getMoveControl().setWantedPosition( - strikeTarget.x, strikeTarget.y - 0.15D, strikeTarget.z, DIVE_SPEED); - if (!this.dealtDamageThisDive && this.canConnectDive(target)) { - this.doHurtTarget(target); - this.dealtDamageThisDive = true; - this.recoveryTarget = this.createRecoveryTarget(strikeTarget); - this.attackTicks = DIVE_RECOVERY_TICKS; - } - } else { - Vec3 retreat = this.recoveryTarget != null - ? this.recoveryTarget : this.createRecoveryTarget( - this.diveStrikeTarget != null ? this.diveStrikeTarget : target.position()); - this.getMoveControl().setWantedPosition(retreat.x, retreat.y, retreat.z, RECOVERY_SPEED); - } - - if (--this.attackTicks <= 0) { - this.resetCombatFlightState(); - this.diveCooldown = 18 + this.random.nextInt(16); - if (this.sharknadoMobState == SharknadoMobState.LAUNCHED) { - this.sharknadoMobState = SharknadoMobState.REJOINING; - this.setTarget(null); - } - } - } - - private void startDive(LivingEntity target) { - this.attackTicks = DIVE_TOTAL_TICKS; - this.dealtDamageThisDive = false; - this.recoveryTarget = null; - this.diveStrikeTarget = this.createDiveStrikeTarget(target); - this.setAnimationState(ANIM_ATTACK); - } - - private boolean canStartDive(LivingEntity target) { - if (this.diveCooldown > 0 || !this.hasLineOfSight(target)) return false; - if (this.strafeTicks > Math.max(6, this.currentStrafeDuration / 2)) return false; - double distanceToTarget = this.distanceToSqr(target); - return distanceToTarget >= 9.0D - && distanceToTarget <= 144.0D - && this.getY() > target.getY() + 0.5D; - } - - private boolean canConnectDive(LivingEntity target) { - return this.hasLineOfSight(target) - && this.distanceToSqr(target) <= this.getDiveReachSqr(target); - } - - private double getDiveReachSqr(LivingEntity target) { - double reach = this.getBbWidth() * 1.8D + target.getBbWidth(); - return reach * reach + 1.0D; - } - - private Vec3 getStrafePoint(LivingEntity target) { - double angle = this.tickCount * 0.18D * this.orbitDirection + this.currentStrafeAngleOffset; - double x = target.getX() + Math.cos(angle) * this.currentStrafeRadius; - double z = target.getZ() + Math.sin(angle) * this.currentStrafeRadius; - double y = target.getY() + this.currentStrafeHeightOffset - + Math.sin((this.tickCount + this.getId()) * 0.14D) * 0.5D; - return new Vec3(x, y, z); - } - - private Vec3 createRecoveryTarget(Vec3 strikeTarget) { - double radius = this.currentStrafeRadius + 1.5D + this.random.nextDouble() * 1.2D; - double angle = this.currentStrafeAngleOffset + (Math.PI / 2.0D) * this.orbitDirection; - double x = strikeTarget.x + Math.cos(angle) * radius; - double z = strikeTarget.z + Math.sin(angle) * radius; - double y = strikeTarget.y + 2.0D + this.random.nextDouble() * 1.2D; - return new Vec3(x, y, z); - } - - private Vec3 createDiveStrikeTarget(LivingEntity target) { - Vec3 predictedOffset = target.getDeltaMovement().scale(5.0D); - return target.position() - .add(predictedOffset) - .add(0.0D, target.getBbHeight() * 0.45D, 0.0D); - } - - private Vec3 findPatrolTarget() { - BlockPos origin = this.blockPosition(); - for (int attempt = 0; attempt < 18; attempt++) { - BlockPos candidate = origin.offset( - this.random.nextInt(25) - 12, - this.random.nextInt(11) - 4, - this.random.nextInt(25) - 12); - if (!this.level().isEmptyBlock(candidate) || !this.level().isEmptyBlock(candidate.above())) continue; - BlockPos terrainPos = this.level().getHeightmapPos( - Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, - new BlockPos(candidate.getX(), origin.getY(), candidate.getZ())); - double terrainBandY = terrainPos.getY() + 6.0D + this.random.nextDouble() * 5.0D; - double y = Math.max(candidate.getY() + 0.5D, terrainBandY); - return new Vec3(candidate.getX() + 0.5D, y, candidate.getZ() + 0.5D); - } - return this.position().add( - (this.random.nextDouble() - 0.5D) * 10.0D, - this.random.nextDouble() * 4.0D - 1.0D, - (this.random.nextDouble() - 0.5D) * 10.0D); - } - - private void tickClientParticles() { - boolean emitParticles = this.getAnimationState() == ANIM_ATTACK - || this.getTarget() != null - || this.sharknadoMobState == SharknadoMobState.ORBITING; - - if (emitParticles && this.tickCount % 3 == 0) { - this.level().addParticle( - ParticleTypes.CLOUD, - this.getX() + (this.random.nextDouble() - 0.5D) * this.getBbWidth(), - this.getY() + 0.35D + this.random.nextDouble() * 0.5D, - this.getZ() + (this.random.nextDouble() - 0.5D) * this.getBbWidth(), - 0.0D, 0.02D, 0.0D); - } - } - - private PlayState mainAnimController(AnimationState state) { - return switch (this.getAnimationState()) { - case ANIM_ATTACK -> state.setAndContinue(ATTACK_ANIM); - case ANIM_SWIM -> state.setAndContinue(SWIM_ANIM); - default -> state.setAndContinue(IDLE_ANIM); - }; - } - - private int getAnimationState() { - return this.entityData.get(ANIMATION_STATE); - } - - private void setAnimationState(int animationState) { - if (this.entityData.get(ANIMATION_STATE) != animationState) { - this.entityData.set(ANIMATION_STATE, animationState); - if (animationState == ANIM_ATTACK) { - this.triggerAnim("main_controller", "attack"); - } - } - } - - private void updateAnimationState() { - if (this.attackTicks > 0) { - this.setAnimationState(ANIM_ATTACK); - return; - } - Vec3 velocity = this.getDeltaMovement(); - if (this.getTarget() != null - || this.sharknadoMobState != SharknadoMobState.SOLO - || velocity.lengthSqr() > 1.0E-4D) { - this.setAnimationState(ANIM_SWIM); - return; - } - this.setAnimationState(ANIM_IDLE); - } - - private void updateFlightRotation() { - Vec3 velocity = this.getDeltaMovement(); - if (velocity.horizontalDistanceSqr() > 1.0E-4D) { - float targetYaw = (float) (Mth.atan2(velocity.z, velocity.x) * (180.0D / Math.PI)) - 90.0F; - this.setYRot(Mth.approachDegrees(this.getYRot(), targetYaw, 8.0F)); - this.yBodyRot = this.getYRot(); - this.yHeadRot = this.getYRot(); - } - if (velocity.lengthSqr() > 1.0E-4D) { - float targetPitch = (float) (-(Mth.atan2(velocity.y, velocity.horizontalDistance()) - * (180.0D / Math.PI))); - this.setXRot(Mth.approachDegrees(this.getXRot(), targetPitch, 6.0F)); - } - } - - private int nextStrafeDuration() { - return STRAFE_MIN_TICKS + this.random.nextInt(STRAFE_MAX_TICKS - STRAFE_MIN_TICKS + 1); - } - - private void startNewStrafeCycle() { - this.currentStrafeDuration = this.nextStrafeDuration(); - this.strafeTicks = this.currentStrafeDuration; - this.currentStrafeRadius = 4.25D + this.random.nextDouble() * 1.25D; - this.currentStrafeHeightOffset = 2.2D + this.random.nextDouble() * 0.9D; - this.currentStrafeAngleOffset = this.random.nextDouble() * (Math.PI * 2.0D); - this.strafeTarget = null; - } - - private void resetCombatFlightState() { - this.attackTicks = 0; - this.dealtDamageThisDive = false; - this.recoveryTarget = null; - this.diveStrikeTarget = null; - this.startNewStrafeCycle(); - } - - - enum SharknadoMobState { - - SOLO, - - ORBITING, - - LAUNCHED, - - REJOINING - } - - - private static final class SharknadoOrbitGoal extends Goal { - - private final CloudSharkEntity shark; - - SharknadoOrbitGoal(CloudSharkEntity shark) { - this.shark = shark; - this.setFlags(EnumSet.of(Flag.MOVE)); - } - - @Override - public boolean canUse() { - return shark.sharknadoMobState == SharknadoMobState.ORBITING; - } - - @Override - public boolean canContinueToUse() { - return shark.sharknadoMobState == SharknadoMobState.ORBITING; - } - - @Override - public void tick() { - if (shark.sharknadoId == null) return; - if (!(shark.level() instanceof ServerLevel serverLevel)) return; - - SharknadoManager manager = SharknadoManager.get(serverLevel); - Vec3 orbitTarget = manager.getOrbitTarget( - shark.sharknadoId, - shark.sharknadoTier, - shark.sharknadoSlotIndex); - - if (orbitTarget == null) { - return; - } - - shark.getMoveControl().setWantedPosition( - orbitTarget.x, orbitTarget.y, orbitTarget.z, ORBIT_SPEED); - } - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/flying_squirrel/FlyingSquirrelEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/flying_squirrel/FlyingSquirrelEntity.java index d66c940e..934aec40 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/flying_squirrel/FlyingSquirrelEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/flying_squirrel/FlyingSquirrelEntity.java @@ -55,7 +55,6 @@ import software.bernie.geckolib.core.animation.*; import software.bernie.geckolib.core.object.PlayState; import software.bernie.geckolib.core.animation.AnimationState; import software.bernie.geckolib.util.GeckoLibUtil; - import java.util.EnumSet; import java.util.Optional; import java.util.UUID; @@ -82,6 +81,8 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { SynchedEntityData.defineId(FlyingSquirrelEntity.class, EntityDataSerializers.OPTIONAL_UUID); private static final String PICKUP_ANIM_TICKS_KEY = "PickupAnimTicks"; + private static final String QUIRK_TICKS_KEY = "QuirkTicks"; + private static final String QUIRK_VARIANT_KEY = "QuirkVariant"; private static final String TEXTURE_VARIANT_KEY = "TextureVariant"; private static final String GLIDE_DIR_X_KEY = "GlideDirX"; private static final String GLIDE_DIR_Y_KEY = "GlideDirY"; @@ -126,10 +127,13 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { private static final double SHOULDER_HEAD_Y_OFFSET = 0.26D; private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); - private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walking"); + private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); private static final RawAnimation CLIMB_ANIM = RawAnimation.begin().thenLoop("climbing"); - private static final RawAnimation GLIDE_ANIM = RawAnimation.begin().thenLoop("gliding"); + private static final RawAnimation GLIDE_ANIM = RawAnimation.begin().thenLoop("fly"); private static final RawAnimation PICKUP_ANIM = RawAnimation.begin().thenPlay("item_pickup"); + private static final String QUIRK_CONTROLLER = "quirk_controller"; + private static final String QUIRK_1_TRIGGER = "quirk1"; + private static final String QUIRK_2_TRIGGER = "quirk2"; private static final RawAnimation QUIRK_1_ANIM = RawAnimation.begin().thenPlay("quirk1"); private static final RawAnimation QUIRK_2_ANIM = RawAnimation.begin().thenPlay("quirk2"); @@ -179,11 +183,13 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { private ItemEntity cachedNutItem; @Nullable private BlockPos cachedHarvestableAcorn; - private int quirkCooldownTicks = MIN_QUIRK_COOLDOWN_TICKS; + private int quirkCooldownTicks; + private int lastTriggeredQuirkVariant = QUIRK_NONE; public FlyingSquirrelEntity(EntityType entityType, Level level) { super(entityType, level); this.setPathfindingMalus(BlockPathTypes.LEAVES, -2.0F); + this.quirkCooldownTicks = this.nextQuirkCooldown(); } @Override @@ -254,9 +260,16 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { controllers.add(new AnimationController<>(this, "main_controller", 5, this::mainAnimController)); + controllers.add(new AnimationController<>(this, QUIRK_CONTROLLER, 0, state -> PlayState.STOP) + .triggerableAnim(QUIRK_1_TRIGGER, QUIRK_1_ANIM) + .triggerableAnim(QUIRK_2_TRIGGER, QUIRK_2_ANIM)); } private PlayState mainAnimController(AnimationState state) { + if (this.hasActiveQuirkAnimation()) { + return PlayState.STOP; + } + if (this.isPickingUpNut()) { return state.setAndContinue(PICKUP_ANIM); } @@ -274,11 +287,6 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { return state.setAndContinue(CLIMB_ANIM); } - if (this.getQuirkTicks() > 0) { - state.getController().setAnimationSpeed(1.0D); - return state.setAndContinue(this.getQuirkVariant() == QUIRK_2 ? QUIRK_2_ANIM : QUIRK_1_ANIM); - } - Vec3 motion = this.getDeltaMovement(); double horizontalSpeed = motion.horizontalDistanceSqr(); if (!this.isGliding() && !this.isClimbingTrunk() && motion.horizontalDistanceSqr() > 1.0E-4D) { @@ -304,6 +312,8 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { public void addAdditionalSaveData(CompoundTag tag) { super.addAdditionalSaveData(tag); tag.putInt(PICKUP_ANIM_TICKS_KEY, this.pickupAnimTicks); + tag.putInt(QUIRK_TICKS_KEY, this.getQuirkTicks()); + tag.putInt(QUIRK_VARIANT_KEY, this.getQuirkVariant()); tag.putInt(TEXTURE_VARIANT_KEY, this.getTextureVariant()); if (this.glideDirection != null) { tag.putDouble(GLIDE_DIR_X_KEY, this.glideDirection.x); @@ -317,6 +327,8 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { super.readAdditionalSaveData(tag); this.pickupAnimTicks = Math.max(0, tag.getInt(PICKUP_ANIM_TICKS_KEY)); this.setPickingUpNut(this.pickupAnimTicks > 0); + this.setQuirkTicks(Math.max(0, tag.getInt(QUIRK_TICKS_KEY))); + this.setQuirkVariant(tag.contains(QUIRK_VARIANT_KEY) ? tag.getInt(QUIRK_VARIANT_KEY) : QUIRK_NONE); if (tag.contains(TEXTURE_VARIANT_KEY)) { this.setTextureVariant(tag.getInt(TEXTURE_VARIANT_KEY)); } else { @@ -389,6 +401,11 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { if (!this.level().isClientSide) { this.tickPickupAnimation(); this.tickQuirkAnimation(); + this.syncQuirkAnimationTrigger(); + if (this.hasActiveQuirkAnimation()) { + this.cancelTravel(); + this.setDeltaMovement(Vec3.ZERO); + } if (this.isClimbingToShoulder()) { Player shoulderPlayer = this.shoulderPlayerId != null @@ -468,6 +485,9 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { this.tickIdleStallLogging(horizontalSpeed); } + if (this.level().isClientSide) { + this.syncQuirkAnimationTrigger(); + } if (this.isOnShoulder() && this.level().isClientSide) { Player shoulderPlayer = this.getShoulderPlayer(); if (shoulderPlayer != null) { @@ -648,6 +668,7 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { @Nullable public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData spawnGroupData, @org.jetbrains.annotations.Nullable net.minecraft.nbt.CompoundTag dataTag) { SpawnGroupData finalized = super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData, dataTag); + com.craisinlord.antarchy.content.entity.ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.flyingSquirrelHealth()); this.assignRandomTextureVariant(); this.stopGliding("spawn_initialized"); this.wanderCooldown = 40 + this.random.nextInt(60); @@ -800,6 +821,23 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { this.setQuirkVariant(QUIRK_NONE); } + private void syncQuirkAnimationTrigger() { + int quirkVariant = this.getQuirkVariant(); + if (quirkVariant != QUIRK_NONE && this.getQuirkTicks() > 0 && this.lastTriggeredQuirkVariant != quirkVariant) { + String triggerName = quirkVariant == QUIRK_2 ? QUIRK_2_TRIGGER : QUIRK_1_TRIGGER; + this.triggerAnim(QUIRK_CONTROLLER, triggerName); + this.lastTriggeredQuirkVariant = quirkVariant; + return; + } + if (quirkVariant == QUIRK_NONE) { + this.lastTriggeredQuirkVariant = QUIRK_NONE; + } + } + + private boolean hasActiveQuirkAnimation() { + return this.getQuirkVariant() != QUIRK_NONE && this.getQuirkTicks() > 0; + } + private int nextQuirkCooldown() { return MIN_QUIRK_COOLDOWN_TICKS + this.random.nextInt(MAX_QUIRK_COOLDOWN_TICKS - MIN_QUIRK_COOLDOWN_TICKS + 1); } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerAntBehavior.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerAntBehavior.java index 5c72ecf6..9f4d70c0 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerAntBehavior.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerAntBehavior.java @@ -21,8 +21,8 @@ import net.minecraft.world.entity.monster.Enemy; import net.minecraft.world.entity.player.Player; public class GlimmerAntBehavior implements GlimmerVariantBehavior { - private static final java.util.UUID REACH_BOOST_ID = - java.util.UUID.nameUUIDFromBytes((Antarchy.MODID + ":glimmer_ant_reach_boost").getBytes(java.nio.charset.StandardCharsets.UTF_8)); + private static final ResourceLocation REACH_BOOST_ID = + new ResourceLocation(Antarchy.MODID, "glimmer_ant_reach_boost"); private static final double REACH_BOOST_AMOUNT = 1.5D; private static final float LARGE_ENEMY_MIN_HEALTH = 40.0F; private static final int ABILITY_COOLDOWN_TICKS = 20 * 120; @@ -77,16 +77,26 @@ public class GlimmerAntBehavior implements GlimmerVariantBehavior { @Override public EntityDimensions adultDimensions() { - // Matches the real ant's hitbox. return EntityDimensions.scalable(0.6375F, 0.2125F); } @Override public void tickPassiveEveryTick(GlimmerEntity entity, Player owner) { + AttributeInstance instance = com.craisinlord.antarchy.compat.entity.EntityReach.instance(owner); + if (instance == null) { + return; + } + if (instance.getModifier(com.craisinlord.antarchy.compat.entity.EntityReach.modifierId(REACH_BOOST_ID)) == null) { + instance.addTransientModifier(com.craisinlord.antarchy.compat.entity.EntityReach.modifier(REACH_BOOST_ID, REACH_BOOST_AMOUNT, AttributeModifier.Operation.ADDITION)); + } } @Override public void clearPassive(GlimmerEntity entity, Player owner) { + AttributeInstance instance = com.craisinlord.antarchy.compat.entity.EntityReach.instance(owner); + if (instance != null) { + instance.removeModifier(com.craisinlord.antarchy.compat.entity.EntityReach.modifierId(REACH_BOOST_ID)); + } } @Override diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerAppleCowBehavior.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerAppleCowBehavior.java index e95852e7..44f31d59 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerAppleCowBehavior.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerAppleCowBehavior.java @@ -80,7 +80,6 @@ public class GlimmerAppleCowBehavior implements GlimmerVariantBehavior { @Override public EntityDimensions adultDimensions() { - // Matches the real Apple Cow's hitbox (extends vanilla Cow). return EntityDimensions.scalable(0.9F, 1.4F); } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerCompanionSavedData.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerCompanionSavedData.java index 6d74ffc8..8f53d082 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerCompanionSavedData.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerCompanionSavedData.java @@ -11,10 +11,6 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.Entity; import net.minecraft.world.level.saveddata.SavedData; -/** - * Tracks each player's current Glimmer companion so taming a new one despawns the old, - * even if the old companion is in a different loaded dimension. - */ public class GlimmerCompanionSavedData extends SavedData { private static final String ID = "antarchy_glimmer_companions"; private static final String ENTRIES_KEY = "Entries"; @@ -57,11 +53,6 @@ public class GlimmerCompanionSavedData extends SavedData { ); } - /** - * Records {@code newCompanion} as {@code owner}'s current Glimmer. Any previous - * companion found in a currently loaded dimension isn't removed - it just loses - * its owner and becomes a wild, re-tameable Glimmer again. - */ public static void replaceCompanion(MinecraftServer server, UUID owner, UUID newCompanion) { GlimmerCompanionSavedData data = get(server); UUID previous = data.companionByOwner.put(owner, newCompanion); @@ -81,10 +72,6 @@ public class GlimmerCompanionSavedData extends SavedData { } } - /** - * Removes {@code owner}'s companion record if it currently points at {@code companion}, - * used when that Glimmer is captured into a bottle rather than replaced by a new one. - */ public static void clearCompanion(MinecraftServer server, UUID owner, UUID companion) { GlimmerCompanionSavedData data = get(server); if (companion.equals(data.companionByOwner.get(owner))) { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerEntity.java index 0c87d8f1..df2cba99 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerEntity.java @@ -3,7 +3,9 @@ package com.craisinlord.antarchy.content.entity.glimmer; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.advancement.AntarchyAdvancements; +import com.craisinlord.antarchy.content.advancement.AntarchyAdvancementTriggers; import com.craisinlord.antarchy.content.client.particle.GlimmerParticles; +import com.craisinlord.antarchy.content.entity.ConfiguredMobSpawnUtil; import com.craisinlord.antarchy.Antarchy; import net.minecraft.network.chat.Component; import net.minecraft.nbt.CompoundTag; @@ -145,7 +147,6 @@ public class GlimmerEntity extends TamableAnimal implements GeoEntity { @Override public void push(Entity entity) { - // no-op: Glimmers pass through other entities } @Override @@ -177,10 +178,6 @@ public class GlimmerEntity extends TamableAnimal implements GeoEntity { this.entityData.set(ABILITY_ANIM_TICKS, ticks); } - /** - * Ticks remaining in the daytime despawn fade-out, or 0 if not currently fading. - * Used client-side to fade the render alpha to nothing before the entity is removed. - */ public int getFadeTicks() { return this.entityData.get(FADE_TICKS); } @@ -338,7 +335,7 @@ public class GlimmerEntity extends TamableAnimal implements GeoEntity { GlimmerVariantBehavior behavior = this.getVariant().getBehavior(); EntityDimensions base = this.isBaby() ? behavior.babyDimensions() : behavior.adultDimensions(); float growth = this.getGrowthScale(); - return growth == 1.0F ? base : base.scale(growth); + return (growth == 1.0F ? base : base.scale(growth)).scale(this.getScale()); } @Override @@ -434,6 +431,7 @@ public class GlimmerEntity extends TamableAnimal implements GeoEntity { if (player instanceof net.minecraft.server.level.ServerPlayer serverPlayer) { AntarchyAdvancements.award(serverPlayer, this.getVariant().tameAdvancementId()); + AntarchyAdvancementTriggers.tamedGlimmer(serverPlayer, this.getVariant().name().toLowerCase(java.util.Locale.ROOT)); } return InteractionResult.SUCCESS; @@ -444,7 +442,8 @@ public class GlimmerEntity extends TamableAnimal implements GeoEntity { return InteractionResult.CONSUME; } - ItemStack filled = com.craisinlord.antarchy.content.item.GlimmerBottleItem.create(this.getVariant(), this.entityData.get(ABILITY_COOLDOWN)); + ItemStack filled = com.craisinlord.antarchy.content.item.GlimmerBottleItem.create( + this.getVariant(), this.entityData.get(ABILITY_COOLDOWN), this.entityData.get(SHEAR_COOLDOWN)); ItemStack result = net.minecraft.world.item.ItemUtils.createFilledResult(stack, player, filled); player.setItemInHand(hand, result); this.playSound(net.minecraft.sounds.SoundEvents.BOTTLE_FILL, 1.0F, 1.0F); @@ -461,6 +460,7 @@ public class GlimmerEntity extends TamableAnimal implements GeoEntity { @Nullable public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData spawnGroupData, @org.jetbrains.annotations.Nullable net.minecraft.nbt.CompoundTag dataTag) { SpawnGroupData result = super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData, dataTag); + com.craisinlord.antarchy.content.entity.ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.glimmerHealth()); if (!this.variantLocked) { this.setVariant(selectNaturalVariant(level, this.blockPosition())); this.variantLocked = true; @@ -494,10 +494,6 @@ public class GlimmerEntity extends TamableAnimal implements GeoEntity { return GlimmerVariant.random(this.random); } - /** - * Wild Glimmers are common in Glimmering Pools, but only rarely (and only at night) - * turn up in Ouranwood Forest, the Elythia Meadow, and the Peach Forest. - */ public static boolean checkGlimmerSpawnRules(EntityType type, ServerLevelAccessor level, MobSpawnType spawnType, BlockPos pos, net.minecraft.util.RandomSource random) { if (!net.minecraft.world.entity.animal.Animal.checkAnimalSpawnRules(type, level, spawnType, pos, random)) { @@ -596,12 +592,6 @@ public class GlimmerEntity extends TamableAnimal implements GeoEntity { } } - /** - * With {@code noPhysics} true, Glimmers never travel through vanilla's normal movement path, - * so the usual body-follows-head catch-up never runs and a stationary Glimmer looking around - * (LookAtPlayerGoal/RandomLookAroundGoal only move the head) ends up with its head rendered - * far past the model's body — this keeps the body snapped within {@link #getMaxHeadYRot()} of it. - */ private void clampBodyToHeadRotation() { float maxYaw = this.getMaxHeadYRot(); float delta = Mth.wrapDegrees(this.yHeadRot - this.yBodyRot); diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerFrogBehavior.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerFrogBehavior.java index 9f150dc7..5b7ccdf1 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerFrogBehavior.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerFrogBehavior.java @@ -2,7 +2,7 @@ package com.craisinlord.antarchy.content.entity.glimmer; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.AntarchyObjects; -import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner; +import com.craisinlord.anthology.multipart.MultipartEntityOwner; import net.minecraft.core.registries.Registries; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; @@ -111,7 +111,6 @@ public class GlimmerFrogBehavior implements GlimmerVariantBehavior { @Override public EntityDimensions adultDimensions() { - // Matches vanilla Frog's real hitbox. return EntityDimensions.scalable(0.5F, 0.5F); } @@ -155,7 +154,6 @@ public class GlimmerFrogBehavior implements GlimmerVariantBehavior { pending.ticksRemaining--; if (pending.ticksRemaining == TONGUE_ANIM_TICKS - TONGUE_GRAB_TICK) { - // The tongue "catches" the target partway through the animation and reels it in. entity.playSound(SoundEvents.FROG_TONGUE, 1.0F, 1.0F); } if (pending.ticksRemaining <= TONGUE_ANIM_TICKS - TONGUE_GRAB_TICK) { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerNightSpawner.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerNightSpawner.java new file mode 100644 index 00000000..f5de59c8 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerNightSpawner.java @@ -0,0 +1,108 @@ +package com.craisinlord.antarchy.content.entity.glimmer; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.AntarchyObjects; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.MobCategory; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.entity.SpawnPlacements; +import net.minecraft.world.level.GameRules; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.phys.AABB; + +public final class GlimmerNightSpawner { + private static final ResourceKey ELYTHIA = ResourceKey.create( + Registries.DIMENSION, + new ResourceLocation(Antarchy.MODID, "elythia") + ); + + private static final int CHECK_INTERVAL_TICKS = 20 * 10; + private static final float SPAWN_CHANCE = 0.35F; + private static final double NEARBY_RADIUS = 64.0D; + private static final int MAX_NEARBY_WILD = 2; + private static final double MIN_SPAWN_DISTANCE = 24.0D; + private static final double MAX_SPAWN_DISTANCE = 56.0D; + private static final int COLUMN_ATTEMPTS = 8; + + private GlimmerNightSpawner() { + } + + public static void tick(ServerLevel level) { + if (!level.dimension().equals(ELYTHIA)) { + return; + } + if (level.getGameTime() % CHECK_INTERVAL_TICKS != 0L || !level.isNight()) { + return; + } + if (!level.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING)) { + return; + } + + EntityType type = AntarchyObjects.GLIMMER.get(); + for (ServerPlayer player : level.players()) { + if (player.isSpectator() || !player.isAlive()) { + continue; + } + if (level.random.nextFloat() >= SPAWN_CHANCE) { + continue; + } + if (countNearbyWild(level, player, type) >= MAX_NEARBY_WILD) { + continue; + } + attemptSpawnNear(level, player, type); + } + } + + private static int countNearbyWild(ServerLevel level, ServerPlayer player, EntityType type) { + AABB box = player.getBoundingBox().inflate(NEARBY_RADIUS); + return level.getEntities(type, box, glimmer -> !glimmer.isTame()).size(); + } + + private static void attemptSpawnNear(ServerLevel level, ServerPlayer player, EntityType type) { + RandomSource random = level.random; + BlockPos origin = player.blockPosition(); + for (int attempt = 0; attempt < COLUMN_ATTEMPTS; attempt++) { + double angle = random.nextDouble() * Math.PI * 2.0D; + double distance = MIN_SPAWN_DISTANCE + random.nextDouble() * (MAX_SPAWN_DISTANCE - MIN_SPAWN_DISTANCE); + int x = origin.getX() + Mth.floor(Math.cos(angle) * distance); + int z = origin.getZ() + Mth.floor(Math.sin(angle) * distance); + if (!level.hasChunkAt(new BlockPos(x, origin.getY(), z))) { + continue; + } + BlockPos pos = level.getHeightmapPos(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, new BlockPos(x, 0, z)); + if (!biomeSpawnsGlimmers(level.getBiome(pos), type)) { + continue; + } + if (!SpawnPlacements.checkSpawnRules(type, level, MobSpawnType.NATURAL, pos, random)) { + continue; + } + if (!level.noCollision(type.getAABB(pos.getX() + 0.5D, pos.getY(), pos.getZ() + 0.5D))) { + continue; + } + GlimmerEntity glimmer = type.create(level); + if (glimmer == null) { + return; + } + glimmer.moveTo(pos.getX() + 0.5D, pos.getY(), pos.getZ() + 0.5D, random.nextFloat() * 360.0F, 0.0F); + glimmer.finalizeSpawn(level, level.getCurrentDifficultyAt(pos), MobSpawnType.NATURAL, null, null); + level.addFreshEntity(glimmer); + return; + } + } + + private static boolean biomeSpawnsGlimmers(Holder biome, EntityType type) { + return biome.value().getMobSettings().getMobs(MobCategory.CREATURE).unwrap().stream() + .anyMatch(data -> data.type == type); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerVariantBehavior.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerVariantBehavior.java index 37f200c1..9ef4d659 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerVariantBehavior.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerVariantBehavior.java @@ -10,11 +10,6 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import org.jetbrains.annotations.Nullable; -/** - * Per-variant behavior for the composite {@link GlimmerEntity}: AI, model/texture selection, and sounds. - * One concrete implementation per {@link GlimmerVariant}, chosen via composition rather than subclassing - * so a single EntityType can be reliably reconstructed across save/load. - */ public interface GlimmerVariantBehavior { void registerGoals(GlimmerEntity entity); @@ -32,124 +27,62 @@ public interface GlimmerVariantBehavior { SoundEvent deathSound(); - /** - * Optional variant-specific interaction (e.g. shearing the Apple Cow variant for a Spirit Apple). - * Return null to fall through to the entity's default interaction handling. - */ @Nullable default InteractionResult onInteract(GlimmerEntity entity, Player player, ItemStack stack, InteractionHand hand) { return null; } - /** - * Optional per-tick hook for variant-specific server logic (e.g. the Basilisk's petrify gaze). - */ default void customTick(GlimmerEntity entity) { } - /** - * Optional hook fired after {@code entity} lands a successful hit on {@code target} - * (e.g. the Frog variant dropping Lumen Froglight when it kills a small Magma Cube). - */ default void onHurtTarget(GlimmerEntity entity, Entity target) { } - /** - * Called periodically (roughly once a second) while this Glimmer is tamed and its - * owner is nearby and loaded. Should (re)apply the variant's passive effect with a - * short duration so it naturally lapses if the owner leaves range. - */ default void tickPassive(GlimmerEntity entity, Player owner) { } - /** - * Called every server tick (not just the coarse refresh interval) while nearby, for - * passives that need finer-grained bookkeeping than a periodic effect refresh (e.g. - * the Apple Cow's exhaustion dampening). - */ default void tickPassiveEveryTick(GlimmerEntity entity, Player owner) { } - /** - * Called once the tick the owner leaves range (or the companion is otherwise no - * longer eligible) so any directly-applied (non-MobEffect) passive state can be undone. - */ default void clearPassive(GlimmerEntity entity, Player owner) { } - /** - * Animation (from this variant's own animation file) to play while - * {@link GlimmerEntity#playAbilityAnimation(int)} is active. Null plays no override. - */ @Nullable default software.bernie.geckolib.core.animation.RawAnimation abilityAnimation() { return null; } - /** - * Animation to play in place of the default walk loop while moving. Null uses the - * default walk animation (e.g. the Deer switches to its run clip while following its owner). - */ @Nullable default software.bernie.geckolib.core.animation.RawAnimation movingAnimation(GlimmerEntity entity) { return null; } - /** - * Animation to play while idle in place of the default idle loop. Null uses the - * shared Glimmer idle animation. - */ @Nullable default software.bernie.geckolib.core.animation.RawAnimation idleAnimation(GlimmerEntity entity) { return null; } - /** - * Navigation speed multiplier used while following the owner (see {@link GlimmerFollowOwnerGoal}). - */ default double followSpeedModifier() { return 1.15D; } - /** - * Shared action-bar feedback helper for ability-use messages. - */ default void sendAbilityMessage(Player owner, net.minecraft.network.chat.Component message) { owner.displayClientMessage(message, true); } - /** - * Called every server tick while the owner is nearby and the ability is off cooldown. - * Implementations should check their own trigger condition and, if it fires, perform - * the ability and call {@link GlimmerEntity#startAbilityCooldown()}. - */ default void tickAbilityCheck(GlimmerEntity entity, Player owner) { } - /** - * Cooldown duration for this variant's active ability, in ticks. - */ default int abilityCooldownTicks() { return 20 * 120; } - /** - * Per-tick shrink/growth-recovery rate used to decay {@link GlimmerEntity#getGrowthScale()} - * back toward 1.0 after an ability temporarily changes it. 0 means the variant never changes scale. - */ default double growthDecayPerTick() { return 0.0D; } - /** - * Hitbox size matching the real creature this variant is a "spirit" of, rather than - * a single hitbox shared by every variant. - */ EntityDimensions adultDimensions(); - /** - * Defaults to half the adult size, matching vanilla's typical baby scaling. - */ default EntityDimensions babyDimensions() { return this.adultDimensions().scale(0.5F); } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenEntity.java index b91ce43c..d022b0e8 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenEntity.java @@ -8,8 +8,8 @@ import com.craisinlord.antarchy.content.boss.BossCombatUtil; import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; import com.craisinlord.antarchy.content.entity.MissileSquidEntity; import com.craisinlord.antarchy.content.entity.OctopusBombEntity; -import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner; -import com.craisinlord.antarchy.content.entity.multipart.MultipartLayout; +import com.craisinlord.anthology.multipart.MultipartEntityOwner; +import com.craisinlord.anthology.multipart.MultipartLayout; import com.craisinlord.antarchy.content.damage.AntarchyDamageTypes; import java.util.List; @@ -85,7 +85,6 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO private static final int ATTACK_SWING_RIGHT = 3; private static final int ATTACK_SLAM = 4; - // Synced animation state values private static final int ANIM_NONE = 0; private static final int ANIM_CRY = 1; private static final int ANIM_GRAB = 2; @@ -153,7 +152,8 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO .add(Attributes.FLYING_SPEED, AntarchySettings.krakenFlyingSpeed()) .add(Attributes.FOLLOW_RANGE, AntarchySettings.krakenFollowRange()) .add(Attributes.KNOCKBACK_RESISTANCE, AntarchySettings.krakenKnockbackResistance()) - .add(Attributes.ARMOR, AntarchySettings.krakenArmor()); + .add(Attributes.ARMOR, AntarchySettings.krakenArmor()) + .add(Attributes.ARMOR_TOUGHNESS, AntarchySettings.krakenArmorToughness()); } public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { @@ -161,18 +161,18 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO } @Override - public MultipartLayout antarchy$getMultipartLayout() { + public MultipartLayout anthology$getMultipartLayout() { return KrakenMultipartLayout.INSTANCE; } @Override @Nullable - public Entity[] antarchy$getMultipartParts() { + public Entity[] anthology$getMultipartParts() { return this.multipartParts; } @Override - public void antarchy$setMultipartParts(@Nullable Entity[] parts) { + public void anthology$setMultipartParts(@Nullable Entity[] parts) { this.multipartParts = parts; } @@ -198,7 +198,6 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - // idle_controller always loops idle; action_controller layers on top when active controllers.add(new AnimationController<>(this, "idle_controller", 0, state -> { if (this.getAnimationState() == ANIM_DEATH) { return PlayState.STOP; @@ -365,6 +364,9 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO @Override public boolean hurt(DamageSource source, float amount) { + if (BossCombatUtil.isMagicWarded(this) && BossCombatUtil.isMagicBurstSource(source)) { + amount *= (1.0F - (float) AntarchySettings.bossMagicWardReductionFraction()); + } if (source.is(DamageTypeTags.IS_FIRE) || source.is(DamageTypes.IN_WALL) || source.is(DamageTypes.LIGHTNING_BOLT) @@ -374,7 +376,12 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO return false; } - return super.hurt(source, BossCombatUtil.capSingleHitAtHalfHealth(this, amount)); + float preHealth = this.getHealth(); + boolean hurt = super.hurt(source, amount); + if (hurt) { + BossCombatUtil.clampHalfHealthCrossing(this, preHealth); + } + return hurt; } @Override @@ -637,7 +644,6 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO } } - // swingRight=true means ATTACK_SWING_RIGHT, which knocks players to the Kraken's LEFT private void tickSwingAttack(boolean swingRight) { if (this.actionTicks == 10) { this.performSwing(swingRight); @@ -740,9 +746,6 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO return attackState == ATTACK_SLAM; } - // Determines left vs right based on which side the target is on relative to the Kraken. - // Kraken's right vector is forward x world-up. If target is on the Kraken's right side, - // use swing_right (which knocks them left). If on the left, use swing_left (knocks them right). private int resolveSwingDirection(LivingEntity target) { Vec3 forward = this.getViewVector(1.0F); Vec3 right = forward.cross(new Vec3(0, 1, 0)).normalize(); @@ -756,7 +759,6 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO float damage = (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE); Vec3 forward = this.getViewVector(1.0F); - // swingRight knocks to Kraken's left (-right), swingLeft knocks to Kraken's right (+right) Vec3 right = forward.cross(new Vec3(0, 1, 0)).normalize(); Vec3 knockDir = swingRight ? right.scale(-1) : right; @@ -1103,17 +1105,17 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO private void applyPhaseTwoBuffs() { AttributeInstance movementSpeed = this.getAttribute(Attributes.MOVEMENT_SPEED); - if (movementSpeed != null && !(movementSpeed.getModifier(PHASE_TWO_SPEED_ID) != null)) { + if (movementSpeed != null && movementSpeed.getModifier(PHASE_TWO_SPEED_ID) == null) { movementSpeed.addPermanentModifier(PHASE_TWO_SPEED); } AttributeInstance flyingSpeed = this.getAttribute(Attributes.FLYING_SPEED); - if (flyingSpeed != null && !(flyingSpeed.getModifier(PHASE_TWO_FLYING_SPEED_ID) != null)) { + if (flyingSpeed != null && flyingSpeed.getModifier(PHASE_TWO_FLYING_SPEED_ID) == null) { flyingSpeed.addPermanentModifier(PHASE_TWO_FLYING_SPEED); } AttributeInstance attackDamage = this.getAttribute(Attributes.ATTACK_DAMAGE); - if (attackDamage != null && !(attackDamage.getModifier(PHASE_TWO_DAMAGE_ID) != null)) { + if (attackDamage != null && attackDamage.getModifier(PHASE_TWO_DAMAGE_ID) == null) { attackDamage.addPermanentModifier(PHASE_TWO_DAMAGE); } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenMultipartLayout.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenMultipartLayout.java index e4058999..6d3d7590 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenMultipartLayout.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenMultipartLayout.java @@ -1,7 +1,7 @@ package com.craisinlord.antarchy.content.entity.kraken; -import com.craisinlord.antarchy.content.entity.multipart.MultipartLayout; -import com.craisinlord.antarchy.content.entity.multipart.MultipartPartDefinition; +import com.craisinlord.anthology.multipart.MultipartLayout; +import com.craisinlord.anthology.multipart.MultipartPartDefinition; public final class KrakenMultipartLayout implements MultipartLayout { public static final KrakenMultipartLayout INSTANCE = new KrakenMultipartLayout(); diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/lucid/LucidEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/lucid/LucidEntity.java index e9649178..273badd9 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/lucid/LucidEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/lucid/LucidEntity.java @@ -33,6 +33,7 @@ import net.minecraft.world.entity.monster.Monster; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; @@ -75,6 +76,8 @@ public class LucidEntity extends Monster implements GeoEntity { private static final double MIN_HOVER_RANGE = 6.5D; private static final double CLOSE_RANGE = 4.5D; private static final double DEFAULT_HOVER_HEIGHT = 2.75D; + private static final double NATURAL_SPAWN_LIMIT_RADIUS = 64.0D; + private static final int NATURAL_SPAWN_LIMIT = 5; private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); private static final RawAnimation FLY_ANIM = RawAnimation.begin().thenLoop("fly"); @@ -101,12 +104,24 @@ public class LucidEntity extends Monster implements GeoEntity { .add(Attributes.MOVEMENT_SPEED, AntarchySettings.lucidMovementSpeed()) .add(Attributes.FLYING_SPEED, AntarchySettings.lucidFlyingSpeed()) .add(Attributes.FOLLOW_RANGE, 40.0D) - .add(Attributes.KNOCKBACK_RESISTANCE, AntarchySettings.lucidKnockbackResistance()); + .add(Attributes.KNOCKBACK_RESISTANCE, AntarchySettings.lucidKnockbackResistance()) + .add(Attributes.ARMOR_TOUGHNESS, AntarchySettings.lucidArmorToughness()); + } + + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, + MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData, @Nullable CompoundTag dataTag) { + com.craisinlord.antarchy.content.entity.ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.lucidHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData, dataTag); } public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { + if (com.craisinlord.antarchy.content.block.entity.UndertrialSpawnContext.isTrialSpawn(spawnReason)) { + return level.getDifficulty() != Difficulty.PEACEFUL; + } return level.getDifficulty() != Difficulty.PEACEFUL + && level.getEntitiesOfClass(LucidEntity.class, new AABB(pos).inflate(NATURAL_SPAWN_LIMIT_RADIUS), lucid -> lucid.isAlive()).size() < NATURAL_SPAWN_LIMIT && pos.getY() <= 250 && level.isEmptyBlock(pos) && level.isEmptyBlock(pos.above()) @@ -293,7 +308,6 @@ public class LucidEntity extends Monster implements GeoEntity { serverLevel.addFreshEntity(bolt); } - private double getAttackRange() { return Math.max(MIN_EFFECTIVE_ATTACK_RANGE, AntarchySettings.lucidAttackRange()); } @@ -560,8 +574,3 @@ public class LucidEntity extends Monster implements GeoEntity { } - - - - - diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartEntityOwner.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartEntityOwner.java deleted file mode 100644 index 9e5c1a9d..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartEntityOwner.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.craisinlord.antarchy.content.entity.multipart; - -import net.minecraft.world.InteractionHand; -import net.minecraft.world.InteractionResult; -import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.phys.Vec3; - -public interface MultipartEntityOwner { - MultipartLayout antarchy$getMultipartLayout(); - - Entity[] antarchy$getMultipartParts(); - - void antarchy$setMultipartParts(Entity[] parts); - - default Entity[] antarchy$createMultipartParts() { - return MultipartFramework.createMultipartParts(this); - } - - default void antarchy$spawnMultipartParts() { - MultipartFramework.spawnMultipartParts(this); - } - - default void antarchy$discardMultipartParts() { - MultipartFramework.discardMultipartParts(this); - } - - default void antarchy$syncMultipartParts() { - MultipartFramework.syncMultipartParts(this); - } - - default boolean antarchy$hurtMultipartPart(Entity part, DamageSource source, float amount) { - return ((Entity) this).hurt(source, amount); - } - - default InteractionResult antarchy$interactMultipartPart(Entity part, Player player, Vec3 hitPosition, InteractionHand hand) { - return ((Entity) this).interactAt(player, hitPosition, hand); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartFramework.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartFramework.java deleted file mode 100644 index ba954583..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartFramework.java +++ /dev/null @@ -1,119 +0,0 @@ -package com.craisinlord.antarchy.content.entity.multipart; - -import java.util.Objects; -import java.util.UUID; -import org.jetbrains.annotations.Nullable; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.level.Level; - -public final class MultipartFramework { - private static final org.slf4j.Logger LOGGER = org.slf4j.LoggerFactory.getLogger(MultipartFramework.class); - private static boolean warnedMissingFactory; - - public interface PartFactory { - Entity create(MultipartEntityOwner owner, int partIndex, MultipartPartDefinition spec); - } - - public interface NetworkBridge { - void sendAttack(UUID parentId, int partIndex, float damage); - - void sendInteract(UUID parentId, int partIndex, int handId); - } - - private static final NetworkBridge NOOP_BRIDGE = new NetworkBridge() { - @Override - public void sendAttack(UUID parentId, int partIndex, float damage) { - } - - @Override - public void sendInteract(UUID parentId, int partIndex, int handId) { - } - }; - - @Nullable - private static PartFactory partFactory; - private static NetworkBridge networkBridge = NOOP_BRIDGE; - private MultipartFramework() { - } - - public static void bootstrap( - PartFactory partFactory, - NetworkBridge networkBridge - ) { - MultipartFramework.partFactory = Objects.requireNonNull(partFactory, "partFactory"); - MultipartFramework.networkBridge = Objects.requireNonNull(networkBridge, "networkBridge"); - } - - public static Entity[] createMultipartParts(MultipartEntityOwner owner) { - if (partFactory == null) { - if (!warnedMissingFactory) { - warnedMissingFactory = true; - LOGGER.warn("Multipart part factory has not been bootstrapped on this platform; " - + "multipart entities will fall back to their base hitbox only"); - } - return new Entity[0]; - } - - MultipartLayout layout = owner.antarchy$getMultipartLayout(); - MultipartPartDefinition[] parts = layout.parts(); - Entity[] created = new Entity[parts.length]; - for (int i = 0; i < parts.length; i++) { - created[i] = createMultipartPart(owner, i, parts[i]); - } - return created; - } - - public static Entity createMultipartPart(MultipartEntityOwner owner, int index, MultipartPartDefinition spec) { - PartFactory factory = partFactory; - if (factory == null) { - throw new IllegalStateException("Multipart part factory has not been bootstrapped"); - } - - return factory.create(owner, index, spec); - } - - public static void spawnMultipartParts(MultipartEntityOwner owner) { - Entity[] parts = owner.antarchy$getMultipartParts(); - if (parts == null) { - parts = owner.antarchy$createMultipartParts(); - owner.antarchy$setMultipartParts(parts); - } - syncMultipartParts(owner); - } - - public static void discardMultipartParts(MultipartEntityOwner owner) { - Entity[] parts = owner.antarchy$getMultipartParts(); - if (parts == null) { - return; - } - - for (Entity part : parts) { - if (part != null) { - part.discard(); - } - } - - owner.antarchy$setMultipartParts(null); - } - - public static void syncMultipartParts(MultipartEntityOwner owner) { - Entity[] parts = owner.antarchy$getMultipartParts(); - if (parts == null) { - return; - } - - for (Entity part : parts) { - if (part instanceof MultipartPartAccess access) { - access.antarchy$syncFromParent(); - } - } - } - - public static void sendMultipartAttack(UUID parentId, int partIndex, float damage) { - networkBridge.sendAttack(parentId, partIndex, damage); - } - - public static void sendMultipartInteract(UUID parentId, int partIndex, int handId) { - networkBridge.sendInteract(parentId, partIndex, handId); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartLayout.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartLayout.java deleted file mode 100644 index 81bf5b01..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartLayout.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.craisinlord.antarchy.content.entity.multipart; - -import net.minecraft.world.entity.Entity; -import net.minecraft.world.phys.Vec3; - -public interface MultipartLayout { - MultipartPartDefinition[] parts(); - - default MultipartPartDefinition part(int index) { - return this.parts()[index]; - } - - default Vec3 getPartPosition(Entity parent, MultipartPartDefinition spec) { - double yawRadians = Math.toRadians(parent.getYRot()); - Vec3 forward = new Vec3(-Math.sin(yawRadians), 0.0D, Math.cos(yawRadians)); - Vec3 right = new Vec3(forward.z, 0.0D, -forward.x); - - return new Vec3( - parent.getX() + forward.x * spec.forwardOffset() + right.x * spec.lateralOffset(), - parent.getY() + spec.yOffset(), - parent.getZ() + forward.z * spec.forwardOffset() + right.z * spec.lateralOffset() - ); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartPartAccess.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartPartAccess.java deleted file mode 100644 index d2b36603..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartPartAccess.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.craisinlord.antarchy.content.entity.multipart; - -public interface MultipartPartAccess { - void antarchy$syncFromParent(); -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartPartDefinition.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartPartDefinition.java deleted file mode 100644 index 194758e5..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartPartDefinition.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.craisinlord.antarchy.content.entity.multipart; - -public record MultipartPartDefinition( - String name, - float width, - float height, - float damageMultiplier, - double forwardOffset, - double yOffset, - double lateralOffset, - boolean collisionEnabled -) { -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/network/MultipartAttackPayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/network/MultipartAttackPayload.java deleted file mode 100644 index b5ce393b..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/network/MultipartAttackPayload.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.craisinlord.antarchy.content.entity.multipart.network; - -import com.craisinlord.antarchy.Antarchy; -import io.netty.buffer.ByteBuf; -import java.util.UUID; -import com.craisinlord.antarchy.compat.network.ByteBufCodecs; -import com.craisinlord.antarchy.compat.network.StreamCodec; -import com.craisinlord.antarchy.compat.network.CustomPacketPayload; -import net.minecraft.resources.ResourceLocation; - -public record MultipartAttackPayload(UUID parentId, int partIndex, float damage) implements CustomPacketPayload { - public static final Type TYPE = - new Type<>(new ResourceLocation(Antarchy.MODID, "multipart_attack")); - public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - ByteBufCodecs.STRING_UTF8.map(UUID::fromString, UUID::toString), - MultipartAttackPayload::parentId, - ByteBufCodecs.VAR_INT, - MultipartAttackPayload::partIndex, - ByteBufCodecs.FLOAT, - MultipartAttackPayload::damage, - MultipartAttackPayload::new - ); - - @Override - public Type type() { - return TYPE; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/network/MultipartInteractPayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/network/MultipartInteractPayload.java deleted file mode 100644 index 9d2e5603..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/network/MultipartInteractPayload.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.craisinlord.antarchy.content.entity.multipart.network; - -import com.craisinlord.antarchy.Antarchy; -import io.netty.buffer.ByteBuf; -import java.util.UUID; -import com.craisinlord.antarchy.compat.network.ByteBufCodecs; -import com.craisinlord.antarchy.compat.network.StreamCodec; -import com.craisinlord.antarchy.compat.network.CustomPacketPayload; -import net.minecraft.resources.ResourceLocation; - -public record MultipartInteractPayload(UUID parentId, int partIndex, int handId) implements CustomPacketPayload { - public static final Type TYPE = - new Type<>(new ResourceLocation(Antarchy.MODID, "multipart_interact")); - public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - ByteBufCodecs.STRING_UTF8.map(UUID::fromString, UUID::toString), - MultipartInteractPayload::parentId, - ByteBufCodecs.VAR_INT, - MultipartInteractPayload::partIndex, - ByteBufCodecs.VAR_INT, - MultipartInteractPayload::handId, - MultipartInteractPayload::new - ); - - @Override - public Type type() { - return TYPE; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareBiteEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareBiteEntity.java index 2b6c92dc..1b77cf29 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareBiteEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareBiteEntity.java @@ -1,16 +1,25 @@ package com.craisinlord.antarchy.content.entity.nightmare; +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; +import com.craisinlord.anthology.gravity.GravityRotationUtil; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundSource; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; import software.bernie.geckolib.core.animation.AnimatableManager; @@ -20,12 +29,27 @@ import software.bernie.geckolib.core.animation.RawAnimation; import software.bernie.geckolib.core.object.PlayState; import software.bernie.geckolib.util.GeckoLibUtil; +import java.util.UUID; + public class NightmareBiteEntity extends Entity implements GeoEntity { private static final EntityDataAccessor PHASE_TWO = SynchedEntityData.defineId(NightmareBiteEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor TELEGRAPH_ONLY = SynchedEntityData.defineId(NightmareBiteEntity.class, EntityDataSerializers.BOOLEAN); private static final RawAnimation BITE_ANIM = RawAnimation.begin().thenPlay("bite"); + private static final int LIFETIME_TICKS = 12; + private static final int SOUND_TICK = 7; + private static final int DAMAGE_TICK = 8; + private static final double START_SIDE_OFFSET = 1.35D; + private static final double START_BACK_OFFSET = 1.4D; + private static final double END_SIDE_OFFSET = 0.15D; + private static final double END_BACK_OFFSET = 0.2D; private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); private int ageTicks; + private int approachSide = 1; + private boolean biteSoundPlayed; + private boolean biteDamageApplied; + @Nullable + private UUID targetId; public NightmareBiteEntity(EntityType entityType, Level level) { super(entityType, level); @@ -34,10 +58,23 @@ public class NightmareBiteEntity extends Entity implements GeoEntity { this.noCulling = true; } - public static NightmareBiteEntity spawnAt(ServerLevel level, Vec3 pos, float yaw, boolean phaseTwo) { + public static NightmareBiteEntity spawnAt(ServerLevel level, Player target, boolean phaseTwo) { NightmareBiteEntity bite = new NightmareBiteEntity(AntarchyObjects.NIGHTMARE_BITE.get(), level); - bite.moveTo(pos.x, pos.y, pos.z, yaw, 0.0F); + bite.targetId = target.getUUID(); bite.setPhaseTwo(phaseTwo); + bite.approachSide = target.getRandom().nextBoolean() ? 1 : -1; + bite.updateTrackingPosition(target, 0.0D); + level.addFreshEntity(bite); + return bite; + } + + public static NightmareBiteEntity spawnTelegraphAt(ServerLevel level, LivingEntity target, boolean phaseTwo) { + NightmareBiteEntity bite = new NightmareBiteEntity(AntarchyObjects.NIGHTMARE_BITE.get(), level); + bite.targetId = target.getUUID(); + bite.setPhaseTwo(phaseTwo); + bite.setTelegraphOnly(true); + bite.approachSide = target.getRandom().nextBoolean() ? 1 : -1; + bite.updateTrackingPosition(target, 0.0D); level.addFreshEntity(bite); return bite; } @@ -45,6 +82,7 @@ public class NightmareBiteEntity extends Entity implements GeoEntity { @Override protected void defineSynchedData() { this.entityData.define(PHASE_TWO, false); + this.entityData.define(TELEGRAPH_ONLY, false); } @Override @@ -84,27 +122,117 @@ public class NightmareBiteEntity extends Entity implements GeoEntity { this.getEntityData().set(PHASE_TWO, phaseTwo); } + private boolean isTelegraphOnly() { + return this.entityData.get(TELEGRAPH_ONLY); + } + + private void setTelegraphOnly(boolean telegraphOnly) { + this.getEntityData().set(TELEGRAPH_ONLY, telegraphOnly); + } + @Override public void tick() { super.tick(); if (this.level().isClientSide) { return; } - if (++this.ageTicks >= 12) { + LivingEntity target = this.resolveTarget(); + if (target == null || !target.isAlive() + || !this.isTelegraphOnly() && !target.hasEffect(AntarchyObjects.DREAD.get())) { + this.discard(); + return; + } + int nextAge = ++this.ageTicks; + double progress = Math.min(1.0D, nextAge / (double) DAMAGE_TICK); + this.updateTrackingPosition(target, progress); + if (!this.biteSoundPlayed && nextAge >= SOUND_TICK) { + this.biteSoundPlayed = true; + this.level().playSound(null, this.getX(), this.getY(), this.getZ(), AntarchySoundEvents.NIGHTMARE_BITE.get(), SoundSource.HOSTILE, 0.75F, 0.86F + this.random.nextFloat() * 0.1F); + } + if (!this.biteDamageApplied && nextAge >= DAMAGE_TICK) { + this.biteDamageApplied = true; + if (!this.isTelegraphOnly()) { + this.performBite(target); + } + } + if (nextAge >= LIFETIME_TICKS) { this.discard(); } } + @Nullable + private LivingEntity resolveTarget() { + if (!(this.level() instanceof ServerLevel serverLevel) || this.targetId == null) { + return null; + } + Entity entity = serverLevel.getEntity(this.targetId); + return entity instanceof LivingEntity livingEntity ? livingEntity : null; + } + + private void updateTrackingPosition(LivingEntity target, double progress) { + GravityDirection targetGravity = GravityApi.getGravityDirection(target); + if (GravityApi.getGravityDirection(this) != targetGravity) { + GravityApi.setGravityDirection(this, targetGravity); + } + Vec3 forward = target.getLookAngle().multiply(1.0D, 0.0D, 1.0D); + if (forward.lengthSqr() < 1.0E-4D) { + forward = this.getViewVector(1.0F).multiply(1.0D, 0.0D, 1.0D); + } + if (forward.lengthSqr() < 1.0E-4D) { + forward = new Vec3(0.0D, 0.0D, 1.0D); + } + forward = forward.normalize(); + Vec3 localUp = GravityRotationUtil.vecPlayerToWorld( + 0.0D, 1.0D, 0.0D, targetGravity); + Vec3 right = forward.cross(localUp).normalize(); + double sideOffset = START_SIDE_OFFSET + (END_SIDE_OFFSET - START_SIDE_OFFSET) * progress; + double backOffset = START_BACK_OFFSET + (END_BACK_OFFSET - START_BACK_OFFSET) * progress; + Vec3 bodyCenter = target.position().add(GravityRotationUtil.vecPlayerToWorld( + 0.0D, target.getBbHeight() * 0.55D, 0.0D, targetGravity)); + Vec3 desiredPos = bodyCenter + .add(right.scale(this.approachSide * sideOffset)) + .subtract(forward.scale(backOffset)); + Vec3 toTarget = bodyCenter.subtract(desiredPos); + this.setPos(desiredPos.x, desiredPos.y, desiredPos.z); + if (toTarget.lengthSqr() > 1.0E-4D) { + Vec3 localToTarget = GravityRotationUtil.vecWorldToPlayer(toTarget, targetGravity); + float yaw = (float) Math.toDegrees(Math.atan2(localToTarget.z, localToTarget.x)) - 90.0F; + this.setYRot(yaw); + } + } + + private void performBite(LivingEntity target) { + if (target.distanceToSqr(this) > 6.25D) { + return; + } + float damage = (float) Math.max(3.0D, AntarchySettings.nightmareAttackDamage() * 0.35D); + target.hurt(this.damageSources().magic(), damage); + } + @Override public void addAdditionalSaveData(CompoundTag tag) { tag.putBoolean("PhaseTwo", this.isPhaseTwo()); + tag.putBoolean("TelegraphOnly", this.isTelegraphOnly()); tag.putInt("AgeTicks", this.ageTicks); + tag.putInt("ApproachSide", this.approachSide); + tag.putBoolean("BiteSoundPlayed", this.biteSoundPlayed); + tag.putBoolean("BiteDamageApplied", this.biteDamageApplied); + if (this.targetId != null) { + tag.putUUID("TargetId", this.targetId); + } } @Override public void readAdditionalSaveData(CompoundTag tag) { this.setPhaseTwo(tag.getBoolean("PhaseTwo")); + this.setTelegraphOnly(tag.getBoolean("TelegraphOnly")); this.ageTicks = tag.getInt("AgeTicks"); + this.approachSide = tag.getInt("ApproachSide"); + this.biteSoundPlayed = tag.getBoolean("BiteSoundPlayed"); + this.biteDamageApplied = tag.getBoolean("BiteDamageApplied"); + if (tag.hasUUID("TargetId")) { + this.targetId = tag.getUUID("TargetId"); + } } @Override diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareEntity.java index e3d0257d..8c286574 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareEntity.java @@ -4,8 +4,11 @@ import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.antarchy.content.boss.BossCombatUtil; import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; - +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; +import com.craisinlord.anthology.gravity.GravityRotationUtil; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.particles.ParticleTypes; @@ -15,6 +18,8 @@ import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; import net.minecraft.util.Mth; import net.minecraft.util.RandomSource; import net.minecraft.world.Difficulty; @@ -22,6 +27,7 @@ import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffects; import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityDimensions; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.Mob; @@ -53,14 +59,17 @@ import software.bernie.geckolib.core.animation.AnimationState; import software.bernie.geckolib.core.object.PlayState; import software.bernie.geckolib.core.animation.RawAnimation; import software.bernie.geckolib.util.GeckoLibUtil; - +import java.util.ArrayList; import java.util.EnumSet; import java.util.List; public class NightmareEntity extends Monster implements GeoEntity { - private static final EntityDataAccessor ANIMATION_STATE = SynchedEntityData.defineId(NightmareEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor ACTIVE_SPECIAL_ANIMATION = SynchedEntityData.defineId(NightmareEntity.class, EntityDataSerializers.INT); private static final EntityDataAccessor ROARING = SynchedEntityData.defineId(NightmareEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor PHASE_TWO = SynchedEntityData.defineId(NightmareEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor PHASE_TWO_TEXTURE = SynchedEntityData.defineId(NightmareEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor PHASE_TRANSITIONING = SynchedEntityData.defineId(NightmareEntity.class, EntityDataSerializers.BOOLEAN); private static final String ATTACK_COOLDOWN_KEY = "AttackCooldown"; private static final String ATTACK_ANIMATION_TICKS_KEY = "AttackAnimationTicks"; @@ -70,13 +79,36 @@ public class NightmareEntity extends Monster implements GeoEntity { private static final String INTRO_ROAR_USED_KEY = "IntroRoarUsed"; private static final String TARGETLESS_TICKS_KEY = "TargetlessTicks"; private static final String ANIMATION_STATE_KEY = "AnimationState"; + private static final String ACTIVE_SPECIAL_ANIMATION_KEY = "ActiveSpecialAnimation"; + private static final String PHASE_TWO_KEY = "PhaseTwo"; + private static final String PHASE_TWO_TEXTURE_KEY = "PhaseTwoTexture"; + private static final String PHASE_TRANSITIONING_KEY = "PhaseTransitioning"; + private static final String PHASE_TRANSITION_TICKS_KEY = "PhaseTransitionTicks"; + private static final String PENDING_PHASE_TRANSITION_KEY = "PendingPhaseTransition"; + private static final String PORTAL_COOLDOWN_KEY = "PortalCooldown"; + private static final String PORTAL_ATTACK_TICKS_KEY = "PortalAttackTicks"; + private static final String PORTAL_ATTACK_HIT_KEY = "PortalAttackHitApplied"; + private static final String PORTAL_TRAVEL_TICKS_KEY = "PortalTravelTicks"; + private static final String PORTAL_ENTRY_ID_KEY = "PortalEntryId"; + private static final String PORTAL_EXIT_ID_KEY = "PortalExitId"; + private static final String PORTAL_EXIT_X_KEY = "PortalExitX"; + private static final String PORTAL_EXIT_Y_KEY = "PortalExitY"; + private static final String PORTAL_EXIT_Z_KEY = "PortalExitZ"; private static final int ANIM_IDLE = 0; private static final int ANIM_WALK = 1; private static final int ANIM_FLY = 2; - private static final int ANIM_ATTACK = 3; - private static final int ANIM_FLY_ATTACK = 4; - private static final int ANIM_ROAR = 5; + private static final int SPECIAL_NONE = 0; + private static final int SPECIAL_ATTACK = 1; + private static final int SPECIAL_ATTACK_P2 = 2; + private static final int SPECIAL_FLY_ATTACK = 3; + private static final int SPECIAL_FLY_ATTACK_P2 = 4; + private static final int SPECIAL_ROAR = 5; + private static final int SPECIAL_ROAR_P2 = 6; + private static final int SPECIAL_PHASE_TWO = 7; + private static final int SPECIAL_PORTAL_ENTER = 8; + private static final int SPECIAL_PORTAL_EXIT = 9; + private static final int SPECIAL_DEATH = 10; private static final int ATTACK_TOTAL_TICKS = 20; private static final int ATTACK_DAMAGE_TICK = 10; private static final int INTRO_ROAR_TICKS = 30; @@ -87,24 +119,92 @@ public class NightmareEntity extends Monster implements GeoEntity { private static final int DREAD_TICKS = 160; private static final int WEAKNESS_TICKS = 100; private static final int BLOCK_BREAK_TICKS = 10; + private static final int TAKEOFF_COMMIT_TICKS = 8; + private static final int ROAR_FLIGHT_RECOVERY_TICKS = 16; private static final int FLIGHT_CEILING_CLEARANCE_BLOCKS = 4; + private static final int PHASE_TWO_TRANSITION_TICKS = 80; + private static final int PHASE_TWO_TEXTURE_SWAP_TICKS = 53; + private static final int PORTAL_TOTAL_TICKS = 74; + private static final int PORTAL_ENTER_TICK = 20; + private static final int PORTAL_HIDE_TICK = 55; + private static final int PORTAL_TELEPORT_TICK = 56; + private static final int PORTAL_REAPPEAR_TICK = 57; + private static final int PORTAL_DAMAGE_TICK = 61; + private static final int PORTAL_TRAVEL_INVULNERABLE_TICKS = PORTAL_REAPPEAR_TICK - PORTAL_HIDE_TICK; + private static final int PORTAL_LIFETIME_TICKS = 84; private static final double PATROL_SPEED = 0.34D; private static final double COMBAT_FLIGHT_SPEED = 0.725D; private static final double GROUND_APPROACH_SPEED = 0.82D; private static final double ATTACK_START_RANGE_SQR = 42.25D; - private static final double ATTACK_REACH_RADIUS = 2.65D; + private static final double ATTACK_HIT_FORWARD_OFFSET = 1.7D; + private static final double ATTACK_HIT_HALF_WIDTH = 1.85D; + private static final double ATTACK_HIT_MIN_Y_OFFSET = -0.35D; + private static final double ATTACK_HIT_MAX_Y_OFFSET = 2.3D; private static final double ATTACK_COMMIT_HORIZONTAL_RANGE = 4.2D; - private static final double FLIGHT_ENGAGE_RANGE_SQR = 100.0D; - private static final double FLIGHT_DISENGAGE_RANGE_SQR = 36.0D; + private static final double ATTACK_COMMIT_HORIZONTAL_RANGE_SQR = ATTACK_COMMIT_HORIZONTAL_RANGE * ATTACK_COMMIT_HORIZONTAL_RANGE; + private static final double FLIGHT_ENGAGE_RANGE_SQR = 42.25D; + private static final double FLIGHT_DISENGAGE_RANGE_SQR = 20.25D; + private static final double FLIGHT_ATTACK_RANGE_SQR = 49.0D; private static final double ROAR_RETRY_DISTANCE_SQR = 400.0D; + private static final double PHASE_TWO_HEALTH_FRACTION = 0.5D; + private static final double PORTAL_RANGE = 72.0D; + private static final double PORTAL_MIN_RANGE_SQR = 49.0D; + private static final double PORTAL_ENTRY_EXIT_MIN_RANGE_SQR = 225.0D; + private static final double PORTAL_EXIT_OFFSET = 15.0D; + private static final double PORTAL_EXIT_SIDE_OFFSET = 4.5D; + private static final double PORTAL_EXIT_AIR_HEIGHT = 3.0D; + private static final double FLYING_APPROACH_STRAFE_OFFSET = 2.1D; + private static final double FLYING_APPROACH_HEIGHT = 0.0D; + private static final double FLYING_APPROACH_HEIGHT_PHASE_TWO = 0.12D; + private static final double FLYING_APPROACH_TOO_CLOSE_RANGE_SQR = 9.0D; + private static final double FLYING_OVERHEAD_STALL_RANGE_SQR = 4.0D; + private static final double FLYING_OVERHEAD_STALL_HEIGHT = 1.35D; + private static final double FLYING_OVERHEAD_RELEASE_HEIGHT = 1.0D; + private static final double LOW_PROFILE_FLIGHT_DISENGAGE_RANGE_SQR = 12.25D; + private static final double LOW_PROFILE_FLIGHT_DISENGAGE_VERTICAL = 1.4D; + private static final double LOW_PROFILE_FLIGHT_DISENGAGE_OVERHEAD = 1.35D; + private static final double FLYING_OVERHEAD_DESCENT_BACK_OFFSET = 2.3D; + private static final double FLYING_OVERHEAD_DESCENT_SIDE_OFFSET = 2.4D; + private static final double FLYING_ATTACK_MAX_OVERHEAD_COMMIT_HEIGHT = 1.2D; + private static final double FLYING_ATTACK_BODY_TARGET_HEIGHT = 0.65D; + private static final double FLYING_ATTACK_MIN_TARGET_HEIGHT = 0.16D; + private static final double LOW_PROFILE_TARGET_MAX_HEIGHT = 1.2D; + private static final double LOW_PROFILE_OVERHEAD_DESCENT_BACK_OFFSET = 2.9D; + private static final double LOW_PROFILE_OVERHEAD_DESCENT_SIDE_OFFSET = 3.0D; + private static final double LOW_PROFILE_TOO_CLOSE_BACK_OFFSET = 3.2D; + private static final double LOW_PROFILE_TOO_CLOSE_STRAFE_SCALE = 0.85D; + private static final double ANIMATION_MOVEMENT_THRESHOLD_SQR = 0.01D; private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); private static final RawAnimation FLY_ANIM = RawAnimation.begin().thenLoop("fly"); - private static final RawAnimation ATTACK_ANIM = RawAnimation.begin().thenPlay("attack").thenLoop("idle"); - private static final RawAnimation FLY_ATTACK_ANIM = RawAnimation.begin().thenPlay("attack2").thenLoop("fly"); - private static final RawAnimation ROAR_ANIM = RawAnimation.begin().thenPlay("roar").thenLoop("idle"); + private static final RawAnimation PHASE_TWO_IDLE_ANIM = RawAnimation.begin().thenLoop("idle_P2"); + private static final RawAnimation PHASE_TWO_WALK_ANIM = RawAnimation.begin().thenLoop("walk_P2"); + private static final RawAnimation PHASE_TWO_FLY_ANIM = RawAnimation.begin().thenLoop("fly_P2"); + private static final String LOCOMOTION_CONTROLLER = "main_controller"; + private static final int LOCOMOTION_TRANSITION_TICKS = 5; + private static final String SPECIAL_CONTROLLER = "special_controller"; + private static final String SPECIAL_ATTACK_TRIGGER = "attack"; + private static final String SPECIAL_ATTACK_P2_TRIGGER = "attack_P2"; + private static final String SPECIAL_FLY_ATTACK_TRIGGER = "attack2"; + private static final String SPECIAL_FLY_ATTACK_P2_TRIGGER = "attack2_P2"; + private static final String SPECIAL_ROAR_TRIGGER = "roar"; + private static final String SPECIAL_ROAR_P2_TRIGGER = "roar_P2"; + private static final String SPECIAL_PHASE_TWO_TRIGGER = "phase2"; + private static final String SPECIAL_PORTAL_ENTER_TRIGGER = "portal_enter"; + private static final String SPECIAL_PORTAL_EXIT_TRIGGER = "portal_out"; + private static final RawAnimation ATTACK_ANIM = RawAnimation.begin().thenPlay("attack"); + private static final RawAnimation ATTACK_P2_ANIM = RawAnimation.begin().thenPlay("attack_P2"); + private static final RawAnimation FLY_ATTACK_ANIM = RawAnimation.begin().thenPlay("attack2"); + private static final RawAnimation FLY_ATTACK_P2_ANIM = RawAnimation.begin().thenPlay("attack2_P2"); + private static final RawAnimation ROAR_ANIM = RawAnimation.begin().thenPlay("roar"); + private static final RawAnimation ROAR_P2_ANIM = RawAnimation.begin().thenPlay("roar_P2"); + private static final RawAnimation PHASE_TWO_TRANSITION_ANIM = RawAnimation.begin().thenPlay("phase2"); + private static final RawAnimation PORTAL_ENTER_ANIM = RawAnimation.begin().thenPlay("portal_enter"); + private static final RawAnimation PORTAL_EXIT_ANIM = RawAnimation.begin().thenPlay("portal_out"); + private static final RawAnimation DEATH_ANIM = RawAnimation.begin().thenPlayAndHold("death"); + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); private int attackCooldown; @@ -117,9 +217,22 @@ public class NightmareEntity extends Monster implements GeoEntity { private int groundMoveTicks; private int wingFlapCooldown; private int blockBreakCooldown; + private int phaseTransitionTicks; + private int portalCooldown; + private int portalAttackTicks; + private int portalTravelTicks; + private int takeoffCommitTicks; private boolean attackHitApplied; private boolean introRoarUsed; private boolean flyingToTarget; + private boolean portalAttackHitApplied; + private boolean pendingPhaseTransition; + private int lastTriggeredSpecialAnimation = SPECIAL_NONE; + private Vec3 portalExitPos; + @Nullable + private NightmarePortalEntity entryPortal; + @Nullable + private NightmarePortalEntity exitPortal; public NightmareEntity(EntityType entityType, Level level) { super(entityType, level); @@ -135,31 +248,48 @@ public class NightmareEntity extends Monster implements GeoEntity { .add(Attributes.FLYING_SPEED, 0.375D) .add(Attributes.FOLLOW_RANGE, 48.0D) .add(Attributes.KNOCKBACK_RESISTANCE, 0.75D) - .add(Attributes.ARMOR, 8.0D); + .add(Attributes.ARMOR, AntarchySettings.nightmareMobArmor()) + .add(Attributes.ARMOR_TOUGHNESS, AntarchySettings.nightmareMobArmorToughness()); + } + + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, + MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData, @org.jetbrains.annotations.Nullable net.minecraft.nbt.CompoundTag dataTag) { + com.craisinlord.antarchy.content.entity.ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.nightmareHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData, dataTag); } public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { - boolean sturdy = level.getBlockState(pos.below()).isFaceSturdy(level, pos.below(), Direction.UP); + if (com.craisinlord.antarchy.content.block.entity.UndertrialSpawnContext.isTrialSpawn(spawnReason)) { + return level.getDifficulty() != Difficulty.PEACEFUL; + } boolean posEmpty = level.isEmptyBlock(pos); - boolean aboveEmpty = level.isEmptyBlock(pos.above()); - return level.getDifficulty() != Difficulty.PEACEFUL && sturdy && posEmpty && aboveEmpty; + boolean floorSpawn = level.getBlockState(pos.below()).isFaceSturdy(level, pos.below(), Direction.UP) && level.isEmptyBlock(pos.above()); + boolean ceilingSpawn = level.getBlockState(pos.above()).isFaceSturdy(level, pos.above(), Direction.DOWN) && level.isEmptyBlock(pos.below()); + return level.getDifficulty() != Difficulty.PEACEFUL && posEmpty && (floorSpawn || ceilingSpawn); } @Override protected void defineSynchedData() { super.defineSynchedData(); this.entityData.define(ANIMATION_STATE, ANIM_IDLE); + this.entityData.define(ACTIVE_SPECIAL_ANIMATION, SPECIAL_NONE); this.entityData.define(ROARING, false); + this.entityData.define(PHASE_TWO, false); + this.entityData.define(PHASE_TWO_TEXTURE, false); + this.entityData.define(PHASE_TRANSITIONING, false); } @Override protected void registerGoals() { - this.goalSelector.addGoal(1, new NightmareRoarGoal()); - this.goalSelector.addGoal(2, new NightmareFlyToTargetGoal()); - this.goalSelector.addGoal(3, new NightmareMeleeGoal()); - this.goalSelector.addGoal(5, new LookAtPlayerGoal(this, Player.class, 16.0F)); - this.goalSelector.addGoal(6, new RandomLookAroundGoal(this)); - this.goalSelector.addGoal(7, new NightmareWanderGoal()); + this.goalSelector.addGoal(1, new NightmarePhaseTransitionGoal()); + this.goalSelector.addGoal(2, new NightmarePortalGoal()); + this.goalSelector.addGoal(3, new NightmareRoarGoal()); + this.goalSelector.addGoal(4, new NightmareFlyToTargetGoal()); + this.goalSelector.addGoal(5, new NightmareMeleeGoal()); + this.goalSelector.addGoal(7, new LookAtPlayerGoal(this, Player.class, 16.0F)); + this.goalSelector.addGoal(8, new RandomLookAroundGoal(this)); + this.goalSelector.addGoal(9, new NightmareWanderGoal()); this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, this::canTargetEntity)); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Mob.class, 10, true, false, this::canTargetEntity)); @@ -167,22 +297,31 @@ public class NightmareEntity extends Monster implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "main_controller", 0, this::mainAnimController)); + controllers.add(new AnimationController<>(this, LOCOMOTION_CONTROLLER, LOCOMOTION_TRANSITION_TICKS, this::mainAnimController)); + controllers.add(new AnimationController<>(this, SPECIAL_CONTROLLER, 0, state -> PlayState.STOP) + .triggerableAnim(SPECIAL_ATTACK_TRIGGER, ATTACK_ANIM) + .triggerableAnim(SPECIAL_ATTACK_P2_TRIGGER, ATTACK_P2_ANIM) + .triggerableAnim(SPECIAL_FLY_ATTACK_TRIGGER, FLY_ATTACK_ANIM) + .triggerableAnim(SPECIAL_FLY_ATTACK_P2_TRIGGER, FLY_ATTACK_P2_ANIM) + .triggerableAnim(SPECIAL_ROAR_TRIGGER, ROAR_ANIM) + .triggerableAnim(SPECIAL_ROAR_P2_TRIGGER, ROAR_P2_ANIM) + .triggerableAnim(SPECIAL_PHASE_TWO_TRIGGER, PHASE_TWO_TRANSITION_ANIM) + .triggerableAnim(SPECIAL_PORTAL_ENTER_TRIGGER, PORTAL_ENTER_ANIM) + .triggerableAnim(SPECIAL_PORTAL_EXIT_TRIGGER, PORTAL_EXIT_ANIM) + .triggerableAnim("death", DEATH_ANIM)); } private PlayState mainAnimController(AnimationState state) { + if (this.shouldBlockLocomotionAnimation()) { + return PlayState.STOP; + } int animState = this.getAnimationState(); - state.getController().setAnimationSpeed(switch (animState) { - case ANIM_FLY -> 0.45D; - default -> 1.0D; - }); + state.getController().setAnimationSpeed(animState == ANIM_FLY ? 0.45D : 1.0D); + boolean phaseTwo = this.isPhaseTwo(); return switch (animState) { - case ANIM_WALK -> state.setAndContinue(WALK_ANIM); - case ANIM_FLY -> state.setAndContinue(FLY_ANIM); - case ANIM_ATTACK -> state.setAndContinue(ATTACK_ANIM); - case ANIM_FLY_ATTACK -> state.setAndContinue(FLY_ATTACK_ANIM); - case ANIM_ROAR -> state.setAndContinue(ROAR_ANIM); - default -> state.setAndContinue(IDLE_ANIM); + case ANIM_WALK -> state.setAndContinue(phaseTwo ? PHASE_TWO_WALK_ANIM : WALK_ANIM); + case ANIM_FLY -> state.setAndContinue(phaseTwo ? PHASE_TWO_FLY_ANIM : FLY_ANIM); + default -> state.setAndContinue(phaseTwo ? PHASE_TWO_IDLE_ANIM : IDLE_ANIM); }; } @@ -205,31 +344,39 @@ public class NightmareEntity extends Monster implements GeoEntity { super.tick(); if (this.level().isClientSide) { + this.syncSpecialAnimationTrigger(); this.tickClientParticles(); this.updateFlightRotation(); if (this.isRoaring()) { - com.craisinlord.antarchy.content.client.CameraShakeClientState.register( + com.craisinlord.anthology.shake.client.CameraShake.register( this, - com.craisinlord.antarchy.content.client.CameraShakeClientState.NIGHTMARE_RANGE, - com.craisinlord.antarchy.content.client.CameraShakeClientState.NIGHTMARE_STRENGTH, + 32.0D, + 1.35F, this::isRoaring ); } return; } - this.setNoGravity(this.flyingToTarget && !this.isTooCloseToCeiling()); + this.setNoGravity(!this.pendingPhaseTransition + && !this.isPhaseTransitioning() + && (this.flyingToTarget || this.portalAttackTicks > 0 || this.portalTravelTicks > 0) + && !this.isTooCloseToCeiling()); int prevAirborneTicks = this.airborneTicks; this.airborneTicks = this.onGround() ? 0 : this.airborneTicks + 1; if (this.onGround() && prevAirborneTicks > 5) { - this.landingCooldown = 100; + this.landingCooldown = 32; } if (this.attackCooldown > 0) this.attackCooldown--; if (this.roarCooldown > 0) this.roarCooldown--; if (this.blockBreakCooldown > 0) this.blockBreakCooldown--; if (this.landingCooldown > 0) this.landingCooldown--; + if (this.portalCooldown > 0) this.portalCooldown--; + if (this.portalTravelTicks > 0) this.portalTravelTicks--; + if (this.takeoffCommitTicks > 0) this.takeoffCommitTicks--; + this.setInvisible(this.portalTravelTicks > 0); LivingEntity target = this.getTarget(); if (!this.canTargetEntity(target)) { @@ -248,15 +395,25 @@ public class NightmareEntity extends Monster implements GeoEntity { } if (this.isDeadOrDying()) { + this.clearNightmarePortals(); this.updateFlightRotation(); return; } - if (this.attackAnimationTicks > 0) { + if (this.pendingPhaseTransition) { + this.tickPendingPhaseTransition(target); + } + + if (this.isPhaseTransitioning()) { + this.tickPhaseTransition(target); + } else if (this.portalAttackTicks > 0) { + this.tickPortalAttack(target); + } else if (this.attackAnimationTicks > 0) { this.tickAttack(target); } this.updateAnimationState(); + this.syncSpecialAnimationTrigger(); this.updateFlightRotation(); } @@ -271,6 +428,30 @@ public class NightmareEntity extends Monster implements GeoEntity { super.travel(travelVector); } + @Override + public boolean hurt(DamageSource source, float amount) { + if (BossCombatUtil.isMagicWarded(this) && BossCombatUtil.isMagicBurstSource(source)) { + amount *= (1.0F - (float) AntarchySettings.bossMagicWardReductionFraction()); + } + if (this.isPhaseTransitioning() || this.portalTravelTicks > 0 || this.portalAttackTicks > 0) { + return false; + } + if (!this.isPhaseTwo() && amount > 0.0F) { + float threshold = (float) (this.getMaxHealth() * PHASE_TWO_HEALTH_FRACTION); + if (this.getHealth() > threshold && this.getHealth() - amount <= threshold) { + float clampedAmount = this.getHealth() - threshold; + boolean hurt = clampedAmount > 0.0F && super.hurt(source, clampedAmount); + if (hurt || clampedAmount <= 0.0F) { + this.setHealth(threshold); + this.beginPhaseTransitionSequence(); + return true; + } + return false; + } + } + return super.hurt(source, amount); + } + @Override public boolean doHurtTarget(Entity target) { if (!(target instanceof LivingEntity livingTarget)) return false; @@ -358,6 +539,27 @@ public class NightmareEntity extends Monster implements GeoEntity { tag.putInt("AirborneTicks", this.airborneTicks); tag.putBoolean("Roaring", this.isRoaring()); tag.putInt(ANIMATION_STATE_KEY, this.getAnimationState()); + tag.putInt(ACTIVE_SPECIAL_ANIMATION_KEY, this.getActiveSpecialAnimation()); + tag.putBoolean(PHASE_TWO_KEY, this.isPhaseTwo()); + tag.putBoolean(PHASE_TWO_TEXTURE_KEY, this.hasPhaseTwoTexture()); + tag.putBoolean(PHASE_TRANSITIONING_KEY, this.isPhaseTransitioning()); + tag.putInt(PHASE_TRANSITION_TICKS_KEY, this.phaseTransitionTicks); + tag.putBoolean(PENDING_PHASE_TRANSITION_KEY, this.pendingPhaseTransition); + tag.putInt(PORTAL_COOLDOWN_KEY, this.portalCooldown); + tag.putInt(PORTAL_ATTACK_TICKS_KEY, this.portalAttackTicks); + tag.putBoolean(PORTAL_ATTACK_HIT_KEY, this.portalAttackHitApplied); + tag.putInt(PORTAL_TRAVEL_TICKS_KEY, this.portalTravelTicks); + if (this.portalExitPos != null) { + tag.putDouble(PORTAL_EXIT_X_KEY, this.portalExitPos.x); + tag.putDouble(PORTAL_EXIT_Y_KEY, this.portalExitPos.y); + tag.putDouble(PORTAL_EXIT_Z_KEY, this.portalExitPos.z); + } + if (this.entryPortal != null) { + tag.putUUID(PORTAL_ENTRY_ID_KEY, this.entryPortal.getUUID()); + } + if (this.exitPortal != null) { + tag.putUUID(PORTAL_EXIT_ID_KEY, this.exitPortal.getUUID()); + } } @Override @@ -371,8 +573,23 @@ public class NightmareEntity extends Monster implements GeoEntity { this.introRoarUsed = tag.getBoolean(INTRO_ROAR_USED_KEY); this.targetlessTicks = tag.getInt(TARGETLESS_TICKS_KEY); this.airborneTicks = tag.getInt("AirborneTicks"); + this.portalCooldown = tag.getInt(PORTAL_COOLDOWN_KEY); + this.portalAttackTicks = tag.getInt(PORTAL_ATTACK_TICKS_KEY); + this.portalAttackHitApplied = tag.getBoolean(PORTAL_ATTACK_HIT_KEY); + this.portalTravelTicks = tag.getInt(PORTAL_TRAVEL_TICKS_KEY); this.entityData.set(ROARING, tag.getBoolean("Roaring")); this.entityData.set(ANIMATION_STATE, tag.contains(ANIMATION_STATE_KEY) ? tag.getInt(ANIMATION_STATE_KEY) : ANIM_IDLE); + this.entityData.set(ACTIVE_SPECIAL_ANIMATION, tag.contains(ACTIVE_SPECIAL_ANIMATION_KEY) ? tag.getInt(ACTIVE_SPECIAL_ANIMATION_KEY) : SPECIAL_NONE); + this.setPhaseTwo(tag.getBoolean(PHASE_TWO_KEY)); + this.setPhaseTwoTexture(tag.contains(PHASE_TWO_TEXTURE_KEY) ? tag.getBoolean(PHASE_TWO_TEXTURE_KEY) : this.isPhaseTwo() && !this.isPhaseTransitioning()); + this.setPhaseTransitioning(tag.getBoolean(PHASE_TRANSITIONING_KEY)); + this.phaseTransitionTicks = tag.getInt(PHASE_TRANSITION_TICKS_KEY); + this.pendingPhaseTransition = tag.getBoolean(PENDING_PHASE_TRANSITION_KEY); + if (tag.contains(PORTAL_EXIT_X_KEY)) { + this.portalExitPos = new Vec3(tag.getDouble(PORTAL_EXIT_X_KEY), tag.getDouble(PORTAL_EXIT_Y_KEY), tag.getDouble(PORTAL_EXIT_Z_KEY)); + } else { + this.portalExitPos = null; + } } @Override @@ -381,9 +598,18 @@ public class NightmareEntity extends Monster implements GeoEntity { this.attackAnimationTicks = 0; this.attackCooldown = 0; this.roarTicks = 0; + this.portalAttackTicks = 0; + this.portalTravelTicks = 0; + this.phaseTransitionTicks = 0; + this.pendingPhaseTransition = false; + this.flyingToTarget = false; + this.clearActiveSpecialAnimation(); this.setRoaring(false); this.setDeltaMovement(Vec3.ZERO); + this.setNoGravity(false); + this.setInvisible(false); this.getNavigation().stop(); + this.clearNightmarePortals(); } super.die(damageSource); } @@ -391,6 +617,17 @@ public class NightmareEntity extends Monster implements GeoEntity { @Override protected void tickDeath() { this.deathTime++; + if (this.deathTime == 1) { + this.selectSpecialAnimation(SPECIAL_DEATH); + } + this.setNoGravity(false); + if (!this.onGround()) { + Vec3 fall = this.getDeltaMovement().multiply(0.6D, 0.0D, 0.6D); + this.setDeltaMovement(fall.x, Math.min(fall.y, 0.0D) - 0.08D, fall.z); + this.hasImpulse = true; + } else { + this.setDeltaMovement(Vec3.ZERO); + } if (this.deathTime >= DEATH_TICKS) { this.remove(RemovalReason.KILLED); this.dropExperience(); @@ -405,6 +642,26 @@ public class NightmareEntity extends Monster implements GeoEntity { return this.entityData.get(ANIMATION_STATE); } + public void setArchivePreviewFlying() { + this.setAnimationState(ANIM_FLY); + } + + public int getActiveSpecialAnimation() { + return this.entityData.get(ACTIVE_SPECIAL_ANIMATION); + } + + public boolean isPhaseTwo() { + return this.entityData.get(PHASE_TWO); + } + + public boolean hasPhaseTwoTexture() { + return this.entityData.get(PHASE_TWO_TEXTURE); + } + + public boolean isPhaseTransitioning() { + return this.entityData.get(PHASE_TRANSITIONING); + } + private void setRoaring(boolean roaring) { this.entityData.set(ROARING, roaring); } @@ -415,22 +672,39 @@ public class NightmareEntity extends Monster implements GeoEntity { } } + private void setActiveSpecialAnimation(int specialAnimation) { + if (this.entityData.get(ACTIVE_SPECIAL_ANIMATION) != specialAnimation) { + this.entityData.set(ACTIVE_SPECIAL_ANIMATION, specialAnimation); + } + } + + private void setPhaseTwo(boolean phaseTwo) { + this.entityData.set(PHASE_TWO, phaseTwo); + } + + private void setPhaseTwoTexture(boolean phaseTwoTexture) { + this.entityData.set(PHASE_TWO_TEXTURE, phaseTwoTexture); + } + + private void setPhaseTransitioning(boolean phaseTransitioning) { + this.entityData.set(PHASE_TRANSITIONING, phaseTransitioning); + } + private boolean shouldStartRoar(LivingEntity target) { if (!this.onGround() || this.roarCooldown > 0 || !this.hasLineOfSight(target)) return false; double distanceSqr = this.distanceToSqr(target); if (distanceSqr > ROAR_RETRY_DISTANCE_SQR || !this.isInFront(target.position(), -0.1D)) return false; - boolean pressureWindow = distanceSqr > ATTACK_START_RANGE_SQR; - boolean wounded = this.getHealth() <= this.getMaxHealth() * 0.5F; - return pressureWindow || wounded; + return distanceSqr > ATTACK_START_RANGE_SQR || this.isPhaseTwo(); } private void startRoar() { this.roarTicks = this.introRoarUsed ? COMBAT_ROAR_TICKS : INTRO_ROAR_TICKS; this.introRoarUsed = true; - this.roarCooldown = 240 + this.random.nextInt(140); + this.roarCooldown = 420 + this.random.nextInt(180); this.attackAnimationTicks = 0; this.attackHitApplied = false; this.setRoaring(true); + this.selectSpecialAnimation(this.isPhaseTwo() ? SPECIAL_ROAR_P2 : SPECIAL_ROAR); this.getNavigation().stop(); this.setDeltaMovement(this.getDeltaMovement().scale(0.18D)); this.playSound(AntarchySoundEvents.NIGHTMARE_ROAR.get(), 2.2F, 0.7F + this.random.nextFloat() * 0.06F); @@ -451,6 +725,10 @@ public class NightmareEntity extends Monster implements GeoEntity { if (--this.roarTicks <= 0) { this.roarTicks = 0; this.setRoaring(false); + this.flyingToTarget = false; + this.takeoffCommitTicks = 0; + this.landingCooldown = Math.max(this.landingCooldown, ROAR_FLIGHT_RECOVERY_TICKS); + this.clearActiveSpecialAnimation(); this.attackCooldown = Math.max(this.attackCooldown, 18); } } @@ -459,11 +737,27 @@ public class NightmareEntity extends Monster implements GeoEntity { this.attackAnimationTicks = ATTACK_TOTAL_TICKS; this.attackHitApplied = false; this.attackCooldown = ATTACK_TOTAL_TICKS + 12; + this.selectSpecialAnimation(this.selectAttackSpecialAnimation()); this.getNavigation().stop(); - Vec3 lunge = target.getEyePosition().subtract(this.getEyePosition()); + this.faceTowardTarget(target, 180.0F); + Vec3 lungeTarget = this.shouldUseFlyingLocomotion() + ? this.getFlyingAttackTargetPos(target) + : target.getEyePosition(); + Vec3 lunge = lungeTarget.subtract(this.getEyePosition()); if (lunge.lengthSqr() > 1.0E-4D) { - Vec3 normalized = lunge.normalize(); - this.setDeltaMovement(this.getDeltaMovement().scale(0.3D).add(normalized.x * 0.85D, normalized.y * 0.18D, normalized.z * 0.85D)); + GravityDirection direction = this.gravityDirection(); + Vec3 normalized = GravityRotationUtil.vecWorldToPlayer(lunge, direction).normalize(); + double verticalBoost = this.shouldUseFlyingLocomotion() ? 0.34D : 0.18D; + Vec3 current = GravityRotationUtil.vecWorldToPlayer(this.getDeltaMovement(), direction); + double upward = this.shouldUseFlyingLocomotion() + ? Math.max(normalized.y * verticalBoost, -0.08D) + : normalized.y * verticalBoost; + this.setDeltaMovement(GravityRotationUtil.vecPlayerToWorld( + normalized.x * 0.85D, + current.y * 0.18D + upward, + normalized.z * 0.85D, + direction + )); this.hasImpulse = true; } } @@ -479,32 +773,322 @@ public class NightmareEntity extends Monster implements GeoEntity { if (!this.attackHitApplied && elapsed >= ATTACK_DAMAGE_TICK) { this.attackHitApplied = true; this.playNightmareBiteSound(); - this.performAttackHit(); + this.performAttackHit(target); } if (--this.attackAnimationTicks <= 0) { this.attackAnimationTicks = 0; + this.clearActiveSpecialAnimation(); } } - private void performAttackHit() { - AABB hitBox = this.getBoundingBox() - .inflate(ATTACK_REACH_RADIUS, 1.5D, ATTACK_REACH_RADIUS) - .expandTowards(this.getViewVector(1.0F).scale(1.9D)); - List victims = this.level().getEntitiesOfClass(LivingEntity.class, hitBox, this::canTargetEntity); + private void beginPhaseTransitionSequence() { + this.attackAnimationTicks = 0; + this.portalAttackTicks = 0; + this.portalTravelTicks = 0; + this.attackHitApplied = false; + this.portalAttackHitApplied = false; + this.portalExitPos = null; + this.pendingPhaseTransition = !this.onGround(); + this.flyingToTarget = false; + this.clearNightmarePortals(); + this.getNavigation().stop(); + this.setRoaring(false); + this.setInvisible(false); + this.setNoGravity(false); + this.roarCooldown = Math.max(this.roarCooldown, 80); + this.portalCooldown = Math.max(this.portalCooldown, 140); + if (this.pendingPhaseTransition) { + Vec3 fall = this.getDeltaMovement(); + this.setDeltaMovement(fall.x * 0.25D, Math.min(fall.y, 0.0D) - 0.08D, fall.z * 0.25D); + this.clearActiveSpecialAnimation(); + return; + } + this.startPhaseTransition(); + } + + private void startPhaseTransition() { + this.setPhaseTwo(true); + this.setPhaseTwoTexture(false); + this.setPhaseTransitioning(true); + this.pendingPhaseTransition = false; + this.flyingToTarget = false; + this.selectSpecialAnimation(SPECIAL_PHASE_TWO); + this.phaseTransitionTicks = PHASE_TWO_TRANSITION_TICKS; + this.attackAnimationTicks = 0; + this.portalAttackTicks = 0; + this.portalTravelTicks = 0; + this.attackHitApplied = false; + this.portalAttackHitApplied = false; + this.portalExitPos = null; + this.clearNightmarePortals(); + this.getNavigation().stop(); + this.setRoaring(false); + this.setInvisible(false); + this.setDeltaMovement(Vec3.ZERO); + this.setNoGravity(false); + this.roarCooldown = Math.max(this.roarCooldown, 80); + this.portalCooldown = Math.max(this.portalCooldown, 140); + this.playSound(AntarchySoundEvents.NIGHTMARE_ROAR.get(), 2.2F, 0.68F + this.random.nextFloat() * 0.06F); + } + + private void tickPendingPhaseTransition(@Nullable LivingEntity target) { + this.getNavigation().stop(); + this.setNoGravity(false); + this.flyingToTarget = false; + this.clearActiveSpecialAnimation(); + if (target != null) { + this.getLookControl().setLookAt(target, 35.0F, 20.0F); + } + if (!this.onGround()) { + Vec3 fall = this.getDeltaMovement(); + this.setDeltaMovement(fall.x * 0.35D, Math.min(fall.y, 0.0D) - 0.08D, fall.z * 0.35D); + this.hasImpulse = true; + return; + } + this.setDeltaMovement(Vec3.ZERO); + this.startPhaseTransition(); + } + + private void tickPhaseTransition(@Nullable LivingEntity target) { + this.getNavigation().stop(); + this.setNoGravity(false); + if (!this.onGround()) { + Vec3 fall = this.getDeltaMovement(); + this.setDeltaMovement(fall.x * 0.2D, Math.min(fall.y, 0.0D) - 0.08D, fall.z * 0.2D); + this.hasImpulse = true; + } else { + this.setDeltaMovement(Vec3.ZERO); + } + this.getMoveControl().setWantedPosition(this.getX(), this.getY(), this.getZ(), 0.0D); + if (target != null) { + this.getLookControl().setLookAt(target, 35.0F, 20.0F); + } + if (this.phaseTransitionTicks % 8 == 0 && this.level() instanceof ServerLevel serverLevel) { + serverLevel.sendParticles(ParticleTypes.SOUL_FIRE_FLAME, this.getX(), this.getY() + 1.9D, this.getZ(), 12, 1.0D, 0.7D, 1.0D, 0.01D); + serverLevel.sendParticles(ParticleTypes.SMOKE, this.getX(), this.getY() + 1.9D, this.getZ(), 10, 0.8D, 0.5D, 0.8D, 0.02D); + } + if (!this.hasPhaseTwoTexture() && PHASE_TWO_TRANSITION_TICKS - this.phaseTransitionTicks >= PHASE_TWO_TEXTURE_SWAP_TICKS) { + this.setPhaseTwoTexture(true); + } + if (--this.phaseTransitionTicks <= 0) { + this.phaseTransitionTicks = 0; + this.setPhaseTwoTexture(true); + this.setPhaseTransitioning(false); + this.clearActiveSpecialAnimation(); + this.attackCooldown = Math.max(this.attackCooldown, 18); + } + } + + private boolean canStartPortalAttack(LivingEntity target) { + Vec3 entryPos = this.getPortalEntryPosition(); + if (!this.isPhaseTwo() || this.isPhaseTransitioning() || this.portalCooldown > 0 || this.attackAnimationTicks > 0 || this.roarTicks > 0) return false; + if (!this.hasLineOfSight(target) || this.distanceToSqr(target) > PORTAL_RANGE * PORTAL_RANGE) return false; + if (this.horizontalDistanceToSqr(target) < PORTAL_MIN_RANGE_SQR) return false; + return this.portalAttackTicks <= 0 && this.findPortalExitPos(target, entryPos) != null; + } + + private void startPortalAttack(LivingEntity target) { + Vec3 entryPos = this.getPortalEntryPosition(); + Vec3 exitPos = this.findPortalExitPos(target, entryPos); + if (exitPos == null || !(this.level() instanceof ServerLevel serverLevel)) return; + this.clearNightmarePortals(); + this.portalExitPos = exitPos; + this.portalAttackTicks = PORTAL_TOTAL_TICKS; + this.portalTravelTicks = 0; + this.portalAttackHitApplied = false; + this.attackAnimationTicks = 0; + this.attackHitApplied = false; + this.attackCooldown = 24; + this.portalCooldown = 180 + this.random.nextInt(100); + this.setInvisible(false); + this.clearActiveSpecialAnimation(); + this.getNavigation().stop(); + this.entryPortal = NightmarePortalEntity.spawnAt(serverLevel, entryPos, this, this.position(), PORTAL_LIFETIME_TICKS); + this.exitPortal = NightmarePortalEntity.spawnAt(serverLevel, exitPos, this, this.position(), PORTAL_LIFETIME_TICKS); + if (this.entryPortal != null && this.exitPortal != null) { + this.entryPortal.linkTo(this.exitPortal); + this.exitPortal.linkTo(this.entryPortal); + } + } + + private void tickPortalAttack(@Nullable LivingEntity target) { + this.getNavigation().stop(); + this.setDeltaMovement(this.getDeltaMovement().scale(0.55D)); + if (target != null) { + this.getLookControl().setLookAt(target, 35.0F, 20.0F); + this.faceTowardTarget(target, 12.0F); + } + int elapsed = PORTAL_TOTAL_TICKS - this.portalAttackTicks; + if (elapsed == PORTAL_ENTER_TICK) { + this.selectSpecialAnimation(SPECIAL_PORTAL_ENTER); + this.flyingToTarget = false; + this.setDeltaMovement(Vec3.ZERO); + this.hasImpulse = true; + } + if (elapsed >= PORTAL_ENTER_TICK && elapsed < PORTAL_REAPPEAR_TICK) { + this.flyingToTarget = false; + this.getMoveControl().setWantedPosition(this.getX(), this.getY(), this.getZ(), 0.0D); + this.setDeltaMovement(Vec3.ZERO); + } + if (elapsed == PORTAL_HIDE_TICK) { + this.portalTravelTicks = Math.max(this.portalTravelTicks, PORTAL_TRAVEL_INVULNERABLE_TICKS); + this.setInvisible(true); + this.setDeltaMovement(Vec3.ZERO); + this.hasImpulse = true; + } + if (elapsed == PORTAL_TELEPORT_TICK && this.portalExitPos != null) { + this.executePortalTeleport(target); + } + if (elapsed == PORTAL_REAPPEAR_TICK) { + this.setInvisible(false); + this.flyingToTarget = !this.onGround(); + this.selectSpecialAnimation(SPECIAL_PORTAL_EXIT); + if (target != null) { + this.faceTowardTarget(target, 180.0F); + } + this.resumePortalExitFlight(target); + } + if (elapsed > PORTAL_REAPPEAR_TICK && !this.onGround()) { + this.resumePortalExitFlight(target); + } + if (!this.portalAttackHitApplied && elapsed >= PORTAL_DAMAGE_TICK) { + this.portalAttackHitApplied = true; + this.performPortalExitHit(); + } + if (--this.portalAttackTicks <= 0) { + this.portalAttackTicks = 0; + this.portalExitPos = null; + this.clearNightmarePortals(); + this.clearActiveSpecialAnimation(); + this.setInvisible(false); + } + } + + private void executePortalTeleport(@Nullable LivingEntity target) { + if (this.portalExitPos == null) return; + this.level().playSound(null, this.getX(), this.getY(), this.getZ(), SoundEvents.PORTAL_TRAVEL, SoundSource.HOSTILE, 0.22F, 0.96F + this.random.nextFloat() * 0.08F); + this.portalTravelTicks = PORTAL_TRAVEL_INVULNERABLE_TICKS; + this.setPortalCooldown(); + this.setInvisible(true); + this.teleportTo(this.portalExitPos.x, this.portalExitPos.y, this.portalExitPos.z); + this.level().playSound(null, this.getX(), this.getY(), this.getZ(), SoundEvents.ENDERMAN_TELEPORT, SoundSource.HOSTILE, 0.3F, 0.92F + this.random.nextFloat() * 0.08F); + if (target != null) { + this.faceTowardTarget(target, 180.0F); + } + this.setDeltaMovement(Vec3.ZERO); + this.hasImpulse = true; + } + + private void resumePortalExitFlight(@Nullable LivingEntity target) { + if (this.onGround()) { + this.flyingToTarget = false; + return; + } + Vec3 destination = target != null + ? this.getFlightApproachPosition(target) + : this.position().add(this.getViewVector(1.0F).scale(3.0D)); + this.getMoveControl().setWantedPosition(destination.x, destination.y, destination.z, COMBAT_FLIGHT_SPEED); + Vec3 current = this.getDeltaMovement(); + if (current.lengthSqr() < 0.04D) { + Vec3 launch = destination.subtract(this.position()); + if (launch.lengthSqr() < 1.0E-4D) { + launch = this.getViewVector(1.0F); + } + if (launch.lengthSqr() > 1.0E-4D) { + Vec3 normalized = launch.normalize(); + this.setDeltaMovement(normalized.x * 0.42D, Math.max(normalized.y * 0.22D, -0.02D), normalized.z * 0.42D); + this.hasImpulse = true; + } + } + } + + private void performAttackHit(@Nullable LivingEntity target) { + Vec3 forward = this.getPlaneForward(this.getViewVector(1.0F)); + if (forward.lengthSqr() < 1.0E-4D) { + forward = this.toWorld(new Vec3(-Mth.sin(this.getYRot() * Mth.DEG_TO_RAD), 0.0D, Mth.cos(this.getYRot() * Mth.DEG_TO_RAD))); + } + if (forward.lengthSqr() < 1.0E-4D) { + forward = this.toWorld(new Vec3(0.0D, 0.0D, 1.0D)); + } + forward = forward.normalize(); + Vec3 strikeOrigin = this.position() + .add(this.toWorld(new Vec3(0.0D, this.getBbHeight() * 0.55D, 0.0D))) + .add(forward.scale(0.4D)); + Vec3 strikeCenter = strikeOrigin + .add(forward.scale(ATTACK_HIT_FORWARD_OFFSET)); + Vec3 strikeMin = strikeOrigin.add(this.toWorld(new Vec3(0.0D, ATTACK_HIT_MIN_Y_OFFSET, 0.0D))); + Vec3 strikeMax = strikeOrigin.add(this.toWorld(new Vec3(0.0D, ATTACK_HIT_MAX_Y_OFFSET, 0.0D))); + AABB hitBox = new AABB( + Math.min(strikeOrigin.x, strikeCenter.x) - ATTACK_HIT_HALF_WIDTH, + Math.min(strikeMin.y, strikeMax.y), + Math.min(strikeOrigin.z, strikeCenter.z) - ATTACK_HIT_HALF_WIDTH, + Math.max(strikeOrigin.x, strikeCenter.x) + ATTACK_HIT_HALF_WIDTH, + Math.max(strikeMin.y, strikeMax.y), + Math.max(strikeOrigin.z, strikeCenter.z) + ATTACK_HIT_HALF_WIDTH + ); + List victims = new ArrayList<>(this.level().getEntitiesOfClass(LivingEntity.class, hitBox, this::canTargetEntity)); + if (target != null && this.canTargetEntity(target) && !victims.contains(target) && this.canConnectAttackTo(target, forward, hitBox)) { + victims.add(0, target); + } float damage = (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE); for (LivingEntity victim : victims) { - if (!this.isInFront(victim.position(), -0.25D)) continue; + if (!this.canConnectAttackTo(victim, forward, hitBox)) continue; if (victim.hurt(this.nightmareDamageSource(), damage)) { this.applyNightmareStrikeEffects(victim); this.knockAway(victim, 1.15D, 0.3D); } } if (this.level() instanceof ServerLevel serverLevel) { - serverLevel.sendParticles(ParticleTypes.SOUL_FIRE_FLAME, this.getX(), this.getY() + 1.6D, this.getZ(), 12, 0.9D, 0.35D, 0.9D, 0.02D); + serverLevel.sendParticles(AntarchyObjects.NIGHTMARE_FIRE_FLAME.get(), this.getX(), this.getY() + 1.6D, this.getZ(), 12, 0.9D, 0.35D, 0.9D, 0.02D); serverLevel.sendParticles(ParticleTypes.SMOKE, this.getX(), this.getY() + 1.6D, this.getZ(), 8, 0.7D, 0.25D, 0.7D, 0.03D); } } + private boolean canConnectAttackTo(LivingEntity victim, Vec3 forward, AABB hitBox) { + if (!this.hasLineOfSight(victim)) { + return false; + } + Vec3 victimCenter = victim.getBoundingBox().getCenter(); + if (!this.isInFront(victimCenter, -0.42D)) { + return false; + } + if (victim.getBoundingBox().inflate(0.1D).intersects(hitBox)) { + return true; + } + Vec3 localForward = this.toLocalPlane(forward); + Vec3 toVictim = this.toLocalPlane(victimCenter.subtract(this.position())); + double forwardDistance = toVictim.dot(localForward.normalize()); + if (forwardDistance < 0.15D || forwardDistance > ATTACK_HIT_FORWARD_OFFSET + 1.25D) { + return false; + } + Vec3 lateral = toVictim.subtract(localForward.normalize().scale(forwardDistance)); + if (lateral.lengthSqr() > (ATTACK_HIT_HALF_WIDTH + 0.55D) * (ATTACK_HIT_HALF_WIDTH + 0.55D)) { + return false; + } + Vec3 minOffset = this.toWorld(new Vec3(0.0D, ATTACK_HIT_MIN_Y_OFFSET, 0.0D)); + Vec3 maxOffset = this.toWorld(new Vec3(0.0D, ATTACK_HIT_MAX_Y_OFFSET + 0.4D, 0.0D)); + double minY = Math.min(this.position().y + minOffset.y, this.position().y + maxOffset.y); + double maxY = Math.max(this.position().y + minOffset.y, this.position().y + maxOffset.y); + return victim.getBoundingBox().maxY >= minY && victim.getBoundingBox().minY <= maxY; + } + + private void performPortalExitHit() { + if (this.portalExitPos == null) return; + AABB hitBox = this.getBoundingBox().move(this.portalExitPos.subtract(this.position())).inflate(1.7D, 1.2D, 1.7D); + float damage = (float) (this.getAttributeValue(Attributes.ATTACK_DAMAGE) * 1.15F); + List victims = this.level().getEntitiesOfClass(LivingEntity.class, hitBox, this::canTargetEntity); + for (LivingEntity victim : victims) { + if (victim.hurt(this.nightmareDamageSource(), damage)) { + this.applyNightmareStrikeEffects(victim); + this.knockAway(victim, 1.35D, 0.35D); + } + } + if (this.level() instanceof ServerLevel serverLevel) { + serverLevel.sendParticles(AntarchyObjects.NIGHTMARE_FIRE_FLAME.get(), this.portalExitPos.x, this.portalExitPos.y + 1.0D, this.portalExitPos.z, 18, 0.9D, 0.45D, 0.9D, 0.02D); + serverLevel.sendParticles(ParticleTypes.SMOKE, this.portalExitPos.x, this.portalExitPos.y + 1.0D, this.portalExitPos.z, 14, 0.8D, 0.3D, 0.8D, 0.03D); + } + } + private void playNightmareBiteSound() { this.playSound(AntarchySoundEvents.NIGHTMARE_BITE.get(), 1.3F, 0.72F + this.random.nextFloat() * 0.08F); } @@ -521,14 +1105,67 @@ public class NightmareEntity extends Monster implements GeoEntity { } private void knockAway(LivingEntity target, double horizontalStrength, double verticalStrength) { - Vec3 direction = target.position().subtract(this.position()).multiply(1.0D, 0.0D, 1.0D); - if (direction.lengthSqr() < 1.0E-4D) direction = this.getViewVector(1.0F).multiply(1.0D, 0.0D, 1.0D); - if (direction.lengthSqr() < 1.0E-4D) direction = new Vec3(1.0D, 0.0D, 0.0D); - Vec3 push = direction.normalize().scale(horizontalStrength); - target.push(push.x, verticalStrength, push.z); + GravityDirection direction = this.gravityDirection(); + Vec3 localDirection = this.toLocalPlane(target.position().subtract(this.position())); + if (localDirection.lengthSqr() < 1.0E-4D) localDirection = this.toLocalPlane(this.getViewVector(1.0F)); + if (localDirection.lengthSqr() < 1.0E-4D) localDirection = new Vec3(1.0D, 0.0D, 0.0D); + Vec3 localPush = localDirection.normalize().scale(horizontalStrength); + Vec3 worldPush = GravityRotationUtil.vecPlayerToWorld(localPush.x, verticalStrength, localPush.z, direction); + target.push(worldPush.x, worldPush.y, worldPush.z); target.hurtMarked = true; } + private GravityDirection gravityDirection() { + return GravityApi.getGravityDirection(this); + } + + private Vec3 toLocal(Vec3 worldVector) { + return GravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); + } + + private Vec3 toWorld(Vec3 localVector) { + return GravityRotationUtil.vecPlayerToWorld(localVector, this.gravityDirection()); + } + + private Vec3 toLocalPlane(Vec3 worldVector) { + Vec3 local = this.toLocal(worldVector); + return new Vec3(local.x, 0.0D, local.z); + } + + private Vec3 localDeltaTo(Vec3 worldPosition) { + return this.toLocal(worldPosition.subtract(this.position())); + } + + private double verticalDistanceTo(LivingEntity target) { + return Math.abs(this.toLocal(target.getEyePosition().subtract(this.getEyePosition())).y); + } + + private double overheadGapTo(LivingEntity target) { + return -this.localDeltaTo(target.position()).y; + } + + private Vec3 getPlaneForward(Vec3 worldVector) { + Vec3 local = this.toLocalPlane(worldVector); + if (local.lengthSqr() < 1.0E-4D) { + return Vec3.ZERO; + } + return this.toWorld(local.normalize()); + } + + private Vec3 getLocalRight(Vec3 worldForward) { + Vec3 localForward = this.toLocalPlane(worldForward); + if (localForward.lengthSqr() < 1.0E-4D) { + return Vec3.ZERO; + } + Vec3 normalized = localForward.normalize(); + return this.toWorld(new Vec3(-normalized.z, 0.0D, normalized.x)); + } + + private Vec3 getFlyingAttackTargetPos(LivingEntity target) { + double targetHeight = Mth.clamp(target.getBbHeight() * 0.4D, FLYING_ATTACK_MIN_TARGET_HEIGHT, FLYING_ATTACK_BODY_TARGET_HEIGHT); + return target.position().add(this.toWorld(new Vec3(0.0D, targetHeight, 0.0D))); + } + private DamageSource nightmareDamageSource() { return this.level() instanceof ServerLevel serverLevel ? AntarchyDamageSources.nightmareMauling(serverLevel, this) @@ -536,13 +1173,9 @@ public class NightmareEntity extends Monster implements GeoEntity { } private boolean tryBreakBlocksToTarget(LivingEntity target) { - int startY = Mth.floor(this.getY()); - int endY = Math.max(Mth.floor(target.getY()), startY - 16); - int x = Mth.floor(this.getX()); - int z = Mth.floor(this.getZ()); - BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(); - for (int y = startY; y >= endY; y--) { - cursor.set(x, y, z); + Direction gravityDown = GravityRotationUtil.getGravityDownDirection(this); + BlockPos.MutableBlockPos cursor = this.blockPosition().mutable(); + for (int i = 0; i <= 16; i++) { if (this.level().getBlockState(cursor).is(AntarchyTags.Blocks.NIGHTMARE_BREAKABLE)) { if (this.blockBreakCooldown <= 0) { this.level().destroyBlock(cursor.immutable(), true, this); @@ -551,6 +1184,7 @@ public class NightmareEntity extends Monster implements GeoEntity { this.getMoveControl().setWantedPosition(this.getX(), this.getY(), this.getZ(), 0.0D); return true; } + cursor.move(gravityDown); } return false; } @@ -564,36 +1198,128 @@ public class NightmareEntity extends Monster implements GeoEntity { return entity instanceof Mob && entity.isAttackable(); } - private boolean shouldUseFlight() { - if (this.landingCooldown > 0) return false; - LivingEntity target = this.getTarget(); - return target != null - && this.distanceToSqr(target) > FLIGHT_ENGAGE_RANGE_SQR - && !this.isTooCloseToCeiling(); - } - private boolean canStartAttackOn(LivingEntity target) { if (!this.hasLineOfSight(target) || this.distanceToSqr(target) > ATTACK_START_RANGE_SQR) return false; double hdSqr = this.horizontalDistanceToSqr(target); - double verticalDistance = Math.abs(target.getEyeY() - this.getEyeY()); - return hdSqr <= ATTACK_COMMIT_HORIZONTAL_RANGE * ATTACK_COMMIT_HORIZONTAL_RANGE && verticalDistance <= 4.0D; + double verticalDistance = this.verticalDistanceTo(target); + if (this.shouldUseFlyingLocomotion()) { + double overheadGap = this.overheadGapTo(target); + return hdSqr <= ATTACK_COMMIT_HORIZONTAL_RANGE_SQR + && verticalDistance <= 2.5D + && overheadGap <= FLYING_ATTACK_MAX_OVERHEAD_COMMIT_HEIGHT; + } + return hdSqr <= ATTACK_COMMIT_HORIZONTAL_RANGE_SQR && verticalDistance <= 4.0D; + } + + private boolean shouldUseFlightPressure(LivingEntity target) { + if (target == null || this.isTooCloseToCeiling()) { + return false; + } + boolean lowProfileTarget = this.isLowProfileFlightTarget(target); + if (this.flyingToTarget && this.takeoffCommitTicks > 0) { + return true; + } + double distanceSqr = this.distanceToSqr(target); + double verticalDistance = this.verticalDistanceTo(target); + double horizontalDistanceSqr = this.horizontalDistanceToSqr(target); + double overheadGap = this.overheadGapTo(target); + if (lowProfileTarget + && horizontalDistanceSqr <= LOW_PROFILE_FLIGHT_DISENGAGE_RANGE_SQR + && verticalDistance <= LOW_PROFILE_FLIGHT_DISENGAGE_VERTICAL + && overheadGap <= LOW_PROFILE_FLIGHT_DISENGAGE_OVERHEAD) { + return false; + } + if (this.flyingToTarget) { + if (horizontalDistanceSqr <= ATTACK_COMMIT_HORIZONTAL_RANGE_SQR + && verticalDistance <= FLYING_OVERHEAD_RELEASE_HEIGHT + && overheadGap <= FLYING_ATTACK_MAX_OVERHEAD_COMMIT_HEIGHT) { + return false; + } + return distanceSqr > ATTACK_COMMIT_HORIZONTAL_RANGE_SQR + || verticalDistance > 1.0D + || overheadGap > FLYING_ATTACK_MAX_OVERHEAD_COMMIT_HEIGHT; + } + if (distanceSqr >= FLIGHT_ENGAGE_RANGE_SQR) { + return true; + } + return this.isPhaseTwo() && (distanceSqr >= FLIGHT_DISENGAGE_RANGE_SQR || verticalDistance > 1.5D); + } + + private Vec3 getFlightApproachPosition(LivingEntity target) { + Vec3 forward = this.getPlaneForward(target.position().subtract(this.position())); + if (forward.lengthSqr() < 1.0E-4D) { + forward = this.getPlaneForward(target.getLookAngle()); + } + if (forward.lengthSqr() < 1.0E-4D) { + forward = this.getPlaneForward(this.getViewVector(1.0F)); + } + if (forward.lengthSqr() < 1.0E-4D) { + forward = this.toWorld(new Vec3(0.0D, 0.0D, 1.0D)); + } + Vec3 right = this.getLocalRight(forward); + double strafe = this.tickCount % 32 < 16 ? FLYING_APPROACH_STRAFE_OFFSET : -FLYING_APPROACH_STRAFE_OFFSET; + double height = this.isPhaseTwo() ? FLYING_APPROACH_HEIGHT_PHASE_TWO : FLYING_APPROACH_HEIGHT; + double horizontalDistanceSqr = this.horizontalDistanceToSqr(target); + double overheadGap = this.overheadGapTo(target); + boolean lowProfileTarget = this.isLowProfileFlightTarget(target); + Vec3 attackTarget = this.getFlyingAttackTargetPos(target); + Vec3 anchor = target.position().subtract(forward.scale(1.8D)).add(right.scale(strafe)); + if (horizontalDistanceSqr <= FLYING_OVERHEAD_STALL_RANGE_SQR && overheadGap >= FLYING_OVERHEAD_STALL_HEIGHT) { + double sideOffset = lowProfileTarget ? LOW_PROFILE_OVERHEAD_DESCENT_SIDE_OFFSET : FLYING_OVERHEAD_DESCENT_SIDE_OFFSET; + double backOffset = lowProfileTarget ? LOW_PROFILE_OVERHEAD_DESCENT_BACK_OFFSET : FLYING_OVERHEAD_DESCENT_BACK_OFFSET; + anchor = target.position() + .add(right.scale(strafe > 0.0D ? sideOffset : -sideOffset)) + .subtract(forward.scale(backOffset)); + return new Vec3(anchor.x, attackTarget.y, anchor.z); + } + if (horizontalDistanceSqr <= FLYING_APPROACH_TOO_CLOSE_RANGE_SQR) { + double backOffset = lowProfileTarget ? LOW_PROFILE_TOO_CLOSE_BACK_OFFSET : 2.8D; + double strafeScale = lowProfileTarget ? LOW_PROFILE_TOO_CLOSE_STRAFE_SCALE : 0.6D; + anchor = target.position().subtract(forward.scale(backOffset)).add(right.scale(strafe * strafeScale)); + } + Vec3 elevated = attackTarget.add(this.toWorld(new Vec3(0.0D, height, 0.0D))); + return new Vec3(anchor.x, elevated.y, anchor.z); + } + + private Vec3 getFlightDescentPosition(LivingEntity target) { + Vec3 forward = this.getPlaneForward(target.position().subtract(this.position())); + if (forward.lengthSqr() < 1.0E-4D) { + forward = this.getPlaneForward(this.getViewVector(1.0F)); + } + if (forward.lengthSqr() < 1.0E-4D) { + forward = this.toWorld(new Vec3(0.0D, 0.0D, 1.0D)); + } + Vec3 right = this.getLocalRight(forward); + double side = this.tickCount % 20 < 10 ? 1.0D : -1.0D; + boolean lowProfileTarget = this.isLowProfileFlightTarget(target); + double sideOffset = lowProfileTarget ? 1.15D : 0.9D; + double backOffset = lowProfileTarget ? 1.2D : 0.9D; + Vec3 anchor = target.position() + .subtract(forward.scale(backOffset)) + .add(right.scale(side * sideOffset)); + return new Vec3(anchor.x, this.getFlyingAttackTargetPos(target).y, anchor.z); + } + + private boolean isLowProfileFlightTarget(LivingEntity target) { + return target.getBbHeight() <= LOW_PROFILE_TARGET_MAX_HEIGHT; } private double horizontalDistanceToSqr(LivingEntity target) { - double dx = target.getX() - this.getX(); - double dz = target.getZ() - this.getZ(); + Vec3 delta = this.localDeltaTo(target.position()); + double dx = delta.x; + double dz = delta.z; return dx * dx + dz * dz; } private boolean isInFront(Vec3 position, double minimumDot) { - Vec3 forward = this.getViewVector(1.0F).multiply(1.0D, 0.0D, 1.0D); - Vec3 toTarget = position.subtract(this.position()).multiply(1.0D, 0.0D, 1.0D); + Vec3 forward = this.toLocalPlane(this.getViewVector(1.0F)); + Vec3 toTarget = this.toLocalPlane(position.subtract(this.position())); if (forward.lengthSqr() < 1.0E-4D || toTarget.lengthSqr() < 1.0E-4D) return true; return forward.normalize().dot(toTarget.normalize()) >= minimumDot; } private void faceTowardTarget(LivingEntity target, float maxTurnDegrees) { - Vec3 toTarget = target.getEyePosition().subtract(this.getEyePosition()); + Vec3 toTarget = this.toLocal(target.getEyePosition().subtract(this.getEyePosition())); double horizontal = Math.sqrt(toTarget.x * toTarget.x + toTarget.z * toTarget.z); if (horizontal > 1.0E-4D) { float targetYaw = (float) (Mth.atan2(toTarget.z, toTarget.x) * (180.0D / Math.PI)) - 90.0F; @@ -608,17 +1334,80 @@ public class NightmareEntity extends Monster implements GeoEntity { } } - private boolean isTooCloseToCeiling() { - BlockPos current = BlockPos.containing(this.getX(), this.getY(), this.getZ()); + Direction gravityUp = GravityRotationUtil.getGravityDownDirection(this).getOpposite(); + BlockPos current = this.blockPosition(); for (int i = 1; i <= FLIGHT_CEILING_CLEARANCE_BLOCKS; i++) { - if (!this.level().isEmptyBlock(current.above(i))) return true; + if (!this.level().isEmptyBlock(current.relative(gravityUp, i))) return true; } return false; } + private Vec3 getPortalEntryPosition() { + Vec3 forward = this.getPlaneForward(this.getViewVector(1.0F)); + if (forward.lengthSqr() < 1.0E-4D) { + forward = this.toWorld(new Vec3(0.0D, 0.0D, 1.0D)); + } + return this.position().add(forward.scale(1.6D)); + } + + @Nullable + private Vec3 findPortalExitPos(LivingEntity target, Vec3 entryPos) { + Vec3 forward = this.getPlaneForward(target.getLookAngle()); + if (forward.lengthSqr() < 1.0E-4D) { + forward = this.getPlaneForward(this.getViewVector(1.0F)); + } + if (forward.lengthSqr() < 1.0E-4D) { + forward = this.toWorld(new Vec3(0.0D, 0.0D, 1.0D)); + } + forward = forward.normalize(); + Vec3 right = this.getLocalRight(forward); + Vec3 airOffset = this.toWorld(new Vec3(0.0D, PORTAL_EXIT_AIR_HEIGHT, 0.0D)); + Vec3[] candidates = new Vec3[] { + target.position().subtract(forward.scale(PORTAL_EXIT_OFFSET)), + target.position().subtract(forward.scale(PORTAL_EXIT_OFFSET)).add(airOffset), + target.position().subtract(forward.scale(PORTAL_EXIT_OFFSET)).add(right.scale(PORTAL_EXIT_SIDE_OFFSET)), + target.position().subtract(forward.scale(PORTAL_EXIT_OFFSET)).subtract(right.scale(PORTAL_EXIT_SIDE_OFFSET)), + target.position().subtract(forward.scale(PORTAL_EXIT_OFFSET)).add(right.scale(PORTAL_EXIT_SIDE_OFFSET)).add(airOffset), + target.position().subtract(forward.scale(PORTAL_EXIT_OFFSET)).subtract(right.scale(PORTAL_EXIT_SIDE_OFFSET)).add(airOffset) + }; + for (Vec3 candidate : candidates) { + Vec3 adjusted = this.findValidPortalPosition(candidate); + if (adjusted != null + && adjusted.distanceToSqr(this.position()) <= PORTAL_RANGE * PORTAL_RANGE + && adjusted.distanceToSqr(entryPos) >= PORTAL_ENTRY_EXIT_MIN_RANGE_SQR) { + return adjusted; + } + } + return null; + } + + @Nullable + private Vec3 findValidPortalPosition(Vec3 base) { + EntityDimensions dimensions = this.getType().getDimensions(); + for (int yOffset = 4; yOffset >= -3; yOffset--) { + Vec3 candidate = base.add(this.toWorld(new Vec3(0.0D, yOffset, 0.0D))); + AABB box = dimensions.makeBoundingBox(candidate); + if (this.level().noCollision(this, box)) { + return candidate; + } + } + return null; + } + + private void clearNightmarePortals() { + if (this.entryPortal != null && this.entryPortal.isAlive()) { + this.entryPortal.discard(); + } + if (this.exitPortal != null && this.exitPortal.isAlive()) { + this.exitPortal.discard(); + } + this.entryPortal = null; + this.exitPortal = null; + } + private void tickClientParticles() { - if ((this.isRoaring() || this.attackAnimationTicks > 0) && this.tickCount % 3 == 0) { + if ((this.isRoaring() || this.attackAnimationTicks > 0 || this.portalAttackTicks > 0 || this.isPhaseTransitioning()) && this.tickCount % 3 == 0) { this.level().addParticle( ParticleTypes.SOUL_FIRE_FLAME, this.getX() + (this.random.nextDouble() - 0.5D) * this.getBbWidth(), @@ -630,7 +1419,7 @@ public class NightmareEntity extends Monster implements GeoEntity { } private void updateFlightRotation() { - Vec3 velocity = this.getDeltaMovement(); + Vec3 velocity = this.toLocal(this.getDeltaMovement()); if (velocity.horizontalDistanceSqr() > 1.0E-4D) { float targetYaw = (float) (Mth.atan2(velocity.z, velocity.x) * (180.0D / Math.PI)) - 90.0F; float nextYaw = Mth.approachDegrees(this.getYRot(), targetYaw, 4.0F); @@ -652,17 +1441,12 @@ public class NightmareEntity extends Monster implements GeoEntity { this.wingFlapCooldown = 0; return; } - if (this.isRoaring()) { - this.setAnimationState(ANIM_ROAR); - this.groundMoveTicks = 0; - this.wingFlapCooldown = 0; - return; - } - if (this.attackAnimationTicks > 0) { - this.setAnimationState(this.isNoGravity() || this.airborneTicks >= MIN_AIRBORNE_TICKS_FOR_FLY_ANIM ? ANIM_FLY_ATTACK : ANIM_ATTACK); - this.groundMoveTicks = 0; - this.tickWingFlapSound(); - return; + if (this.hasActiveSpecialAnimation()) { + if (this.shouldBlockLocomotionAnimation()) { + this.groundMoveTicks = 0; + this.tickWingFlapSound(); + return; + } } if (this.flyingToTarget) { this.groundMoveTicks = 0; @@ -670,13 +1454,14 @@ public class NightmareEntity extends Monster implements GeoEntity { this.tickWingFlapSound(); return; } - if (this.isNoGravity() || this.airborneTicks >= MIN_AIRBORNE_TICKS_FOR_FLY_ANIM) { + if (this.shouldUseFlyingLocomotion()) { this.groundMoveTicks = 0; this.setAnimationState(ANIM_FLY); this.tickWingFlapSound(); return; } - if (this.walkDist - this.walkDistO > 0.005F) { + Vec3 horizontalVelocity = this.toLocalPlane(this.getDeltaMovement()); + if (horizontalVelocity.lengthSqr() > ANIMATION_MOVEMENT_THRESHOLD_SQR) { this.groundMoveTicks = 6; } if (this.groundMoveTicks > 0) { @@ -705,6 +1490,120 @@ public class NightmareEntity extends Monster implements GeoEntity { this.wingFlapCooldown = 5 + this.random.nextInt(4); } + private boolean hasActiveSpecialAnimation() { + return this.getActiveSpecialAnimation() != SPECIAL_NONE; + } + + private boolean shouldBlockLocomotionAnimation() { + int specialAnimation = this.getActiveSpecialAnimation(); + if (specialAnimation == SPECIAL_NONE) { + return false; + } + if (specialAnimation == SPECIAL_ROAR || specialAnimation == SPECIAL_ROAR_P2) { + return false; + } + if (specialAnimation == SPECIAL_PORTAL_EXIT) { + return false; + } + if (specialAnimation == SPECIAL_PHASE_TWO) { + return true; + } + return true; + } + + private boolean shouldUseFlyingLocomotion() { + return this.flyingToTarget || this.isNoGravity() || !this.onGround() || this.airborneTicks >= MIN_AIRBORNE_TICKS_FOR_FLY_ANIM; + } + + private int selectAttackSpecialAnimation() { + boolean flyingAttack = this.shouldUseFlyingLocomotion(); + if (flyingAttack) { + return this.isPhaseTwo() ? SPECIAL_FLY_ATTACK_P2 : SPECIAL_FLY_ATTACK; + } + return this.isPhaseTwo() ? SPECIAL_ATTACK_P2 : SPECIAL_ATTACK; + } + + private void selectSpecialAnimation(int specialAnimation) { + this.setActiveSpecialAnimation(specialAnimation); + } + + private void clearActiveSpecialAnimation() { + this.setActiveSpecialAnimation(SPECIAL_NONE); + } + + private void syncSpecialAnimationTrigger() { + int activeSpecialAnimation = this.getActiveSpecialAnimation(); + if (activeSpecialAnimation != SPECIAL_NONE && this.lastTriggeredSpecialAnimation != activeSpecialAnimation) { + String triggerName = this.specialAnimationTrigger(activeSpecialAnimation); + if (triggerName != null) { + this.triggerAnim(SPECIAL_CONTROLLER, triggerName); + } + this.lastTriggeredSpecialAnimation = activeSpecialAnimation; + return; + } + if (activeSpecialAnimation == SPECIAL_NONE) { + this.lastTriggeredSpecialAnimation = SPECIAL_NONE; + } + } + + @Nullable + private String specialAnimationTrigger(int specialAnimation) { + return switch (specialAnimation) { + case SPECIAL_ATTACK -> SPECIAL_ATTACK_TRIGGER; + case SPECIAL_ATTACK_P2 -> SPECIAL_ATTACK_P2_TRIGGER; + case SPECIAL_FLY_ATTACK -> SPECIAL_FLY_ATTACK_TRIGGER; + case SPECIAL_FLY_ATTACK_P2 -> SPECIAL_FLY_ATTACK_P2_TRIGGER; + case SPECIAL_ROAR -> SPECIAL_ROAR_TRIGGER; + case SPECIAL_ROAR_P2 -> SPECIAL_ROAR_P2_TRIGGER; + case SPECIAL_PHASE_TWO -> SPECIAL_PHASE_TWO_TRIGGER; + case SPECIAL_PORTAL_ENTER -> SPECIAL_PORTAL_ENTER_TRIGGER; + case SPECIAL_PORTAL_EXIT -> SPECIAL_PORTAL_EXIT_TRIGGER; + case SPECIAL_DEATH -> "death"; + default -> null; + }; + } + + private final class NightmarePhaseTransitionGoal extends Goal { + NightmarePhaseTransitionGoal() { + this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK, Flag.JUMP)); + } + + @Override + public boolean canUse() { + return NightmareEntity.this.isPhaseTransitioning(); + } + + @Override + public boolean canContinueToUse() { + return NightmareEntity.this.isPhaseTransitioning(); + } + } + + private final class NightmarePortalGoal extends Goal { + NightmarePortalGoal() { + this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK)); + } + + @Override + public boolean canUse() { + LivingEntity target = NightmareEntity.this.getTarget(); + return target != null && NightmareEntity.this.canStartPortalAttack(target); + } + + @Override + public boolean canContinueToUse() { + return NightmareEntity.this.portalAttackTicks > 0; + } + + @Override + public void start() { + LivingEntity target = NightmareEntity.this.getTarget(); + if (target != null) { + NightmareEntity.this.startPortalAttack(target); + } + } + } + private final class NightmareRoarGoal extends Goal { NightmareRoarGoal() { this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK)); @@ -713,7 +1612,7 @@ public class NightmareEntity extends Monster implements GeoEntity { @Override public boolean canUse() { LivingEntity target = NightmareEntity.this.getTarget(); - return target instanceof Player && NightmareEntity.this.shouldStartRoar(target); + return target instanceof Player && NightmareEntity.this.shouldStartRoar(target) && !NightmareEntity.this.isPhaseTransitioning() && NightmareEntity.this.portalAttackTicks <= 0; } @Override @@ -748,25 +1647,31 @@ public class NightmareEntity extends Monster implements GeoEntity { LivingEntity target = NightmareEntity.this.getTarget(); return target != null && NightmareEntity.this.landingCooldown <= 0 - && NightmareEntity.this.distanceToSqr(target) > FLIGHT_ENGAGE_RANGE_SQR - && !NightmareEntity.this.isTooCloseToCeiling(); + && NightmareEntity.this.shouldUseFlightPressure(target) + && !NightmareEntity.this.isPhaseTransitioning() + && !NightmareEntity.this.isRoaring() + && NightmareEntity.this.portalAttackTicks <= 0; } @Override public boolean canContinueToUse() { LivingEntity target = NightmareEntity.this.getTarget(); - return target != null && NightmareEntity.this.distanceToSqr(target) > FLIGHT_DISENGAGE_RANGE_SQR; + return target != null + && NightmareEntity.this.shouldUseFlightPressure(target) + && !NightmareEntity.this.isRoaring() + && NightmareEntity.this.portalAttackTicks <= 0; } @Override public void start() { NightmareEntity.this.flyingToTarget = true; + NightmareEntity.this.takeoffCommitTicks = TAKEOFF_COMMIT_TICKS; } @Override public void stop() { NightmareEntity.this.flyingToTarget = false; - NightmareEntity.this.landingCooldown = 80; + NightmareEntity.this.landingCooldown = 18; NightmareEntity.this.getNavigation().stop(); } @@ -779,13 +1684,38 @@ public class NightmareEntity extends Monster implements GeoEntity { NightmareEntity.this.getNavigation().stop(); return; } + if (NightmareEntity.this.onGround() && NightmareEntity.this.distanceToSqr(target) >= FLIGHT_DISENGAGE_RANGE_SQR) { + NightmareEntity.this.setDeltaMovement(NightmareEntity.this.getDeltaMovement().add(NightmareEntity.this.toWorld(new Vec3(0.0D, 0.38D, 0.0D)))); + NightmareEntity.this.hasImpulse = true; + } + double horizontalDistanceSqr = NightmareEntity.this.horizontalDistanceToSqr(target); + double overheadGap = NightmareEntity.this.overheadGapTo(target); + if (horizontalDistanceSqr <= ATTACK_COMMIT_HORIZONTAL_RANGE_SQR + && overheadGap > FLYING_ATTACK_MAX_OVERHEAD_COMMIT_HEIGHT) { + Vec3 descentPos = NightmareEntity.this.getFlightDescentPosition(target); + NightmareEntity.this.faceTowardTarget(target, 14.0F); + NightmareEntity.this.getMoveControl().setWantedPosition( + descentPos.x, + descentPos.y, + descentPos.z, + COMBAT_FLIGHT_SPEED * 1.08D + ); + return; + } + if (horizontalDistanceSqr <= FLYING_OVERHEAD_STALL_RANGE_SQR + && overheadGap >= FLYING_OVERHEAD_STALL_HEIGHT + && NightmareEntity.this.attackCooldown <= 0 + && NightmareEntity.this.canStartAttackOn(target)) { + NightmareEntity.this.startAttack(target); + return; + } if (NightmareEntity.this.attackCooldown <= 0 && NightmareEntity.this.canStartAttackOn(target)) { NightmareEntity.this.startAttack(target); return; } - NightmareEntity.this.getMoveControl().setWantedPosition( - target.getX(), target.getEyeY() + 0.5D, target.getZ(), COMBAT_FLIGHT_SPEED - ); + Vec3 approachPos = NightmareEntity.this.getFlightApproachPosition(target); + NightmareEntity.this.faceTowardTarget(target, 10.0F); + NightmareEntity.this.getMoveControl().setWantedPosition(approachPos.x, approachPos.y, approachPos.z, COMBAT_FLIGHT_SPEED); } } @@ -794,12 +1724,32 @@ public class NightmareEntity extends Monster implements GeoEntity { super(NightmareEntity.this, GROUND_APPROACH_SPEED, true); } + @Override + public boolean canUse() { + LivingEntity target = NightmareEntity.this.getTarget(); + return !NightmareEntity.this.isPhaseTransitioning() + && NightmareEntity.this.portalAttackTicks <= 0 + && target != null + && !NightmareEntity.this.shouldUseFlightPressure(target) + && super.canUse(); + } + + @Override + public boolean canContinueToUse() { + LivingEntity target = NightmareEntity.this.getTarget(); + return !NightmareEntity.this.isPhaseTransitioning() + && NightmareEntity.this.portalAttackTicks <= 0 + && target != null + && !NightmareEntity.this.shouldUseFlightPressure(target) + && super.canContinueToUse(); + } + @Override public void tick() { LivingEntity target = NightmareEntity.this.getTarget(); if (target != null) { double hdSqr = NightmareEntity.this.horizontalDistanceToSqr(target); - double vertDelta = NightmareEntity.this.getY() - target.getY(); + double vertDelta = NightmareEntity.this.overheadGapTo(target); if (target.onGround() && hdSqr <= 25.0D && vertDelta > 1.6D) { NightmareEntity.this.tryBreakBlocksToTarget(target); } @@ -809,6 +1759,9 @@ public class NightmareEntity extends Monster implements GeoEntity { @Override protected void checkAndPerformAttack(LivingEntity target, double distToEnemySqr) { + if (NightmareEntity.this.shouldUseFlightPressure(target) && NightmareEntity.this.distanceToSqr(target) >= FLIGHT_ATTACK_RANGE_SQR) { + return; + } if (NightmareEntity.this.attackCooldown <= 0 && NightmareEntity.this.canStartAttackOn(target)) { NightmareEntity.this.startAttack(target); } @@ -816,7 +1769,9 @@ public class NightmareEntity extends Monster implements GeoEntity { } private final class NightmareWanderGoal extends Goal { - private double x, y, z; + private double x; + private double y; + private double z; private int wanderTicks; NightmareWanderGoal() { @@ -825,13 +1780,15 @@ public class NightmareEntity extends Monster implements GeoEntity { @Override public boolean canUse() { - if (NightmareEntity.this.getTarget() != null || NightmareEntity.this.isDeadOrDying()) return false; + if (NightmareEntity.this.getTarget() != null || NightmareEntity.this.isDeadOrDying() || NightmareEntity.this.isPhaseTransitioning() || NightmareEntity.this.portalAttackTicks > 0) return false; if (NightmareEntity.this.random.nextInt(40) != 0) return false; double angle = NightmareEntity.this.random.nextDouble() * Math.PI * 2; double dist = 4 + NightmareEntity.this.random.nextDouble() * 10; - this.x = NightmareEntity.this.getX() + Math.cos(angle) * dist; - this.z = NightmareEntity.this.getZ() + Math.sin(angle) * dist; - this.y = NightmareEntity.this.getY(); + Vec3 localOffset = new Vec3(Math.cos(angle) * dist, 0.0D, Math.sin(angle) * dist); + Vec3 worldOffset = NightmareEntity.this.toWorld(localOffset); + this.x = NightmareEntity.this.getX() + worldOffset.x; + this.y = NightmareEntity.this.getY() + worldOffset.y; + this.z = NightmareEntity.this.getZ() + worldOffset.z; return true; } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareMultipartLayout.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareMultipartLayout.java index 79f7f90c..553bde30 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareMultipartLayout.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareMultipartLayout.java @@ -1,7 +1,7 @@ package com.craisinlord.antarchy.content.entity.nightmare; -import com.craisinlord.antarchy.content.entity.multipart.MultipartLayout; -import com.craisinlord.antarchy.content.entity.multipart.MultipartPartDefinition; +import com.craisinlord.anthology.multipart.MultipartLayout; +import com.craisinlord.anthology.multipart.MultipartPartDefinition; public final class NightmareMultipartLayout implements MultipartLayout { public static final NightmareMultipartLayout INSTANCE = new NightmareMultipartLayout(); diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmarePortalEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmarePortalEntity.java index f6ead755..ce7d95ad 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmarePortalEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmarePortalEntity.java @@ -6,12 +6,12 @@ import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.level.Level; -import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import software.bernie.geckolib.animatable.GeoEntity; import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; @@ -22,12 +22,14 @@ import software.bernie.geckolib.core.animation.RawAnimation; import software.bernie.geckolib.core.object.PlayState; import software.bernie.geckolib.util.GeckoLibUtil; -import java.util.List; import java.util.UUID; public class NightmarePortalEntity extends Entity implements GeoEntity { + private static final int OPEN_TICKS = 10; + private static final int CLOSE_TICKS = 10; private static final EntityDataAccessor CLOSING = SynchedEntityData.defineId(NightmarePortalEntity.class, EntityDataSerializers.BOOLEAN); - private static final RawAnimation OPEN_ANIM = RawAnimation.begin().thenPlay("open").thenLoop("idle"); + private static final RawAnimation OPEN_ANIM = RawAnimation.begin().thenPlay("open"); + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); private static final RawAnimation CLOSE_ANIM = RawAnimation.begin().thenPlay("close"); private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); @@ -51,6 +53,7 @@ public class NightmarePortalEntity extends Entity implements GeoEntity { portal.fallbackDestination = fallbackDestination; portal.lifetimeTicks = lifetimeTicks; level.addFreshEntity(portal); + level.playSound(null, pos.x, pos.y, pos.z, SoundEvents.END_PORTAL_SPAWN, SoundSource.HOSTILE, 0.22F, 0.95F + owner.getRandom().nextFloat() * 0.1F); return portal; } @@ -91,38 +94,18 @@ public class NightmarePortalEntity extends Entity implements GeoEntity { @Override public void tick() { super.tick(); + this.ageTicks++; if (this.level().isClientSide) { return; } - this.ageTicks++; - if (this.ageTicks >= this.lifetimeTicks - 10) { + if (this.ageTicks >= this.lifetimeTicks - CLOSE_TICKS) { this.entityData.set(CLOSING, true); } if (this.ageTicks >= this.lifetimeTicks) { this.discard(); return; } - this.transportEntities(); - } - - private void transportEntities() { - NightmarePortalEntity other = this.getLinkedPortal(); - Vec3 destination = other != null ? other.position() : this.fallbackDestination; - AABB area = this.getBoundingBox().inflate(1.05D, 0.75D, 1.05D); - List entities = this.level().getEntitiesOfClass(LivingEntity.class, area, entity -> entity.isAlive() && !entity.isSpectator()); - for (LivingEntity entity : entities) { - if (entity.getUUID().equals(this.ownerId)) { - continue; - } - if (entity.isOnPortalCooldown()) { - continue; - } - entity.teleportTo(destination.x, destination.y, destination.z); - entity.setPortalCooldown(); - entity.setDeltaMovement(entity.getDeltaMovement().multiply(1.0D, 0.0D, 1.0D)); - entity.hurtMarked = true; - } } public void linkTo(NightmarePortalEntity other) { @@ -130,14 +113,6 @@ public class NightmarePortalEntity extends Entity implements GeoEntity { this.fallbackDestination = other.position(); } - private NightmarePortalEntity getLinkedPortal() { - if (!(this.level() instanceof ServerLevel serverLevel) || this.linkedPortalId == null) { - return null; - } - Entity entity = serverLevel.getEntity(this.linkedPortalId); - return entity instanceof NightmarePortalEntity portal ? portal : null; - } - public boolean isClosing() { return this.getEntityData().get(CLOSING); } @@ -176,7 +151,14 @@ public class NightmarePortalEntity extends Entity implements GeoEntity { } private PlayState portalController(AnimationState state) { - return state.setAndContinue(this.isClosing() ? CLOSE_ANIM : OPEN_ANIM); + state.getController().setAnimationSpeed(this.isClosing() || this.ageTicks < OPEN_TICKS ? 4.0D : 1.0D); + if (this.isClosing()) { + return state.setAndContinue(CLOSE_ANIM); + } + if (this.ageTicks < OPEN_TICKS) { + return state.setAndContinue(OPEN_ANIM); + } + return state.setAndContinue(IDLE_ANIM); } @Override diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/portal/DimensionalTearEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/portal/DimensionalTearEntity.java index 78c6179b..34a5ea63 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/portal/DimensionalTearEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/portal/DimensionalTearEntity.java @@ -2,10 +2,15 @@ package com.craisinlord.antarchy.content.entity.portal; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.antarchy.content.entity.ManticoreEntity; +import com.craisinlord.antarchy.content.entity.royal.QueenEntity; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.UUID; import net.minecraft.core.BlockPos; import net.minecraft.core.Holder; @@ -24,6 +29,7 @@ import net.minecraft.world.Difficulty; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.projectile.Projectile; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.Mob; @@ -47,29 +53,47 @@ public class DimensionalTearEntity extends Entity implements GeoEntity { NORMAL, UNSTABLE, LUCID, - COLLAPSING + COLLAPSING, + OPENING } private static final EntityDataAccessor STATE = SynchedEntityData.defineId(DimensionalTearEntity.class, EntityDataSerializers.INT); - private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation ACTIVE_IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation CALM_IDLE_ANIM = RawAnimation.begin().thenLoop("idle2"); + private static final RawAnimation OPENING_ANIM = RawAnimation.begin().thenPlay("opening").thenLoop("idle2"); + private static final RawAnimation CLOSING_ANIM = RawAnimation.begin().thenPlayAndHold("closing"); private static final int DEFAULT_LIFETIME_TICKS = 20 * 60 * 20; - private static final int COLLAPSE_WARNING_TICKS = 20 * 20; + private static final int OPENING_ANIMATION_TICKS = 20; + private static final int MANTICORE_EMERGENCE_TICKS = OPENING_ANIMATION_TICKS + 20; + private static final int CLOSING_ANIMATION_TICKS = 10; private static final int EVENT_WARNING_TICKS = 80; private static final int TELEPORT_COOLDOWN_TICKS = 60; private static final double PORTAL_RADIUS = 1.35D; private static final double EXIT_OFFSET = 2.4D; private static final Map TELEPORT_COOLDOWNS = new HashMap<>(); private static long lastTeleportCooldownCleanupTick = Long.MIN_VALUE; + private static final Map> QUEEN_TEAR_IDS = new HashMap<>(); private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); private UUID linkedTearId; + @Nullable + private DimensionalTearEntity linkedTear; private Vec3 linkedFallbackPos = Vec3.ZERO; private int ageTicks; private int lifetimeTicks = DEFAULT_LIFETIME_TICKS; private int eventTicks; private int nextEventTicks; private TearState pendingEvent = TearState.NORMAL; + @Nullable + private UUID queenOwnerId; + private int queenManticoreCount; + private boolean queenManticoreSpawned; + @Nullable + private UUID staffOwnerId; + private int staffManticoreCount; + private boolean staffManticoreSpawned; + private boolean gauntletVisualOnly; public DimensionalTearEntity(EntityType entityType, Level level) { super(entityType, level); @@ -86,23 +110,33 @@ public class DimensionalTearEntity extends Entity implements GeoEntity { return tear; } - public static DimensionalTearEntity createQueenManticoreTear(ServerLevel level, Vec3 pos, float yaw, - int lifetimeTicks, UUID queenId, int count) { - return create(level, pos, yaw, lifetimeTicks); + public static DimensionalTearEntity createGauntletVisual(ServerLevel level, Vec3 pos, float yaw, int lifetimeTicks) { + DimensionalTearEntity tear = create(level, pos, yaw, lifetimeTicks); + tear.gauntletVisualOnly = true; + return tear; } - public static void discardQueenOwnedTears(ServerLevel level, UUID queenId) { - // The 1.20 compatibility entity does not yet persist the queen-owner index. + public static DimensionalTearEntity createQueenManticoreTear(ServerLevel level, Vec3 pos, float yaw, + int lifetimeTicks, UUID queenId, int count) { + DimensionalTearEntity tear = create(level, pos, yaw, lifetimeTicks); + tear.queenOwnerId = queenId; + tear.queenManticoreCount = Math.max(0, count); + QUEEN_TEAR_IDS.computeIfAbsent(queenId, ignored -> new HashSet<>()).add(tear.getUUID()); + return tear; } public static DimensionalTearEntity createStaffSummonTear(ServerLevel level, Vec3 pos, float yaw, int lifetimeTicks, UUID playerId, int count) { - return create(level, pos, yaw, lifetimeTicks); + DimensionalTearEntity tear = create(level, pos, yaw, lifetimeTicks); + tear.staffOwnerId = playerId; + tear.staffManticoreCount = Math.max(1, count); + return tear; } public void linkTo(DimensionalTearEntity other) { this.linkedTearId = other.getUUID(); this.linkedFallbackPos = other.position(); + this.linkedTear = other; } @Override @@ -120,26 +154,55 @@ public class DimensionalTearEntity extends Entity implements GeoEntity { this.ageTicks++; cleanupTeleportCooldowns(this.level().getGameTime()); - if (this.ageTicks >= this.lifetimeTicks - COLLAPSE_WARNING_TICKS) { + if (this.ageTicks == 1) { + this.level().playSound(null, this.blockPosition(), AntarchySoundEvents.DIMENSIONAL_TEAR_OPEN.get(), SoundSource.HOSTILE, 1.0F, 1.0F); + } + if (this.ageTicks < OPENING_ANIMATION_TICKS) { + this.setTearState(TearState.OPENING); + } else if (this.ageTicks >= this.lifetimeTicks - CLOSING_ANIMATION_TICKS) { + if (this.ageTicks == this.lifetimeTicks - CLOSING_ANIMATION_TICKS) { + this.level().playSound(null, this.blockPosition(), AntarchySoundEvents.DIMENSIONAL_TEAR_CLOSE.get(), SoundSource.HOSTILE, 1.0F, 1.0F); + } this.setTearState(TearState.COLLAPSING); + } else if (this.getTearState() == TearState.OPENING || this.getTearState() == TearState.COLLAPSING) { + this.setTearState(TearState.NORMAL); } if (this.ageTicks >= this.lifetimeTicks) { - this.removeLinkedPair(); + if (this.gauntletVisualOnly) { + this.discard(); + } else { + this.removeLinkedPair(); + } return; } + if (this.gauntletVisualOnly) { + return; + } + + if (this.queenOwnerId != null && this.ageTicks == MANTICORE_EMERGENCE_TICKS) { + this.spawnQueenManticores((ServerLevel) this.level()); + } + + if (this.staffOwnerId != null && this.ageTicks == MANTICORE_EMERGENCE_TICKS) { + this.spawnStaffManticores((ServerLevel) this.level()); + } + DimensionalTearEntity linked = this.findLinkedTear(); if (linked == null || !linked.isAlive()) { this.discard(); return; } - this.tickMobEvent((ServerLevel) this.level()); - this.tickTeleport(linked); + if (this.staffOwnerId == null && this.ageTicks >= OPENING_ANIMATION_TICKS) { + this.tickMobEvent((ServerLevel) this.level()); + this.tickTeleport(linked); + } } private void tickMobEvent(ServerLevel level) { - if (this.getTearState() == TearState.COLLAPSING || level.getDifficulty() == Difficulty.PEACEFUL) { + TearState state = this.getTearState(); + if (state == TearState.OPENING || state == TearState.COLLAPSING || level.getDifficulty() == Difficulty.PEACEFUL) { return; } @@ -182,7 +245,86 @@ public class DimensionalTearEntity extends Entity implements GeoEntity { mob.setDeltaMovement(this.getViewVector(1.0F).scale(0.35D).add(0.0D, 0.08D, 0.0D)); mob.setNoGravity(true); level.addFreshEntity(mob); - level.playSound(null, this.blockPosition(), eventState == TearState.LUCID ? SoundEvents.AMETHYST_BLOCK_CHIME : SoundEvents.ENDERMAN_SCREAM, SoundSource.HOSTILE, 0.75F, eventState == TearState.LUCID ? 1.45F : 0.85F); + level.playSound(null, this.blockPosition(), AntarchySoundEvents.DIMENSIONAL_TEAR_CREATURE_LEAVES.get(), SoundSource.HOSTILE, 0.75F, eventState == TearState.LUCID ? 1.15F : 0.9F); + } + + private void spawnQueenManticores(ServerLevel level) { + if (this.queenManticoreSpawned) { + return; + } + this.queenManticoreSpawned = true; + Entity owner = level.getEntity(this.queenOwnerId); + if (!(owner instanceof QueenEntity queen) || !queen.isAlive()) { + return; + } + LivingEntity target = queen.getTarget(); + for (int i = 0; i < this.queenManticoreCount; i++) { + if (ManticoreEntity.countSummonedBy(level, queen.getUUID()) >= com.craisinlord.antarchy.config.AntarchySettings.queenManticoreCap()) { + break; + } + ManticoreEntity manticore = AntarchyObjects.MANTICORE.get().create(level); + if (manticore == null) { + break; + } + Vec3 exit = this.exitPosition().add(0.0D, 0.8D + i * 0.35D, 0.0D); + manticore.moveTo(exit.x, exit.y, exit.z, this.getYRot(), 0.0F); + if (!level.noCollision(manticore)) { + manticore.discard(); + continue; + } + manticore.finalizeSpawn(level, level.getCurrentDifficultyAt(BlockPos.containing(exit)), MobSpawnType.MOB_SUMMONED, null, null); + manticore.markQueenSummoned(queen.getUUID()); + if (target != null && target.isAlive()) { + manticore.setTarget(target); + } + manticore.setDeltaMovement(this.getViewVector(1.0F).scale(0.7D).add(0.0D, 0.18D, 0.0D)); + manticore.setNoGravity(false); + level.addFreshEntity(manticore); + } + } + + private void spawnStaffManticores(ServerLevel level) { + if (this.staffManticoreSpawned) { + return; + } + this.staffManticoreSpawned = true; + Entity owner = level.getEntity(this.staffOwnerId); + if (!(owner instanceof net.minecraft.world.entity.player.Player player) || !player.isAlive()) { + return; + } + for (int i = 0; i < this.staffManticoreCount; i++) { + ManticoreEntity manticore = AntarchyObjects.MANTICORE.get().create(level); + if (manticore == null) { + continue; + } + Vec3 exit = this.exitPosition().add(0.0D, 0.8D + i * 0.35D, 0.0D); + manticore.moveTo(exit.x, exit.y, exit.z, this.getYRot(), 0.0F); + if (!level.noCollision(manticore)) { + manticore.discard(); + continue; + } + manticore.finalizeSpawn(level, level.getCurrentDifficultyAt(BlockPos.containing(exit)), MobSpawnType.MOB_SUMMONED, null, null); + manticore.markPlayerSummoned(player.getUUID()); + if (player.getLastHurtMob() != null && player.getLastHurtMob().isAlive()) { + manticore.setTarget(player.getLastHurtMob()); + } + manticore.setDeltaMovement(this.getViewVector(1.0F).scale(0.7D).add(0.0D, 0.18D, 0.0D)); + manticore.setNoGravity(false); + level.addFreshEntity(manticore); + } + } + + public static void discardQueenOwnedTears(ServerLevel level, UUID queenId) { + Set tearIds = QUEEN_TEAR_IDS.remove(queenId); + if (tearIds == null) { + return; + } + for (UUID tearId : tearIds) { + Entity entity = level.getEntity(tearId); + if (entity instanceof DimensionalTearEntity tear) { + tear.discard(); + } + } } @Nullable @@ -232,7 +374,8 @@ public class DimensionalTearEntity extends Entity implements GeoEntity { entity.setDeltaMovement(motion); entity.hasImpulse = true; if (entity instanceof LivingEntity living) { - living.addEffect(new MobEffectInstance(AntarchyObjects.INVERTED_EFFECT.get(), AntarchySettings.dimensionalTearInvertedDurationTicks(), 0)); + int invertedDuration = AntarchySettings.dimensionalTearInvertedDurationTicks(); + living.addEffect(new MobEffectInstance(AntarchyObjects.INVERTED_EFFECT.get(), invertedDuration, 0)); } this.level().playSound(null, this.blockPosition(), SoundEvents.ENDERMAN_TELEPORT, SoundSource.NEUTRAL, 0.7F, 0.65F + this.random.nextFloat() * 0.2F); } @@ -256,11 +399,15 @@ public class DimensionalTearEntity extends Entity implements GeoEntity { @Nullable private DimensionalTearEntity findLinkedTear() { + if (this.linkedTear != null && this.linkedTear.isAlive()) { + return this.linkedTear; + } if (!(this.level() instanceof ServerLevel serverLevel) || this.linkedTearId == null) { return null; } Entity entity = serverLevel.getEntity(this.linkedTearId); - return entity instanceof DimensionalTearEntity tear ? tear : null; + this.linkedTear = entity instanceof DimensionalTearEntity tear ? tear : null; + return this.linkedTear; } private void removeLinkedPair() { @@ -271,6 +418,20 @@ public class DimensionalTearEntity extends Entity implements GeoEntity { this.discard(); } + @Override + public void remove(RemovalReason reason) { + if (this.queenOwnerId != null) { + Set tearIds = QUEEN_TEAR_IDS.get(this.queenOwnerId); + if (tearIds != null) { + tearIds.remove(this.getUUID()); + if (tearIds.isEmpty()) { + QUEEN_TEAR_IDS.remove(this.queenOwnerId); + } + } + } + super.remove(reason); + } + private int randomEventDelay() { int min = Math.max(20, AntarchySettings.dimensionalTearEmergenceMinIntervalTicks()); int max = Math.max(min, AntarchySettings.dimensionalTearEmergenceMaxIntervalTicks()); @@ -287,6 +448,10 @@ public class DimensionalTearEntity extends Entity implements GeoEntity { this.entityData.set(STATE, state.ordinal()); } + public boolean shouldPlayIdleSound() { + return this.getTearState() != TearState.OPENING; + } + private void tickClientParticles() { TearState state = this.getTearState(); if (this.random.nextInt(state == TearState.NORMAL ? 5 : 2) != 0) { @@ -309,6 +474,16 @@ public class DimensionalTearEntity extends Entity implements GeoEntity { return true; } + @Override + public boolean hurt(DamageSource source, float amount) { + if (this.queenOwnerId != null && source.getDirectEntity() instanceof Projectile + && !this.level().isClientSide) { + this.removeLinkedPair(); + return true; + } + return false; + } + @Override public boolean fireImmune() { return true; @@ -340,12 +515,18 @@ public class DimensionalTearEntity extends Entity implements GeoEntity { tag.putInt("EventTicks", this.eventTicks); tag.putInt("NextEventTicks", this.nextEventTicks); tag.putInt("PendingEvent", this.pendingEvent.ordinal()); + tag.putBoolean("GauntletVisualOnly", this.gauntletVisualOnly); if (this.linkedTearId != null) { tag.putUUID("LinkedTearId", this.linkedTearId); } tag.putDouble("LinkedX", this.linkedFallbackPos.x); tag.putDouble("LinkedY", this.linkedFallbackPos.y); tag.putDouble("LinkedZ", this.linkedFallbackPos.z); + if (this.queenOwnerId != null) { + tag.putUUID("QueenOwner", this.queenOwnerId); + tag.putInt("QueenManticoreCount", this.queenManticoreCount); + tag.putBoolean("QueenManticoreSpawned", this.queenManticoreSpawned); + } } @Override @@ -357,10 +538,16 @@ public class DimensionalTearEntity extends Entity implements GeoEntity { int event = tag.getInt("PendingEvent"); TearState[] states = TearState.values(); this.pendingEvent = event >= 0 && event < states.length ? states[event] : TearState.NORMAL; + this.gauntletVisualOnly = tag.getBoolean("GauntletVisualOnly"); if (tag.hasUUID("LinkedTearId")) { this.linkedTearId = tag.getUUID("LinkedTearId"); } this.linkedFallbackPos = new Vec3(tag.getDouble("LinkedX"), tag.getDouble("LinkedY"), tag.getDouble("LinkedZ")); + if (tag.hasUUID("QueenOwner")) { + this.queenOwnerId = tag.getUUID("QueenOwner"); + this.queenManticoreCount = tag.getInt("QueenManticoreCount"); + this.queenManticoreSpawned = tag.getBoolean("QueenManticoreSpawned"); + } } @Override @@ -369,13 +556,19 @@ public class DimensionalTearEntity extends Entity implements GeoEntity { } private PlayState tearController(AnimationState state) { - double speed = switch (this.getTearState()) { - case UNSTABLE, COLLAPSING -> 1.8D; + TearState tearState = this.getTearState(); + double speed = switch (tearState) { + case UNSTABLE -> 1.8D; case LUCID -> 0.65D; default -> 1.0D; }; state.getController().setAnimationSpeed(speed); - return state.setAndContinue(IDLE_ANIM); + return switch (tearState) { + case OPENING -> state.setAndContinue(OPENING_ANIM); + case COLLAPSING -> state.setAndContinue(CLOSING_ANIM); + case LUCID, UNSTABLE -> state.setAndContinue(ACTIVE_IDLE_ANIM); + default -> state.setAndContinue(CALM_IDLE_ANIM); + }; } @Override diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/KingEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/KingEntity.java index 1bbcaaac..571f511f 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/KingEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/KingEntity.java @@ -5,16 +5,23 @@ import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.effect.RoyalEffectEligibility; import com.craisinlord.antarchy.content.effect.RoyalEffectHooks; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityRotationUtil; +import com.craisinlord.antarchy.content.network.KingJudgmentFlashSync; import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; import net.minecraft.network.chat.Component; import net.minecraft.ChatFormatting; import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.core.BlockPos; +import net.minecraft.tags.BlockTags; +import net.minecraft.core.particles.DustParticleOptions; import net.minecraft.network.protocol.game.ClientboundClearTitlesPacket; import net.minecraft.network.protocol.game.ClientboundSetSubtitleTextPacket; import net.minecraft.network.protocol.game.ClientboundSetTitleTextPacket; import net.minecraft.network.protocol.game.ClientboundSetTitlesAnimationPacket; +import net.minecraft.nbt.CompoundTag; import net.minecraft.world.BossEvent; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.effect.MobEffectInstance; @@ -33,6 +40,7 @@ import net.minecraft.world.entity.projectile.AbstractArrow; import net.minecraft.world.entity.projectile.Arrow; import net.minecraft.commands.arguments.EntityAnchorArgument; import net.minecraft.world.entity.projectile.Projectile; +import net.minecraft.util.Mth; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.MenuProvider; import net.minecraft.world.item.ArmorItem; @@ -44,8 +52,9 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.Nullable; -import com.craisinlord.antarchy.content.entity.royal.beam.RoyalBeamSettings; -import com.craisinlord.antarchy.content.entity.royal.beam.RoyalBeamTerrainMode; +import org.joml.Vector3f; +import com.craisinlord.anthology.beam.BeamSettings; +import com.craisinlord.anthology.beam.BeamTerrainMode; import com.craisinlord.antarchy.content.entity.royal.beam.RoyalBeamElement; import com.craisinlord.antarchy.content.menu.RoyalJudgmentMenu; import com.craisinlord.antarchy.content.menu.RoyalJudgmentState; @@ -54,10 +63,8 @@ import com.craisinlord.antarchy.content.entity.royal.decree.ComeNoCloserDecree; import com.craisinlord.antarchy.content.entity.royal.decree.DoNotRunDecree; import com.craisinlord.antarchy.content.entity.royal.decree.FightMeCowardDecree; import com.craisinlord.antarchy.content.entity.royal.decree.HandsOffTheCrownDecree; -import com.craisinlord.antarchy.content.entity.royal.decree.KeepYourDistanceDecree; import com.craisinlord.antarchy.content.entity.royal.decree.KneelDecree; import com.craisinlord.antarchy.content.entity.royal.decree.NoRespiteDecree; -import com.craisinlord.antarchy.content.entity.royal.decree.NoRetreatDecree; import com.craisinlord.antarchy.content.entity.royal.decree.RoyalDecree; import com.craisinlord.antarchy.content.entity.royal.decree.ShowNoMercyDecree; import com.craisinlord.antarchy.content.entity.royal.decree.SkyIsMineDecree; @@ -67,10 +74,16 @@ import com.craisinlord.antarchy.content.entity.royal.attack.RoyalAttackLane; import java.util.EnumMap; import java.util.List; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import java.util.UUID; public class KingEntity extends RoyalBossEntity { + private static final DustParticleOptions KING_GOLD_DUST = + new DustParticleOptions(new Vector3f(1.0F, 0.72F, 0.12F), 1.25F); + private static final DustParticleOptions KING_WHITE_DUST = + new DustParticleOptions(new Vector3f(1.0F, 1.0F, 1.0F), 1.35F); public enum Behavior { AIRBORNE, SPRINTING, RETREATING, HUGGING, RANGED, KEEPING_FAR } @@ -81,26 +94,99 @@ public class KingEntity extends RoyalBossEntity { private static final int WING_GUST_COOLDOWN_TICKS = 320; private static final int WING_GUST_WINDUP_TICKS = 14; private static final double WING_GUST_RADIUS = 22.0D; + private static final int ROYAL_CHARGE_WINDUP_TICKS = 24; + private static final int ROYAL_CHARGE_ACTIVE_TICKS = 18; + private static final int ROYAL_CHARGE_RECOVERY_TICKS = 18; + private static final double ROYAL_CHARGE_SPEED = 2.35D; + private static final double ROYAL_CHARGE_MIN_RANGE = 10.0D; + private static final double ROYAL_CHARGE_MAX_RANGE = 50.0D; private static final int CHAIN_LIGHTNING_INTERVAL = 12; private static final int CHAIN_LIGHTNING_JUMPS = 4; private static final double CHAIN_LIGHTNING_JUMP_RANGE = 9.0D; private static final int ICE_FREEZE_PER_TICK = 7; private static final int BEHAVIOR_SCORE_CAP = 12; + private static final double TREE_ORBIT_RADIUS = 128.0D; + private static final double TREE_ORBIT_ANGLE_STEP = 0.014D; + private static final int TREE_ORBIT_PATH_SAMPLES = 16; + private static final double COMBAT_ORBIT_ANGLE_STEP = 0.62D; + private static final double KING_DAMAGE_MULTIPLIER = 1.5D; + private static final double KING_FOLLOW_RANGE = 216.0D; + private static final double COME_NO_CLOSER_RADIUS = 16.0D; + private static final int COME_NO_CLOSER_PARTICLE_INTERVAL = 4; + private static final int COME_NO_CLOSER_PARTICLE_COUNT = 40; + private static final double CLOSE_QUARTERS_RADIUS = 16.0D; + private static final int CLOSE_QUARTERS_APPROACH_TICKS = 120; + private static final int CLOSE_QUARTERS_EXIT_GRACE_TICKS = 40; + private static final int DECREE_RESPONSE_GRACE_TICKS = 30; + private static final int DECREE_ANNOUNCEMENT_TICKS = 40; + private static final int PROJECTILE_PRESSURE_MAX = 60; + private static final int PROJECTILE_PRESSURE_PER_HIT = 10; + private static final int GROUND_ASSAULT_TICKS = 200; + private static final int GROUND_ASSAULT_COOLDOWN_MIN = 600; + private static final int GROUND_ASSAULT_COOLDOWN_VARIANCE = 300; + private static final int LANDING_TELEGRAPH_TICKS = 24; + private static final int LANDING_IMPACT_TICKS = 18; + private static final int TAKEOFF_TICKS = 30; + private static final int COMBAT_WAYPOINT_MIN_TICKS = 45; + private static final int COMBAT_WAYPOINT_VARIANCE = 35; + private static final int GROUND_COMBAT_WAYPOINT_MIN_TICKS = 18; + private static final int GROUND_COMBAT_WAYPOINT_VARIANCE = 12; @Nullable private Vec3 patrolCenter; + @Nullable + private Vec3 treePatrolCenter; + @Nullable + private Vec3 treePatrolWaypoint; + private double treePatrolMinimumY; + private double treePatrolMaximumY; + private double treePatrolAngle; + private boolean treePatrolBound; private int patrolCooldownTicks; + @Nullable + private Vec3 treePatrolProgressPosition; + private int treePatrolProgressTicks; + private int treePatrolFailures; private int decreeCooldownTicks; private int activeDecreeTicks; + private int decreeAnnouncementTicks; + private int decreeResponseGraceTicks; private int stompCooldownTicks; private int wingGustCooldownTicks; private int fireballCooldownTicks = 80; private int iceballCooldownTicks = 120; private int iceSpikeCooldownTicks = 160; + private int royalChargeOpeningDelayTicks = 35; + private boolean royalChargeActive; + private Vec3 royalChargeDirection = Vec3.ZERO; + private final Set royalChargeHitTargets = new HashSet<>(); private boolean decreeRetreatPressure; @Nullable + private String lastDecreeKey; + private final Set closeQuartersEntered = new HashSet<>(); + private final Map closeQuartersOutsideTicks = new HashMap<>(); + private final Set decreeRecipients = new HashSet<>(); + private int projectilePressure; + private int groundAssaultCooldownTicks = 400; + private KingLandingStage kingLandingStage = KingLandingStage.AERIAL; + private int kingLandingStageTicks; + @Nullable + private Vec3 kingLandingWaypoint; + @Nullable + private Vec3 kingCombatWaypoint; + @Nullable + private Vec3 kingCombatProgressPosition; + private int kingCombatWaypointTicks; + private int kingCombatProgressTicks; + private int kingGroundCombatWaypointTicks; + @Nullable + private Vec3 kingGroundCombatWaypoint; + private int kingStrafeDirection = 1; + private int royalBoundaryGraceTicks; + @Nullable private ServerPlayer exileTarget; private int exileTicks; + private boolean exileWingAnimationPending; @Nullable private ServerPlayer titheTarget; private int titheTicks; @@ -125,12 +211,124 @@ public class KingEntity extends RoyalBossEntity { new StandTallDecree(), new StandYourGroundDecree(), new HandsOffTheCrownDecree(), new ShowNoMercyDecree()); + private enum KingLandingStage { + AERIAL, + TELEGRAPH, + DESCENT, + IMPACT, + GROUND_COMBAT, + TAKEOFF + } + public KingEntity(EntityType entityType, Level level) { super(entityType, level); } public static AttributeSupplier.Builder createAttributes() { - return createBaseAttributes(AntarchySettings.kingHealth(), AntarchySettings.kingAttackDamage()); + return createBaseAttributes(AntarchySettings.kingHealth(), + AntarchySettings.kingAttackDamage() * KING_DAMAGE_MULTIPLIER, AntarchySettings.kingArmor()) + .add(net.minecraft.world.entity.ai.attributes.Attributes.FOLLOW_RANGE, KING_FOLLOW_RANGE); + } + + @Override + public float scaleRoyalDamage(double damage) { + return super.scaleRoyalDamage(damage) * (float) KING_DAMAGE_MULTIPLIER; + } + + @Override + protected int maxConcurrentHeadAttacks(Phase phase) { + return phase.maxConcurrentHeadAttacks(); + } + + @Override + protected boolean blocksRoyalAttacksForMovement() { + return this.royalChargeActive + || this.kingLandingStage == KingLandingStage.TELEGRAPH + || this.kingLandingStage == KingLandingStage.DESCENT + || this.kingLandingStage == KingLandingStage.IMPACT + || this.kingLandingStage == KingLandingStage.TAKEOFF; + } + + @Override + protected boolean blocksRoyalBeamScheduling() { + return this.royalChargeActive; + } + + @Override + protected void onRoyalPhaseTransitionStarted(Phase previousPhase, Phase nextPhase) { + this.attackScheduler.cancel(RoyalAttackLane.MOVEMENT); + this.royalChargeActive = false; + this.royalChargeDirection = Vec3.ZERO; + this.royalChargeHitTargets.clear(); + if (this.activeDecree != null) { + this.endDecree(null); + } + this.resetKingCombatMovement(); + this.setRoyalFlying(true); + this.setDeltaMovement(this.getDeltaMovement().add(0.0D, 0.25D, 0.0D)); + this.getNavigation().stop(); + this.setDeltaMovement(this.getDeltaMovement().scale(0.35D)); + this.playRoyalSound(AntarchySoundEvents.KING_ROAR.get(), nextPhase == Phase.THREE ? 0.72F : 0.88F); + if (this.level() instanceof ServerLevel level) { + Component title = Component.translatable(nextPhase == Phase.TWO + ? "boss.antarchy.king.phase_two" : "boss.antarchy.king.phase_three") + .withStyle(style -> style.withColor(nextPhase == Phase.TWO + ? ChatFormatting.GOLD : ChatFormatting.YELLOW).withBold(true)); + for (ServerPlayer player : this.royalEncounterPlayers(level)) { + player.connection.send(new ClientboundSetTitlesAnimationPacket(5, 45, 10)); + player.connection.send(new ClientboundSetTitleTextPacket(title)); + } + } + } + + @Override + protected void tickRoyalPhaseTransition(Phase nextPhase, int elapsedTicks, int remainingTicks) { + this.getNavigation().stop(); + this.setDeltaMovement(this.getDeltaMovement().scale(0.7D)); + if (this.level() instanceof ServerLevel level && elapsedTicks % 3 == 0) { + level.sendParticles(nextPhase == Phase.THREE ? KING_GOLD_DUST : ParticleTypes.ELECTRIC_SPARK, + this.getX(), this.getY() + this.getBbHeight() * 0.55D, this.getZ(), + 18, this.getBbWidth() * 0.25D, this.getBbHeight() * 0.25D, + this.getBbWidth() * 0.25D, 0.08D); + } + } + + @Override + protected void onRoyalPhaseTransitionCompleted(Phase nextPhase) { + this.decreeCooldownTicks = 0; + this.groundAssaultCooldownTicks = nextPhase == Phase.THREE ? 0 : Math.min(this.groundAssaultCooldownTicks, 100); + if (nextPhase == Phase.THREE) { + this.fireballCooldownTicks = 0; + this.iceballCooldownTicks = 0; + this.iceSpikeCooldownTicks = 0; + } + } + + @Override + protected boolean managesOwnCombatLocomotion() { + return true; + } + + public void setTreePatrolHome(Vec3 center, double minimumY, double maximumY, double angle) { + this.treePatrolCenter = center; + this.treePatrolMinimumY = minimumY; + this.treePatrolMaximumY = maximumY; + this.treePatrolAngle = angle; + this.treePatrolWaypoint = null; + this.treePatrolProgressPosition = null; + this.treePatrolProgressTicks = 0; + this.treePatrolFailures = 0; + this.treePatrolBound = true; + } + + public boolean isTreePatrolFor(Vec3 center) { + return this.treePatrolBound && this.treePatrolCenter != null + && this.treePatrolCenter.distanceToSqr(center) < 1.0D; + } + + @Override + protected boolean shouldClearObstruction() { + return this.getTarget() != null; } @Override @@ -186,6 +384,12 @@ public class KingEntity extends RoyalBossEntity { : AntarchySoundEvents.KING_BEAM_SHOOT.get(); } + @Override + protected float royalBeamStartSoundVolume(RoyalHead head) { + return head.slot() == RoyalHead.Slot.LEFT + ? 0.18F : (float) AntarchySettings.royalBossSoundVolume(); + } + @Override protected SoundEvent royalBeamLoopSound() { return AntarchySoundEvents.KING_BEAM_SHOOT.get(); } @@ -193,8 +397,8 @@ public class KingEntity extends RoyalBossEntity { protected SoundEvent royalBeamEndSound() { return AntarchySoundEvents.KING_BEAM_SHOOT.get(); } @Override - protected RoyalBeamSettings royalBeamSettings() { - return new RoyalBeamSettings(AntarchySettings.kingBeamRange(), AntarchySettings.kingBeamTracking(), 7.5D, + protected BeamSettings royalBeamSettings() { + return new BeamSettings(AntarchySettings.kingBeamRange(), AntarchySettings.kingBeamTracking(), 7.5D, AntarchySettings.kingBeamDurationTicks(), AntarchySettings.kingBeamTravelTicks(), AntarchySettings.kingBeamCooldownTicks(), 6.0F, 6.0F, (float) AntarchySettings.kingBeamDamage(), 1.0F, 3, 100.0D, (float) AntarchySettings.kingBeamTerrainRadius(), 4.0F, AntarchySettings.kingBeamTerrainCap(), @@ -202,13 +406,23 @@ public class KingEntity extends RoyalBossEntity { } @Override - protected RoyalBeamTerrainMode royalBeamTerrainMode() { - return RoyalBeamTerrainMode.BUILD_ICE; + protected BeamTerrainMode royalBeamTerrainMode() { + return BeamTerrainMode.BUILD_ICE; } @Override - protected RoyalBeamTerrainMode royalBeamTerrainMode(@Nullable RoyalHead head) { - return head != null && head.slot() == RoyalHead.Slot.RIGHT ? RoyalBeamTerrainMode.BUILD_ICE : RoyalBeamTerrainMode.NONE; + protected double royalBeamMinimumRange() { + return Math.min(AntarchySettings.kingBeamMinimumRange(), 28.0D); + } + + @Override + protected boolean royalBeamUsesTrackedAim() { + return false; + } + + @Override + protected BeamTerrainMode royalBeamTerrainMode(@Nullable RoyalHead head) { + return head != null && head.slot() == RoyalHead.Slot.RIGHT ? BeamTerrainMode.BUILD_ICE : BeamTerrainMode.NONE; } @Override @@ -265,7 +479,7 @@ public class KingEntity extends RoyalBossEntity { private void chainLightning(ServerLevel level, Vec3 origin) { java.util.Set struck = new java.util.HashSet<>(); Vec3 from = origin; - float damage = (float) AntarchySettings.kingBeamDamage() * 0.6F; + float damage = this.scaleRoyalDamage(AntarchySettings.kingBeamDamage() * 0.6D); for (int jump = 0; jump < CHAIN_LIGHTNING_JUMPS; jump++) { LivingEntity next = null; double bestScore = Double.MAX_VALUE; @@ -326,22 +540,56 @@ public class KingEntity extends RoyalBossEntity { if (this.level().isClientSide) { return; } + this.tickRoyalBoundary((ServerLevel) this.level()); + if (this.tickCount % 10 == 0 && this.isRoyalFlying() && this.getDeltaMovement().horizontalDistanceSqr() > 0.01D) { + this.clearLeavesAhead((ServerLevel) this.level()); + } + this.tickComeNoCloserIndicator(); this.tickRoyalPunishment(); - if (this.iceBuildup.size() > 16) { - this.iceBuildup.clear(); + this.tickPendingExileAnimation(); + long gameTime = this.level().getGameTime(); + this.judgmentCooldowns.entrySet().removeIf(entry -> entry.getValue() <= gameTime); + this.lastPlayerDamageTime.entrySet().removeIf(entry -> gameTime - entry.getValue() > 600L); + ServerLevel serverLevel = (ServerLevel) this.level(); + this.iceBuildup.entrySet().removeIf(entry -> serverLevel.getEntity(entry.getKey()) == null); + if (this.iceBuildup.size() > 16) this.iceBuildup.clear(); + if (this.tickCount % 10 == 0 && this.projectilePressure > 0) { + this.projectilePressure--; + } + if (this.tickCount % 40 == 0) { + this.bumpBehavior(Behavior.RANGED, -1); + } + if (this.tickCount % 20 == 0 && this.getArrowCount() > 6) { + this.setArrowCount(6); + } + if (this.royalChargeOpeningDelayTicks > 0) { + this.royalChargeOpeningDelayTicks--; + } + if (this.isRoyalPhaseTransitionActive()) { + return; } LivingEntity target = this.getTarget(); if (target != null && !this.isDeadOrDying() && this.level() instanceof ServerLevel level) { this.trackBehavior(target); this.tickDecree(level, target); - this.tickKingWholeBody(level, target); + this.tickKingCombatMovement(target); + if (!this.blocksRoyalAttacksForMovement()) { + this.tickKingWholeBody(level, target); + } + this.stabilizeKingRotation(); return; } if (this.isDeadOrDying() || !(this.level() instanceof ServerLevel)) { return; } + this.setRoyalFlying(true); + this.resetKingCombatMovement(); this.decreeRetreatPressure = false; + if (this.treePatrolBound && this.treePatrolCenter != null) { + this.tickTreePatrol(); + return; + } if (this.patrolCenter == null || this.position().distanceToSqr(this.patrolCenter) > 64.0D * 64.0D) { this.patrolCenter = this.position(); } @@ -357,6 +605,544 @@ public class KingEntity extends RoyalBossEntity { } } + private void tickComeNoCloserIndicator() { + boolean keepOut = this.activeDecree instanceof ComeNoCloserDecree; + boolean closeQuarters = this.activeDecree instanceof CloseQuartersDecree; + if ((!keepOut && !closeQuarters) + || this.tickCount % COME_NO_CLOSER_PARTICLE_INTERVAL != 0 + || !(this.level() instanceof ServerLevel serverLevel)) { + return; + } + double radius = keepOut ? COME_NO_CLOSER_RADIUS : CLOSE_QUARTERS_RADIUS; + for (int index = 0; index < COME_NO_CLOSER_PARTICLE_COUNT; index++) { + double angle = (Math.PI * 2.0D * index) / COME_NO_CLOSER_PARTICLE_COUNT; + double x = this.getX() + Math.cos(angle) * radius; + double z = this.getZ() + Math.sin(angle) * radius; + serverLevel.sendParticles(keepOut ? ParticleTypes.END_ROD : KING_GOLD_DUST, + x, this.getY() + 0.25D, z, + 1, 0.0D, 0.0D, 0.0D, 0.0D); + } + } + + private void tickTreePatrol() { + Vec3 center = this.treePatrolCenter; + if (center == null) { + return; + } + this.treePatrolAngle += TREE_ORBIT_ANGLE_STEP; + if (this.treePatrolAngle >= Math.PI * 2.0D) { + this.treePatrolAngle -= Math.PI * 2.0D; + } + Vec3 waypoint = this.treePatrolWaypoint; + if (waypoint != null && ++this.treePatrolProgressTicks >= 40) { + if (this.treePatrolProgressPosition != null + && this.position().distanceToSqr(this.treePatrolProgressPosition) < 1.0D + && this.position().distanceToSqr(waypoint) > 36.0D) { + this.treePatrolWaypoint = null; + waypoint = null; + this.treePatrolFailures++; + this.treePatrolAngle += 0.35D; + } else { + this.treePatrolFailures = Math.max(0, this.treePatrolFailures - 1); + } + this.treePatrolProgressPosition = this.position(); + this.treePatrolProgressTicks = 0; + } + if (waypoint == null || this.position().distanceToSqr(waypoint) < 36.0D) { + waypoint = this.findTreePatrolWaypoint(center, this.treePatrolAngle); + this.treePatrolWaypoint = waypoint; + this.treePatrolProgressPosition = this.position(); + this.treePatrolProgressTicks = 0; + } + if (waypoint != null) { + this.getMoveControl().setWantedPosition(waypoint.x, waypoint.y, waypoint.z, 1.0D); + this.getLookControl().setLookAt(center.x, + (this.treePatrolMinimumY + this.treePatrolMaximumY) * 0.5D, + center.z, 30.0F, 30.0F); + } + } + + private void tickRoyalBoundary(ServerLevel level) { + if (!this.treePatrolBound || this.treePatrolCenter == null) { + return; + } + double boundaryRadius = Math.max(32.0D, AntarchySettings.royalBoundaryRadius()); + double distance = Math.sqrt(this.horizontalDistanceToTreeSqr()); + if (distance > boundaryRadius) { + Vec3 towardCenter = this.treePatrolCenter.subtract(this.position()).multiply(1.0D, 0.0D, 1.0D); + if (towardCenter.lengthSqr() > 0.001D) { + towardCenter = towardCenter.normalize(); + this.getMoveControl().setWantedPosition(this.getX() + towardCenter.x * 12.0D, + this.groundYBelow(this.getX() + towardCenter.x * 12.0D, + this.getZ() + towardCenter.z * 12.0D) + FLYING_PREFERRED_HOVER, + this.getZ() + towardCenter.z * 12.0D, 1.4D); + } + } + LivingEntity target = this.getTarget(); + if (target == null || !target.isAlive()) { + this.royalBoundaryGraceTicks = 0; + return; + } + double warningRadius = Math.min(boundaryRadius, Math.max(16.0D, AntarchySettings.royalBoundaryWarningRadius())); + double targetDistance = Math.sqrt(target.position().subtract(this.treePatrolCenter).multiply(1.0D, 0.0D, 1.0D).lengthSqr()); + if (targetDistance > warningRadius) { + if (this.tickCount % 5 == 0) { + level.sendParticles(ParticleTypes.END_ROD, target.getX(), target.getY() + 1.0D, target.getZ(), + 4, 0.3D, 0.5D, 0.3D, 0.02D); + } + if (targetDistance > boundaryRadius) { + this.royalBoundaryGraceTicks++; + if (this.royalBoundaryGraceTicks > Math.max(0, AntarchySettings.royalBoundaryGraceTicks()) + && this.tickCount % 20 == 0) { + this.invokeJudgment(target); + } + } + } else { + this.royalBoundaryGraceTicks = 0; + } + } + + private double horizontalDistanceToTreeSqr() { + if (this.treePatrolCenter == null) { + return 0.0D; + } + double dx = this.getX() - this.treePatrolCenter.x; + double dz = this.getZ() - this.treePatrolCenter.z; + return dx * dx + dz * dz; + } + + @Nullable + private Vec3 findTreePatrolWaypoint(Vec3 center, double angle) { + double currentAngle = Math.atan2(this.getZ() - center.z, this.getX() - center.x); + double baseAngle = Double.isFinite(currentAngle) ? currentAngle + 0.24D : angle; + double[] radii = {TREE_ORBIT_RADIUS, TREE_ORBIT_RADIUS + 20.0D, TREE_ORBIT_RADIUS - 20.0D}; + double[] heightOffsets = {0.0D, 16.0D, -12.0D, 30.0D}; + for (int angleAttempt = 0; angleAttempt < 8; angleAttempt++) { + double candidateAngle = baseAngle + angleAttempt * 0.16D; + for (double radius : radii) { + double x = center.x + Math.cos(candidateAngle) * radius; + double z = center.z + Math.sin(candidateAngle) * radius; + double vertical = 0.5D + 0.5D * Math.sin(candidateAngle); + double baseY = this.treePatrolMinimumY + + (this.treePatrolMaximumY - this.treePatrolMinimumY) * vertical; + for (double heightOffset : heightOffsets) { + double y = Mth.clamp(baseY + heightOffset, + this.treePatrolMinimumY + 8.0D, this.treePatrolMaximumY - 8.0D); + Vec3 candidate = new Vec3(x, y, z); + if (this.clearTreePatrolPath(candidate)) { + return candidate; + } + } + } + } + Vec3 outward = this.position().subtract(center).multiply(1.0D, 0.0D, 1.0D); + if (outward.lengthSqr() < 1.0E-4D) { + outward = new Vec3(Math.cos(angle), 0.0D, Math.sin(angle)); + } + Vec3 tangent = new Vec3(-outward.z, 0.0D, outward.x).normalize(); + Vec3 recovery = this.position().add(tangent.scale(24.0D)).add(0.0D, + this.treePatrolFailures >= 2 ? 18.0D : 8.0D, 0.0D); + recovery = new Vec3(recovery.x, + Mth.clamp(recovery.y, this.treePatrolMinimumY + 8.0D, this.treePatrolMaximumY - 8.0D), recovery.z); + if (this.clearTreePatrolPath(recovery)) { + return recovery; + } + return null; + } + + private boolean clearTreePatrolPath(Vec3 destination) { + Vec3 start = this.position(); + AABB bounds = this.getBoundingBox(); + for (int check = 0; check < TREE_ORBIT_PATH_SAMPLES; check++) { + int sample = check == 0 ? TREE_ORBIT_PATH_SAMPLES : check; + double progress = sample / (double) TREE_ORBIT_PATH_SAMPLES; + Vec3 point = start.lerp(destination, progress); + AABB box = bounds.move(point.x - this.getX(), point.y - this.getY(), point.z - this.getZ()); + if (!this.level().noCollision(this, box)) { + return false; + } + } + return true; + } + + private void clearLeavesAhead(ServerLevel level) { + if (!level.getGameRules().getBoolean(net.minecraft.world.level.GameRules.RULE_MOBGRIEFING)) { + return; + } + Vec3 movement = this.getDeltaMovement().normalize().scale(1.5D); + AABB forward = this.getBoundingBox().move(movement).inflate(0.2D, 0.0D, 0.2D); + BlockPos min = BlockPos.containing(forward.minX, forward.minY, forward.minZ); + BlockPos max = BlockPos.containing(forward.maxX, forward.maxY, forward.maxZ); + BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(); + for (int y = min.getY(); y <= max.getY(); y++) { + for (int x = min.getX(); x <= max.getX(); x++) { + for (int z = min.getZ(); z <= max.getZ(); z++) { + cursor.set(x, y, z); + if (level.getBlockState(cursor).is(BlockTags.LEAVES)) { + level.destroyBlock(cursor, true, this); + return; + } + } + } + } + } + + private void tickKingCombatMovement(LivingEntity target) { + if (this.royalChargeActive) { + this.getNavigation().stop(); + return; + } + boolean closeQuarters = this.activeDecree instanceof CloseQuartersDecree; + if (closeQuarters && this.isRoyalFlying() && this.kingLandingStage == KingLandingStage.AERIAL) { + this.beginKingLanding(target); + } else if (!closeQuarters && this.isRoyalFlying() && this.kingLandingStage == KingLandingStage.AERIAL + && this.groundAssaultCooldownTicks-- <= 0 && target.onGround()) { + this.beginKingLanding(target); + } + + switch (this.kingLandingStage) { + case TELEGRAPH -> { + this.getNavigation().stop(); + this.setDeltaMovement(this.getDeltaMovement().scale(0.72D)); + this.tickKingLandingIndicator(); + if (--this.kingLandingStageTicks <= 0) { + this.kingLandingStage = KingLandingStage.DESCENT; + this.playRoyalSound(AntarchySoundEvents.KING_WING_FLAP.get(), 0.72F); + } + return; + } + case DESCENT -> { + Vec3 landing = this.kingLandingWaypoint; + if (landing == null) { + this.resetKingCombatMovement(); + return; + } + this.setRoyalFlying(true); + this.getMoveControl().setWantedPosition(landing.x, landing.y, landing.z, 1.35D); + this.tickKingLandingIndicator(); + Vec3 localLandingDelta = GravityRotationUtil.vecWorldToPlayer( + this.position().subtract(landing), GravityApi.getGravityDirection(this)); + double horizontalDistanceSquared = this.position().subtract(landing) + .multiply(1.0D, 0.0D, 1.0D).lengthSqr(); + boolean reachedLanding = this.onGround() + || this.position().distanceToSqr(landing) <= 2.25D + || Math.abs(localLandingDelta.y) <= 1.25D && horizontalDistanceSquared <= 4.0D; + if (reachedLanding) { + this.setRoyalFlying(false); + this.setPos(this.getX(), landing.y, this.getZ()); + this.kingLandingStage = KingLandingStage.IMPACT; + this.kingLandingStageTicks = LANDING_IMPACT_TICKS; + this.triggerAnim("body_action", "stomp"); + this.playRoyalSound(AntarchySoundEvents.KING_ROAR.get(), 0.68F); + if (this.level() instanceof ServerLevel level) { + this.performStomp(level, target); + } + } + return; + } + case IMPACT -> { + this.getNavigation().stop(); + this.setDeltaMovement(Vec3.ZERO); + if (--this.kingLandingStageTicks <= 0) { + this.kingLandingStage = KingLandingStage.GROUND_COMBAT; + this.kingLandingStageTicks = closeQuarters + ? Math.max(this.groundAssaultTicksForPhase(), this.activeDecreeTicks + 20) + : this.groundAssaultTicksForPhase(); + this.kingLandingWaypoint = null; + } + return; + } + case GROUND_COMBAT -> { + if (closeQuarters) { + this.kingLandingStageTicks = Math.max(this.kingLandingStageTicks, this.activeDecreeTicks + 20); + } + if (this.kingGroundCombatWaypoint == null || --this.kingGroundCombatWaypointTicks <= 0 + || this.position().distanceToSqr(this.kingGroundCombatWaypoint) < 4.0D) { + this.selectKingGroundCombatWaypoint(target); + } + if (this.kingGroundCombatWaypoint != null) { + this.getMoveControl().setWantedPosition(this.kingGroundCombatWaypoint.x, + this.kingGroundCombatWaypoint.y, this.kingGroundCombatWaypoint.z, 1.25D); + } + if (--this.kingLandingStageTicks <= 0 && !closeQuarters) { + this.beginKingTakeoff(target); + } + return; + } + case TAKEOFF -> { + if (--this.kingLandingStageTicks <= 0) { + this.kingLandingStage = KingLandingStage.AERIAL; + this.groundAssaultCooldownTicks = GROUND_ASSAULT_COOLDOWN_MIN + + this.random.nextInt(GROUND_ASSAULT_COOLDOWN_VARIANCE + 1); + this.kingCombatWaypoint = null; + } + return; + } + case AERIAL -> { + } + } + + if (this.kingCombatWaypoint != null && ++this.kingCombatProgressTicks >= 40) { + if (this.kingCombatProgressPosition != null + && this.position().distanceToSqr(this.kingCombatProgressPosition) < 1.0D + && this.position().distanceToSqr(this.kingCombatWaypoint) > 16.0D) { + this.kingCombatWaypoint = null; + this.kingStrafeDirection *= -1; + } + this.kingCombatProgressPosition = this.position(); + this.kingCombatProgressTicks = 0; + } + if (this.kingCombatWaypoint == null || --this.kingCombatWaypointTicks <= 0 + || this.position().distanceToSqr(this.kingCombatWaypoint) < 16.0D) { + this.selectKingCombatWaypoint(target); + } + if (this.kingCombatWaypoint != null) { + double speed = this.projectilePressure >= 30 ? 1.4D : 1.15D; + this.getMoveControl().setWantedPosition(this.kingCombatWaypoint.x, + this.kingCombatWaypoint.y, this.kingCombatWaypoint.z, speed); + } + } + + private void beginKingLanding(LivingEntity target) { + this.kingLandingWaypoint = this.findKingLandingPoint(target); + if (this.kingLandingWaypoint != null) { + this.kingLandingStage = KingLandingStage.TELEGRAPH; + this.kingLandingStageTicks = LANDING_TELEGRAPH_TICKS; + this.kingCombatWaypoint = null; + this.playRoyalSound(AntarchySoundEvents.KING_ROAR.get(), 1.12F); + } else { + this.kingLandingWaypoint = null; + this.groundAssaultCooldownTicks = 100; + } + } + + private void beginKingTakeoff(LivingEntity target) { + this.kingLandingStage = KingLandingStage.TAKEOFF; + this.kingLandingStageTicks = TAKEOFF_TICKS; + this.triggerAnim("wing_action", "wing_gust"); + this.playRoyalSound(AntarchySoundEvents.KING_WING_FLAP.get(), 0.92F); + if (this.level() instanceof ServerLevel level) { + this.performWingGust(level, target); + } + this.setRoyalFlying(true); + this.addGravityAwareImpulse(this, GravityRotationUtil.vecPlayerToWorld( + 0.0D, 0.42D, 0.0D, GravityApi.getGravityDirection(this))); + this.hasImpulse = true; + } + + private void tickKingLandingIndicator() { + if (!(this.level() instanceof ServerLevel level) || this.kingLandingWaypoint == null + || this.tickCount % 2 != 0) { + return; + } + double progress = this.kingLandingStage == KingLandingStage.TELEGRAPH + ? 1.0D - this.kingLandingStageTicks / (double) LANDING_TELEGRAPH_TICKS : 1.0D; + double radius = Mth.lerp(progress, 4.0D, STOMP_RADIUS); + for (int index = 0; index < 36; index++) { + double angle = Mth.TWO_PI * index / 36.0D; + Vec3 indicator = this.kingLandingWaypoint.add(GravityRotationUtil.vecPlayerToWorld( + 0.0D, 0.2D, 0.0D, GravityApi.getGravityDirection(this))); + level.sendParticles(ParticleTypes.ELECTRIC_SPARK, + this.kingLandingWaypoint.x + Math.cos(angle) * radius, + indicator.y, + this.kingLandingWaypoint.z + Math.sin(angle) * radius, + 1, 0.0D, 0.02D, 0.0D, 0.0D); + } + } + + @Nullable + private Vec3 findKingLandingPoint(LivingEntity target) { + Vec3 away = this.position().subtract(target.position()).multiply(1.0D, 0.0D, 1.0D); + double baseAngle = away.lengthSqr() > 1.0E-4D ? Math.atan2(away.z, away.x) : this.random.nextDouble() * Mth.TWO_PI; + double[] radii = {9.0D, 13.0D, 17.0D, 6.0D, 4.0D, 2.0D, 0.0D}; + for (int angleIndex = 0; angleIndex < 16; angleIndex++) { + double angle = baseAngle + angleIndex * Mth.TWO_PI / 16.0D; + for (double radius : radii) { + double x = target.getX() + Math.cos(angle) * radius; + double z = target.getZ() + Math.sin(angle) * radius; + double y = GravityApi.isGravityInverted(this) + ? target.position().y - 0.1D + : this.groundYBelow(x, z) + 0.1D; + Vec3 candidate = new Vec3(x, y, z); + AABB box = this.getBoundingBox().move( + candidate.x - this.getX(), candidate.y - this.getY(), candidate.z - this.getZ()); + if (this.level().noCollision(this, box)) { + return candidate; + } + } + } + double fallbackY = GravityApi.isGravityInverted(this) + ? target.position().y - 0.1D + : this.groundYBelow(target.getX(), target.getZ()) + 0.1D; + Vec3 fallback = new Vec3(target.getX(), fallbackY, target.getZ()); + AABB fallbackBox = this.getBoundingBox().move( + fallback.x - this.getX(), fallback.y - this.getY(), fallback.z - this.getZ()); + if (this.level().noCollision(this, fallbackBox)) { + return fallback; + } + double directY = GravityApi.isGravityInverted(this) + ? this.position().y - 0.1D + : this.groundYBelow(this.getX(), this.getZ()) + 0.1D; + Vec3 direct = new Vec3(this.getX(), directY, this.getZ()); + AABB directBox = this.getBoundingBox().move( + direct.x - this.getX(), direct.y - this.getY(), direct.z - this.getZ()); + return this.level().noCollision(this, directBox) ? direct : null; + } + + private void selectKingCombatWaypoint(LivingEntity target) { + Vec3 radial = this.position().subtract(target.position()).multiply(1.0D, 0.0D, 1.0D); + if (radial.lengthSqr() < 1.0E-4D) { + radial = new Vec3(1.0D, 0.0D, 0.0D); + } + radial = radial.normalize(); + double range = this.activeDecree instanceof ComeNoCloserDecree || this.projectilePressure >= 30 + ? 40.0D : this.aerialCombatRangeForPhase(); + double currentAngle = Math.atan2(radial.z, radial.x); + Vec3 orbitWaypoint = null; + boolean treeBoundCombat = this.treePatrolBound && this.treePatrolCenter != null; + double boundaryRadius = treeBoundCombat + ? Math.max(32.0D, AntarchySettings.royalBoundaryRadius()) - this.getBbWidth() * 0.5D + : Double.POSITIVE_INFINITY; + double hoverOffset = this.phase() == Phase.ONE ? 8.0D : this.phase() == Phase.TWO ? 6.0D : 4.0D; + for (int angleAttempt = 0; angleAttempt < 4 && orbitWaypoint == null; angleAttempt++) { + double angle = currentAngle + this.kingStrafeDirection * COMBAT_ORBIT_ANGLE_STEP * (angleAttempt + 1); + double candidateRange = range + (angleAttempt % 2 == 0 ? 0.0D : -6.0D); + double x = target.getX() + Math.cos(angle) * candidateRange; + double z = target.getZ() + Math.sin(angle) * candidateRange; + double groundY = this.groundYBelow(x, z); + double y = Mth.clamp(target.getY() + hoverOffset, + groundY + FLYING_MIN_HOVER, groundY + FLYING_MAX_HOVER_ABOVE_GROUND); + Vec3 candidate = new Vec3(x, y, z); + if (treeBoundCombat) { + double dx = x - this.treePatrolCenter.x; + double dz = z - this.treePatrolCenter.z; + if (dx * dx + dz * dz > boundaryRadius * boundaryRadius) { + continue; + } + } + if (this.clearTreePatrolPath(candidate)) { + orbitWaypoint = candidate; + } + } + if (orbitWaypoint == null && treeBoundCombat) { + this.kingStrafeDirection *= -1; + double angle = currentAngle + this.kingStrafeDirection * COMBAT_ORBIT_ANGLE_STEP; + double x = target.getX() + Math.cos(angle) * range; + double z = target.getZ() + Math.sin(angle) * range; + double groundY = this.groundYBelow(x, z); + double y = Mth.clamp(target.getY() + hoverOffset, + groundY + FLYING_MIN_HOVER, groundY + FLYING_MAX_HOVER_ABOVE_GROUND); + Vec3 candidate = new Vec3(x, y, z); + double dx = candidate.x - this.treePatrolCenter.x; + double dz = candidate.z - this.treePatrolCenter.z; + if (dx * dx + dz * dz <= boundaryRadius * boundaryRadius + && this.clearTreePatrolPath(candidate)) { + orbitWaypoint = candidate; + } + } + if (orbitWaypoint == null) { + double angle = currentAngle + this.kingStrafeDirection * COMBAT_ORBIT_ANGLE_STEP; + double x = target.getX() + Math.cos(angle) * range; + double z = target.getZ() + Math.sin(angle) * range; + double groundY = this.groundYBelow(x, z); + double y = Mth.clamp(target.getY() + hoverOffset, + groundY + FLYING_MIN_HOVER, groundY + FLYING_MAX_HOVER_ABOVE_GROUND); + orbitWaypoint = new Vec3(x, y, z); + if (treeBoundCombat) { + orbitWaypoint = this.findTreePatrolWaypoint(this.treePatrolCenter, this.treePatrolAngle); + } + } + this.kingCombatWaypoint = orbitWaypoint; + this.kingCombatWaypointTicks = COMBAT_WAYPOINT_MIN_TICKS + + this.random.nextInt(COMBAT_WAYPOINT_VARIANCE + 1); + this.kingCombatProgressPosition = this.position(); + this.kingCombatProgressTicks = 0; + } + + private void stabilizeKingRotation() { + Vec3 movement = this.getDeltaMovement().multiply(1.0D, 0.0D, 1.0D); + if (movement.lengthSqr() < 0.0025D) { + return; + } + float desiredYaw = (float) (Mth.atan2(movement.z, movement.x) * 180.0D / Math.PI) - 90.0F; + float turn = Mth.clamp(Mth.wrapDegrees(desiredYaw - this.getYRot()), -7.0F, 7.0F); + this.setYRot(this.getYRot() + turn); + this.yBodyRot = this.getYRot(); + } + + private void resetKingCombatMovement() { + this.kingLandingStage = KingLandingStage.AERIAL; + this.kingLandingStageTicks = 0; + this.kingLandingWaypoint = null; + this.kingCombatWaypoint = null; + this.kingCombatProgressPosition = null; + this.kingCombatWaypointTicks = 0; + this.kingCombatProgressTicks = 0; + this.kingGroundCombatWaypoint = null; + this.kingGroundCombatWaypointTicks = 0; + if (this.groundAssaultCooldownTicks <= 0) { + this.groundAssaultCooldownTicks = 400; + } + } + + private void selectKingGroundCombatWaypoint(LivingEntity target) { + Vec3 radial = this.position().subtract(target.position()).multiply(1.0D, 0.0D, 1.0D); + if (radial.lengthSqr() < 1.0E-4D) { + radial = new Vec3(1.0D, 0.0D, 0.0D); + } + radial = radial.normalize(); + Vec3 tangent = new Vec3(-radial.z * this.kingStrafeDirection, 0.0D, + radial.x * this.kingStrafeDirection); + double distance = 4.0D + this.random.nextDouble() * 3.0D; + Vec3 candidate = target.position().add(radial.scale(distance)).add(tangent.scale(2.5D)); + Vec3 waypoint = new Vec3(candidate.x, target.getY(), candidate.z); + AABB box = this.getBoundingBox().move(waypoint.x - this.getX(), waypoint.y - this.getY(), waypoint.z - this.getZ()); + if (!this.level().noCollision(this, box)) { + waypoint = target.position().add(radial.scale(distance)); + waypoint = new Vec3(waypoint.x, target.getY(), waypoint.z); + box = this.getBoundingBox().move(waypoint.x - this.getX(), waypoint.y - this.getY(), waypoint.z - this.getZ()); + } + this.kingGroundCombatWaypoint = this.level().noCollision(this, box) ? waypoint : target.position(); + this.kingGroundCombatWaypointTicks = GROUND_COMBAT_WAYPOINT_MIN_TICKS + + this.random.nextInt(GROUND_COMBAT_WAYPOINT_VARIANCE + 1); + if (this.random.nextInt(4) == 0) { + this.kingStrafeDirection *= -1; + } + } + + public void requestCloseQuartersAssault(LivingEntity target) { + if (target != null && target.isAlive() && this.isRoyalFlying() + && this.kingLandingStage == KingLandingStage.AERIAL) { + this.beginKingLanding(target); + } + } + + public RoyalDecree.Evaluation evaluateCloseQuarters(LivingEntity target) { + UUID targetId = target.getUUID(); + double dx = target.getX() - this.getX(); + double dz = target.getZ() - this.getZ(); + double distanceSquared = dx * dx + dz * dz; + if (distanceSquared <= CLOSE_QUARTERS_RADIUS * CLOSE_QUARTERS_RADIUS) { + this.closeQuartersEntered.add(targetId); + this.closeQuartersOutsideTicks.remove(targetId); + return RoyalDecree.Evaluation.COMPLIANT; + } + if (!this.closeQuartersEntered.contains(targetId)) { + return 300 - this.activeDecreeTicks >= CLOSE_QUARTERS_APPROACH_TICKS + ? RoyalDecree.Evaluation.VIOLATED : RoyalDecree.Evaluation.COMPLIANT; + } + int outsideTicks = this.closeQuartersOutsideTicks.merge(targetId, 1, Integer::sum); + return outsideTicks > CLOSE_QUARTERS_EXIT_GRACE_TICKS + ? RoyalDecree.Evaluation.VIOLATED : RoyalDecree.Evaluation.COMPLIANT; + } + + public int closeQuartersCountdownTicks(LivingEntity target) { + if (this.closeQuartersEntered.contains(target.getUUID())) { + return -1; + } + return Math.max(0, CLOSE_QUARTERS_APPROACH_TICKS - (300 - this.activeDecreeTicks)); + } + private void tickRoyalPunishment() { if (this.exileTarget == null && this.titheTarget == null && this.targetShotPlayer == null && this.sealedTarget == null) { return; @@ -392,8 +1178,28 @@ public class KingEntity extends RoyalBossEntity { away = away.normalize(); this.exileTarget.setDeltaMovement(away.x * 2.6D, 1.35D, away.z * 2.6D); this.exileTarget.hasImpulse = true; - this.triggerAnim("body_action", "wing_gust"); this.playRoyalSound(AntarchySoundEvents.KING_WING_FLAP.get(), 0.82F); + if (this.level() instanceof ServerLevel level) { + this.spawnKingWingPressure(level, away); + } + this.exileWingAnimationPending = true; + } + } + + private void tickPendingExileAnimation() { + if (!this.exileWingAnimationPending + || !this.attackScheduler.ready("exile_wing_animation", RoyalAttackLane.BODY)) { + return; + } + if (this.beginRoyalAttack("exile_wing_animation", RoyalAttackLane.BODY, 1, 0, 1, + this.animationRecovery(55, 0, 1, 0), new com.craisinlord.antarchy.content.entity.royal.attack.RoyalAttackScheduler.Action() { + @Override + public void onStart() { + KingEntity.this.exileWingAnimationPending = false; + KingEntity.this.triggerAnim("wing_action", "wing_gust"); + } + })) { + this.exileWingAnimationPending = false; } } @@ -455,6 +1261,7 @@ public class KingEntity extends RoyalBossEntity { } this.exileTarget = null; this.exileTicks = 0; + this.exileWingAnimationPending = false; } private void clearTithe() { @@ -550,8 +1357,14 @@ public class KingEntity extends RoyalBossEntity { this.endDecree(this.getTarget()); this.activeDecree = decree; this.activeDecreeTicks = 300; + this.decreeAnnouncementTicks = DECREE_ANNOUNCEMENT_TICKS; + this.decreeResponseGraceTicks = DECREE_RESPONSE_GRACE_TICKS; this.decreeCooldownTicks = 0; - this.sendDecreeTitle(target); + this.closeQuartersEntered.clear(); + this.closeQuartersOutsideTicks.clear(); + this.decreeRecipients.clear(); + this.projectRoyalSound(AntarchySoundEvents.KING_DECREE.get(), 1.15F, 1.0F, target); + this.broadcastActiveDecree((ServerLevel) this.level()); return true; } } @@ -588,7 +1401,7 @@ public class KingEntity extends RoyalBossEntity { case KINGS_SEAL -> { this.sealUntil = level.getGameTime() + 100L; target.displayClientMessage(Component.literal("The King seals your inventory."), true); - level.sendParticles(ParticleTypes.ENCHANT, target.getX(), target.getY() + 1.0D, target.getZ(), + level.sendParticles(KING_GOLD_DUST, target.getX(), target.getY() + 1.0D, target.getZ(), 30, 0.6D, 1.0D, 0.6D, 0.1D); this.startSeal(target); return true; @@ -640,17 +1453,24 @@ public class KingEntity extends RoyalBossEntity { } private void tickKingWholeBody(ServerLevel level, LivingEntity target) { + if (this.isRoyalRecoveryActive()) { + return; + } boolean skyIsMine = this.activeDecree instanceof SkyIsMineDecree; boolean forceFar = this.decreeRetreatPressure || this.activeDecree instanceof ComeNoCloserDecree - || this.activeDecree instanceof KeepYourDistanceDecree; + ; + + if (!forceFar && this.activeDecree == null && this.tryStartRoyalCharge(level, target)) { + return; + } { double distance = target.distanceTo(this); if (this.attackScheduler.ready("stomp", RoyalAttackLane.BODY) && (distance <= STOMP_RADIUS || skyIsMine) && this.beginRoyalAttack("stomp", RoyalAttackLane.BODY, - skyIsMine ? STOMP_COOLDOWN_TICKS / 2 : STOMP_COOLDOWN_TICKS, + this.stompCooldownForPhase(skyIsMine), STOMP_WINDUP_TICKS, 1, 18, new com.craisinlord.antarchy.content.entity.royal.attack.RoyalAttackScheduler.Action() { @Override public void onStart() { KingEntity.this.triggerAnim("body_action", "stomp"); @@ -664,11 +1484,11 @@ public class KingEntity extends RoyalBossEntity { this.getMoveControl().setWantedPosition(this.getX(), target.getY(), this.getZ(), 1.2D); } } else if (this.attackScheduler.ready("wing_gust", RoyalAttackLane.BODY) - && distance <= WING_GUST_RADIUS && (forceFar || this.random.nextInt(3) == 0) - && this.beginRoyalAttack("wing_gust", RoyalAttackLane.BODY, WING_GUST_COOLDOWN_TICKS, - WING_GUST_WINDUP_TICKS, 1, 16, new com.craisinlord.antarchy.content.entity.royal.attack.RoyalAttackScheduler.Action() { + && distance <= WING_GUST_RADIUS && (forceFar || this.random.nextInt(this.phase() == Phase.ONE ? 3 : 2) == 0) + && this.beginRoyalAttack("wing_gust", RoyalAttackLane.BODY, this.wingGustCooldownForPhase(), + WING_GUST_WINDUP_TICKS, 1, this.animationRecovery(55, WING_GUST_WINDUP_TICKS, 1, 16), new com.craisinlord.antarchy.content.entity.royal.attack.RoyalAttackScheduler.Action() { @Override public void onStart() { - KingEntity.this.triggerAnim("body_action", "wing_gust"); + KingEntity.this.triggerAnim("wing_action", "wing_gust"); KingEntity.this.playRoyalSound(AntarchySoundEvents.KING_WING_FLAP.get(), 0.85F); } @Override public void onActive(int elapsedTicks) { @@ -677,15 +1497,16 @@ public class KingEntity extends RoyalBossEntity { })) { } else if (this.attackScheduler.ready("royal_muster", RoyalAttackLane.BODY) && !this.findRoyalMusterTargets(level).isEmpty() - && (forceFar || this.random.nextInt(4) == 0) + && (forceFar || this.random.nextInt(this.phase() == Phase.THREE ? 3 : 4) == 0) && this.beginRoyalAttack("royal_muster", RoyalAttackLane.BODY, AntarchySettings.kingRoyalMusterCooldownTicks(), - AntarchySettings.kingRoyalMusterWindupTicks(), 1, 20, + AntarchySettings.kingRoyalMusterWindupTicks(), 1, + this.animationRecovery(59, AntarchySettings.kingRoyalMusterWindupTicks(), 1, 20), new com.craisinlord.antarchy.content.entity.royal.attack.RoyalAttackScheduler.Action() { @Override public void onStart() { KingEntity.this.triggerAnim("body_action", "minion_spawn"); - KingEntity.this.playRoyalSound(AntarchySoundEvents.KING_DECREE_CAST.get(), 0.72F); - level.sendParticles(ParticleTypes.ENCHANT, + KingEntity.this.playRoyalSound(AntarchySoundEvents.KING_DECREE_CAST.get(), 0.34F, 0.72F); + level.sendParticles(KING_GOLD_DUST, KingEntity.this.getX(), KingEntity.this.getY() + 2.0D, KingEntity.this.getZ(), 36, 5.0D, 2.0D, 5.0D, 0.12D); } @@ -710,6 +1531,151 @@ public class KingEntity extends RoyalBossEntity { this.tickKingElementalProjectiles(level, target); } + private boolean tryStartRoyalCharge(ServerLevel level, LivingEntity target) { + double distance = this.distanceTo(target); + if (this.royalChargeOpeningDelayTicks > 0 + || this.kingLandingStage != KingLandingStage.AERIAL + || distance < ROYAL_CHARGE_MIN_RANGE || distance > ROYAL_CHARGE_MAX_RANGE + || this.attackScheduler.laneBusy(RoyalAttackLane.LEFT_HEAD) + || this.attackScheduler.laneBusy(RoyalAttackLane.CENTER_HEAD) + || this.attackScheduler.laneBusy(RoyalAttackLane.RIGHT_HEAD) + || !this.attackScheduler.ready("royal_charge", RoyalAttackLane.MOVEMENT)) { + return false; + } + return this.beginRoyalAttack("royal_charge", RoyalAttackLane.MOVEMENT, + this.royalChargeCooldownForPhase(), ROYAL_CHARGE_WINDUP_TICKS, + ROYAL_CHARGE_ACTIVE_TICKS, ROYAL_CHARGE_RECOVERY_TICKS, + new com.craisinlord.antarchy.content.entity.royal.attack.RoyalAttackScheduler.Action() { + @Override + public void onStart() { + KingEntity.this.royalChargeActive = true; + KingEntity.this.royalChargeHitTargets.clear(); + KingEntity.this.lockRoyalChargeDirection(target); + KingEntity.this.getNavigation().stop(); + KingEntity.this.setDeltaMovement(KingEntity.this.getDeltaMovement().scale(0.2D)); + KingEntity.this.triggerAnim("wing_action", "wing_gust"); + KingEntity.this.playRoyalSound(AntarchySoundEvents.KING_WING_FLAP.get(), 0.55F, 0.78F); + } + + @Override + public void onWindup(int elapsedTicks, int remainingTicks) { + KingEntity.this.getNavigation().stop(); + KingEntity.this.setDeltaMovement(KingEntity.this.getDeltaMovement().scale(0.72D)); + if (target.isAlive() && target.level() == level && remainingTicks > 8) { + KingEntity.this.lockRoyalChargeDirection(target); + } + KingEntity.this.sendRoyalChargeTelegraph(level, elapsedTicks); + } + + @Override + public void onActive(int elapsedTicks) { + KingEntity.this.setRoyalFlying(true); + KingEntity.this.setDeltaMovement(KingEntity.this.royalChargeDirection.scale(ROYAL_CHARGE_SPEED)); + KingEntity.this.hasImpulse = true; + KingEntity.this.applyRoyalChargeHits(level); + level.sendParticles(elapsedTicks % 3 == 0 ? ParticleTypes.END_ROD : KING_GOLD_DUST, + KingEntity.this.getX(), KingEntity.this.getY() + KingEntity.this.getBbHeight() * 0.5D, + KingEntity.this.getZ(), 6, KingEntity.this.getBbWidth() * 0.3D, + KingEntity.this.getBbHeight() * 0.22D, KingEntity.this.getBbWidth() * 0.3D, 0.03D); + if (elapsedTicks == ROYAL_CHARGE_ACTIVE_TICKS - 1) { + KingEntity.this.setDeltaMovement(KingEntity.this.getDeltaMovement().scale(0.12D)); + } + } + + @Override + public void onComplete() { + KingEntity.this.royalChargeActive = false; + KingEntity.this.royalChargeDirection = Vec3.ZERO; + KingEntity.this.royalChargeHitTargets.clear(); + KingEntity.this.setDeltaMovement(KingEntity.this.getDeltaMovement().scale(0.2D)); + KingEntity.this.startRoyalRecovery(16); + } + }); + } + + private void lockRoyalChargeDirection(LivingEntity target) { + Vec3 aimPoint = target.getEyePosition().add(target.getDeltaMovement().scale(4.0D)); + Vec3 direction = aimPoint.subtract(this.position().add(0.0D, this.getBbHeight() * 0.5D, 0.0D)); + if (direction.lengthSqr() > 1.0E-4D) { + this.royalChargeDirection = direction.normalize(); + this.getLookControl().setLookAt(aimPoint.x, aimPoint.y, aimPoint.z, 30.0F, 30.0F); + } + } + + private void sendRoyalChargeTelegraph(ServerLevel level, int elapsedTicks) { + if (this.royalChargeDirection.lengthSqr() < 1.0E-4D || elapsedTicks % 2 != 0) { + return; + } + Vec3 origin = this.position().add(0.0D, this.getBbHeight() * 0.5D, 0.0D); + double length = 12.0D + elapsedTicks * 1.25D; + int samples = Math.max(6, (int) (length / 2.5D)); + for (int sample = 1; sample <= samples; sample++) { + Vec3 point = origin.add(this.royalChargeDirection.scale(length * sample / samples)); + level.sendParticles(sample % 4 == 0 ? ParticleTypes.END_ROD : KING_GOLD_DUST, + point.x, point.y, point.z, 1, 0.025D, 0.025D, 0.025D, 0.0D); + } + } + + private void applyRoyalChargeHits(ServerLevel level) { + AABB hitBox = this.getBoundingBox().inflate(2.25D); + for (LivingEntity living : level.getEntitiesOfClass(LivingEntity.class, hitBox, + entity -> entity.isAlive() && entity instanceof Player && this.canDamageWithRoyalAttack(entity))) { + if (!this.royalChargeHitTargets.add(living.getUUID())) { + continue; + } + living.hurt(this.damageSources().mobAttack(this), this.scaleRoyalDamage(12.0D)); + Vec3 lift = GravityRotationUtil.vecPlayerToWorld( + 0.0D, 0.45D, 0.0D, GravityApi.getGravityDirection(living)); + this.addGravityAwareImpulse(living, this.royalChargeDirection.scale(2.1D).add(lift)); + living.hasImpulse = true; + level.sendParticles(ParticleTypes.END_ROD, living.getX(), living.getY() + living.getBbHeight() * 0.5D, + living.getZ(), 18, 0.55D, 0.7D, 0.55D, 0.08D); + } + } + + private int royalChargeCooldownForPhase() { + return switch (this.phase()) { + case ONE -> 300; + case TWO -> 250; + case THREE -> 210; + }; + } + + private int groundAssaultTicksForPhase() { + return switch (this.phase()) { + case ONE -> GROUND_ASSAULT_TICKS; + case TWO -> GROUND_ASSAULT_TICKS + 40; + case THREE -> GROUND_ASSAULT_TICKS + 80; + }; + } + + private double aerialCombatRangeForPhase() { + return switch (this.phase()) { + case ONE -> 34.0D; + case TWO -> 29.0D; + case THREE -> 24.0D; + }; + } + + private int stompCooldownForPhase(boolean skyIsMine) { + double scale = switch (this.phase()) { + case ONE -> 1.0D; + case TWO -> 0.88D; + case THREE -> 0.72D; + }; + int cooldown = Mth.floor(STOMP_COOLDOWN_TICKS * scale); + return skyIsMine ? cooldown / 2 : cooldown; + } + + private int wingGustCooldownForPhase() { + double scale = switch (this.phase()) { + case ONE -> 1.0D; + case TWO -> 0.88D; + case THREE -> 0.72D; + }; + return Mth.floor(WING_GUST_COOLDOWN_TICKS * scale); + } + private List findRoyalMusterTargets(ServerLevel level) { double radius = AntarchySettings.kingRoyalMusterRadius(); return level.getEntitiesOfClass(Mob.class, this.getBoundingBox().inflate(radius), mob -> @@ -737,7 +1703,7 @@ public class KingEntity extends RoyalBossEntity { } } if (applied > 0) { - this.playRoyalSound(AntarchySoundEvents.KING_DECREE_CAST.get(), 0.95F); + this.playRoyalSound(AntarchySoundEvents.KING_DECREE_CAST.get(), 0.34F, 0.95F); } } @@ -774,12 +1740,14 @@ public class KingEntity extends RoyalBossEntity { } @Override public void onActive(int elapsedTicks) { Vec3 origin = KingEntity.this.headAnchor(KingEntity.this.royalHead(RoyalHead.Slot.LEFT)); - Vec3 predicted = target.position().add(target.getDeltaMovement().scale(10.0D)); - Vec3 direction = predicted.add(0.0D, target.getBbHeight() * 0.5D, 0.0D).subtract(origin).normalize(); + Vec3 direction = RoyalElementalProjectileEntity.aimDirection( + origin, target, RoyalBeamElement.FIRE); RoyalElementalProjectileEntity fireball = RoyalElementalProjectileEntity.create(level, KingEntity.this, RoyalBeamElement.FIRE, origin, direction); level.addFreshEntity(fireball); - KingEntity.this.playRoyalSound(AntarchySoundEvents.KING_FIREBALL_SHOOT.get(), 0.9F); + if (KingEntity.this.random.nextInt(5) == 0) { + KingEntity.this.playRoyalSound(AntarchySoundEvents.KING_FIREBALL_SHOOT.get(), 0.18F, 0.9F); + } } })) return; this.fireballCooldownTicks = AntarchySettings.kingFireballCooldownTicks(); @@ -792,7 +1760,8 @@ public class KingEntity extends RoyalBossEntity { } @Override public void onActive(int elapsedTicks) { Vec3 origin = KingEntity.this.headAnchor(KingEntity.this.royalHead(RoyalHead.Slot.RIGHT)); - Vec3 direction = target.getEyePosition().subtract(origin).normalize(); + Vec3 direction = RoyalElementalProjectileEntity.aimDirection( + origin, target, RoyalBeamElement.ICE); RoyalElementalProjectileEntity iceball = RoyalElementalProjectileEntity.create(level, KingEntity.this, RoyalBeamElement.ICE, origin, direction); level.addFreshEntity(iceball); @@ -809,7 +1778,7 @@ public class KingEntity extends RoyalBossEntity { } @Override public void onActive(int elapsedTicks) { KingEntity.this.raiseIceSpikes(level, target); - KingEntity.this.playRoyalSound(AntarchySoundEvents.KING_BEAM_SHOOT.get(), 0.8F); + KingEntity.this.playRoyalSound(AntarchySoundEvents.KING_ICE_SPIKES.get(), 0.28F, 0.8F); } })) return; this.iceSpikeCooldownTicks = AntarchySettings.kingIceSpikeCooldownTicks(); @@ -828,7 +1797,7 @@ public class KingEntity extends RoyalBossEntity { for (int lane = -1; lane <= 1; lane++) { Vec3 point = start.add(line.scale(distance)).add(side.scale(lane * (i % 2 == 0 ? 2.0D : 0.0D))); double y = this.groundYBelow(point.x, point.z) + 0.1D; - RoyalIceSpikeEntity spike = RoyalIceSpikeEntity.create(level, new Vec3(point.x, y, point.z)); + RoyalIceSpikeEntity spike = RoyalIceSpikeEntity.create(level, new Vec3(point.x, y, point.z), this); level.addFreshEntity(spike); } } @@ -844,7 +1813,9 @@ public class KingEntity extends RoyalBossEntity { float falloff = (float) Math.max(0.2D, 1.0D - distance / (STOMP_RADIUS + 6.0D)); living.hurt(source, base * falloff); Vec3 push = living.position().subtract(this.position()).normalize().scale(2.4D * falloff); - living.setDeltaMovement(living.getDeltaMovement().add(push.x, 0.85D, push.z)); + Vec3 vertical = GravityRotationUtil.vecPlayerToWorld( + 0.0D, 0.85D, 0.0D, GravityApi.getGravityDirection(living)); + this.addGravityAwareImpulse(living, new Vec3(push.x, 0.0D, push.z).add(vertical)); living.hasImpulse = true; } RoyalBlockDestruction.destroySphere(level, this, @@ -868,47 +1839,129 @@ public class KingEntity extends RoyalBossEntity { Vec3 push = toTarget.normalize().scale(3.2D); living.setDeltaMovement(living.getDeltaMovement().add(push.x, 0.5D, push.z)); living.hasImpulse = true; - living.hurt(this.damageSources().mobAttack(this), 6.0F); + living.hurt(this.damageSources().mobAttack(this), this.scaleRoyalDamage(6.0D)); } + this.spawnKingWingPressure(level, forward); level.sendParticles(ParticleTypes.SWEEP_ATTACK, this.getX() + forward.x * 6.0D, this.getY() + 4.0D, this.getZ() + forward.z * 6.0D, 12, 4.0D, 2.0D, 4.0D, 0.0D); } + private void spawnKingWingPressure(ServerLevel level, Vec3 forward) { + Vec3 side = new Vec3(-forward.z, 0.0D, forward.x); + Vec3 origin = this.position().add(0.0D, this.getBbHeight() * 0.55D, 0.0D); + for (int band = 1; band <= 5; band++) { + double distance = band * 3.0D; + double width = 1.2D + band * 1.05D; + for (int sample = -3; sample <= 3; sample++) { + Vec3 point = origin.add(forward.scale(distance)).add(side.scale(width * sample / 3.0D)); + Vec3 velocity = forward.scale(0.18D + band * 0.015D).add(0.0D, 0.025D, 0.0D); + level.sendParticles(sample % 2 == 0 ? KING_WHITE_DUST : ParticleTypes.CLOUD, + point.x, point.y, point.z, 0, velocity.x, velocity.y, velocity.z, 1.0D); + } + } + } + private void tickDecree(ServerLevel level, LivingEntity target) { + if (this.isRoyalRecoveryActive() && this.activeDecree == null) { + return; + } + List participants = this.royalEncounterPlayers(level); + if (participants.isEmpty()) { + if (this.activeDecree != null) { + this.endDecree(target); + } + this.activeDecree = null; + this.activeDecreeTicks = 0; + this.decreeAnnouncementTicks = 0; + this.decreeRetreatPressure = false; + return; + } if (this.activeDecree == null) { if (this.decreeCooldownTicks-- > 0) { return; } + int decreeCooldown = this.decreeCooldownForPhase(); if (!this.beginRoyalAttack("decree", RoyalAttackLane.DECREE, - AntarchySettings.royalDecreeCooldownTicks(), 300)) { + decreeCooldown, 300)) { return; } this.activeDecreeTicks = 300; + this.decreeAnnouncementTicks = DECREE_ANNOUNCEMENT_TICKS; + this.decreeResponseGraceTicks = DECREE_RESPONSE_GRACE_TICKS; this.activeDecree = this.pickDecree(target); this.decreeRetreatPressure = false; - this.playRoyalSound(AntarchySoundEvents.KING_DECREE_CAST.get(), 0.9F + this.random.nextFloat() * 0.15F); + this.closeQuartersEntered.clear(); + this.closeQuartersOutsideTicks.clear(); + this.decreeRecipients.clear(); + this.playRoyalSound(AntarchySoundEvents.KING_DECREE_CAST.get(), 0.34F, + 0.9F + this.random.nextFloat() * 0.15F); this.playRoyalSound(AntarchySoundEvents.KING_ROAR.get(), 0.8F + this.random.nextFloat() * 0.12F); - if (target instanceof ServerPlayer player) this.sendDecreeTitle(player); + this.projectRoyalSound(AntarchySoundEvents.KING_DECREE.get(), 1.15F, 1.0F, target); + this.broadcastActiveDecree(level); } - int countdown = this.activeDecree.countdownTicks(target); - if (countdown > 0 && countdown <= 100 && this.tickCount % 20 == 0) { - level.playSound(null, target.blockPosition(), SoundEvents.BELL_BLOCK, SoundSource.HOSTILE, 0.8F, 1.0F + countdown / 500.0F); - } - this.activeDecree.apply(level, this, target); - if (this.activeDecree != null - && this.activeDecree.evaluate(level, this, target) == RoyalDecree.Evaluation.VIOLATED) { - this.failActiveDecree(target); + this.broadcastActiveDecree(level); + if (this.decreeAnnouncementTicks > 0) { + this.decreeAnnouncementTicks--; return; } + boolean hasCompletableParticipants = false; + boolean everyParticipantComplete = true; + for (ServerPlayer participant : participants) { + if (this.activeDecreeTicks % 20 == 0) { + int deadlineTicks = this.activeDecree.countdownTicks(this, participant); + int countdownTicks = deadlineTicks >= 0 ? deadlineTicks : this.activeDecreeTicks; + int seconds = Math.max(0, (countdownTicks + 19) / 20); + ChatFormatting countdownColor = seconds <= 3 ? ChatFormatting.RED : ChatFormatting.GOLD; + participant.displayClientMessage(Component.empty() + .append(Component.translatable(this.activeDecree.translationKey()) + .withStyle(ChatFormatting.GOLD, ChatFormatting.BOLD)) + .append(Component.literal(" " + seconds).withStyle(countdownColor, ChatFormatting.BOLD)), true); + float volume = seconds <= 3 ? 0.8F : 0.45F; + float pitch = 1.0F + Math.max(0, 15 - seconds) * 0.035F; + participant.playNotifySound(SoundEvents.BELL_BLOCK, SoundSource.HOSTILE, volume, pitch); + } + this.activeDecree.apply(level, this, participant); + if (this.activeDecree == null) { + return; + } + RoyalDecree.Evaluation evaluation = this.activeDecree.evaluate(level, this, participant); + if (evaluation == RoyalDecree.Evaluation.VIOLATED && this.decreeResponseGraceTicks <= 0) { + this.failActiveDecree(participant); + return; + } + if (evaluation == RoyalDecree.Evaluation.COMPLETE) { + hasCompletableParticipants = true; + } else { + everyParticipantComplete = false; + } + } + if (this.activeDecree != null && hasCompletableParticipants && everyParticipantComplete) { + this.projectRoyalSound(AntarchySoundEvents.KING_SUCCESS.get(), 4.0F, 1.0F, target); + this.endDecree(target); + return; + } + if (this.decreeResponseGraceTicks > 0) { + this.decreeResponseGraceTicks--; + } if (this.activeDecree != null && --this.activeDecreeTicks <= 0) { + this.projectRoyalSound(AntarchySoundEvents.KING_SUCCESS.get(), 4.0F, 1.0F, target); this.endDecree(target); } } private RoyalDecree pickDecree(LivingEntity target) { + if ((this.projectilePressure >= 20 || this.behaviorScore(Behavior.RANGED) >= 6) + && !"decree.antarchy.close_quarters".equals(this.lastDecreeKey)) { + return DECREES.stream() + .filter(CloseQuartersDecree.class::isInstance) + .findFirst() + .orElse(DECREES.get(0)); + } int totalWeight = 0; int[] weights = new int[DECREES.size()]; for (int i = 0; i < DECREES.size(); i++) { - weights[i] = Math.max(1, DECREES.get(i).contextWeight(this, target)); + RoyalDecree decree = DECREES.get(i); + weights[i] = decree.translationKey().equals(this.lastDecreeKey) + ? 0 : Math.max(1, decree.contextWeight(this, target)); totalWeight += weights[i]; } int roll = this.random.nextInt(totalWeight); @@ -930,17 +1983,53 @@ public class KingEntity extends RoyalBossEntity { .withStyle(style -> style.withColor(ChatFormatting.WHITE)))); } + private void broadcastActiveDecree(ServerLevel level) { + if (this.activeDecree == null) { + return; + } + for (ServerPlayer participant : this.royalEncounterPlayers(level)) { + if (this.decreeRecipients.add(participant.getUUID())) { + if (this.activeDecree instanceof ShowNoMercyDecree) { + this.lastPlayerDamageTime.put(participant.getUUID(), level.getGameTime()); + } + this.sendDecreeTitle(participant); + } + } + } + + private int decreeCooldownForPhase() { + double scale = switch (this.phase()) { + case ONE -> 1.0D; + case TWO -> 0.82D; + case THREE -> 0.65D; + }; + return Math.max(200, Mth.floor(AntarchySettings.royalDecreeCooldownTicks() * scale)); + } + private void endDecree(@Nullable LivingEntity target) { - if (target instanceof ServerPlayer player) { - player.connection.send(new ClientboundClearTitlesPacket(false)); + if (this.level() instanceof ServerLevel level) { + for (UUID recipientId : this.decreeRecipients) { + Player recipientPlayer = level.getPlayerByUUID(recipientId); + if (recipientPlayer instanceof ServerPlayer recipient) { + recipient.connection.send(new ClientboundClearTitlesPacket(false)); + recipient.displayClientMessage(Component.empty(), true); + } + } } if (this.activeDecree != null) { + this.lastDecreeKey = this.activeDecree.translationKey(); this.activeDecree.onEnded(); } this.activeDecree = null; this.activeDecreeTicks = 0; + this.decreeAnnouncementTicks = 0; + this.decreeResponseGraceTicks = 0; this.decreeRetreatPressure = false; - this.decreeCooldownTicks = AntarchySettings.royalDecreeCooldownTicks(); + this.closeQuartersEntered.clear(); + this.closeQuartersOutsideTicks.clear(); + this.decreeRecipients.clear(); + this.decreeCooldownTicks = this.decreeCooldownForPhase(); + this.startRoyalRecovery(40); } public void clearActiveDecree() { @@ -951,17 +2040,125 @@ public class KingEntity extends RoyalBossEntity { this.endDecree(target); } - /** Resolves a decree violation once, using the existing bounded judgment while the new judgment system is pending. */ public void failActiveDecree(@Nullable LivingEntity target) { if (this.activeDecree == null || target == null || !target.isAlive()) { return; } + this.attackScheduler.cancel(RoyalAttackLane.DECREE); + this.attackScheduler.cancel(RoyalAttackLane.HAZARD); if (target instanceof ServerPlayer player) { - this.debugTriggerPunishment(RoyalPunishmentType.ROYAL_EXILE, player); - } else { - this.invokeJudgment(target); + player.addEffect(new MobEffectInstance( + AntarchyObjects.ROYAL_VITALITY_PENALTY_EFFECT.get(), 20 * 30, 0, false, false, false)); + player.setHealth(Math.min(player.getHealth(), player.getMaxHealth())); } this.endDecree(target); + this.projectRoyalSound(AntarchySoundEvents.KING_JUDGEMENT.get(), 1.1F, 1.0F, target); + if (target instanceof ServerPlayer player) { + this.sendDecreeViolationTitle(player); + } + this.startRoyalJudgmentBarrage(target); + } + + private void sendDecreeViolationTitle(ServerPlayer player) { + player.connection.send(new ClientboundSetTitlesAnimationPacket(5, 45, 10)); + player.connection.send(new ClientboundSetTitleTextPacket(Component.translatable("decree.antarchy.violated") + .withStyle(style -> style.withColor(ChatFormatting.GOLD).withBold(true)))); + player.connection.send(new ClientboundSetSubtitleTextPacket(Component.translatable("decree.antarchy.violated.subtitle") + .withStyle(style -> style.withColor(ChatFormatting.YELLOW)))); + } + + private void startRoyalJudgmentBarrage(LivingEntity target) { + if (!(this.level() instanceof ServerLevel level)) { + return; + } + this.beginRoyalAttack("royal_judgment", RoyalAttackLane.HAZARD, 80, + 20, 9, 12, new com.craisinlord.antarchy.content.entity.royal.attack.RoyalAttackScheduler.Action() { + @Override + public void onStart() { + for (RoyalHead.Slot slot : RoyalHead.Slot.values()) { + KingEntity.this.triggerAnim(slot.controllerName(), "shoot"); + } + level.sendParticles(ParticleTypes.ELECTRIC_SPARK, + KingEntity.this.getX(), KingEntity.this.getY() + KingEntity.this.getBbHeight() * 0.7D, + KingEntity.this.getZ(), 70, 4.0D, 3.0D, 4.0D, 0.12D); + KingEntity.this.sendRoyalJudgmentTelegraph(level, target, 0); + Vec3 targetFlash = target.getEyePosition(); + level.sendParticles(ParticleTypes.END_ROD, targetFlash.x, targetFlash.y, targetFlash.z, + 24, 0.35D, 0.45D, 0.35D, 0.04D); + } + + @Override + public void onWindup(int elapsedTicks, int remainingTicks) { + if (target.isAlive() && target.level() == level) { + KingEntity.this.sendRoyalJudgmentTelegraph(level, target, elapsedTicks); + } + } + + @Override + public void onActive(int elapsedTicks) { + if (target.isAlive() && target.level() == level) { + if (elapsedTicks == 0) { + Vec3 targetFlash = target.getEyePosition(); + level.sendParticles(ParticleTypes.END_ROD, targetFlash.x, targetFlash.y, targetFlash.z, + 32, 0.45D, 0.55D, 0.45D, 0.05D); + if (target instanceof ServerPlayer player) { + KingJudgmentFlashSync.send(player, 12); + player.playNotifySound(SoundEvents.BELL_BLOCK, SoundSource.HOSTILE, 0.8F, 1.65F); + } + target.hurt(KingEntity.this.damageSources().magic(), + KingEntity.this.scaleRoyalDamage(6.0D)); + } + } + if (elapsedTicks % 4 == 0 && target.isAlive() && target.level() == level) { + KingEntity.this.fireRoyalJudgmentWave(level, target); + } + } + }); + } + + private void sendRoyalJudgmentTelegraph(ServerLevel level, LivingEntity target, int elapsedTicks) { + Vec3 targetPoint = target.position().add(GravityRotationUtil.vecPlayerToWorld( + 0.0D, 0.35D, 0.0D, GravityApi.getGravityDirection(target))); + double pulse = 0.8D + Math.min(1.0D, elapsedTicks / 20.0D) * 0.5D; + for (RoyalHead.Slot slot : RoyalHead.Slot.values()) { + RoyalHead head = this.royalHead(slot); + Vec3 origin = this.headAnchor(head); + Vec3 direction = targetPoint.subtract(origin); + double length = direction.length(); + if (length < 0.01D) { + continue; + } + direction = direction.scale(1.0D / length); + int samples = Math.max(4, (int) (length / 2.0D)); + for (int sample = 1; sample <= samples; sample++) { + Vec3 point = origin.add(direction.scale(length * sample / samples)); + level.sendParticles(ParticleTypes.ELECTRIC_SPARK, point.x, point.y, point.z, + 1, 0.02D, 0.02D, 0.02D, 0.0D); + } + } + double radius = 1.4D + pulse * 0.8D; + for (int index = 0; index < 20; index++) { + double angle = Mth.TWO_PI * index / 20.0D; + Vec3 point = targetPoint.add(Math.cos(angle) * radius, 0.0D, Math.sin(angle) * radius); + level.sendParticles(ParticleTypes.ELECTRIC_SPARK, point.x, point.y, point.z, + 1, 0.0D, 0.03D, 0.0D, 0.0D); + } + } + + private void fireRoyalJudgmentWave(ServerLevel level, LivingEntity target) { + Vec3 predicted = target.getEyePosition().add(target.getDeltaMovement().scale(4.0D)); + for (RoyalHead.Slot slot : RoyalHead.Slot.values()) { + RoyalHead head = this.royalHead(slot); + Vec3 origin = this.headAnchor(head); + Vec3 direction = predicted.subtract(origin).normalize(); + RoyalBoltEntity bolt = new RoyalBoltEntity(AntarchyObjects.ROYAL_BOLT.get(), level); + bolt.setOwner(this); + bolt.setElement(RoyalBeamElement.KING_GOLD); + bolt.setPos(origin.x, origin.y, origin.z); + bolt.shoot(direction.x, direction.y, direction.z, 1.55F, 1.0F); + level.addFreshEntity(bolt); + } + this.playRoyalSound(AntarchySoundEvents.KING_BEAM_SHOOT.get(), 1.15F); } public boolean blocksHealing() { @@ -978,7 +2175,8 @@ public class KingEntity extends RoyalBossEntity { long now = this.level().getGameTime(); if (this.judgmentCooldowns.getOrDefault(target.getUUID(), 0L) <= now) { this.judgmentCooldowns.put(target.getUUID(), now + 20L); - target.hurt(this.damageSources().magic(), 6.0F); + this.projectRoyalSound(AntarchySoundEvents.KING_JUDGEMENT.get(), 1.1F, 1.0F, target); + target.hurt(this.damageSources().magic(), this.scaleRoyalDamage(6.0D)); } } @@ -988,17 +2186,57 @@ public class KingEntity extends RoyalBossEntity { this.lastPlayerDamageTime.put(attacker.getUUID(), this.level().getGameTime()); boolean projectile = source.getDirectEntity() instanceof Projectile; this.bumpBehavior(projectile ? Behavior.RANGED : Behavior.HUGGING, 2); - if (this.activeDecree instanceof CloseQuartersDecree && projectile) { - this.failActiveDecree(attacker); - } else if (this.activeDecree instanceof ComeNoCloserDecree && !projectile) { - this.failActiveDecree(attacker); - } else if (this.activeDecree instanceof HandsOffTheCrownDecree) { - this.failActiveDecree(attacker); + if (projectile) { + this.projectilePressure = Math.min(PROJECTILE_PRESSURE_MAX, + this.projectilePressure + PROJECTILE_PRESSURE_PER_HIT); + if (this.isRoyalFlying() && !(this.activeDecree instanceof CloseQuartersDecree)) { + if (this.projectilePressure >= 40) { + amount *= 0.55F; + } else if (this.projectilePressure >= 20) { + amount *= 0.75F; + } + } + } + boolean decreeApplies = attacker instanceof ServerPlayer + && this.decreeRecipients.contains(attacker.getUUID()); + if (decreeApplies && this.decreeResponseGraceTicks <= 0) { + if (this.activeDecree instanceof CloseQuartersDecree && projectile) { + this.failActiveDecree(attacker); + } else if (this.activeDecree instanceof ComeNoCloserDecree && !projectile) { + this.failActiveDecree(attacker); + } else if (this.activeDecree instanceof HandsOffTheCrownDecree) { + this.failActiveDecree(attacker); + } } } return super.hurt(source, amount); } + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putBoolean("TreePatrolBound", this.treePatrolBound); + if (this.treePatrolCenter != null) { + tag.putDouble("TreePatrolCenterX", this.treePatrolCenter.x); + tag.putDouble("TreePatrolCenterY", this.treePatrolCenter.y); + tag.putDouble("TreePatrolCenterZ", this.treePatrolCenter.z); + tag.putDouble("TreePatrolMinimumY", this.treePatrolMinimumY); + tag.putDouble("TreePatrolMaximumY", this.treePatrolMaximumY); + tag.putDouble("TreePatrolAngle", this.treePatrolAngle); + } + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + if (tag.getBoolean("TreePatrolBound") && tag.contains("TreePatrolCenterX") + && tag.contains("TreePatrolCenterY") && tag.contains("TreePatrolCenterZ")) { + this.setTreePatrolHome( + new Vec3(tag.getDouble("TreePatrolCenterX"), tag.getDouble("TreePatrolCenterY"), tag.getDouble("TreePatrolCenterZ")), + tag.getDouble("TreePatrolMinimumY"), tag.getDouble("TreePatrolMaximumY"), tag.getDouble("TreePatrolAngle")); + } + } + public static boolean blocksHealingAround(LivingEntity target) { if (target.level().isClientSide) return false; return target.level().getEntitiesOfClass(KingEntity.class, target.getBoundingBox().inflate(128.0D), diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/PrinceEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/PrinceEntity.java index 6464b270..cb671845 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/PrinceEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/PrinceEntity.java @@ -31,6 +31,15 @@ public class PrinceEntity extends RoyalMountEntity { }; } + @Override + public RoyalBeamElement getBeamElement() { + return switch (this.getBeamHead()) { + case 0 -> RoyalBeamElement.FIRE; + case 2 -> RoyalBeamElement.ICE; + default -> RoyalBeamElement.LIGHTNING; + }; + } + @Override protected String geoName() { return "prince"; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/QueenEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/QueenEntity.java index d6bf6a79..6a11dbda 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/QueenEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/QueenEntity.java @@ -5,107 +5,208 @@ import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.entity.ManticoreEntity; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityTransition; +import com.craisinlord.antarchy.content.entity.nightmare.NightmareBiteEntity; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; +import com.craisinlord.anthology.gravity.GravityRotationUtil; +import com.craisinlord.anthology.gravity.GravityTransition; +import com.craisinlord.anthology.time.TimeDilationApi; +import com.craisinlord.anthology.time.TimeDilationFieldEntity; import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; +import java.util.ArrayList; import java.util.HashMap; +import java.util.Iterator; +import java.util.List; import java.util.Map; import java.util.UUID; import net.minecraft.core.BlockPos; import net.minecraft.core.particles.DustParticleOptions; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.network.syncher.EntityDataAccessor; +import net.minecraft.network.syncher.EntityDataSerializers; +import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; import net.minecraft.util.Mth; import net.minecraft.world.entity.Entity; import net.minecraft.world.BossEvent; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.item.FallingBlockEntity; import net.minecraft.world.entity.ai.attributes.AttributeInstance; import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.entity.ai.attributes.AttributeSupplier; import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.level.GameRules; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.Vec3; -import com.craisinlord.antarchy.content.entity.royal.beam.RoyalBeamSettings; -import com.craisinlord.antarchy.content.entity.royal.beam.RoyalBeamTerrainMode; +import net.minecraft.world.phys.AABB; +import com.craisinlord.anthology.beam.BeamSettings; +import com.craisinlord.anthology.beam.BeamTerrainMode; +import com.craisinlord.antarchy.content.entity.royal.beam.RoyalBeamElement; import com.craisinlord.antarchy.content.entity.royal.attack.RoyalAttackLane; import com.craisinlord.antarchy.content.entity.royal.attack.RoyalEffectController; import com.craisinlord.antarchy.content.entity.portal.DimensionalTearEntity; -import com.craisinlord.antarchy.content.time.TimeDilationApi; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.player.Player; +import org.jetbrains.annotations.Nullable; public class QueenEntity extends RoyalBossEntity { + private static final EntityDataAccessor QUEEN_MUSIC_ACTIVE = + SynchedEntityData.defineId(QueenEntity.class, EntityDataSerializers.BOOLEAN); + static final double TIME_FIELD_RADIUS_SCALE = 3.0D; private static final String SUMMON_COOLDOWN_KEY = "ManticoreSummonCooldownTicks"; private static final int FAILED_SUMMON_RETRY_TICKS = 20; private static final int POSITION_ATTEMPTS_PER_MANTICORE = 8; - private long naturalTrailSiteId = Long.MIN_VALUE; - private BlockPos naturalTrailHome = BlockPos.ZERO; private static final ResourceLocation ACCEL_SPEED_ID = new ResourceLocation("antarchy", "queen_royal_acceleration_speed"); private static final ResourceLocation ACCEL_FLY_ID = new ResourceLocation("antarchy", "queen_royal_acceleration_fly"); private static final DustParticleOptions ACCEL_DUST = new DustParticleOptions(new org.joml.Vector3f(1.0F, 0.15F, 0.15F), 2.0F); - public static QueenEntity spawnFromUndersideTrail(ServerLevel level, BlockPos spawnPos, BlockPos homePos, - long siteId, float yaw) { - if (!ThoraxisUndersideManager.isThoraxis(level) || spawnPos.getY() >= 0) return null; - java.util.List existing = level.getEntitiesOfClass(QueenEntity.class, - new net.minecraft.world.phys.AABB(homePos).inflate(160.0D), - queen -> queen.naturalTrailSiteId == siteId && queen.isAlive()); - if (!existing.isEmpty()) return existing.get(0); - QueenEntity queen = AntarchyObjects.QUEEN.get().create(level); - if (queen == null) return null; - queen.moveTo(spawnPos.getX() + .5D, spawnPos.getY(), spawnPos.getZ() + .5D, yaw, 0.0F); - if (!level.noCollision(queen, queen.getBoundingBox())) { - queen.discard(); - return null; - } - queen.finalizeSpawn(level, level.getCurrentDifficultyAt(spawnPos), MobSpawnType.CHUNK_GENERATION, null, null); - queen.naturalTrailSiteId = siteId; - queen.naturalTrailHome = homePos.immutable(); - queen.setPersistenceRequired(); - queen.setNoGravity(false); - ThoraxisUndersideManager.applyUndersideInversion(queen); - AntarchyGravityApi.setGravityDirection(queen, AntarchyGravityDirection.UP, true, - new AntarchyGravityTransition(12)); - queen.resetFallDistance(); - return level.addFreshEntity(queen) ? queen : null; - } - private static final int GRAVITY_STOMP_COOLDOWN = 180; - private static final int TIME_FIELD_COOLDOWN = 260; private static final int MOMENTUM_LOCK_COOLDOWN = 420; private static final int MOMENTUM_LOCK_DURATION = 90; - private static final double MOMENTUM_LOCK_RADIUS = 26.0D; + private static final double MOMENTUM_LOCK_RADIUS = 40.0D; private static final int CRUSHING_GRAVITY_COOLDOWN = 360; private static final int CRUSHING_GRAVITY_DURATION = 120; - private static final double CRUSHING_GRAVITY_RADIUS = 18.0D; + private static final double CRUSHING_GRAVITY_RADIUS = 36.0D; private static final double CRUSHING_GRAVITY_STRENGTH = 0.12D; private static final int ACCELERATION_COOLDOWN = 500; - private static final int ACCELERATION_DURATION = 140; + private static final int QUEEN_CHRONOSPHERE_COOLDOWN = 500; + private static final int QUEEN_CHRONOSPHERE_DURATION = 200; + private static final double QUEEN_CHRONOSPHERE_RADIUS = 40.0D; + private static final double QUEEN_CHRONOSPHERE_RATE = 0.14D; + private static final int ACCELERATION_DURATION = 360; private static final int BLACK_HOLE_COOLDOWN = 340; + private static final double QUEEN_BITE_COOLDOWN_MULTIPLIER = 1.5D; + private static final int GRAVITY_STOMP_TELEGRAPH_TICKS = 22; + private static final int BLACK_HOLE_TELEGRAPH_TICKS = 24; + private static final int MOMENTUM_LOCK_TELEGRAPH_TICKS = 40; + private static final int CRUSHING_GRAVITY_TELEGRAPH_TICKS = 28; + private static final int ACCELERATION_TELEGRAPH_TICKS = 32; + private static final int DEBRIS_CYCLONE_COOLDOWN = 260; + private static final int DEBRIS_CYCLONE_TELEGRAPH_TICKS = 45; + private static final double DEBRIS_CYCLONE_GATHER_RADIUS = 13.0D; + private static final double DEBRIS_CYCLONE_ORBIT_RADIUS = 6.0D; + private static final int DEBRIS_CYCLONE_BLOCK_COUNT = 12; + private static final double DEBRIS_CYCLONE_LAUNCH_SPEED = 1.35D; + private static final float DEBRIS_CYCLONE_BLOCK_DAMAGE_PER_DISTANCE = 2.2F; + private static final int DEBRIS_CYCLONE_BLOCK_MAX_DAMAGE = 16; + private static final int GRAVITIC_UPHEAVAL_COOLDOWN = 420; + private static final int GRAVITIC_UPHEAVAL_TELEGRAPH_TICKS = 50; + private static final double GRAVITIC_UPHEAVAL_RADIUS = 26.0D; + private static final int GRAVITIC_UPHEAVAL_BLOCK_COUNT = 80; + private static final int GRAVITIC_UPHEAVAL_RISE_TICKS = 35; + private static final int GRAVITIC_UPHEAVAL_HANG_TICKS = 15; + private static final int GRAVITIC_UPHEAVAL_DURATION = GRAVITIC_UPHEAVAL_RISE_TICKS + GRAVITIC_UPHEAVAL_HANG_TICKS; + private static final double GRAVITIC_UPHEAVAL_RISE_SPEED = 0.55D; + private static final int LANDING_TELEGRAPH_TICKS = 30; + private static final int LANDING_DESCENT_TIMEOUT_TICKS = 120; + private static final int LANDING_IMPACT_TICKS = 18; + private static final int GROUND_COMBAT_TICKS = 240; + private static final int GROUND_CHARGE_WINDUP_TICKS = 10; + private static final int GROUND_CHARGE_DURATION_TICKS = 14; + private static final int GROUND_CHARGE_COOLDOWN_MIN = 45; + private static final int GROUND_CHARGE_COOLDOWN_VARIANCE = 25; + private static final double GROUND_CHARGE_SPEED = 1.45D; + private static final int TAKEOFF_TICKS = 30; + private static final int LANDING_COOLDOWN_MIN = 220; + private static final int LANDING_COOLDOWN_VARIANCE = 80; + private static final int BLACK_HOLE_FOLLOW_UP_DELAY = 22; + private static final int CRUSHING_LANDING_DELAY = 40; + private static final int MOMENTUM_VOLLEY_DELAY = MOMENTUM_LOCK_DURATION + 5; + private static final int ACCELERATION_VOLLEY_DELAY = 18; + private static final int ACCELERATION_LANDING_DELAY = 55; + private static final int DIRECTED_LANDING_RETRY_TICKS = 60; private int manticoreSummonCooldownTicks; private int gravityStompCooldownTicks; - private int timeFieldCooldownTicks; private int momentumLockCooldownTicks; private int crushingGravityCooldownTicks; private int accelerationCooldownTicks; + private int queenChronosphereCooldownTicks; private int blackHoleCooldownTicks; + private int gravityStompTelegraphTicks; + private int blackHoleTelegraphTicks; + private int momentumLockTelegraphTicks; + private int crushingGravityTelegraphTicks; + private int accelerationTelegraphTicks; + private int queenChronosphereTelegraphTicks; + private int debrisCycloneCooldownTicks; + private int debrisCycloneTelegraphTicks; + private int graviticUpheavalCooldownTicks; + private int graviticUpheavalTelegraphTicks; + private int graviticUpheavalAgeTicks; + private final List debrisCycloneBlocks = new ArrayList<>(); + private final List graviticUpheavalBlocks = new ArrayList<>(); + @Nullable + private Vec3 pendingBlackHoleAnchor; + private int queenLandingCooldownTicks = 200; + private int queenLandingStageTicks; + private int queenGroundChargeCooldownTicks; + private int queenGroundChargeWindupTicks; + private int queenGroundChargeTicks; + private QueenLandingStage queenLandingStage = QueenLandingStage.AERIAL; + @Nullable + private Vec3 queenLandingWaypoint; + @Nullable + private Vec3 queenGroundChargeDirection; + @Nullable + private Phase pendingPhaseSignature; + private boolean pendingPhaseTwoCrushingGravity; + private boolean pendingPhaseThreeChronosphere; + private QueenFollowUp queuedQueenFollowUp = QueenFollowUp.NONE; + private int queuedQueenFollowUpTicks; + private int queuedQueenLandingRetryTicks; + private int directedFireballVolleyTicks; + @Nullable + private String lastQueenMajorAttack; + private final int[] dreamFireballCooldownTicks = new int[3]; private int idleWanderCooldownTicks; - private int finalTimeControlTicks; + private boolean manticoreAnimationPending; private final RoyalEffectController royalEffects = new RoyalEffectController(); private final Map frozenVelocities = new HashMap<>(); + private final Map frozenPositions = new HashMap<>(); + private long naturalTrailSiteId = Long.MIN_VALUE; + @Nullable + private BlockPos naturalTrailHome; + + private enum QueenLandingStage { + AERIAL, + TELEGRAPH, + DESCENT, + IMPACT, + GROUND_COMBAT, + TAKEOFF + } + + private enum QueenFollowUp { + NONE, + FIREBALL_VOLLEY, + LANDING, + ACCELERATION_VOLLEY + } public QueenEntity(EntityType entityType, Level level) { super(entityType, level); } + @Override + protected void defineSynchedData() { + super.defineSynchedData(); + this.entityData.define(QUEEN_MUSIC_ACTIVE, false); + } + public static AttributeSupplier.Builder createAttributes() { return createBaseAttributes(AntarchySettings.queenHealth(), AntarchySettings.queenAttackDamage()); } @@ -120,6 +221,148 @@ public class QueenEntity extends RoyalBossEntity { return true; } + @Override + protected double groundCombatBias() { + return 0.72D; + } + + @Override + protected boolean managesOwnCombatLocomotion() { + return true; + } + + @Override + protected boolean blocksRoyalAttacksForMovement() { + return this.queenLandingStage == QueenLandingStage.TELEGRAPH + || this.queenLandingStage == QueenLandingStage.DESCENT + || this.queenLandingStage == QueenLandingStage.IMPACT + || this.queenLandingStage == QueenLandingStage.TAKEOFF + || this.queenGroundChargeWindupTicks > 0 + || this.queenGroundChargeTicks > 0 + || this.isQueenAbilityTelegraphActive(); + } + + @Override + protected boolean blocksRoyalBeamScheduling() { + return this.directedFireballVolleyTicks > 0; + } + + @Override + protected void onRoyalPhaseTransitionStarted(Phase previousPhase, Phase nextPhase) { + this.resetQueenLandingSequence(); + this.clearQueenAbilityTelegraphs(); + this.clearQueenAttackDirector(); + this.pendingPhaseSignature = null; + this.getNavigation().stop(); + this.setDeltaMovement(this.getDeltaMovement().scale(0.35D)); + this.playRoyalSound(AntarchySoundEvents.QUEEN_ROAR.get(), nextPhase == Phase.THREE ? 0.66F : 0.82F); + } + + @Override + protected void tickRoyalPhaseTransition(Phase nextPhase, int elapsedTicks, int remainingTicks) { + this.getNavigation().stop(); + this.setDeltaMovement(this.getDeltaMovement().scale(0.7D)); + if (this.level() instanceof ServerLevel level && elapsedTicks % 3 == 0) { + level.sendParticles(nextPhase == Phase.THREE ? ACCEL_DUST : ParticleTypes.REVERSE_PORTAL, + this.getX(), this.getY() + this.getBbHeight() * 0.55D, this.getZ(), + 20, this.getBbWidth() * 0.25D, this.getBbHeight() * 0.25D, + this.getBbWidth() * 0.25D, 0.08D); + } + } + + @Override + protected void onRoyalPhaseTransitionCompleted(Phase nextPhase) { + if (nextPhase == Phase.TWO) { + this.momentumLockCooldownTicks = 0; + this.pendingPhaseSignature = Phase.TWO; + this.pendingPhaseTwoCrushingGravity = true; + this.queenLandingCooldownTicks = Math.min(this.queenLandingCooldownTicks, 100); + } else if (nextPhase == Phase.THREE) { + this.accelerationCooldownTicks = 0; + this.queenChronosphereCooldownTicks = 0; + this.pendingPhaseSignature = Phase.THREE; + this.pendingPhaseThreeChronosphere = true; + this.queenLandingCooldownTicks = 0; + } + } + + @Override + protected double biteApproachSpeed() { + return this.queenLandingStage == QueenLandingStage.GROUND_COMBAT && !this.isRoyalFlying() + ? 1.9D : 1.55D; + } + + @Override + protected double combatStandoffDistance() { + if (this.queenLandingStage == QueenLandingStage.GROUND_COMBAT && !this.isRoyalFlying()) { + return 0.0D; + } + return Math.max(super.combatStandoffDistance(), AntarchySettings.queenBeamMinimumRange() + 6.0D); + } + + @Override + protected double biteDamageMultiplier() { + return super.biteDamageMultiplier() * 1.5D; + } + + @Override + protected int maxConcurrentHeadAttacks(Phase phase) { + return switch (phase) { + case ONE, TWO -> 1; + case THREE -> 2; + }; + } + + @Override + protected int biteCooldownTicks(Phase phase) { + return Math.max(10, (int) Math.ceil(super.biteCooldownTicks(phase) * QUEEN_BITE_COOLDOWN_MULTIPLIER)); + } + + protected void registerRoyalTargetGoals() { + this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, KingEntity.class, true)); + this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); + this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>( + this, Mob.class, 10, true, false, this::canAttack)); + } + + @Override + protected int selectBeamVolleyLimit(Phase phase) { + return switch (phase) { + case ONE -> AntarchySettings.queenBeamPhaseOneCap(); + case TWO -> AntarchySettings.queenBeamPhaseTwoCap(); + case THREE -> this.random.nextDouble() < AntarchySettings.queenBeamPhaseThreeMaxVolleyChance() + ? AntarchySettings.queenBeamPhaseThreeCap() + : Math.min(2, AntarchySettings.queenBeamPhaseThreeCap()); + }; + } + + @Override + protected boolean shouldDistributeHeadTargets(LivingEntity primaryTarget) { + return !(primaryTarget instanceof KingEntity); + } + + public boolean canAttack(LivingEntity target) { + return !target.getType().is(AntarchyTags.Entities.QUEEN_DOES_NOT_ATTACK) + && super.canAttack(target); + } + + public boolean canDamageWithRoyalAttack(LivingEntity target) { + return target != this + && target.isAlive() + && (!(target instanceof Player player) || !player.isCreative() && !player.isSpectator()) + && !target.getType().is(AntarchyTags.Entities.QUEEN_DOES_NOT_ATTACK) + && !this.isAlliedTo(target); + } + + public boolean shouldPlayQueenMusic() { + LivingEntity target = this.getTarget(); + return !this.isDeadOrDying() && target != null && target.isAlive() && this.canAttack(target); + } + + public boolean isQueenMusicActive() { + return this.entityData.get(QUEEN_MUSIC_ACTIVE); + } + @Override protected SoundEvent royalFlyLoopSound() { return AntarchySoundEvents.QUEEN_FLY_LOOP.get(); @@ -163,8 +406,8 @@ public class QueenEntity extends RoyalBossEntity { protected SoundEvent royalBeamEndSound() { return AntarchySoundEvents.QUEEN_BEAM_END.get(); } @Override - protected RoyalBeamSettings royalBeamSettings() { - return new RoyalBeamSettings(AntarchySettings.queenBeamRange(), AntarchySettings.queenBeamTracking(), 7.5D, + protected BeamSettings royalBeamSettings() { + return new BeamSettings(AntarchySettings.queenBeamRange(), AntarchySettings.queenBeamTracking(), 7.5D, AntarchySettings.queenBeamDurationTicks(), AntarchySettings.queenBeamTravelTicks(), AntarchySettings.queenBeamCooldownTicks(), 6.0F, 6.0F, (float) AntarchySettings.queenBeamDamage(), 1.0F, 3, 100.0D, (float) AntarchySettings.queenBeamTerrainRadius(), 4.0F, AntarchySettings.queenBeamTerrainCap(), @@ -172,36 +415,461 @@ public class QueenEntity extends RoyalBossEntity { } @Override - protected RoyalBeamTerrainMode royalBeamTerrainMode() { - return RoyalBeamTerrainMode.DESTROY; + protected BeamTerrainMode royalBeamTerrainMode() { + return BeamTerrainMode.DESTROY; + } + + @Override + protected RoyalBeamElement royalBeamElement(@Nullable RoyalHead head) { + if (head == null) { + return RoyalBeamElement.QUEEN_BLACK; + } + return switch (head.slot()) { + case LEFT -> RoyalBeamElement.QUEEN_PURPLE; + case CENTER -> RoyalBeamElement.QUEEN_BLACK; + case RIGHT -> RoyalBeamElement.QUEEN_RED; + }; + } + + @Override + protected boolean royalBeamUsesTrackedAim() { + return false; } public static boolean isFieldImmune(Entity entity) { - return entity instanceof RoyalBossEntity - || entity.getType().is(AntarchyTags.Entities.TIME_DILATION_IMMUNE); + return entity.getType().is(AntarchyTags.Entities.QUEEN_DOES_NOT_ATTACK); + } + + private AABB queenEffectBounds(double radius) { + double centerY = this.getY() + this.getBbHeight() * 0.5D; + return new AABB(this.getX() - radius, centerY - radius, this.getZ() - radius, + this.getX() + radius, centerY + radius, this.getZ() + radius); + } + + private boolean withinQueenEffectRange(Entity entity, double radius) { + double dx = entity.getX() - this.getX(); + double dz = entity.getZ() - this.getZ(); + double centerY = this.getY() + this.getBbHeight() * 0.5D; + double entityY = entity.getY() + entity.getBbHeight() * 0.5D; + return dx * dx + dz * dz <= radius * radius && Math.abs(entityY - centerY) <= radius; } @Override public void tick() { super.tick(); + if (!this.level().isClientSide) { + this.entityData.set(QUEEN_MUSIC_ACTIVE, this.shouldPlayQueenMusic()); + } if (this.level().isClientSide || this.isDeadOrDying()) { return; } + if (this.isRoyalPhaseTransitionActive()) { + this.royalEffects.tick(); + return; + } LivingEntity target = this.getTarget(); if (target == null || !target.isAlive() || !this.canAttack(target)) { + this.clearQueenAttackDirector(); + this.resetQueenLandingSequence(); this.tickIdleWander(); + } else { + this.tickQueenAttackDirector(target); + this.tickQueenLandingSequence(target); + } + this.tickQueenAbilityTelegraphs(); + if (this.blocksRoyalAttacksForMovement()) { + this.royalEffects.tick(); + return; } this.tickManticoreSummon(); + this.tickPendingManticoreAnimation(); this.tickQueenAbilities(); - this.tickFinalTimeControl(); + if (this.isQueenAbilityTelegraphActive()) { + this.royalEffects.tick(); + return; + } + this.tickDreamFireballs(); + this.tickDirectedFireballVolley(); + this.tickFinalAcceleration(); this.royalEffects.tick(); } + private void tickQueenLandingSequence(LivingEntity target) { + if (this.queenLandingStage == QueenLandingStage.AERIAL && this.isRoyalFlying() + && !this.isQueenAbilityTelegraphActive() + && this.queenLandingCooldownTicks-- <= 0) { + this.beginQueenLanding(target); + } + + switch (this.queenLandingStage) { + case TELEGRAPH -> { + this.getNavigation().stop(); + this.setDeltaMovement(this.getDeltaMovement().scale(0.72D)); + this.tickQueenLandingIndicator(); + if (--this.queenLandingStageTicks <= 0) { + this.queenLandingStage = QueenLandingStage.DESCENT; + this.queenLandingStageTicks = LANDING_DESCENT_TIMEOUT_TICKS; + this.playRoyalSound(AntarchySoundEvents.QUEEN_FLY_LOOP.get(), 0.72F); + } + } + case DESCENT -> { + Vec3 landing = this.queenLandingWaypoint; + if (landing == null) { + this.resetQueenLandingSequence(); + return; + } + this.setRoyalFlying(true); + this.getMoveControl().setWantedPosition(landing.x, landing.y, landing.z, 1.15D); + this.tickQueenLandingIndicator(); + boolean reachedLanding = this.onGround() || this.position().distanceToSqr(landing) <= 2.25D; + if (reachedLanding) { + this.setRoyalFlying(false); + this.queenLandingStage = QueenLandingStage.IMPACT; + this.queenLandingStageTicks = LANDING_IMPACT_TICKS; + this.performGravityStomp((ServerLevel) this.level(), target); + } else if (--this.queenLandingStageTicks <= 0) { + this.resetQueenLandingSequence(); + this.queenLandingCooldownTicks = 40; + } + } + case IMPACT -> { + this.getNavigation().stop(); + this.setDeltaMovement(Vec3.ZERO); + if (--this.queenLandingStageTicks <= 0) { + this.queenLandingStage = QueenLandingStage.GROUND_COMBAT; + this.queenLandingStageTicks = GROUND_COMBAT_TICKS; + this.queenGroundChargeCooldownTicks = 20; + this.queenLandingWaypoint = null; + } + } + case GROUND_COMBAT -> { + this.tickQueenGroundCharge(target); + if (--this.queenLandingStageTicks <= 0) { + this.beginQueenTakeoff(); + } + } + case TAKEOFF -> { + if (--this.queenLandingStageTicks <= 0) { + this.queenLandingStage = QueenLandingStage.AERIAL; + this.queenLandingCooldownTicks = LANDING_COOLDOWN_MIN + + this.random.nextInt(LANDING_COOLDOWN_VARIANCE + 1); + } + } + case AERIAL -> { + } + } + } + + private void beginQueenLanding(LivingEntity target) { + this.queenLandingWaypoint = this.findQueenLandingPoint(target); + if (this.queenLandingWaypoint == null) { + this.queenLandingCooldownTicks = 100; + return; + } + this.queenLandingStage = QueenLandingStage.TELEGRAPH; + this.queenLandingStageTicks = LANDING_TELEGRAPH_TICKS; + this.playRoyalSound(AntarchySoundEvents.QUEEN_ROAR.get(), 1.08F); + } + + @Nullable + private Vec3 findQueenLandingPoint(LivingEntity target) { + Vec3 away = this.position().subtract(target.position()).multiply(1.0D, 0.0D, 1.0D); + double baseAngle = away.lengthSqr() > 1.0E-4D + ? Math.atan2(away.z, away.x) : this.random.nextDouble() * Mth.TWO_PI; + boolean inverted = GravityApi.isGravityInverted(this); + double[] radii = {10.0D, 14.0D, 18.0D, 7.0D}; + for (int angleIndex = 0; angleIndex < 12; angleIndex++) { + double angle = baseAngle + angleIndex * Mth.TWO_PI / 12.0D; + for (double radius : radii) { + double x = target.getX() + Math.cos(angle) * radius; + double z = target.getZ() + Math.sin(angle) * radius; + double y = inverted + ? target.position().y - 0.1D + : this.groundYBelow(x, z) + 0.1D; + Vec3 candidate = new Vec3(x, y, z); + AABB box = this.getBoundingBox().move( + candidate.x - this.getX(), candidate.y - this.getY(), candidate.z - this.getZ()); + if (this.level().noCollision(this, box)) { + return candidate; + } + } + } + double fallbackY = inverted + ? target.position().y - 0.1D + : this.groundYBelow(target.getX(), target.getZ()) + 0.1D; + Vec3 fallback = new Vec3(target.getX(), fallbackY, target.getZ()); + AABB fallbackBox = this.getBoundingBox().move( + fallback.x - this.getX(), fallback.y - this.getY(), fallback.z - this.getZ()); + if (this.level().noCollision(this, fallbackBox)) { + return fallback; + } + return null; + } + + private void tickQueenLandingIndicator() { + if (!(this.level() instanceof ServerLevel level) || this.queenLandingWaypoint == null + || this.tickCount % 2 != 0) { + return; + } + double progress = this.queenLandingStage == QueenLandingStage.TELEGRAPH + ? 1.0D - this.queenLandingStageTicks / (double) LANDING_TELEGRAPH_TICKS : 1.0D; + double radius = Mth.lerp(progress, 4.0D, 18.0D); + Vec3 indicator = this.queenLandingWaypoint.add(GravityRotationUtil.vecPlayerToWorld( + 0.0D, 0.2D, 0.0D, GravityApi.getGravityDirection(this))); + for (int index = 0; index < 40; index++) { + double angle = Mth.TWO_PI * index / 40.0D; + level.sendParticles(ParticleTypes.REVERSE_PORTAL, + this.queenLandingWaypoint.x + Math.cos(angle) * radius, + indicator.y, + this.queenLandingWaypoint.z + Math.sin(angle) * radius, + 1, 0.0D, 0.0D, 0.0D, 0.0D); + } + } + + private void beginQueenTakeoff() { + this.clearQueenGroundCharge(); + this.queenLandingStage = QueenLandingStage.TAKEOFF; + this.queenLandingStageTicks = TAKEOFF_TICKS; + this.triggerAnim("wing_action", "wing_gust"); + this.playRoyalSound(AntarchySoundEvents.QUEEN_FLY_LOOP.get(), 0.9F); + if (this.level() instanceof ServerLevel level) { + this.spawnQueenWingPressure(level); + level.sendParticles(ParticleTypes.REVERSE_PORTAL, + this.getX(), this.getY() + this.getBbHeight() * 0.4D, this.getZ(), + 60, 7.0D, 1.0D, 7.0D, 0.12D); + } + this.setRoyalFlying(true); + this.addGravityAwareImpulse(this, GravityRotationUtil.vecPlayerToWorld( + 0.0D, 0.42D, 0.0D, GravityApi.getGravityDirection(this))); + this.hasImpulse = true; + } + + private void resetQueenLandingSequence() { + this.clearQueenGroundCharge(); + if (this.queenLandingStage != QueenLandingStage.AERIAL) { + this.setRoyalFlying(true); + } + this.queenLandingStage = QueenLandingStage.AERIAL; + this.queenLandingStageTicks = 0; + this.queenLandingWaypoint = null; + if (this.queenLandingCooldownTicks <= 0) { + this.queenLandingCooldownTicks = 100; + } + } + + private void tickQueenGroundCharge(LivingEntity target) { + if (this.queenGroundChargeWindupTicks > 0) { + this.getNavigation().stop(); + this.setDeltaMovement(this.getDeltaMovement().scale(0.45D)); + this.getLookControl().setLookAt(target, 90.0F, 90.0F); + if (--this.queenGroundChargeWindupTicks <= 0) { + Vec3 direction = target.position().subtract(this.position()).multiply(1.0D, 0.0D, 1.0D); + if (direction.lengthSqr() > 1.0E-4D) { + this.queenGroundChargeDirection = direction.normalize(); + this.queenGroundChargeTicks = GROUND_CHARGE_DURATION_TICKS; + } else { + this.finishQueenGroundCharge(); + } + } + return; + } + if (this.queenGroundChargeTicks > 0 && this.queenGroundChargeDirection != null) { + Vec3 direction = this.queenGroundChargeDirection; + Vec3 movement = this.getDeltaMovement(); + this.setDeltaMovement(direction.x * GROUND_CHARGE_SPEED, movement.y, + direction.z * GROUND_CHARGE_SPEED); + this.setYRot((float) (Mth.atan2(-direction.x, direction.z) * Mth.RAD_TO_DEG)); + this.yBodyRot = this.getYRot(); + this.hasImpulse = true; + if (--this.queenGroundChargeTicks <= 0) { + this.finishQueenGroundCharge(); + } + return; + } + if (this.queenGroundChargeCooldownTicks-- > 0 + || target.position().multiply(1.0D, 0.0D, 1.0D) + .distanceToSqr(this.position().multiply(1.0D, 0.0D, 1.0D)) < 36.0D) { + return; + } + this.queenGroundChargeDirection = target.position().subtract(this.position()) + .multiply(1.0D, 0.0D, 1.0D).normalize(); + this.queenGroundChargeWindupTicks = GROUND_CHARGE_WINDUP_TICKS; + this.playRoyalSound(AntarchySoundEvents.QUEEN_ROAR.get(), 1.12F); + if (this.level() instanceof ServerLevel level) { + level.sendParticles(ACCEL_DUST, this.getX(), this.getY() + this.getBbHeight() * 0.35D, this.getZ(), + 32, this.getBbWidth() * 0.2D, 0.6D, this.getBbWidth() * 0.2D, 0.04D); + } + } + + private void finishQueenGroundCharge() { + this.queenGroundChargeTicks = 0; + this.queenGroundChargeWindupTicks = 0; + this.queenGroundChargeDirection = null; + this.queenGroundChargeCooldownTicks = GROUND_CHARGE_COOLDOWN_MIN + + this.random.nextInt(GROUND_CHARGE_COOLDOWN_VARIANCE + 1); + } + + private void clearQueenGroundCharge() { + this.queenGroundChargeCooldownTicks = 0; + this.queenGroundChargeWindupTicks = 0; + this.queenGroundChargeTicks = 0; + this.queenGroundChargeDirection = null; + } + + private void tickDreamFireballs() { + if (this.isRoyalRecoveryActive()) return; + if (!(this.level() instanceof ServerLevel level)) return; + LivingEntity target = this.getTarget(); + if (target == null || !target.isAlive() || !this.canAttack(target)) return; + for (RoyalHead head : new RoyalHead[] {this.royalHead(RoyalHead.Slot.LEFT), this.royalHead(RoyalHead.Slot.CENTER), this.royalHead(RoyalHead.Slot.RIGHT)}) { + int index = head.slot().ordinal(); + if (this.dreamFireballCooldownTicks[index] > 0) { + this.dreamFireballCooldownTicks[index]--; + continue; + } + double minimumRange = this.directedFireballVolleyTicks > 0 ? 6.0D : 12.0D; + double maximumRange = this.directedFireballVolleyTicks > 0 ? 64.0D : 52.0D; + if (!head.readyToAttack() || this.distanceTo(target) < minimumRange + || this.distanceTo(target) > maximumRange) continue; + int cooldown = this.cooldown(180); + RoyalHead.Slot slot = head.slot(); + LivingEntity fireballTarget = target; + if (this.directedFireballVolleyTicks > 0) { + LivingEntity assignedTarget = head.target(level); + if (assignedTarget != null && this.canAttack(assignedTarget)) { + fireballTarget = assignedTarget; + } + } + final LivingEntity committedTarget = fireballTarget; + if (!this.beginRoyalAttack("dream_fireball_" + slot.name(), this.headLane(head), cooldown, 12, 1, 5, + new com.craisinlord.antarchy.content.entity.royal.attack.RoyalAttackScheduler.Action() { + @Override public void onStart() { + head.startShoot(); + QueenEntity.this.triggerAnim(slot.controllerName(), "shoot"); + } + @Override public void onActive(int elapsedTicks) { + Vec3 origin = QueenEntity.this.headAnchor(head); + Vec3 direction = committedTarget.getEyePosition().subtract(origin).normalize(); + RoyalElementalProjectileEntity projectile = RoyalElementalProjectileEntity.create( + level, QueenEntity.this, RoyalBeamElement.DREAM_FIRE, origin, direction); + level.addFreshEntity(projectile); + QueenEntity.this.playRoyalSound(AntarchySoundEvents.QUEEN_BEAM_SHOOT.get(), 0.9F); + } + @Override public void onComplete() { + head.stopShoot(); + } + })) { + this.dreamFireballCooldownTicks[index] = cooldown; + } + } + } + + private void tickQueenAttackDirector(LivingEntity target) { + if (this.queuedQueenFollowUp == QueenFollowUp.NONE) { + return; + } + if (this.queuedQueenFollowUpTicks-- > 0) { + return; + } + QueenFollowUp followUp = this.queuedQueenFollowUp; + switch (followUp) { + case FIREBALL_VOLLEY -> { + this.clearQueuedQueenFollowUp(); + this.primeDirectedFireballVolley(); + } + case LANDING -> { + if (this.queenLandingStage == QueenLandingStage.AERIAL + && this.isRoyalFlying()) { + this.clearQueuedQueenFollowUp(); + this.queenLandingCooldownTicks = 0; + } else if (--this.queuedQueenLandingRetryTicks <= 0) { + this.clearQueuedQueenFollowUp(); + } else { + this.queuedQueenFollowUpTicks = 0; + } + } + case ACCELERATION_VOLLEY -> { + this.clearQueuedQueenFollowUp(); + this.primeDirectedFireballVolley(); + this.queueQueenFollowUp(QueenFollowUp.LANDING, ACCELERATION_LANDING_DELAY); + } + case NONE -> { + } + } + } + + private void queueQueenFollowUp(QueenFollowUp followUp, int delayTicks) { + this.queuedQueenFollowUp = followUp; + this.queuedQueenFollowUpTicks = Math.max(0, delayTicks); + this.queuedQueenLandingRetryTicks = followUp == QueenFollowUp.LANDING + ? DIRECTED_LANDING_RETRY_TICKS : 0; + } + + private void clearQueuedQueenFollowUp() { + this.queuedQueenFollowUp = QueenFollowUp.NONE; + this.queuedQueenFollowUpTicks = 0; + this.queuedQueenLandingRetryTicks = 0; + } + + private void clearQueenAttackDirector() { + this.clearQueuedQueenFollowUp(); + this.directedFireballVolleyTicks = 0; + } + + private void primeDirectedFireballVolley() { + this.directedFireballVolleyTicks = 60; + this.stopRoyalBeamsForDirectedAttack(); + for (RoyalHead.Slot slot : RoyalHead.Slot.values()) { + int index = slot.ordinal(); + this.dreamFireballCooldownTicks[index] = 0; + this.attackScheduler.resetCooldown("dream_fireball_" + slot.name()); + } + } + + private void tickDirectedFireballVolley() { + if (this.directedFireballVolleyTicks <= 0 || this.isRoyalRecoveryActive()) { + return; + } + boolean allCommitted = true; + for (int cooldown : this.dreamFireballCooldownTicks) { + if (cooldown <= 0) { + allCommitted = false; + break; + } + } + if (allCommitted || --this.directedFireballVolleyTicks <= 0) { + this.directedFireballVolleyTicks = 0; + } + } + private void tickIdleWander() { if (this.idleWanderCooldownTicks-- > 0) { return; } this.idleWanderCooldownTicks = 80 + this.random.nextInt(80); + if (this.naturalTrailHome != null) { + double distanceSquared = this.distanceToSqr( + this.naturalTrailHome.getX() + 0.5D, + this.naturalTrailHome.getY() + 0.5D, + this.naturalTrailHome.getZ() + 0.5D + ); + if (distanceSquared > 48.0D * 48.0D) { + this.getMoveControl().setWantedPosition( + this.naturalTrailHome.getX() + 0.5D, + this.naturalTrailHome.getY() + 0.5D, + this.naturalTrailHome.getZ() + 0.5D, + 1.0D + ); + return; + } + double angle = this.random.nextDouble() * Mth.TWO_PI; + double radius = 6.0D + this.random.nextDouble() * 22.0D; + double wx = this.naturalTrailHome.getX() + 0.5D + Math.cos(angle) * radius; + double wz = this.naturalTrailHome.getZ() + 0.5D + Math.sin(angle) * radius; + double wy = this.naturalTrailHome.getY() - 2.0D - this.random.nextDouble() * 7.0D; + this.getMoveControl().setWantedPosition(wx, wy, wz, 0.7D); + return; + } double angle = this.random.nextDouble() * Mth.TWO_PI; double radius = 6.0D + this.random.nextDouble() * 14.0D; double wx = this.getX() + Math.cos(angle) * radius; @@ -209,11 +877,45 @@ public class QueenEntity extends RoyalBossEntity { this.getMoveControl().setWantedPosition(wx, this.groundYBelow(wx, wz), wz, 0.7D); } + @Nullable + public static QueenEntity spawnFromUndersideTrail(ServerLevel level, BlockPos spawnPos, BlockPos homePos, long siteId, float yaw) { + if (!ThoraxisUndersideManager.isThoraxis(level) || spawnPos.getY() >= 0) { + return null; + } + AABB siteBounds = new AABB(homePos).inflate(160.0D); + java.util.List existing = level.getEntitiesOfClass(QueenEntity.class, siteBounds, + queen -> queen.naturalTrailSiteId == siteId && queen.isAlive()); + if (!existing.isEmpty()) { + return existing.get(0); + } + if (!level.hasChunksAt(spawnPos.offset(-16, -2, -16), spawnPos.offset(16, 18, 16))) { + return null; + } + QueenEntity queen = AntarchyObjects.QUEEN.get().create(level); + if (queen == null) { + return null; + } + queen.moveTo(spawnPos.getX() + 0.5D, spawnPos.getY(), spawnPos.getZ() + 0.5D, yaw, 0.0F); + if (!level.noCollision(queen, queen.getBoundingBox())) { + return null; + } + queen.finalizeSpawn(level, level.getCurrentDifficultyAt(spawnPos), MobSpawnType.CHUNK_GENERATION, null, null); + queen.naturalTrailSiteId = siteId; + queen.naturalTrailHome = homePos.immutable(); + queen.setPersistenceRequired(); + queen.setNoGravity(false); + ThoraxisUndersideManager.applyUndersideInversion(queen); + GravityApi.setAirborneGravityDirection(queen, GravityDirection.UP, true, new GravityTransition(12)); + queen.resetFallDistance(); + return level.addFreshEntity(queen) ? queen : null; + } + private int cooldown(int base) { return this.royalEffects.active("acceleration") ? Math.max(20, base / 2) : base; } private void tickManticoreSummon() { + if (this.isRoyalRecoveryActive()) return; if (this.manticoreSummonCooldownTicks > 0) { this.manticoreSummonCooldownTicks--; return; @@ -240,41 +942,84 @@ public class QueenEntity extends RoyalBossEntity { ? this.cooldown(Math.max(20, AntarchySettings.queenManticoreSummonCooldownTicks())) : FAILED_SUMMON_RETRY_TICKS; if (spawned > 0) { - this.triggerAnim("body_action", "minion_spawn"); + this.startRoyalRecovery(45); + this.manticoreAnimationPending = true; this.playRoyalSound(AntarchySoundEvents.QUEEN_ROAR.get(), 0.8F + this.random.nextFloat() * 0.12F); serverLevel.sendParticles(ParticleTypes.PORTAL, this.getX(), this.getY() + 2.0D, this.getZ(), 36, 3.0D, 2.0D, 3.0D, 0.15D); } } + private void tickPendingManticoreAnimation() { + if (!this.manticoreAnimationPending + || !this.attackScheduler.ready("manticore_summon_animation", RoyalAttackLane.BODY)) { + return; + } + if (this.beginRoyalAttack("manticore_summon_animation", RoyalAttackLane.BODY, 1, 0, 1, + this.animationRecovery(59, 0, 1, 0), + new com.craisinlord.antarchy.content.entity.royal.attack.RoyalAttackScheduler.Action() { + @Override public void onStart() { + QueenEntity.this.manticoreAnimationPending = false; + QueenEntity.this.triggerAnim("body_action", "minion_spawn"); + } + })) { + this.manticoreAnimationPending = false; + } + } + private int spawnManticoreTears(ServerLevel level, LivingEntity target, int count) { int pairs = Math.max(1, Math.min(3, (count + 1) / 2)); int created = 0; + int remaining = count; + Vec3 towardTarget = target.position().subtract(this.position()).multiply(1.0D, 0.0D, 1.0D); + if (towardTarget.lengthSqr() < 1.0E-4D) { + towardTarget = this.getViewVector(1.0F).multiply(1.0D, 0.0D, 1.0D); + } + towardTarget = towardTarget.normalize(); + Vec3 behindTarget = target.position().add(towardTarget.scale(8.0D)); + Vec3 lateral = new Vec3(-towardTarget.z, 0.0D, towardTarget.x); + float tearYaw = (float) Math.toDegrees(Math.atan2(-towardTarget.x, towardTarget.z)); + double vertical = GravityApi.isGravityInverted(this) ? -2.0D : 2.0D; for (int i = 0; i < pairs; i++) { - double angle = this.random.nextDouble() * Mth.TWO_PI; - double distance = Math.max(8.0D, AntarchySettings.queenManticoreSummonRange() * 0.65D); - Vec3 firstPos = this.position().add(Math.cos(angle) * distance, 1.0D, Math.sin(angle) * distance); - Vec3 secondPos = this.position().add(Math.cos(angle + Math.PI) * distance, 1.0D, Math.sin(angle + Math.PI) * distance); + double forwardScatter = 3.0D + this.random.nextDouble() * 9.0D; + double lateralScatter = (this.random.nextDouble() * 2.0D - 1.0D) * 11.0D; + double heightScatter = (this.random.nextDouble() * 2.0D - 1.0D) * 3.0D; + Vec3 pairCenter = behindTarget + .add(towardTarget.scale(forwardScatter)) + .add(lateral.scale(lateralScatter)) + .add(0.0D, vertical + heightScatter, 0.0D); + double pairAngle = this.random.nextDouble() * Mth.TWO_PI; + Vec3 pairDirection = towardTarget.scale(Math.cos(pairAngle)) + .add(lateral.scale(Math.sin(pairAngle))); + double pairSeparation = 3.5D + this.random.nextDouble() * 3.0D; + Vec3 firstPos = pairCenter.add(pairDirection.scale(pairSeparation)); + Vec3 secondPos = pairCenter.add(pairDirection.scale(-pairSeparation)); + int firstCount = Math.min(3, (remaining + 1) / 2); + int secondCount = Math.min(3, remaining / 2); DimensionalTearEntity first = DimensionalTearEntity.createQueenManticoreTear(level, firstPos, - (float) Math.toDegrees(angle), 240, this.getUUID(), Math.min(3, count)); + tearYaw, 240, this.getUUID(), firstCount); DimensionalTearEntity second = DimensionalTearEntity.createQueenManticoreTear(level, secondPos, - (float) Math.toDegrees(angle + Math.PI), 240, this.getUUID(), Math.min(3, count)); + tearYaw, 240, this.getUUID(), secondCount); first.linkTo(second); second.linkTo(first); level.addFreshEntity(first); level.addFreshEntity(second); created++; + remaining -= firstCount + secondCount; } return created; } private void tickQueenAbilities() { + if (this.isRoyalRecoveryActive()) return; if (this.gravityStompCooldownTicks > 0) this.gravityStompCooldownTicks--; - if (this.timeFieldCooldownTicks > 0) this.timeFieldCooldownTicks--; if (this.momentumLockCooldownTicks > 0) this.momentumLockCooldownTicks--; if (this.crushingGravityCooldownTicks > 0) this.crushingGravityCooldownTicks--; if (this.accelerationCooldownTicks > 0) this.accelerationCooldownTicks--; + if (this.queenChronosphereCooldownTicks > 0) this.queenChronosphereCooldownTicks--; if (this.blackHoleCooldownTicks > 0) this.blackHoleCooldownTicks--; + if (this.debrisCycloneCooldownTicks > 0) this.debrisCycloneCooldownTicks--; + if (this.graviticUpheavalCooldownTicks > 0) this.graviticUpheavalCooldownTicks--; if (!(this.level() instanceof ServerLevel level)) { return; @@ -283,133 +1028,772 @@ public class QueenEntity extends RoyalBossEntity { if (target == null || !target.isAlive()) { return; } + if (this.queuedQueenFollowUp != QueenFollowUp.NONE || this.directedFireballVolleyTicks > 0) { + return; + } Phase phase = this.phase(); - boolean majorBusy = this.royalEffects.active("momentum_lock") || this.royalEffects.active("crushing_gravity"); - boolean allowOverlap = phase != Phase.ONE; - String[] candidates = phase == Phase.ONE - ? new String[] {"gravity_stomp", "time_field", "black_hole"} - : new String[] {"gravity_stomp", "time_field", "black_hole", "momentum_lock", "crushing_gravity", "acceleration"}; - String selected = this.attackScheduler.chooseWeighted(candidates, id -> { - if (!this.queenAttackReady(id, phase, majorBusy, allowOverlap)) return 0; - return switch (id) { - case "black_hole", "crushing_gravity" -> phase == Phase.THREE ? 5 : 3; - case "momentum_lock", "acceleration" -> phase == Phase.THREE ? 4 : 2; - default -> 4; - }; - }, this.random); + boolean accelerationBlocksMajor = this.royalEffects.active("acceleration") + && !this.pendingPhaseThreeChronosphere; + boolean majorBusy = this.royalEffects.active("momentum_lock") + || this.royalEffects.active("crushing_gravity") + || accelerationBlocksMajor + || this.royalEffects.active("gravitic_upheaval"); + String[] candidates = switch (phase) { + case ONE -> new String[] {"gravity_stomp", "black_hole"}; + case TWO -> new String[] {"gravity_stomp", "black_hole", "momentum_lock", "crushing_gravity", "debris_cyclone", "gravitic_upheaval"}; + case THREE -> new String[] {"gravity_stomp", "black_hole", "momentum_lock", "crushing_gravity", "acceleration", "queen_chronosphere", "debris_cyclone", "gravitic_upheaval"}; + }; + String forcedAttack = this.pendingPhaseSignature == Phase.TWO ? "momentum_lock" + : this.pendingPhaseSignature == Phase.THREE ? "acceleration" + : phase == Phase.TWO && this.pendingPhaseTwoCrushingGravity ? "crushing_gravity" + : phase == Phase.THREE && this.pendingPhaseThreeChronosphere ? "queen_chronosphere" : null; + String selected = forcedAttack != null + && this.queenAttackReady(forcedAttack, phase, majorBusy) + ? forcedAttack : this.attackScheduler.chooseWeighted(candidates, id -> { + if (!this.queenAttackReady(id, phase, majorBusy) + || id.equals(this.lastQueenMajorAttack)) return 0; + return this.queenAttackWeight(id, phase); + }, this.random); if (selected == null) return; int cooldown = switch (selected) { case "gravity_stomp" -> GRAVITY_STOMP_COOLDOWN; - case "time_field" -> TIME_FIELD_COOLDOWN; case "black_hole" -> BLACK_HOLE_COOLDOWN; case "momentum_lock" -> MOMENTUM_LOCK_COOLDOWN; case "crushing_gravity" -> CRUSHING_GRAVITY_COOLDOWN; + case "queen_chronosphere" -> QUEEN_CHRONOSPHERE_COOLDOWN; + case "debris_cyclone" -> DEBRIS_CYCLONE_COOLDOWN; + case "gravitic_upheaval" -> GRAVITIC_UPHEAVAL_COOLDOWN; default -> ACCELERATION_COOLDOWN; }; - if (!this.beginRoyalAttack(selected, RoyalAttackLane.HAZARD, this.cooldown(cooldown), - 10, 1, 14, new com.craisinlord.antarchy.content.entity.royal.attack.RoyalAttackScheduler.Action() { + RoyalAttackLane lane = "black_hole".equals(selected) ? RoyalAttackLane.CENTER_HEAD : RoyalAttackLane.HAZARD; + int actionWindup = this.queenAbilityWindup(selected); + int actionAnimationTicks = "momentum_lock".equals(selected) + || "crushing_gravity".equals(selected) || "acceleration".equals(selected) + || "queen_chronosphere".equals(selected) || "debris_cyclone".equals(selected) + || "gravitic_upheaval".equals(selected) ? 55 : 25; + int actionRecovery = this.animationRecovery(actionAnimationTicks, actionWindup, 1, 14); + if (!this.beginRoyalAttack(selected, lane, this.cooldown(cooldown), + actionWindup, 1, actionRecovery, new com.craisinlord.antarchy.content.entity.royal.attack.RoyalAttackScheduler.Action() { @Override public void onStart() { if ("gravity_stomp".equals(selected)) { QueenEntity.this.triggerAnim("body_action", "stomp"); - } else { - QueenEntity.this.triggerAnim("body_action", "wing_gust"); + } else if ("momentum_lock".equals(selected) + || "crushing_gravity".equals(selected) + || "acceleration".equals(selected) + || "queen_chronosphere".equals(selected) + || "debris_cyclone".equals(selected) + || "gravitic_upheaval".equals(selected)) { + QueenEntity.this.triggerAnim("wing_action", "wing_gust"); + } else if ("black_hole".equals(selected)) { + QueenEntity.this.royalHead(RoyalHead.Slot.CENTER).startShoot(); + QueenEntity.this.triggerAnim(RoyalHead.Slot.CENTER.controllerName(), "shoot"); } + QueenEntity.this.startQueenAbilityTelegraph(selected, target); } @Override public void onActive(int elapsedTicks) { - QueenEntity.this.performSelectedQueenAttack(selected, phase, cooldown, level, target); + QueenEntity.this.finishQueenAbilityTelegraph(selected); + if ("momentum_lock".equals(selected) || "crushing_gravity".equals(selected) + || "acceleration".equals(selected)) { + QueenEntity.this.spawnQueenWingPressure(level); + } + QueenEntity.this.performSelectedQueenAttack(selected, cooldown, level, target); + } + @Override public void onComplete() { + if ("black_hole".equals(selected)) { + QueenEntity.this.royalHead(RoyalHead.Slot.CENTER).stopShoot(); + } } })) return; - } - - private void performSelectedQueenAttack(String selected, Phase phase, int cooldown, - ServerLevel level, LivingEntity target) { - switch (selected) { - case "gravity_stomp" -> { this.gravityStompCooldownTicks = cooldown; this.performGravityStomp(level, target); } - case "time_field" -> { - this.timeFieldCooldownTicks = cooldown; - double fieldRate = phase == Phase.THREE ? 0.1D : 0.4D; - TimeDilationApi.createField(level, target.position(), 12.0D, fieldRate, 140 + phase.ordinal() * 40); + this.lastQueenMajorAttack = selected; + if (selected.equals(forcedAttack)) { + if ("momentum_lock".equals(selected) || "acceleration".equals(selected)) { + this.pendingPhaseSignature = null; + } else if ("crushing_gravity".equals(selected)) { + this.pendingPhaseTwoCrushingGravity = false; + } else if ("queen_chronosphere".equals(selected)) { + this.pendingPhaseThreeChronosphere = false; } - case "black_hole" -> { this.blackHoleCooldownTicks = cooldown; this.castBlackHole(level, target); } - case "momentum_lock" -> { this.momentumLockCooldownTicks = cooldown; this.startMomentumLock(level); } - case "crushing_gravity" -> { - this.crushingGravityCooldownTicks = cooldown; - this.royalEffects.start("crushing_gravity", CRUSHING_GRAVITY_DURATION, - () -> {}, this::tickCrushingGravity, () -> {}); - this.playRoyalSound(AntarchySoundEvents.QUEEN_ROAR.get(), 0.6F); - } - case "acceleration" -> { this.accelerationCooldownTicks = cooldown; this.startRoyalAcceleration(); } } } - private boolean queenAttackReady(String id, Phase phase, boolean majorBusy, boolean allowOverlap) { - if (!allowOverlap && majorBusy) return false; + private void performSelectedQueenAttack(String selected, int cooldown, + ServerLevel level, LivingEntity target) { + switch (selected) { + case "gravity_stomp" -> { + this.gravityStompCooldownTicks = cooldown; + this.performGravityStomp(level, target, false); + this.startRoyalRecovery(18); + } + case "black_hole" -> { + this.blackHoleCooldownTicks = cooldown; + this.castBlackHole(level, target); + this.startRoyalRecovery(16); + if (this.phase() == Phase.ONE) { + this.queueQueenFollowUp(QueenFollowUp.FIREBALL_VOLLEY, BLACK_HOLE_FOLLOW_UP_DELAY); + } + } + case "momentum_lock" -> { + this.momentumLockCooldownTicks = cooldown; + this.startMomentumLock(level); + this.queueQueenFollowUp(QueenFollowUp.FIREBALL_VOLLEY, MOMENTUM_VOLLEY_DELAY); + } + case "crushing_gravity" -> { + this.crushingGravityCooldownTicks = cooldown; + this.royalEffects.start("crushing_gravity", CRUSHING_GRAVITY_DURATION, + () -> {}, this::tickCrushingGravity, () -> this.startRoyalRecovery(35)); + this.playRoyalSound(AntarchySoundEvents.QUEEN_ROAR.get(), 0.6F); + if (this.phase() == Phase.TWO) { + this.queueQueenFollowUp(QueenFollowUp.LANDING, CRUSHING_LANDING_DELAY); + } + } + case "acceleration" -> { + this.accelerationCooldownTicks = cooldown; + this.startRoyalAcceleration(); + this.queueQueenFollowUp(QueenFollowUp.ACCELERATION_VOLLEY, ACCELERATION_VOLLEY_DELAY); + } + case "queen_chronosphere" -> { + this.queenChronosphereCooldownTicks = cooldown; + TimeDilationFieldEntity field = TimeDilationApi.createField(level, this.position(), + QUEEN_CHRONOSPHERE_RADIUS, QUEEN_CHRONOSPHERE_RATE, + QUEEN_CHRONOSPHERE_DURATION, this.getUUID()); + field.configureOwnerAnchored(this); + this.startRoyalRecovery(35); + } + case "debris_cyclone" -> { + this.debrisCycloneCooldownTicks = cooldown; + this.performDebrisCycloneLaunch(level, target); + this.startRoyalRecovery(20); + } + case "gravitic_upheaval" -> { + this.graviticUpheavalCooldownTicks = cooldown; + this.startGraviticUpheaval(level); + } + } + } + + private void spawnQueenWingPressure(ServerLevel level) { + GravityDirection gravity = GravityApi.getGravityDirection(this); + for (int ring = 1; ring <= 3; ring++) { + double radius = ring * 3.2D; + int samples = 14 + ring * 4; + for (int sample = 0; sample < samples; sample++) { + double angle = Mth.TWO_PI * sample / samples; + double localX = Math.cos(angle) * radius; + double localZ = Math.sin(angle) * radius; + Vec3 point = this.position().add(GravityRotationUtil.vecPlayerToWorld( + localX, this.getBbHeight() * 0.45D, localZ, gravity)); + Vec3 velocity = GravityRotationUtil.vecPlayerToWorld( + Math.cos(angle) * 0.2D, 0.025D, Math.sin(angle) * 0.2D, gravity); + level.sendParticles(ACCEL_DUST, point.x, point.y, point.z, + 0, velocity.x, velocity.y, velocity.z, 1.0D); + } + } + } + + private boolean queenAttackReady(String id, Phase phase, boolean majorBusy) { + if (majorBusy) return false; return switch (id) { - case "gravity_stomp" -> this.gravityStompCooldownTicks <= 0; - case "time_field" -> this.timeFieldCooldownTicks <= 0; - case "black_hole" -> this.blackHoleCooldownTicks <= 0; + case "gravity_stomp" -> this.gravityStompCooldownTicks <= 0 + && !this.isRoyalFlying() && this.queenLandingStage == QueenLandingStage.GROUND_COMBAT; + case "black_hole" -> this.blackHoleCooldownTicks <= 0 + && this.royalHead(RoyalHead.Slot.CENTER).readyToAttack() + && !this.attackScheduler.laneBusy(RoyalAttackLane.CENTER_HEAD); case "momentum_lock" -> !this.royalEffects.active("momentum_lock") && this.momentumLockCooldownTicks <= 0; case "crushing_gravity" -> phase != Phase.ONE && !this.royalEffects.active("crushing_gravity") && this.crushingGravityCooldownTicks <= 0; case "acceleration" -> phase == Phase.THREE && !this.royalEffects.active("acceleration") && this.accelerationCooldownTicks <= 0; + case "queen_chronosphere" -> phase == Phase.THREE && this.queenChronosphereCooldownTicks <= 0; + case "debris_cyclone" -> this.debrisCycloneCooldownTicks <= 0; + case "gravitic_upheaval" -> phase != Phase.ONE && this.graviticUpheavalCooldownTicks <= 0 + && !this.royalEffects.active("gravitic_upheaval"); default -> false; }; } - private void tickFinalTimeControl() { - if (this.phase() != Phase.THREE || !(this.level() instanceof ServerLevel level)) { + private int queenAttackWeight(String id, Phase phase) { + return switch (phase) { + case ONE -> "black_hole".equals(id) ? 6 : 3; + case TWO -> switch (id) { + case "crushing_gravity" -> 12; + case "momentum_lock" -> 7; + case "debris_cyclone" -> 5; + case "gravitic_upheaval" -> 4; + case "gravity_stomp" -> 3; + case "black_hole" -> 2; + default -> 0; + }; + case THREE -> switch (id) { + case "acceleration" -> 7; + case "queen_chronosphere", "crushing_gravity" -> 10; + case "black_hole" -> 5; + case "debris_cyclone", "gravitic_upheaval" -> 5; + case "gravity_stomp" -> 4; + case "momentum_lock" -> 7; + default -> 0; + }; + }; + } + + private void tickFinalAcceleration() { + if (this.phase() != Phase.THREE) { return; } if (!this.royalEffects.active("acceleration") && this.accelerationCooldownTicks <= 0) { - this.startRoyalAcceleration(); - } - if (this.finalTimeControlTicks-- <= 0) { - this.finalTimeControlTicks = AntarchySettings.queenFinalTimeFieldCooldownTicks(); - LivingEntity target = this.getTarget(); - if (target != null && target.isAlive()) { - TimeDilationApi.createField(level, target.position(), AntarchySettings.queenFinalTimeFieldRadius(), - AntarchySettings.queenFinalTimeFieldRate(), AntarchySettings.queenFinalTimeFieldDurationTicks()); - } + this.pendingPhaseSignature = Phase.THREE; } } private void performGravityStomp(ServerLevel level, LivingEntity target) { - this.triggerAnim("body_action", "stomp"); + this.performGravityStomp(level, target, true); + } + + private void performGravityStomp(ServerLevel level, LivingEntity target, boolean triggerAnimation) { + if (triggerAnimation) { + this.triggerAnim("body_action", "stomp"); + } this.playRoyalSound(AntarchySoundEvents.QUEEN_ROAR.get(), 0.7F); DamageSource source = this.damageSources().mobAttack(this); for (LivingEntity living : level.getEntitiesOfClass(LivingEntity.class, - this.getBoundingBox().inflate(18.0D), entity -> entity instanceof Player && entity.isAlive())) { + this.getBoundingBox().inflate(18.0D), this::canDamageWithRoyalAttack)) { double distance = Math.max(1.0D, living.distanceTo(this)); - living.hurt(source, (float) (12.0D * Math.max(0.25D, 1.0D - distance / 24.0D))); + living.hurt(source, this.scaleRoyalDamage(12.0D * Math.max(0.25D, 1.0D - distance / 24.0D))); Vec3 push = living.position().subtract(this.position()).normalize().scale(1.3D); - living.setDeltaMovement(living.getDeltaMovement().add(push.x, 0.65D, push.z)); + Vec3 vertical = GravityRotationUtil.vecPlayerToWorld( + 0.0D, 0.65D, 0.0D, GravityApi.getGravityDirection(living)); + this.addGravityAwareImpulse(living, new Vec3(push.x, 0.0D, push.z).add(vertical)); living.hasImpulse = true; } - level.sendParticles(ParticleTypes.SONIC_BOOM, this.getX(), this.getY() + 1.0D, this.getZ(), 4, 2.0D, 0.5D, 2.0D, 0.0D); + level.sendParticles(ParticleTypes.EXPLOSION, this.getX(), this.getY() + 1.0D, this.getZ(), + 18, 5.0D, 0.6D, 5.0D, 0.08D); } private void castBlackHole(ServerLevel level, LivingEntity target) { - Vec3 anchor = target.position().add( - (this.random.nextDouble() - 0.5D) * 4.0D, - 2.0D + this.random.nextDouble() * 2.0D, - (this.random.nextDouble() - 0.5D) * 4.0D); - RoyalBlackHoleEntity hole = RoyalBlackHoleEntity.create(level, anchor, this.getUUID()); + Vec3 anchor = this.pendingBlackHoleAnchor != null + ? this.pendingBlackHoleAnchor : this.selectBlackHoleAnchor(target); + this.pendingBlackHoleAnchor = null; + Vec3 mouth = this.beamAnchor(this.royalHead(RoyalHead.Slot.CENTER)); + RoyalBlackHoleEntity hole = RoyalBlackHoleEntity.createProjectile(level, mouth, anchor, this.getUUID()); level.addFreshEntity(hole); - this.triggerAnim("body_action", "wing_gust"); this.playRoyalSound(AntarchySoundEvents.QUEEN_ROAR.get(), 1.0F); - level.sendParticles(ParticleTypes.REVERSE_PORTAL, anchor.x, anchor.y, anchor.z, 60, 1.0D, 1.0D, 1.0D, 0.4D); + level.sendParticles(ParticleTypes.REVERSE_PORTAL, mouth.x, mouth.y, mouth.z, + 30, 0.6D, 0.6D, 0.6D, 0.25D); + } + + private Vec3 selectBlackHoleAnchor(LivingEntity target) { + double vertical = 2.0D + this.random.nextDouble() * 2.0D; + if (GravityApi.isGravityInverted(this)) { + vertical = -vertical; + } + return target.position().add( + (this.random.nextDouble() - 0.5D) * 4.0D, + vertical, + (this.random.nextDouble() - 0.5D) * 4.0D); + } + + private int queenAbilityWindup(String ability) { + return switch (ability) { + case "gravity_stomp" -> GRAVITY_STOMP_TELEGRAPH_TICKS; + case "black_hole" -> BLACK_HOLE_TELEGRAPH_TICKS; + case "momentum_lock" -> MOMENTUM_LOCK_TELEGRAPH_TICKS; + case "crushing_gravity" -> CRUSHING_GRAVITY_TELEGRAPH_TICKS; + case "acceleration" -> ACCELERATION_TELEGRAPH_TICKS; + case "queen_chronosphere" -> 40; + case "debris_cyclone" -> DEBRIS_CYCLONE_TELEGRAPH_TICKS; + case "gravitic_upheaval" -> GRAVITIC_UPHEAVAL_TELEGRAPH_TICKS; + default -> 10; + }; + } + + private void startQueenAbilityTelegraph(String ability, LivingEntity target) { + switch (ability) { + case "gravity_stomp" -> { + this.gravityStompTelegraphTicks = GRAVITY_STOMP_TELEGRAPH_TICKS; + this.playRoyalSound(AntarchySoundEvents.QUEEN_ROAR.get(), 0.82F); + } + case "black_hole" -> { + this.pendingBlackHoleAnchor = this.selectBlackHoleAnchor(target); + this.blackHoleTelegraphTicks = BLACK_HOLE_TELEGRAPH_TICKS; + this.playRoyalSound(AntarchySoundEvents.QUEEN_ROAR.get(), 0.48F); + } + case "momentum_lock" -> { + this.momentumLockTelegraphTicks = MOMENTUM_LOCK_TELEGRAPH_TICKS; + this.playRoyalSound(AntarchySoundEvents.QUEEN_ROAR.get(), 0.58F); + } + case "crushing_gravity" -> { + this.crushingGravityTelegraphTicks = CRUSHING_GRAVITY_TELEGRAPH_TICKS; + this.playRoyalSound(AntarchySoundEvents.QUEEN_ROAR.get(), 0.42F); + } + case "acceleration" -> { + this.accelerationTelegraphTicks = ACCELERATION_TELEGRAPH_TICKS; + this.playRoyalSound(AntarchySoundEvents.QUEEN_ROAR.get(), 1.22F); + } + case "queen_chronosphere" -> { + this.queenChronosphereTelegraphTicks = 40; + this.playRoyalSound(AntarchySoundEvents.QUEEN_ROAR.get(), 0.85F); + } + case "debris_cyclone" -> { + this.debrisCycloneTelegraphTicks = DEBRIS_CYCLONE_TELEGRAPH_TICKS; + if (this.level() instanceof ServerLevel level) { + this.gatherDebrisCycloneBlocks(level); + } + this.playRoyalSound(AntarchySoundEvents.QUEEN_ROAR.get(), 0.9F); + } + case "gravitic_upheaval" -> { + this.graviticUpheavalTelegraphTicks = GRAVITIC_UPHEAVAL_TELEGRAPH_TICKS; + this.playRoyalSound(AntarchySoundEvents.QUEEN_ROAR.get(), 0.5F); + } + } + } + + private void finishQueenAbilityTelegraph(String ability) { + switch (ability) { + case "gravity_stomp" -> this.gravityStompTelegraphTicks = 0; + case "black_hole" -> this.blackHoleTelegraphTicks = 0; + case "momentum_lock" -> this.momentumLockTelegraphTicks = 0; + case "crushing_gravity" -> this.crushingGravityTelegraphTicks = 0; + case "acceleration" -> this.accelerationTelegraphTicks = 0; + case "queen_chronosphere" -> this.queenChronosphereTelegraphTicks = 0; + case "debris_cyclone" -> this.debrisCycloneTelegraphTicks = 0; + case "gravitic_upheaval" -> this.graviticUpheavalTelegraphTicks = 0; + } + } + + private boolean isQueenAbilityTelegraphActive() { + return this.gravityStompTelegraphTicks > 0 || this.blackHoleTelegraphTicks > 0 + || this.momentumLockTelegraphTicks > 0 || this.crushingGravityTelegraphTicks > 0 + || this.accelerationTelegraphTicks > 0 || this.queenChronosphereTelegraphTicks > 0 + || this.debrisCycloneTelegraphTicks > 0 || this.graviticUpheavalTelegraphTicks > 0; + } + + private void clearQueenAbilityTelegraphs() { + this.gravityStompTelegraphTicks = 0; + this.blackHoleTelegraphTicks = 0; + this.momentumLockTelegraphTicks = 0; + this.crushingGravityTelegraphTicks = 0; + this.accelerationTelegraphTicks = 0; + this.queenChronosphereTelegraphTicks = 0; + this.debrisCycloneTelegraphTicks = 0; + this.graviticUpheavalTelegraphTicks = 0; + this.pendingBlackHoleAnchor = null; + this.discardDebrisCycloneBlocks(); + } + + private void tickQueenAbilityTelegraphs() { + if (!this.isQueenAbilityTelegraphActive() || !(this.level() instanceof ServerLevel level)) { + return; + } + this.getNavigation().stop(); + this.setDeltaMovement(Vec3.ZERO); + this.tickGravityStompTelegraph(level); + this.tickBlackHoleTelegraph(level); + this.tickMomentumLockTelegraph(level); + this.tickCrushingGravityTelegraph(level); + this.tickAccelerationTelegraph(level); + this.tickQueenChronosphereTelegraph(level); + this.tickDebrisCycloneTelegraph(level); + this.tickGraviticUpheavalTelegraph(level); + } + + private void tickGravityStompTelegraph(ServerLevel level) { + if (this.gravityStompTelegraphTicks <= 0) return; + int elapsed = GRAVITY_STOMP_TELEGRAPH_TICKS - this.gravityStompTelegraphTicks; + if (this.tickCount % 2 == 0) { + double radius = Mth.lerp(elapsed / (double) GRAVITY_STOMP_TELEGRAPH_TICKS, 3.0D, 18.0D); + Vec3 surfaceCenter = this.position().add(GravityRotationUtil.vecPlayerToWorld( + 0.0D, 0.2D, 0.0D, GravityApi.getGravityDirection(this))); + this.spawnQueenTelegraphSpokes(level, surfaceCenter, radius); + } + this.playQueenTelegraphBeat(level, this.gravityStompTelegraphTicks, + GRAVITY_STOMP_TELEGRAPH_TICKS, 0.72F); + this.gravityStompTelegraphTicks--; + } + + private void tickBlackHoleTelegraph(ServerLevel level) { + if (this.blackHoleTelegraphTicks <= 0 || this.pendingBlackHoleAnchor == null) return; + int elapsed = BLACK_HOLE_TELEGRAPH_TICKS - this.blackHoleTelegraphTicks; + double progress = elapsed / (double) BLACK_HOLE_TELEGRAPH_TICKS; + double fieldRadius = Math.max(4.0D, AntarchySettings.queenBlackHoleRadius()); + if (this.tickCount % 2 == 0) { + this.spawnQueenTelegraphRing(level, this.pendingBlackHoleAnchor, fieldRadius, 40, ParticleTypes.WITCH); + this.spawnBlackHoleFunnel(level, this.pendingBlackHoleAnchor, fieldRadius, progress); + level.sendParticles(AntarchyObjects.LUCID_BOLT_IMPACT_LARGE.get(), + this.pendingBlackHoleAnchor.x, this.pendingBlackHoleAnchor.y, this.pendingBlackHoleAnchor.z, + 2, 0.12D, 0.12D, 0.12D, 0.01D); + } + this.playQueenTelegraphBeat(level, this.blackHoleTelegraphTicks, + BLACK_HOLE_TELEGRAPH_TICKS, 0.48F); + this.blackHoleTelegraphTicks--; + } + + private void tickMomentumLockTelegraph(ServerLevel level) { + if (this.momentumLockTelegraphTicks <= 0) return; + int elapsed = MOMENTUM_LOCK_TELEGRAPH_TICKS - this.momentumLockTelegraphTicks; + if (this.tickCount % 2 == 0) { + this.spawnMomentumLockCage(level, elapsed / (double) MOMENTUM_LOCK_TELEGRAPH_TICKS); + } + if (this.momentumLockTelegraphTicks <= 14) { + for (LivingEntity living : level.getEntitiesOfClass(LivingEntity.class, + this.queenEffectBounds(MOMENTUM_LOCK_RADIUS), + living -> this.canDamageWithRoyalAttack(living) + && this.withinQueenEffectRange(living, MOMENTUM_LOCK_RADIUS))) { + this.spawnMomentumTargetCage(level, living); + if (this.momentumLockTelegraphTicks == 12) { + NightmareBiteEntity.spawnTelegraphAt(level, living, true); + } + } + } + if (this.momentumLockTelegraphTicks == 40 || this.momentumLockTelegraphTicks == 20 + || this.momentumLockTelegraphTicks == 10 || this.momentumLockTelegraphTicks == 4) { + float pitch = 0.65F + elapsed / (float) MOMENTUM_LOCK_TELEGRAPH_TICKS; + level.playSound(null, this.blockPosition(), SoundEvents.BEACON_POWER_SELECT, + SoundSource.HOSTILE, 2.0F, pitch); + } + this.momentumLockTelegraphTicks--; + } + + private void tickCrushingGravityTelegraph(ServerLevel level) { + if (this.crushingGravityTelegraphTicks <= 0) return; + int elapsed = CRUSHING_GRAVITY_TELEGRAPH_TICKS - this.crushingGravityTelegraphTicks; + double progress = elapsed / (double) CRUSHING_GRAVITY_TELEGRAPH_TICKS; + if (this.tickCount % 2 == 0) { + for (LivingEntity living : level.getEntitiesOfClass(LivingEntity.class, + this.queenEffectBounds(CRUSHING_GRAVITY_RADIUS), + living -> this.canDamageWithRoyalAttack(living) + && this.withinQueenEffectRange(living, CRUSHING_GRAVITY_RADIUS))) { + double downSign = GravityApi.isGravityInverted(living) ? 1.0D : -1.0D; + this.spawnCrushingGravityArrow(level, living, downSign, progress); + } + } + if (elapsed % 7 == 0) { + level.playSound(null, this.blockPosition(), SoundEvents.BEACON_AMBIENT, + SoundSource.HOSTILE, 1.8F, 0.55F + (float) progress * 0.35F); + } + this.crushingGravityTelegraphTicks--; + } + + private void tickAccelerationTelegraph(ServerLevel level) { + if (this.accelerationTelegraphTicks <= 0) return; + int elapsed = ACCELERATION_TELEGRAPH_TICKS - this.accelerationTelegraphTicks; + double progress = elapsed / (double) ACCELERATION_TELEGRAPH_TICKS; + this.spawnAccelerationHelix(level, progress); + this.playQueenTelegraphBeat(level, this.accelerationTelegraphTicks, + ACCELERATION_TELEGRAPH_TICKS, 1.0F); + this.accelerationTelegraphTicks--; + } + + private void tickQueenChronosphereTelegraph(ServerLevel level) { + if (this.queenChronosphereTelegraphTicks <= 0) return; + int elapsed = 40 - this.queenChronosphereTelegraphTicks; + Vec3 center = this.position().add(0.0D, this.getBbHeight() * 0.5D, 0.0D); + if (this.tickCount % 2 == 0) { + double radius = Mth.lerp(elapsed / 40.0D, 3.0D, QUEEN_CHRONOSPHERE_RADIUS); + this.spawnQueenTelegraphRing(level, center, radius, 96, ParticleTypes.REVERSE_PORTAL); + } + this.playQueenTelegraphBeat(level, this.queenChronosphereTelegraphTicks, 40, 0.5F); + this.queenChronosphereTelegraphTicks--; + } + + private void gatherDebrisCycloneBlocks(ServerLevel level) { + this.discardDebrisCycloneBlocks(); + if (!level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) { + return; + } + Vec3 center = this.position(); + double radius = DEBRIS_CYCLONE_GATHER_RADIUS; + int gathered = 0; + for (int attempt = 0; attempt < 140 && gathered < DEBRIS_CYCLONE_BLOCK_COUNT; attempt++) { + BlockPos pos = BlockPos.containing( + center.x + (this.random.nextDouble() * 2.0D - 1.0D) * radius, + center.y + (this.random.nextDouble() * 2.0D - 1.0D) * radius * 0.6D, + center.z + (this.random.nextDouble() * 2.0D - 1.0D) * radius); + if (pos.distToCenterSqr(center.x, center.y, center.z) > radius * radius + || pos.getY() < level.getMinBuildHeight() || pos.getY() >= level.getMaxBuildHeight()) { + continue; + } + BlockState state = level.getBlockState(pos); + if (!state.is(AntarchyTags.Blocks.QUEEN_GRABBABLE_BLOCKS) || level.getBlockEntity(pos) != null + || state.getDestroySpeed(level, pos) < 0.0F || state.getCollisionShape(level, pos).isEmpty()) { + continue; + } + FallingBlockEntity block = FallingBlockEntity.fall(level, pos, state); + if (block == null) { + continue; + } + block.setNoGravity(true); + block.setDeltaMovement(Vec3.ZERO); + block.hurtMarked = true; + this.debrisCycloneBlocks.add(block); + gathered++; + } + } + + private void discardDebrisCycloneBlocks() { + for (FallingBlockEntity block : this.debrisCycloneBlocks) { + if (block.isAlive()) { + block.discard(); + } + } + this.debrisCycloneBlocks.clear(); + } + + private void tickDebrisCycloneTelegraph(ServerLevel level) { + if (this.debrisCycloneTelegraphTicks <= 0) return; + int elapsed = DEBRIS_CYCLONE_TELEGRAPH_TICKS - this.debrisCycloneTelegraphTicks; + double progress = elapsed / (double) DEBRIS_CYCLONE_TELEGRAPH_TICKS; + double orbitRadius = Mth.lerp(Math.min(1.0D, progress * 1.6D), 1.0D, DEBRIS_CYCLONE_ORBIT_RADIUS); + double spinSpeed = Mth.lerp(progress, 0.12D, 0.55D); + int count = this.debrisCycloneBlocks.size(); + GravityDirection gravity = GravityApi.getGravityDirection(this); + for (int index = 0; index < count; index++) { + FallingBlockEntity block = this.debrisCycloneBlocks.get(index); + if (!block.isAlive()) continue; + double angle = spinSpeed * this.tickCount + Mth.TWO_PI * index / Math.max(1, count); + double localX = Math.cos(angle) * orbitRadius; + double localZ = Math.sin(angle) * orbitRadius; + double localY = this.getBbHeight() * 0.5D + Math.sin(this.tickCount * 0.1D + index) * 0.4D; + Vec3 point = this.position().add(GravityRotationUtil.vecPlayerToWorld(localX, localY, localZ, gravity)); + block.setPos(point.x - 0.5D, point.y - 0.5D, point.z - 0.5D); + block.setDeltaMovement(Vec3.ZERO); + if (this.tickCount % 2 == 0) { + level.sendParticles(ParticleTypes.CRIT, point.x, point.y, point.z, 2, 0.15D, 0.15D, 0.15D, 0.01D); + } + } + this.playQueenTelegraphBeat(level, this.debrisCycloneTelegraphTicks, DEBRIS_CYCLONE_TELEGRAPH_TICKS, 0.9F); + this.debrisCycloneTelegraphTicks--; + } + + private void performDebrisCycloneLaunch(ServerLevel level, LivingEntity target) { + Vec3 aimPoint = target.position().add(0.0D, target.getBbHeight() * 0.5D, 0.0D); + for (FallingBlockEntity block : this.debrisCycloneBlocks) { + if (!block.isAlive()) continue; + Vec3 toTarget = aimPoint.subtract(block.position()); + double distance = Math.max(1.0D, toTarget.length()); + Vec3 launch = toTarget.normalize().scale(DEBRIS_CYCLONE_LAUNCH_SPEED) + .add(0.0D, Math.min(0.35D, distance * 0.03D), 0.0D); + block.setNoGravity(false); + block.setDeltaMovement(launch); + block.setHurtsEntities(DEBRIS_CYCLONE_BLOCK_DAMAGE_PER_DISTANCE, DEBRIS_CYCLONE_BLOCK_MAX_DAMAGE); + block.hurtMarked = true; + } + this.debrisCycloneBlocks.clear(); + this.playRoyalSound(AntarchySoundEvents.QUEEN_ROAR.get(), 1.05F); + level.sendParticles(ParticleTypes.EXPLOSION, this.getX(), this.getY() + this.getBbHeight() * 0.5D, this.getZ(), + 4, 0.6D, 0.6D, 0.6D, 0.02D); + } + + private void tickGraviticUpheavalTelegraph(ServerLevel level) { + if (this.graviticUpheavalTelegraphTicks <= 0) return; + int elapsed = GRAVITIC_UPHEAVAL_TELEGRAPH_TICKS - this.graviticUpheavalTelegraphTicks; + if (this.tickCount % 3 == 0) { + double progress = elapsed / (double) GRAVITIC_UPHEAVAL_TELEGRAPH_TICKS; + double radius = Mth.lerp(progress, 4.0D, GRAVITIC_UPHEAVAL_RADIUS); + this.spawnQueenTelegraphRing(level, this.position(), radius, 48, ParticleTypes.REVERSE_PORTAL); + } + this.playQueenTelegraphBeat(level, this.graviticUpheavalTelegraphTicks, GRAVITIC_UPHEAVAL_TELEGRAPH_TICKS, 0.5F); + this.graviticUpheavalTelegraphTicks--; + } + + private void startGraviticUpheaval(ServerLevel level) { + this.graviticUpheavalBlocks.clear(); + this.playRoyalSound(AntarchySoundEvents.QUEEN_ROAR.get(), 0.75F); + if (level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) { + Vec3 center = this.position(); + boolean inverted = GravityApi.isGravityInverted(this); + int gathered = 0; + for (int attempt = 0; attempt < GRAVITIC_UPHEAVAL_BLOCK_COUNT * 3 + && gathered < GRAVITIC_UPHEAVAL_BLOCK_COUNT; attempt++) { + double angle = this.random.nextDouble() * Mth.TWO_PI; + double radius = this.random.nextDouble() * GRAVITIC_UPHEAVAL_RADIUS; + double x = center.x + Math.cos(angle) * radius; + double z = center.z + Math.sin(angle) * radius; + BlockPos pos = BlockPos.containing(x, this.groundYBelow(x, z), z); + BlockState state = level.getBlockState(pos); + if (!state.is(AntarchyTags.Blocks.QUEEN_GRABBABLE_BLOCKS) || level.getBlockEntity(pos) != null + || state.getDestroySpeed(level, pos) < 0.0F || state.getCollisionShape(level, pos).isEmpty()) { + continue; + } + FallingBlockEntity block = FallingBlockEntity.fall(level, pos, state); + if (block == null) { + continue; + } + block.setNoGravity(true); + double upward = 0.35D + this.random.nextDouble() * GRAVITIC_UPHEAVAL_RISE_SPEED; + block.setDeltaMovement( + (this.random.nextDouble() - 0.5D) * 0.06D, + inverted ? -upward : upward, + (this.random.nextDouble() - 0.5D) * 0.06D); + block.hurtMarked = true; + this.graviticUpheavalBlocks.add(block); + gathered++; + } + } + this.graviticUpheavalAgeTicks = 0; + this.royalEffects.start("gravitic_upheaval", GRAVITIC_UPHEAVAL_DURATION, + () -> {}, this::tickGraviticUpheaval, this::endGraviticUpheaval); + } + + private void tickGraviticUpheaval() { + this.graviticUpheavalAgeTicks++; + boolean shouldFall = this.graviticUpheavalAgeTicks >= GRAVITIC_UPHEAVAL_RISE_TICKS; + for (FallingBlockEntity block : this.graviticUpheavalBlocks) { + if (!block.isAlive() || !shouldFall || !block.isNoGravity()) continue; + block.setNoGravity(false); + block.setHurtsEntities(1.6F, 20); + } + if (this.level() instanceof ServerLevel level && this.tickCount % 5 == 0) { + level.sendParticles(ParticleTypes.REVERSE_PORTAL, this.getX(), this.getY(), this.getZ(), + 6, GRAVITIC_UPHEAVAL_RADIUS * 0.5D, 1.0D, GRAVITIC_UPHEAVAL_RADIUS * 0.5D, 0.01D); + } + } + + private void endGraviticUpheaval() { + this.graviticUpheavalBlocks.clear(); + this.startRoyalRecovery(30); + } + + private void spawnQueenTelegraphSpokes(ServerLevel level, Vec3 center, double radius) { + int spokes = 10; + int segments = 6; + for (int spoke = 0; spoke < spokes; spoke++) { + double angle = Mth.TWO_PI * spoke / spokes; + for (int segment = 1; segment <= segments; segment++) { + double distance = radius * segment / segments; + level.sendParticles(ParticleTypes.CRIT, + center.x + Math.cos(angle) * distance, center.y, + center.z + Math.sin(angle) * distance, + 1, 0.08D, 0.02D, 0.08D, 0.0D); + } + } + level.sendParticles(ParticleTypes.LARGE_SMOKE, center.x, center.y, center.z, + 3, 0.7D, 0.05D, 0.7D, 0.015D); + } + + private void spawnBlackHoleFunnel(ServerLevel level, Vec3 center, double fieldRadius, double progress) { + double rotation = this.tickCount * 0.35D; + GravityDirection gravity = GravityApi.getGravityDirection(this); + for (int tier = 0; tier < 4; tier++) { + double tierProgress = tier / 3.0D; + double radius = Mth.lerp(progress, fieldRadius * (0.25D + tierProgress * 0.5D), 0.7D); + double localY = -1.5D + tierProgress * 4.5D; + for (int point = 0; point < 10; point++) { + double angle = rotation + tier * 0.65D + Mth.TWO_PI * point / 10.0D; + Vec3 particlePos = center.add(GravityRotationUtil.vecPlayerToWorld( + Math.cos(angle) * radius, localY, Math.sin(angle) * radius, gravity)); + level.sendParticles(ParticleTypes.REVERSE_PORTAL, + particlePos.x, particlePos.y, particlePos.z, + 1, 0.0D, 0.0D, 0.0D, 0.0D); + } + } + } + + private void spawnMomentumLockCage(ServerLevel level, double progress) { + double halfHeight = Mth.lerp(progress, 1.5D, 6.0D); + double centerY = this.getY(0.45D); + for (int pillar = 0; pillar < 8; pillar++) { + double angle = Mth.TWO_PI * pillar / 8.0D; + double x = this.getX() + Math.cos(angle) * MOMENTUM_LOCK_RADIUS; + double z = this.getZ() + Math.sin(angle) * MOMENTUM_LOCK_RADIUS; + for (int segment = 0; segment < 7; segment++) { + double y = centerY - halfHeight + segment * halfHeight / 3.0D; + level.sendParticles(ParticleTypes.END_ROD, x, y, z, + 1, 0.0D, 0.0D, 0.0D, 0.0D); + } + } + } + + private void spawnMomentumTargetCage(ServerLevel level, LivingEntity living) { + double centerY = living.getY(0.5D); + double halfHeight = living.getBbHeight() * 0.7D + 0.6D; + for (int corner = 0; corner < 4; corner++) { + double angle = Math.PI / 4.0D + Math.PI / 2.0D * corner; + double x = living.getX() + Math.cos(angle) * 0.9D; + double z = living.getZ() + Math.sin(angle) * 0.9D; + for (int segment = -1; segment <= 1; segment++) { + level.sendParticles(ParticleTypes.END_ROD, x, + centerY + segment * halfHeight, z, + 1, 0.0D, 0.0D, 0.0D, 0.0D); + } + } + } + + private void spawnCrushingGravityArrow(ServerLevel level, LivingEntity living, + double downSign, double progress) { + double centerY = living.getY(0.5D); + double shaftStartY = centerY - downSign * Mth.lerp(progress, 7.0D, 4.5D); + for (int segment = 0; segment < 6; segment++) { + level.sendParticles(ParticleTypes.REVERSE_PORTAL, living.getX(), + shaftStartY + downSign * segment * 0.75D, living.getZ(), + 1, 0.04D, 0.02D, 0.04D, 0.0D); + } + double tipY = shaftStartY + downSign * 4.5D; + double headY = tipY - downSign * 0.85D; + level.sendParticles(ParticleTypes.WITCH, living.getX() + 0.7D, headY, living.getZ(), + 1, 0.0D, 0.0D, 0.0D, 0.0D); + level.sendParticles(ParticleTypes.WITCH, living.getX() - 0.7D, headY, living.getZ(), + 1, 0.0D, 0.0D, 0.0D, 0.0D); + level.sendParticles(ParticleTypes.WITCH, living.getX(), headY, living.getZ() + 0.7D, + 1, 0.0D, 0.0D, 0.0D, 0.0D); + level.sendParticles(ParticleTypes.WITCH, living.getX(), headY, living.getZ() - 0.7D, + 1, 0.0D, 0.0D, 0.0D, 0.0D); + level.sendParticles(AntarchyObjects.LUCID_BOLT_IMPACT_SMALL.get(), + living.getX(), tipY, living.getZ(), 1, 0.05D, 0.05D, 0.05D, 0.0D); + } + + private void spawnAccelerationHelix(ServerLevel level, double progress) { + double rotation = this.tickCount * Mth.lerp(progress, 0.24D, 0.62D); + double radius = Mth.lerp(progress, 2.8D, 0.75D); + GravityDirection gravity = GravityApi.getGravityDirection(this); + for (int strand = 0; strand < 2; strand++) { + for (int segment = 0; segment < 9; segment++) { + double heightProgress = segment / 8.0D; + double angle = rotation + strand * Math.PI + heightProgress * Mth.TWO_PI * 1.5D; + double localY = 0.4D + heightProgress * (this.getBbHeight() + 2.0D); + Vec3 particlePos = this.position().add(GravityRotationUtil.vecPlayerToWorld( + Math.cos(angle) * radius, localY, Math.sin(angle) * radius, gravity)); + level.sendParticles(AntarchyObjects.LUCID_BOLT_IMPACT_SMALL.get(), + particlePos.x, particlePos.y, particlePos.z, + 1, 0.02D, 0.02D, 0.02D, 0.0D); + if (segment % 2 == 0) { + level.sendParticles(ACCEL_DUST, particlePos.x, particlePos.y, particlePos.z, + 1, 0.0D, 0.0D, 0.0D, 0.0D); + } + } + } + } + + private void spawnQueenTelegraphRing( + ServerLevel level, Vec3 center, double radius, int count, T particle) { + for (int index = 0; index < count; index++) { + double angle = Mth.TWO_PI * index / count; + level.sendParticles(particle, + center.x + Math.cos(angle) * radius, center.y, + center.z + Math.sin(angle) * radius, + 1, 0.0D, 0.0D, 0.0D, 0.0D); + } + } + + private void playQueenTelegraphBeat(ServerLevel level, int remainingTicks, int duration, float basePitch) { + if (remainingTicks == duration || remainingTicks == duration / 2 + || remainingTicks == 8 || remainingTicks == 3) { + float progress = 1.0F - remainingTicks / (float) duration; + level.playSound(null, this.blockPosition(), SoundEvents.BEACON_POWER_SELECT, + SoundSource.HOSTILE, 2.0F, basePitch + progress * 0.7F); + } } private void startMomentumLock(ServerLevel level) { this.momentumLockCooldownTicks = MOMENTUM_LOCK_COOLDOWN; this.royalEffects.start("momentum_lock", MOMENTUM_LOCK_DURATION, () -> { this.frozenVelocities.clear(); + this.frozenPositions.clear(); for (Entity entity : level.getEntitiesOfClass(Entity.class, - this.getBoundingBox().inflate(MOMENTUM_LOCK_RADIUS))) { + this.queenEffectBounds(MOMENTUM_LOCK_RADIUS), + entity -> this.withinQueenEffectRange(entity, MOMENTUM_LOCK_RADIUS))) { if (entity == this || isFieldImmune(entity) || entity instanceof Player player && player.isCreative()) { continue; } this.frozenVelocities.put(entity.getUUID(), entity.getDeltaMovement()); + this.frozenPositions.put(entity.getUUID(), entity.position()); } }, this::tickMomentumLockEffect, () -> { for (Map.Entry entry : this.frozenVelocities.entrySet()) { @@ -420,8 +1804,9 @@ public class QueenEntity extends RoyalBossEntity { } } this.frozenVelocities.clear(); + this.frozenPositions.clear(); + this.startRoyalRecovery(35); }); - this.triggerAnim("body_action", "wing_gust"); this.playRoyalSound(AntarchySoundEvents.QUEEN_ROAR.get(), 0.5F); } @@ -429,11 +1814,18 @@ public class QueenEntity extends RoyalBossEntity { if (!(this.level() instanceof ServerLevel level)) { return; } - for (Map.Entry entry : this.frozenVelocities.entrySet()) { + for (Iterator> iterator = this.frozenVelocities.entrySet().iterator(); iterator.hasNext();) { + Map.Entry entry = iterator.next(); Entity entity = level.getEntity(entry.getKey()); if (entity == null || !entity.isAlive()) { + iterator.remove(); + this.frozenPositions.remove(entry.getKey()); continue; } + Vec3 lockedPosition = this.frozenPositions.get(entry.getKey()); + if (lockedPosition != null && entity.position().distanceToSqr(lockedPosition) > 1.0E-6D) { + entity.teleportTo(lockedPosition.x, lockedPosition.y, lockedPosition.z); + } entity.setDeltaMovement(Vec3.ZERO); entity.fallDistance = 0.0F; entity.hasImpulse = true; @@ -452,13 +1844,17 @@ public class QueenEntity extends RoyalBossEntity { return; } for (Entity entity : level.getEntitiesOfClass(Entity.class, - this.getBoundingBox().inflate(CRUSHING_GRAVITY_RADIUS))) { + this.queenEffectBounds(CRUSHING_GRAVITY_RADIUS), + entity -> this.withinQueenEffectRange(entity, CRUSHING_GRAVITY_RADIUS))) { if (entity == this || isFieldImmune(entity) || entity instanceof Player player && player.isCreative()) { continue; } - double downSign = AntarchyGravityApi.isGravityInverted(entity) ? 1.0D : -1.0D; + double downSign = GravityApi.isGravityInverted(entity) ? 1.0D : -1.0D; entity.setDeltaMovement(entity.getDeltaMovement().add(0.0D, downSign * CRUSHING_GRAVITY_STRENGTH, 0.0D)); entity.hasImpulse = true; + if (entity instanceof LivingEntity living && this.tickCount % 8 == 0) { + this.spawnCrushingGravityArrow(level, living, downSign, 1.0D); + } } if (this.tickCount % 8 == 0) { level.sendParticles(ACCEL_DUST, this.getX(), this.getY() + 1.0D, this.getZ(), 20, @@ -477,6 +1873,7 @@ public class QueenEntity extends RoyalBossEntity { this.setRoyalAccelerated(false); removeAccelModifier(this.getAttribute(Attributes.MOVEMENT_SPEED), ACCEL_SPEED_ID); removeAccelModifier(this.getAttribute(Attributes.FLYING_SPEED), ACCEL_FLY_ID); + this.startRoyalRecovery(30); }); } @@ -514,6 +1911,7 @@ public class QueenEntity extends RoyalBossEntity { } this.royalEffects.clear(); this.frozenVelocities.clear(); + this.frozenPositions.clear(); removeAccelModifier(this.getAttribute(Attributes.MOVEMENT_SPEED), ACCEL_SPEED_ID); removeAccelModifier(this.getAttribute(Attributes.FLYING_SPEED), ACCEL_FLY_ID); super.die(damageSource); @@ -554,9 +1952,27 @@ public class QueenEntity extends RoyalBossEntity { super.addAdditionalSaveData(tag); tag.putInt(SUMMON_COOLDOWN_KEY, this.manticoreSummonCooldownTicks); tag.putInt("GravityStompCooldownTicks", this.gravityStompCooldownTicks); - tag.putInt("TimeFieldCooldownTicks", this.timeFieldCooldownTicks); + tag.putInt("MomentumLockCooldownTicks", this.momentumLockCooldownTicks); + tag.putInt("CrushingGravityCooldownTicks", this.crushingGravityCooldownTicks); tag.putInt("AccelerationCooldownTicks", this.accelerationCooldownTicks); + tag.putInt("QueenChronosphereCooldownTicks", this.queenChronosphereCooldownTicks); tag.putInt("BlackHoleCooldownTicks", this.blackHoleCooldownTicks); + tag.putInt("DebrisCycloneCooldownTicks", this.debrisCycloneCooldownTicks); + tag.putInt("GraviticUpheavalCooldownTicks", this.graviticUpheavalCooldownTicks); + tag.putInt("QueenLandingCooldownTicks", this.queenLandingCooldownTicks); + tag.putBoolean("PendingPhaseTwoCrushingGravity", this.pendingPhaseTwoCrushingGravity); + tag.putBoolean("PendingPhaseThreeChronosphere", this.pendingPhaseThreeChronosphere); + tag.putString("QueuedQueenFollowUp", this.queuedQueenFollowUp.name()); + tag.putInt("QueuedQueenFollowUpTicks", this.queuedQueenFollowUpTicks); + tag.putInt("QueuedQueenLandingRetryTicks", this.queuedQueenLandingRetryTicks); + tag.putInt("DirectedFireballVolleyTicks", this.directedFireballVolleyTicks); + if (this.lastQueenMajorAttack != null) { + tag.putString("LastQueenMajorAttack", this.lastQueenMajorAttack); + } + if (this.naturalTrailHome != null) { + tag.putLong("NaturalTrailSiteId", this.naturalTrailSiteId); + tag.putLong("NaturalTrailHome", this.naturalTrailHome.asLong()); + } } @Override @@ -564,10 +1980,35 @@ public class QueenEntity extends RoyalBossEntity { super.readAdditionalSaveData(tag); this.manticoreSummonCooldownTicks = Math.max(0, tag.getInt(SUMMON_COOLDOWN_KEY)); this.gravityStompCooldownTicks = Math.max(0, tag.getInt("GravityStompCooldownTicks")); - this.timeFieldCooldownTicks = Math.max(0, tag.getInt("TimeFieldCooldownTicks")); this.momentumLockCooldownTicks = Math.max(0, tag.getInt("MomentumLockCooldownTicks")); this.crushingGravityCooldownTicks = Math.max(0, tag.getInt("CrushingGravityCooldownTicks")); this.accelerationCooldownTicks = Math.max(0, tag.getInt("AccelerationCooldownTicks")); + this.queenChronosphereCooldownTicks = Math.max(0, tag.getInt("QueenChronosphereCooldownTicks")); this.blackHoleCooldownTicks = Math.max(0, tag.getInt("BlackHoleCooldownTicks")); + this.debrisCycloneCooldownTicks = Math.max(0, tag.getInt("DebrisCycloneCooldownTicks")); + this.graviticUpheavalCooldownTicks = Math.max(0, tag.getInt("GraviticUpheavalCooldownTicks")); + this.queenLandingCooldownTicks = tag.contains("QueenLandingCooldownTicks") + ? Math.max(0, tag.getInt("QueenLandingCooldownTicks")) : 200; + this.pendingPhaseTwoCrushingGravity = tag.getBoolean("PendingPhaseTwoCrushingGravity"); + this.pendingPhaseThreeChronosphere = tag.getBoolean("PendingPhaseThreeChronosphere"); + if (tag.contains("QueuedQueenFollowUp")) { + try { + this.queuedQueenFollowUp = QueenFollowUp.valueOf(tag.getString("QueuedQueenFollowUp")); + } catch (IllegalArgumentException ignored) { + this.queuedQueenFollowUp = QueenFollowUp.NONE; + } + } + this.queuedQueenFollowUpTicks = Math.max(0, tag.getInt("QueuedQueenFollowUpTicks")); + this.queuedQueenLandingRetryTicks = Math.max(0, tag.getInt("QueuedQueenLandingRetryTicks")); + if (this.queuedQueenFollowUp == QueenFollowUp.LANDING && this.queuedQueenLandingRetryTicks == 0) { + this.queuedQueenLandingRetryTicks = DIRECTED_LANDING_RETRY_TICKS; + } + this.directedFireballVolleyTicks = Math.max(0, tag.getInt("DirectedFireballVolleyTicks")); + this.lastQueenMajorAttack = tag.contains("LastQueenMajorAttack") + ? tag.getString("LastQueenMajorAttack") : null; + if (tag.contains("NaturalTrailHome")) { + this.naturalTrailSiteId = tag.getLong("NaturalTrailSiteId"); + this.naturalTrailHome = BlockPos.of(tag.getLong("NaturalTrailHome")); + } } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalAssailantBlackHoleEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalAssailantBlackHoleEntity.java index 87751345..76b2222f 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalAssailantBlackHoleEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalAssailantBlackHoleEntity.java @@ -17,10 +17,8 @@ public final class RoyalAssailantBlackHoleEntity extends RoyalBlackHoleEntity { public static RoyalAssailantBlackHoleEntity create(ServerLevel level, Vec3 center, @Nullable UUID ownerId) { RoyalAssailantBlackHoleEntity hole = new RoyalAssailantBlackHoleEntity( AntarchyObjects.ROYAL_ASSAILANT_BLACK_HOLE.get(), level); - hole.setPos(center.x, center.y, center.z); - hole.setRadius(AntarchySettings.queenBlackHoleRadius()); - hole.setActiveTicks(AntarchySettings.queenBlackHoleActiveTicks()); - hole.setOwnerId(ownerId); + hole.configure(center, AntarchySettings.axeBlackHoleRadius(), + AntarchySettings.axeBlackHoleActiveTicks(), ownerId); return hole; } @@ -34,6 +32,16 @@ public final class RoyalAssailantBlackHoleEntity extends RoyalBlackHoleEntity { return Math.max(2.0D, this.radius() * 0.55D); } + @Override + protected double effectGrowthStart() { + return 0.45D; + } + + @Override + protected double pullRadius() { + return this.effectRadius(); + } + @Override protected boolean hasVisibleTimeDilationField() { return false; @@ -46,6 +54,16 @@ public final class RoyalAssailantBlackHoleEntity extends RoyalBlackHoleEntity { @Override protected boolean pullsTerrainBlocks() { - return false; + return true; + } + + @Override + protected double pullStrength() { + return AntarchySettings.axeBlackHolePullStrength(); + } + + @Override + protected int blockSuctionCap() { + return AntarchySettings.axeBlackHoleBlockSuctionCap(); } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBlackHoleEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBlackHoleEntity.java index cf207c3d..d95f9d31 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBlackHoleEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBlackHoleEntity.java @@ -1,21 +1,30 @@ package com.craisinlord.antarchy.content.entity.royal; +import com.craisinlord.anthology.time.TimeDilationAnchor; import com.craisinlord.antarchy.content.AntarchyObjects; -import com.craisinlord.antarchy.content.time.TimeDilationApi; +import com.craisinlord.anthology.time.TimeDilationApi; +import com.craisinlord.anthology.time.TimeDilationFieldEntity; import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.entity.BlockSuction; import java.util.UUID; +import net.minecraft.core.BlockPos; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.Mth; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.ExperienceOrb; import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.item.FallingBlockEntity; +import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.level.GameRules; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.Nullable; @@ -28,24 +37,57 @@ import software.bernie.geckolib.core.object.PlayState; import software.bernie.geckolib.core.animation.RawAnimation; import software.bernie.geckolib.util.GeckoLibUtil; -public class RoyalBlackHoleEntity extends Entity implements GeoEntity { +public class RoyalBlackHoleEntity extends Entity implements GeoEntity, TimeDilationAnchor { private static final EntityDataAccessor RADIUS = SynchedEntityData.defineId(RoyalBlackHoleEntity.class, EntityDataSerializers.FLOAT); private static final EntityDataAccessor COLLAPSING = SynchedEntityData.defineId(RoyalBlackHoleEntity.class, EntityDataSerializers.BOOLEAN); - + private static final EntityDataAccessor VISUAL_GROWTH = + SynchedEntityData.defineId(RoyalBlackHoleEntity.class, EntityDataSerializers.FLOAT); + private static final EntityDataAccessor EFFECT_RADIUS = + SynchedEntityData.defineId(RoyalBlackHoleEntity.class, EntityDataSerializers.FLOAT); private static final String OWNER_KEY = "OwnerUuid"; private static final String AGE_KEY = "Age"; private static final String ACTIVE_KEY = "ActiveTicks"; + private static final String TRAVEL_TICKS_KEY = "TravelTicks"; + private static final String DESTINATION_X_KEY = "DestinationX"; + private static final String DESTINATION_Y_KEY = "DestinationY"; + private static final String DESTINATION_Z_KEY = "DestinationZ"; + private static final String ANIMATION_AGE_KEY = "AnimationAge"; + private static final String DILATION_FIELD_KEY = "DilationFieldUuid"; + private static final String SUCKED_BLOCKS_KEY = "SuckedBlocks"; private static final double DEFAULT_RADIUS = 14.0D; - private static final int DEFAULT_ACTIVE_TICKS = 120; - private static final int COLLAPSE_TICKS = 12; + private static final int QUEEN_ANIMATION_TICKS = 403; + private static final int QUEEN_COLLAPSE_TICKS = 25; + private static final int QUEEN_ACTIVE_TICKS = QUEEN_ANIMATION_TICKS - QUEEN_COLLAPSE_TICKS; + private static final int QUEEN_PROJECTILE_TRAVEL_TICKS = 20; + private static final int BLOCK_SUCTION_INTERVAL = 5; + private static final int BLOCKS_PER_SUCTION = 3; + private static final int BLOCK_SUCTION_ATTEMPTS = 36; + private static final double MODEL_RENDER_SCALE = 1.5D; + private static final double EFFECT_GROWTH_START = 0.45D; + private static final double EFFECT_GROWTH_END = 1.6D; + private static final double EFFECT_GROWTH_FRACTION = 0.6D; + private static final double QUEEN_EFFECT_GROWTH_START = EFFECT_GROWTH_START * 1.5D; + private static final double QUEEN_PULL_RADIUS_SCALE = 2.0D; + private static final double MODEL_BASELINE_Y = 24.0D; + private static final double CORE_CUBE_CENTER_Y = 146.0D; + private static final double CORE_START_OFFSET_Y = -100.0D; + private static final double CORE_END_OFFSET_Y = 505.0D; + private static final double CORE_RISE_END_SECONDS = 19.125D; @Nullable private UUID ownerId; private int age; - private int activeTicks = DEFAULT_ACTIVE_TICKS; + private int activeTicks = QUEEN_ACTIVE_TICKS; + private int animationAge; + private int suckedBlocks; + private int travelTicksRemaining; + @Nullable + private UUID dilationFieldId; + @Nullable + private Vec3 destination; private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); public RoyalBlackHoleEntity(EntityType entityType, Level level) { @@ -56,49 +98,37 @@ public class RoyalBlackHoleEntity extends Entity implements GeoEntity { public static RoyalBlackHoleEntity create(ServerLevel level, Vec3 center, double radius, int activeTicks, @Nullable UUID ownerId) { RoyalBlackHoleEntity hole = new RoyalBlackHoleEntity(AntarchyObjects.ROYAL_BLACK_HOLE.get(), level); - hole.setPos(center.x, center.y, center.z); - hole.setRadius(radius > 0.0D ? radius : AntarchySettings.queenBlackHoleRadius()); - hole.activeTicks = activeTicks > 0 ? Math.max(20, activeTicks) : AntarchySettings.queenBlackHoleActiveTicks(); - hole.ownerId = ownerId; + hole.configure(center, radius, activeTicks, ownerId); return hole; } public static RoyalBlackHoleEntity create(ServerLevel level, Vec3 center, @Nullable UUID ownerId) { - return create(level, center, AntarchySettings.queenBlackHoleRadius(), AntarchySettings.queenBlackHoleActiveTicks(), ownerId); + return create(level, center, AntarchySettings.queenBlackHoleRadius(), QUEEN_ACTIVE_TICKS, ownerId); } - protected void setActiveTicks(int activeTicks) { - this.activeTicks = activeTicks > 0 ? Math.max(20, activeTicks) : DEFAULT_ACTIVE_TICKS; + public static RoyalBlackHoleEntity createProjectile(ServerLevel level, Vec3 origin, Vec3 destination, + @Nullable UUID ownerId) { + RoyalBlackHoleEntity hole = create(level, origin, ownerId); + hole.activeTicks = QUEEN_ACTIVE_TICKS - QUEEN_PROJECTILE_TRAVEL_TICKS; + hole.destination = destination; + hole.travelTicksRemaining = QUEEN_PROJECTILE_TRAVEL_TICKS; + hole.entityData.set(VISUAL_GROWTH, 0.15F); + return hole; } - protected void setOwnerId(@Nullable UUID ownerId) { + protected final void configure(Vec3 center, double radius, int activeTicks, @Nullable UUID ownerId) { + this.setPos(center.x, center.y, center.z); + this.setRadius(radius > 0.0D ? radius : AntarchySettings.queenBlackHoleRadius()); + this.activeTicks = activeTicks > 0 ? Math.max(20, activeTicks) : AntarchySettings.queenBlackHoleActiveTicks(); this.ownerId = ownerId; } - protected boolean risesWhileActive() { - return false; - } - - protected double timeDilationRadius() { - return Math.max(2.0D, this.radius() * 0.55D); - } - - protected boolean hasVisibleTimeDilationField() { - return true; - } - - protected int collapseDurationTicks() { - return COLLAPSE_TICKS; - } - - protected boolean pullsTerrainBlocks() { - return true; - } - @Override protected void defineSynchedData() { this.entityData.define(RADIUS, (float) DEFAULT_RADIUS); this.entityData.define(COLLAPSING, false); + this.entityData.define(VISUAL_GROWTH, 1.0F); + this.entityData.define(EFFECT_RADIUS, (float) (DEFAULT_RADIUS * EFFECT_GROWTH_START)); } public void setRadius(double radius) { @@ -109,30 +139,52 @@ public class RoyalBlackHoleEntity extends Entity implements GeoEntity { return this.entityData.get(RADIUS); } + public double effectRadius() { + return Math.max(1.0D, this.entityData.get(EFFECT_RADIUS)); + } + + private double computeEffectRadius() { + double progress = this.activeTicks <= 0 + ? 1.0D + : Mth.clamp(this.age / (this.activeTicks * EFFECT_GROWTH_FRACTION), 0.0D, 1.0D); + return this.radius() * Mth.lerp(progress, this.effectGrowthStart(), EFFECT_GROWTH_END); + } + + protected double effectGrowthStart() { + return QUEEN_EFFECT_GROWTH_START; + } + public boolean isCollapsing() { return this.entityData.get(COLLAPSING); } + public float visualGrowth() { + return this.entityData.get(VISUAL_GROWTH); + } + @Override public void tick() { super.tick(); + this.animationAge++; if (this.level().isClientSide) { this.spawnClientParticles(); return; } + if (this.travelTicksRemaining > 0 && this.destination != null) { + this.tickProjectileTravel(); + return; + } this.age++; if (!this.isCollapsing()) { if (this.risesWhileActive()) { this.setPos(this.getX(), this.getY() + 0.035D, this.getZ()); } + this.entityData.set(EFFECT_RADIUS, (float) this.computeEffectRadius()); + this.ensureAttachedDilationField(); this.applyPull(); - if (this.age % 10 == 0 && this.level() instanceof ServerLevel level) { - if (this.hasVisibleTimeDilationField()) { - TimeDilationApi.createField(level, this.position(), this.timeDilationRadius(), 0.18D, 14, this.ownerId); - } - if (this.pullsTerrainBlocks() && this.age % 20 == 0 && level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) { - RoyalBlockDestruction.destroySphere(level, this, this.position(), Math.min(2.0D, this.radius() * 0.2D), 8, 30.0D, 0.0F); - } + if (this.pullsTerrainBlocks() && this.age % BLOCK_SUCTION_INTERVAL == 0 + && this.level() instanceof ServerLevel level) { + this.pullTerrainBlocks(level); } if (this.age >= this.activeTicks) { this.entityData.set(COLLAPSING, true); @@ -142,23 +194,122 @@ public class RoyalBlackHoleEntity extends Entity implements GeoEntity { } if (this.age >= this.collapseDurationTicks()) { this.collapse(); + this.discardAttachedDilationField(); this.discard(); } } + private void tickProjectileTravel() { + Vec3 remaining = this.destination.subtract(this.position()); + double distance = remaining.length(); + if (distance <= 0.5D || this.travelTicksRemaining <= 1) { + this.setPos(this.destination.x, this.destination.y, this.destination.z); + this.travelTicksRemaining = 0; + this.destination = null; + this.entityData.set(VISUAL_GROWTH, 1.0F); + return; + } + + this.setPos(this.position().add(remaining.scale(1.0D / this.travelTicksRemaining))); + this.travelTicksRemaining--; + float progress = 1.0F - this.travelTicksRemaining / (float) QUEEN_PROJECTILE_TRAVEL_TICKS; + this.entityData.set(VISUAL_GROWTH, Mth.lerp(progress, 0.15F, 1.0F)); + } + + protected boolean risesWhileActive() { + return false; + } + + protected double timeDilationRadius() { + return Math.max(2.0D, this.effectRadius() * 0.55D) * QueenEntity.TIME_FIELD_RADIUS_SCALE; + } + + protected boolean hasVisibleTimeDilationField() { + return true; + } + + protected int collapseDurationTicks() { + return QUEEN_COLLAPSE_TICKS; + } + + protected boolean pullsTerrainBlocks() { + return true; + } + + protected double pullRadius() { + return this.effectRadius() * QUEEN_PULL_RADIUS_SCALE; + } + + protected double pullStrength() { + return AntarchySettings.queenBlackHolePullStrength(); + } + + protected int blockSuctionCap() { + return AntarchySettings.queenBlackHoleBlockSuctionCap(); + } + + @Override + public Vec3 timeDilationCenter() { + return this.effectCenter(); + } + + public Vec3 effectCenter() { + double animationSeconds = Math.min(CORE_RISE_END_SECONDS, this.animationAge / 20.0D); + double riseProgress = animationSeconds / CORE_RISE_END_SECONDS; + double animatedOffset = Mth.lerp(riseProgress, CORE_START_OFFSET_Y, CORE_END_OFFSET_Y); + double modelY = CORE_CUBE_CENTER_Y + animatedOffset; + double worldOffsetY = (modelY - MODEL_BASELINE_Y) / 16.0D * MODEL_RENDER_SCALE; + return this.position().add(0.0D, worldOffsetY, 0.0D); + } + + private void ensureAttachedDilationField() { + if (!(this.level() instanceof ServerLevel level)) { + return; + } + TimeDilationFieldEntity field = this.dilationFieldId != null + && level.getEntity(this.dilationFieldId) instanceof TimeDilationFieldEntity existing + ? existing + : null; + if (field == null || !field.isAlive()) { + int remainingTicks = Math.max(1, this.activeTicks - this.age + this.collapseDurationTicks()); + field = TimeDilationApi.createField(level, this.effectCenter(), this.timeDilationRadius(), 0.18D, + remainingTicks, this.ownerId, this.hasVisibleTimeDilationField()); + field.attachTo(this); + this.dilationFieldId = field.getUUID(); + } else { + Vec3 center = this.effectCenter(); + field.setPos(center.x, center.y, center.z); + field.setFieldRadius(this.timeDilationRadius()); + } + } + + private void discardAttachedDilationField() { + if (this.dilationFieldId != null && this.level() instanceof ServerLevel level + && level.getEntity(this.dilationFieldId) instanceof TimeDilationFieldEntity field) { + field.discard(); + } + this.dilationFieldId = null; + } + private void applyPull() { - Vec3 center = this.position(); - double radius = this.radius(); + Vec3 center = this.effectCenter(); + double radius = this.pullRadius(); for (Entity entity : this.level().getEntitiesOfClass(Entity.class, new AABB(center, center).inflate(radius))) { - if (entity == this || this.isImmune(entity)) { + if (entity == this || entity instanceof TimeDilationFieldEntity || this.isImmune(entity)) { continue; } Vec3 toCenter = center.subtract(entity.position()); double distance = toCenter.length(); - if (distance < 0.5D || distance > radius) { + if (distance < 0.75D) { + if (entity instanceof ItemEntity || entity instanceof ExperienceOrb || entity instanceof FallingBlockEntity) { + entity.discard(); + } continue; } - double strength = AntarchySettings.queenBlackHolePullStrength() * (1.0D - distance / radius); + if (distance > radius) { + continue; + } + double strength = this.pullStrength() * (1.0D - distance / radius); Vec3 pull = toCenter.scale(strength / distance); entity.setDeltaMovement(entity.getDeltaMovement().scale(0.86D).add(pull)); entity.hasImpulse = true; @@ -166,12 +317,47 @@ public class RoyalBlackHoleEntity extends Entity implements GeoEntity { } } + private void pullTerrainBlocks(ServerLevel level) { + int cap = this.blockSuctionCap(); + if (cap <= 0 || this.suckedBlocks >= cap + || !level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) { + return; + } + + Vec3 center = this.effectCenter(); + Vec3 terrainOrigin = center; + double radius = this.pullRadius(); + int pulledThisTick = 0; + int suctionAttempts = BLOCK_SUCTION_ATTEMPTS * 4; + for (int attempt = 0; attempt < suctionAttempts && pulledThisTick < BLOCKS_PER_SUCTION + && this.suckedBlocks < cap; attempt++) { + BlockPos pos = BlockPos.containing( + terrainOrigin.x + (this.random.nextDouble() * 2.0D - 1.0D) * radius, + terrainOrigin.y + (this.random.nextDouble() * 2.0D - 1.0D) * radius, + terrainOrigin.z + (this.random.nextDouble() * 2.0D - 1.0D) * radius); + if (pos.distToCenterSqr(terrainOrigin.x, terrainOrigin.y, terrainOrigin.z) > radius * radius + || pos.getY() < level.getMinBuildHeight() + || pos.getY() >= level.getMaxBuildHeight() + || !level.getWorldBorder().isWithinBounds(pos)) { + continue; + } + + BlockState state = level.getBlockState(pos); + if (!BlockSuction.canLift(level, pos, state) + || BlockSuction.lift(level, pos, state, center, 0.28D) == null) { + continue; + } + pulledThisTick++; + this.suckedBlocks++; + } + } + private void collapse() { if (!(this.level() instanceof ServerLevel level)) { return; } - Vec3 center = this.position(); - double radius = this.radius(); + Vec3 center = this.effectCenter(); + double radius = this.effectRadius(); DamageSource source = this.ownerEntity() != null ? this.damageSources().mobAttack(this.ownerEntity()) : this.damageSources().magic(); @@ -181,7 +367,9 @@ public class RoyalBlackHoleEntity extends Entity implements GeoEntity { } double distance = Math.max(1.0D, living.position().distanceTo(center)); float falloff = (float) Math.max(0.25D, 1.0D - distance / radius); - living.hurt(source, 26.0F * falloff); + double damage = 26.0D * falloff; + living.hurt(source, this.ownerEntity() instanceof RoyalBossEntity royalBoss + ? royalBoss.scaleRoyalDamage(damage) : (float) damage); Vec3 launch = living.position().subtract(center).normalize().scale(2.6D * falloff); living.setDeltaMovement(launch.x, 1.1D * falloff + 0.4D, launch.z); living.hasImpulse = true; @@ -194,10 +382,14 @@ public class RoyalBlackHoleEntity extends Entity implements GeoEntity { } private boolean isImmune(Entity entity) { - if (entity instanceof RoyalBossEntity) { + if (this.ownerId != null && this.ownerId.equals(entity.getUUID())) { return true; } - if (this.ownerId != null && this.ownerId.equals(entity.getUUID())) { + LivingEntity owner = this.ownerEntity(); + if (owner instanceof QueenEntity) { + return entity.getType().is(com.craisinlord.antarchy.content.AntarchyTags.Entities.QUEEN_DOES_NOT_ATTACK); + } + if (entity instanceof RoyalBossEntity) { return true; } return entity.getType().is(com.craisinlord.antarchy.content.AntarchyTags.Entities.TIME_DILATION_IMMUNE); @@ -212,10 +404,10 @@ public class RoyalBlackHoleEntity extends Entity implements GeoEntity { } private void spawnClientParticles() { - Vec3 center = this.position(); + Vec3 center = this.effectCenter(); for (int i = 0; i < 6; i++) { double angle = this.random.nextDouble() * Math.PI * 2.0D; - double r = this.radius() * (0.3D + this.random.nextDouble() * 0.7D); + double r = this.effectRadius() * this.visualGrowth() * (0.3D + this.random.nextDouble() * 0.7D); double px = center.x + Math.cos(angle) * r; double pz = center.z + Math.sin(angle) * r; double py = center.y + (this.random.nextDouble() - 0.5D) * 3.0D; @@ -238,8 +430,19 @@ public class RoyalBlackHoleEntity extends Entity implements GeoEntity { protected void readAdditionalSaveData(CompoundTag tag) { this.setRadius(tag.getDouble("Radius")); this.age = tag.getInt(AGE_KEY); - this.activeTicks = tag.contains(ACTIVE_KEY) ? tag.getInt(ACTIVE_KEY) : DEFAULT_ACTIVE_TICKS; + this.activeTicks = tag.contains(ACTIVE_KEY) ? tag.getInt(ACTIVE_KEY) : QUEEN_ACTIVE_TICKS; + this.animationAge = tag.contains(ANIMATION_AGE_KEY) ? tag.getInt(ANIMATION_AGE_KEY) : this.age; + this.suckedBlocks = tag.getInt(SUCKED_BLOCKS_KEY); + this.entityData.set(EFFECT_RADIUS, (float) this.computeEffectRadius()); this.ownerId = tag.hasUUID(OWNER_KEY) ? tag.getUUID(OWNER_KEY) : null; + this.dilationFieldId = tag.hasUUID(DILATION_FIELD_KEY) ? tag.getUUID(DILATION_FIELD_KEY) : null; + this.travelTicksRemaining = Math.max(0, tag.getInt(TRAVEL_TICKS_KEY)); + if (this.travelTicksRemaining > 0 && tag.contains(DESTINATION_X_KEY)) { + this.destination = new Vec3(tag.getDouble(DESTINATION_X_KEY), tag.getDouble(DESTINATION_Y_KEY), + tag.getDouble(DESTINATION_Z_KEY)); + float progress = 1.0F - this.travelTicksRemaining / (float) QUEEN_PROJECTILE_TRAVEL_TICKS; + this.entityData.set(VISUAL_GROWTH, Mth.lerp(progress, 0.15F, 1.0F)); + } } @Override @@ -247,9 +450,20 @@ public class RoyalBlackHoleEntity extends Entity implements GeoEntity { tag.putDouble("Radius", this.radius()); tag.putInt(AGE_KEY, this.age); tag.putInt(ACTIVE_KEY, this.activeTicks); + tag.putInt(ANIMATION_AGE_KEY, this.animationAge); + tag.putInt(SUCKED_BLOCKS_KEY, this.suckedBlocks); if (this.ownerId != null) { tag.putUUID(OWNER_KEY, this.ownerId); } + if (this.dilationFieldId != null) { + tag.putUUID(DILATION_FIELD_KEY, this.dilationFieldId); + } + tag.putInt(TRAVEL_TICKS_KEY, this.travelTicksRemaining); + if (this.destination != null) { + tag.putDouble(DESTINATION_X_KEY, this.destination.x); + tag.putDouble(DESTINATION_Y_KEY, this.destination.y); + tag.putDouble(DESTINATION_Z_KEY, this.destination.z); + } } @Override @@ -258,7 +472,7 @@ public class RoyalBlackHoleEntity extends Entity implements GeoEntity { } private PlayState blackHoleController(AnimationState state) { - return state.setAndContinue(RawAnimation.begin().thenLoop("animation")); + return state.setAndContinue(RawAnimation.begin().thenPlay("animation")); } @Override diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBoltEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBoltEntity.java index b2803a51..33a6e5d8 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBoltEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBoltEntity.java @@ -4,6 +4,7 @@ import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.entity.royal.beam.RoyalBeamElement; import net.minecraft.core.particles.ParticleOptions; import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.core.particles.DustParticleOptions; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; @@ -19,8 +20,11 @@ import net.minecraft.world.entity.projectile.AbstractHurtingProjectile; import net.minecraft.world.level.Level; import net.minecraft.world.phys.EntityHitResult; import net.minecraft.world.phys.HitResult; +import org.joml.Vector3f; public class RoyalBoltEntity extends AbstractHurtingProjectile { + private static final DustParticleOptions KING_GOLD_TRAIL = + new DustParticleOptions(new Vector3f(1.0F, 0.72F, 0.12F), 1.35F); private static final EntityDataAccessor ELEMENT = SynchedEntityData.defineId(RoyalBoltEntity.class, EntityDataSerializers.INT); @@ -77,7 +81,8 @@ public class RoyalBoltEntity extends AbstractHurtingProjectile { case FIRE -> ParticleTypes.FLAME; case LIGHTNING -> ParticleTypes.ELECTRIC_SPARK; case ICE -> ParticleTypes.SNOWFLAKE; - case GENERIC -> ParticleTypes.WITCH; + case KING_GOLD -> KING_GOLD_TRAIL; + default -> ParticleTypes.WITCH; }; } @@ -92,6 +97,10 @@ public class RoyalBoltEntity extends AbstractHurtingProjectile { if (target == owner || (owner != null && target == owner.getVehicle())) { return; } + if (owner instanceof RoyalMountEntity royal && target instanceof RoyalMountEntity other + && royal.isTame() && other.isTame()) { + return; + } float damage = (float) AntarchySettings.royalBoltDamage(); target.hurt(this.damageSources().mobProjectile(this, owner instanceof LivingEntity le ? le : null), damage); if (target instanceof LivingEntity living) { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBossEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBossEntity.java index 3a4be78e..eda8bead 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBossEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBossEntity.java @@ -1,19 +1,28 @@ package com.craisinlord.antarchy.content.entity.royal; +import com.craisinlord.anthology.beam.BeamOwner; import com.craisinlord.antarchy.config.AntarchySettings; -import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner; -import com.craisinlord.antarchy.content.entity.multipart.MultipartLayout; -import com.craisinlord.antarchy.content.entity.multipart.MultipartPartDefinition; -import com.craisinlord.antarchy.content.entity.royal.beam.RoyalBeamController; -import com.craisinlord.antarchy.content.entity.royal.beam.RoyalBeamSettings; -import com.craisinlord.antarchy.content.entity.royal.beam.RoyalBeamTerrainMode; +import com.craisinlord.anthology.multipart.MultipartEntityOwner; +import com.craisinlord.anthology.multipart.MultipartLayout; +import com.craisinlord.anthology.multipart.MultipartPartDefinition; +import com.craisinlord.anthology.beam.BeamController; +import com.craisinlord.anthology.beam.BeamSettings; +import com.craisinlord.anthology.beam.BeamTerrainMode; import com.craisinlord.antarchy.content.entity.royal.beam.RoyalBeamElement; import com.craisinlord.antarchy.content.entity.royal.attack.RoyalAttackLane; import com.craisinlord.antarchy.content.entity.royal.attack.RoyalAttackScheduler; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityRotationUtil; import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; +import java.util.Arrays; +import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.List; +import java.util.Set; +import java.util.UUID; +import net.minecraft.resources.ResourceLocation; import net.minecraft.network.chat.Component; +import net.minecraft.nbt.CompoundTag; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; @@ -24,6 +33,7 @@ import net.minecraft.sounds.SoundEvent; import net.minecraft.util.Mth; import net.minecraft.world.BossEvent; import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.damagesource.DamageTypes; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; @@ -33,13 +43,17 @@ import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.item.ItemStack; import net.minecraft.world.entity.ai.attributes.AttributeSupplier; import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.ai.attributes.AttributeInstance; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.entity.ai.control.FlyingMoveControl; +import net.minecraft.world.entity.ai.control.MoveControl; import net.minecraft.world.entity.ai.goal.FloatGoal; import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; import net.minecraft.world.entity.ai.navigation.FlyingPathNavigation; +import net.minecraft.world.entity.ai.navigation.GroundPathNavigation; import net.minecraft.world.entity.ai.navigation.PathNavigation; import net.minecraft.world.entity.monster.Monster; import net.minecraft.world.entity.player.Player; @@ -56,9 +70,9 @@ import software.bernie.geckolib.core.object.PlayState; import software.bernie.geckolib.core.animation.RawAnimation; import software.bernie.geckolib.util.GeckoLibUtil; -public abstract class RoyalBossEntity extends Monster implements GeoEntity, MultipartEntityOwner { +public abstract class RoyalBossEntity extends Monster implements GeoEntity, MultipartEntityOwner, BeamOwner { public static final float MODEL_RENDER_SCALE = 2.0F; - public static final float GAMEPLAY_WIDTH = 30.0F; + public static final float GAMEPLAY_WIDTH = 28.0F; public static final float GAMEPLAY_HEIGHT = 15.0F; public enum Phase { @@ -88,39 +102,64 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult private static final int BITE_DURATION_TICKS = 16; private static final int BITE_HIT_TICK = 6; + private static final int HEAD_ATTACK_ANIMATION_TICKS = 25; private static final int DEATH_TICKS = 60; private static final double CRUSH_RADIUS = 3.5D; private static final int CRUSH_MAX_BLOCKS = 24; private static final double CRUSH_MAX_RESISTANCE = 60.0D; private static final float CRUSH_DROP_CHANCE = 0.1F; + private static final int RECOVERY_AFTER_BEAM_TICKS = 30; + private static final ResourceLocation MULTIPLAYER_DAMAGE_ID = new ResourceLocation("antarchy", "royal_multiplayer_damage"); + private static final UUID MULTIPLAYER_DAMAGE_UUID = UUID.nameUUIDFromBytes(MULTIPLAYER_DAMAGE_ID.toString().getBytes()); private static final int OBSTRUCTION_CLEAR_INTERVAL_TICKS = 5; private static final double OBSTRUCTION_CLEAR_RADIUS = 3.5D; private static final int OBSTRUCTION_CLEAR_MAX_BLOCKS = 24; private static final double OBSTRUCTION_CLEAR_MAX_RESISTANCE = 60.0D; private static final float OBSTRUCTION_CLEAR_DROP_CHANCE = 0.1F; - // Keep visual muzzle points separate from the centered multipart hitboxes. - private static final double BEAM_MUZZLE_FORWARD = 25.0D; - private static final double BEAM_MUZZLE_Y = 13.0D; - private static final double BEAM_MUZZLE_LATERAL = 2.75D; + private static final double BEAM_MUZZLE_FORWARD = 27.375D; + private static final double BEAM_MUZZLE_CENTER_Y = 11.5D; + private static final double BEAM_MUZZLE_SIDE_Y = 10.25D; + private static final double BEAM_MUZZLE_LATERAL = 2.625D; + private static final int HEAVY_BLOCK_CHECK_INTERVAL_TICKS = 4; protected static final double FLYING_MIN_HOVER = 2.5D; protected static final double FLYING_PREFERRED_HOVER = 6.0D; protected static final double FLYING_MAX_HOVER_ABOVE_GROUND = 24.0D; - private static final EntityDataAccessor FIRING = - SynchedEntityData.defineId(RoyalBossEntity.class, EntityDataSerializers.BOOLEAN); - private static final EntityDataAccessor HAS_BEAM_END = - SynchedEntityData.defineId(RoyalBossEntity.class, EntityDataSerializers.BOOLEAN); + @SuppressWarnings("unchecked") + private static final EntityDataAccessor[] BEAM_ACTIVE = new EntityDataAccessor[] { + SynchedEntityData.defineId(RoyalBossEntity.class, EntityDataSerializers.BOOLEAN), + SynchedEntityData.defineId(RoyalBossEntity.class, EntityDataSerializers.BOOLEAN), + SynchedEntityData.defineId(RoyalBossEntity.class, EntityDataSerializers.BOOLEAN) + }; private static final EntityDataAccessor ACCELERATED = SynchedEntityData.defineId(RoyalBossEntity.class, EntityDataSerializers.BOOLEAN); - private static final EntityDataAccessor BEAM_ELEMENT = - SynchedEntityData.defineId(RoyalBossEntity.class, EntityDataSerializers.INT); - private static final EntityDataAccessor BEAM_END_X = - SynchedEntityData.defineId(RoyalBossEntity.class, EntityDataSerializers.FLOAT); - private static final EntityDataAccessor BEAM_END_Y = - SynchedEntityData.defineId(RoyalBossEntity.class, EntityDataSerializers.FLOAT); - private static final EntityDataAccessor BEAM_END_Z = - SynchedEntityData.defineId(RoyalBossEntity.class, EntityDataSerializers.FLOAT); + private static final EntityDataAccessor ROYAL_FLYING = + SynchedEntityData.defineId(RoyalBossEntity.class, EntityDataSerializers.BOOLEAN); + @SuppressWarnings("unchecked") + private static final EntityDataAccessor[] BEAM_ELEMENT = new EntityDataAccessor[] { + SynchedEntityData.defineId(RoyalBossEntity.class, EntityDataSerializers.INT), + SynchedEntityData.defineId(RoyalBossEntity.class, EntityDataSerializers.INT), + SynchedEntityData.defineId(RoyalBossEntity.class, EntityDataSerializers.INT) + }; + @SuppressWarnings("unchecked") + private static final EntityDataAccessor[] BEAM_END_X = new EntityDataAccessor[] { + SynchedEntityData.defineId(RoyalBossEntity.class, EntityDataSerializers.FLOAT), + SynchedEntityData.defineId(RoyalBossEntity.class, EntityDataSerializers.FLOAT), + SynchedEntityData.defineId(RoyalBossEntity.class, EntityDataSerializers.FLOAT) + }; + @SuppressWarnings("unchecked") + private static final EntityDataAccessor[] BEAM_END_Y = new EntityDataAccessor[] { + SynchedEntityData.defineId(RoyalBossEntity.class, EntityDataSerializers.FLOAT), + SynchedEntityData.defineId(RoyalBossEntity.class, EntityDataSerializers.FLOAT), + SynchedEntityData.defineId(RoyalBossEntity.class, EntityDataSerializers.FLOAT) + }; + @SuppressWarnings("unchecked") + private static final EntityDataAccessor[] BEAM_END_Z = new EntityDataAccessor[] { + SynchedEntityData.defineId(RoyalBossEntity.class, EntityDataSerializers.FLOAT), + SynchedEntityData.defineId(RoyalBossEntity.class, EntityDataSerializers.FLOAT), + SynchedEntityData.defineId(RoyalBossEntity.class, EntityDataSerializers.FLOAT) + }; private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); @@ -128,7 +167,7 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult private static final RawAnimation DEATH_ANIM = RawAnimation.begin().thenPlayAndHold("death"); private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); - protected final RoyalBeamController beamController = new RoyalBeamController(this); + protected final BeamController[] beamControllers = new BeamController[3]; protected final RoyalAttackScheduler attackScheduler = new RoyalAttackScheduler(); private final ServerBossEvent bossEvent; private final RoyalHead[] heads = { @@ -136,21 +175,49 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult new RoyalHead(RoyalHead.Slot.CENTER), new RoyalHead(RoyalHead.Slot.RIGHT) }; - private int beamCooldownTicks; + private final int[] beamLoopSoundTicks = new int[3]; + private final int[] assignedHeadCounts = new int[3]; + private int beamVolleyLimit; @Nullable - private RoyalHead activeBeamHead; - private int beamLoopSoundTicks; - private int beamHeadCursor; - private boolean beamStarted; + private Phase beamVolleyPhase; + private final MoveControl groundMoveControl; + private final FlyingMoveControl flyingMoveControl; + private final PathNavigation groundNavigation; + private final PathNavigation flyingNavigation; + private int locomotionDecisionTicks = 80; + private boolean landingForCombat; + @Nullable + private Vec3 aerialCombatAnchor; + private int aerialCombatAnchorTicks; + private int recoveryWindowTicks; + @Nullable + private Phase trackedPhase; + private int phaseTransitionTicks; + private int phaseTransitionDuration; + private boolean multiplayerScalingInitialized; + private final Set encounterParticipants = new HashSet<>(); + private double royalDamageMultiplier = 1.0D; @Nullable private Entity[] multipartParts; protected RoyalBossEntity(EntityType entityType, Level level) { super(entityType, level); + for (int i = 0; i < this.beamControllers.length; i++) { + this.beamControllers[i] = new BeamController(this); + } this.xpReward = 500; + this.groundMoveControl = new MoveControl(this); + this.flyingMoveControl = new FlyingMoveControl(this, 20, true); + this.groundNavigation = new GroundPathNavigation(this, level); + FlyingPathNavigation flyingNavigation = new FlyingPathNavigation(this, level); + flyingNavigation.setCanFloat(true); + this.flyingNavigation = flyingNavigation; if (this.isFlyingBoss()) { - this.moveControl = new FlyingMoveControl(this, 20, true); + this.moveControl = this.flyingMoveControl; + this.navigation = this.flyingNavigation; + } else { + this.navigation = this.groundNavigation; } this.bossEvent = new com.craisinlord.antarchy.content.boss.EntityLinkedServerBossEvent( this.getUUID(), @@ -182,9 +249,9 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult protected abstract SoundEvent royalBeamEndSound(); - protected abstract RoyalBeamSettings royalBeamSettings(); + protected abstract BeamSettings royalBeamSettings(); - protected abstract RoyalBeamTerrainMode royalBeamTerrainMode(); + protected abstract BeamTerrainMode royalBeamTerrainMode(); protected RoyalBeamElement royalBeamElement(@Nullable RoyalHead head) { return RoyalBeamElement.GENERIC; @@ -194,18 +261,26 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult return this.royalBeamStartSound(); } + protected float royalBeamStartSoundVolume(RoyalHead head) { + return (float) AntarchySettings.royalBossSoundVolume(); + } + protected void tickRoyalBeamEffects(RoyalHead head, Vec3 start, Vec3 end) { } - protected RoyalBeamTerrainMode royalBeamTerrainMode(@Nullable RoyalHead head) { + protected BeamTerrainMode royalBeamTerrainMode(@Nullable RoyalHead head) { return this.royalBeamTerrainMode(); } public static AttributeSupplier.Builder createBaseAttributes(double health, double attackDamage) { + return createBaseAttributes(health, attackDamage, AntarchySettings.royalBossArmor()); + } + + protected static AttributeSupplier.Builder createBaseAttributes(double health, double attackDamage, double armor) { return Mob.createMobAttributes() .add(Attributes.MAX_HEALTH, health) .add(Attributes.ATTACK_DAMAGE, attackDamage) - .add(Attributes.ARMOR, AntarchySettings.royalBossArmor()) + .add(Attributes.ARMOR, armor) .add(Attributes.FOLLOW_RANGE, AntarchySettings.royalBossFollowRange()) .add(Attributes.MOVEMENT_SPEED, AntarchySettings.royalBossMovementSpeed()) .add(Attributes.FLYING_SPEED, AntarchySettings.royalBossMovementSpeed()) @@ -216,23 +291,72 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult protected abstract boolean isFlyingBoss(); + protected double groundCombatBias() { + return 0.35D; + } + + protected boolean managesOwnCombatLocomotion() { + return false; + } + + protected boolean shouldClearObstruction() { + return true; + } + + protected double biteApproachSpeed() { + return 1.3D; + } + + protected boolean blocksRoyalAttacksForMovement() { + return false; + } + + protected boolean blocksRoyalBeamScheduling() { + return false; + } + + protected int royalPhaseTransitionDuration(Phase nextPhase) { + return 50; + } + + protected void onRoyalPhaseTransitionStarted(Phase previousPhase, Phase nextPhase) { + } + + protected void tickRoyalPhaseTransition(Phase nextPhase, int elapsedTicks, int remainingTicks) { + } + + protected void onRoyalPhaseTransitionCompleted(Phase nextPhase) { + } + + protected int maxConcurrentHeadAttacks(Phase phase) { + return phase.maxConcurrentHeadAttacks(); + } + + protected int biteCooldownTicks(Phase phase) { + return Math.max(10, Mth.floor(AntarchySettings.royalBossBiteCooldownTicks() * phase.cooldownScale())); + } + + protected double biteDamageMultiplier() { + return AntarchySettings.royalBossBiteDamageMultiplier(); + } + public String geoNameForRender() { return this.geoName(); } @Override - public MultipartLayout antarchy$getMultipartLayout() { + public MultipartLayout anthology$getMultipartLayout() { return RoyalBossMultipartLayout.INSTANCE; } @Override @Nullable - public Entity[] antarchy$getMultipartParts() { + public Entity[] anthology$getMultipartParts() { return this.multipartParts; } @Override - public void antarchy$setMultipartParts(@Nullable Entity[] parts) { + public void anthology$setMultipartParts(@Nullable Entity[] parts) { this.multipartParts = parts; } @@ -252,20 +376,33 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult this.goalSelector.addGoal(0, new FloatGoal(this)); this.goalSelector.addGoal(7, new LookAtPlayerGoal(this, Player.class, 48.0F)); this.goalSelector.addGoal(8, new RandomLookAroundGoal(this)); + this.registerRoyalTargetGoals(); + } + + protected void registerRoyalTargetGoals() { this.targetSelector.addGoal(1, new HurtByTargetGoal(this)); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); } + public boolean canDamageWithRoyalAttack(LivingEntity target) { + return target != this + && !(target instanceof RoyalBossEntity) + && target.getType() != this.getType() + && !this.isAlliedTo(target); + } + @Override protected void defineSynchedData() { super.defineSynchedData(); - this.entityData.define(FIRING, false); - this.entityData.define(HAS_BEAM_END, false); this.entityData.define(ACCELERATED, false); - this.entityData.define(BEAM_ELEMENT, RoyalBeamElement.GENERIC.ordinal()); - this.entityData.define(BEAM_END_X, 0.0F); - this.entityData.define(BEAM_END_Y, 0.0F); - this.entityData.define(BEAM_END_Z, 0.0F); + this.entityData.define(ROYAL_FLYING, true); + for (int i = 0; i < 3; i++) { + this.entityData.define(BEAM_ACTIVE[i], false); + this.entityData.define(BEAM_ELEMENT[i], RoyalBeamElement.GENERIC.ordinal()); + this.entityData.define(BEAM_END_X[i], 0.0F); + this.entityData.define(BEAM_END_Y[i], 0.0F); + this.entityData.define(BEAM_END_Z[i], 0.0F); + } } @Override @@ -273,6 +410,11 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult return false; } + @Override + public float maxUpStep() { + return (float) AntarchySettings.royalBossStepHeight(); + } + @Override public void checkDespawn() { } @@ -301,9 +443,61 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult this.playSound(sound, (float) AntarchySettings.royalBossSoundVolume(), pitch); } + protected void playRoyalSound(SoundEvent sound, float volume, float pitch) { + this.playSound(sound, volume, pitch); + } + + protected void projectRoyalSound(SoundEvent sound, float volume, float pitch, @Nullable LivingEntity focus) { + if (this.level().isClientSide) { + return; + } + java.util.Set recipients = new java.util.LinkedHashSet<>(this.bossEvent.getPlayers()); + if (focus instanceof ServerPlayer focusPlayer) { + recipients.add(focusPlayer); + } + for (ServerPlayer player : recipients) { + player.connection.send(new net.minecraft.network.protocol.game.ClientboundSoundPacket( + net.minecraft.core.Holder.direct(sound), + net.minecraft.sounds.SoundSource.HOSTILE, + player.getX(), player.getY(), player.getZ(), + volume, pitch, + this.random.nextLong())); + } + } + + private final java.util.Map, CachedFluidCheck> cachedFluidChecks = new java.util.HashMap<>(2); + + public boolean shouldRunHeavyBlockChecks() { + return (this.tickCount + this.getId()) % HEAVY_BLOCK_CHECK_INTERVAL_TICKS == 0; + } + + @Override + protected void tryCheckInsideBlocks() { + if (this.shouldRunHeavyBlockChecks()) { + super.tryCheckInsideBlocks(); + } + } + + @Override + public boolean updateFluidHeightAndDoFluidPushing(net.minecraft.tags.TagKey fluidTag, double motionScale) { + CachedFluidCheck cached = this.cachedFluidChecks.get(fluidTag); + if (cached == null || this.shouldRunHeavyBlockChecks()) { + boolean inFluid = super.updateFluidHeightAndDoFluidPushing(fluidTag, motionScale); + this.cachedFluidChecks.put(fluidTag, new CachedFluidCheck(inFluid, this.getFluidHeight(fluidTag))); + return inFluid; + } + if (cached.height() > 0.0D) { + this.fluidHeight.put(fluidTag, cached.height()); + } + return cached.inFluid(); + } + + private record CachedFluidCheck(boolean inFluid, double height) { + } + @Override public void travel(Vec3 travelVector) { - if (this.isFlyingBoss() && this.isEffectiveAi()) { + if (this.isRoyalFlying() && this.isEffectiveAi()) { this.moveRelative(this.getSpeed(), travelVector); this.move(MoverType.SELF, this.getDeltaMovement()); this.setDeltaMovement(this.getDeltaMovement().scale(0.91D)); @@ -315,7 +509,8 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult @Override public void tick() { super.tick(); - if (!this.level().isClientSide + if (this.shouldClearObstruction() + && !this.level().isClientSide && !this.isDeadOrDying() && this.tickCount % OBSTRUCTION_CLEAR_INTERVAL_TICKS == 0 && this.isInWall()) { @@ -329,19 +524,28 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult OBSTRUCTION_CLEAR_DROP_CHANCE); } if (this.isFlyingBoss()) { - this.setNoGravity(!AntarchyGravityApi.isGravityInverted(this)); + this.moveControl = this.isRoyalFlying() ? this.flyingMoveControl : this.groundMoveControl; + this.navigation = this.isRoyalFlying() ? this.flyingNavigation : this.groundNavigation; + this.setNoGravity(!GravityApi.isGravityInverted(this)); + if (!this.isRoyalFlying()) { + this.setNoGravity(false); + } } if (this.level().isClientSide) { return; } - if (this.isFlyingBoss() && !this.isDeadOrDying()) { + if (this.isRoyalFlying() && !this.isDeadOrDying() && !this.landingForCombat + && !this.blocksRoyalAttacksForMovement()) { this.tickFlyingAltitude(); } this.bossEvent.setProgress(this.getHealth() / this.getMaxHealth()); this.attackScheduler.tick(); + if (this.recoveryWindowTicks > 0) { + this.recoveryWindowTicks--; + } - if (this.isFlyingBoss() && this.tickCount % 40 == 0 && this.royalFlyLoopSound() != null) { + if (this.isRoyalFlying() && this.tickCount % 40 == 0 && this.royalFlyLoopSound() != null) { this.playRoyalSound(this.royalFlyLoopSound(), 0.92F + this.random.nextFloat() * 0.12F); } @@ -349,6 +553,23 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult return; } + Phase currentPhase = this.phase(); + if (this.trackedPhase == null) { + this.trackedPhase = currentPhase; + } else if (currentPhase != this.trackedPhase) { + Phase previousPhase = this.trackedPhase; + this.trackedPhase = currentPhase; + this.startRoyalPhaseTransition(previousPhase, currentPhase); + } + if (this.phaseTransitionTicks > 0) { + int elapsedTicks = this.phaseTransitionDuration - this.phaseTransitionTicks; + this.tickRoyalPhaseTransition(this.trackedPhase, elapsedTicks, this.phaseTransitionTicks); + if (--this.phaseTransitionTicks == 0) { + this.onRoyalPhaseTransitionCompleted(this.trackedPhase); + } + return; + } + LivingEntity primaryTarget = this.getTarget(); if (primaryTarget == null || !primaryTarget.isAlive() || !this.canAttack(primaryTarget)) { for (RoyalHead head : this.heads) { @@ -357,14 +578,29 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult return; } - this.getLookControl().setLookAt(primaryTarget, 30.0F, 30.0F); + this.initializeMultiplayerScaling(primaryTarget); this.assignHeadTargets(primaryTarget); - this.tickRoyalBeam(primaryTarget); - this.steerTowardTarget(primaryTarget); + + this.tickCombatLocomotionMode(primaryTarget); + boolean movementBlocksAttacks = this.blocksRoyalAttacksForMovement(); + if (!movementBlocksAttacks) { + boolean aeriallyStabilized = this.steerTowardTarget(primaryTarget); + if (!aeriallyStabilized) { + this.getLookControl().setLookAt(primaryTarget, 30.0F, 30.0F); + } + } + this.tickRoyalBeam(primaryTarget, + !movementBlocksAttacks && !this.blocksRoyalBeamScheduling()); + if (movementBlocksAttacks) { + return; + } this.tickBodyCrush(); Phase phase = this.phase(); int activeHeadAttacks = 0; + if (this.recoveryWindowTicks > 0) { + return; + } for (RoyalHead head : this.heads) { if (this.attackScheduler.laneBusy(this.headLane(head))) { activeHeadAttacks++; @@ -372,7 +608,7 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult } for (RoyalHead head : this.heads) { - if (activeHeadAttacks >= phase.maxConcurrentHeadAttacks()) { + if (activeHeadAttacks >= this.maxConcurrentHeadAttacks(phase)) { break; } if (!head.readyToAttack() || this.attackScheduler.laneBusy(this.headLane(head))) { @@ -392,52 +628,67 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult || super.isInvulnerableTo(source); } - private void tickRoyalBeam(LivingEntity primaryTarget) { - if (this.beamCooldownTicks > 0 || this.attackScheduler.laneBusy(this.beamLane())) { - this.beamCooldownTicks--; - } - - if (this.activeBeamHead != null) { - LivingEntity beamTarget = this.activeBeamHead.target(this.level()); - if (!this.activeBeamHead.shooting() || beamTarget == null || !beamTarget.isAlive()) { - this.stopRoyalBeam(); - } else if (!this.beamStarted) { - return; - } else { - if (this.beamLoopSoundTicks-- <= 0) { - this.beamLoopSoundTicks = 20; - this.playRoyalSound(this.royalBeamLoopSound(), 1.0F); - } - this.beamController.tick( - this.beamAnchor(this.activeBeamHead), - beamTarget, - this.royalBeamSettings(), - this.royalBeamTerrainMode(this.activeBeamHead), - this::setRoyalBeamEndPosition); - Vec3 beamEnd = this.beamController.beamEndPosition(); - if (beamEnd != null) { - this.tickRoyalBeamEffects(this.activeBeamHead, this.beamAnchor(this.activeBeamHead), beamEnd); - } - if (!this.beamController.isFiring()) { - this.stopRoyalBeam(); - } - return; + private void tickRoyalBeam(LivingEntity primaryTarget, boolean allowScheduling) { + Phase phase = this.phase(); + int activeBeams = 0; + for (RoyalHead head : this.heads) { + if (head.beamActive()) { + activeBeams++; } } - - if (this.beamCooldownTicks > 0) { + if (activeBeams == 0 || this.beamVolleyPhase != phase) { + this.beamVolleyPhase = phase; + this.beamVolleyLimit = Math.max(1, this.selectBeamVolleyLimit(phase)); + } + for (RoyalHead head : this.heads) { + int index = head.slot().ordinal(); + BeamController controller = this.beamControllers[index]; + if (controller.isFiring()) { + LivingEntity beamTarget = head.target(this.level()); + if (!head.shooting() || beamTarget == null || !beamTarget.isAlive() + || this.distanceTo(beamTarget) < this.royalBeamMinimumRange()) { + this.stopRoyalBeam(head); + continue; + } + if (this.beamLoopSoundTicks[index]-- <= 0) { + this.beamLoopSoundTicks[index] = 20; + this.playRoyalSound(this.royalBeamLoopSound(), 1.0F); + } + controller.tick( + this.beamAnchor(head), + this.beamDirection(head), + beamTarget, + this.royalBeamSettings(), + this.royalBeamTerrainMode(head), + end -> this.setRoyalBeamEndPosition(head.slot(), end), + this.royalBeamUsesTrackedAim()); + Vec3 beamEnd = controller.beamEndPosition(); + if (beamEnd != null) { + this.tickRoyalBeamEffects(head, this.beamAnchor(head), beamEnd); + } + if (!controller.isFiring()) { + this.stopRoyalBeam(head); + } + continue; + } + } + if (!allowScheduling || this.recoveryWindowTicks > 0) { return; } - Phase phase = this.phase(); - for (int offset = 0; offset < this.heads.length; offset++) { - RoyalHead head = this.heads[(this.beamHeadCursor + offset) % this.heads.length]; + for (RoyalHead head : this.heads) { + int index = head.slot().ordinal(); + if (activeBeams >= this.beamVolleyLimit) { + continue; + } LivingEntity target = head.target(this.level()); if (!head.readyToAttack() || this.attackScheduler.laneBusy(this.headLane(head)) || target == null || !this.canAttack(target) - || this.headWithinBiteReach(head, target)) { + || this.distanceTo(target) < this.royalBeamMinimumRange() + || this.headWithinBiteReach(head, target) + || !this.targetInBeamLine(head, target)) { continue; } - RoyalBeamSettings beamSettings = this.royalBeamSettings(); + BeamSettings beamSettings = this.royalBeamSettings(); int duration = Math.max(1, beamSettings.durationTicks()); int cooldown = Math.max(1, Mth.floor(beamSettings.cooldownTicks() * phase.cooldownScale())); int windup = Math.max(0, AntarchySettings.queenBeamWindupTicks()); @@ -445,60 +696,145 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult windup = Math.max(0, AntarchySettings.kingBeamWindupTicks()); } LivingEntity committedTarget = target; - if (!this.attackScheduler.start("beam_" + head.slot().name(), this.beamLane(), cooldown, + if (!this.beginRoyalAttack("beam_" + head.slot().name(), this.headLane(head), cooldown, windup, duration, 8, new RoyalAttackScheduler.Action() { @Override public void onStart() { head.startShoot(); + RoyalBossEntity.this.triggerAnim(head.slot().controllerName(), "shoot"); } @Override public void onActive(int elapsedTicks) { - if (elapsedTicks != 0 || RoyalBossEntity.this.beamStarted) { + if (elapsedTicks != 0 || RoyalBossEntity.this.beamControllers[index].isFiring()) { return; } - RoyalBossEntity.this.beamStarted = true; - RoyalBossEntity.this.beamController.start( + RoyalBossEntity.this.beamControllers[index].start( RoyalBossEntity.this.beamAnchor(head), committedTarget.getEyePosition(), duration); - RoyalBossEntity.this.entityData.set(BEAM_ELEMENT, RoyalBossEntity.this.royalBeamElement(head).ordinal()); - RoyalBossEntity.this.setFiringRoyalBeam(true); - RoyalBossEntity.this.triggerAnim(head.slot().controllerName(), "shoot"); - RoyalBossEntity.this.beamLoopSoundTicks = 20; - RoyalBossEntity.this.playRoyalSound(RoyalBossEntity.this.royalBeamStartSound(head), 1.0F); + RoyalBossEntity.this.entityData.set(BEAM_ELEMENT[index], RoyalBossEntity.this.royalBeamElement(head).ordinal()); + RoyalBossEntity.this.entityData.set(BEAM_ACTIVE[index], true); + RoyalBossEntity.this.beamLoopSoundTicks[index] = 20; + RoyalBossEntity.this.playRoyalSound(RoyalBossEntity.this.royalBeamStartSound(head), + RoyalBossEntity.this.royalBeamStartSoundVolume(head), 1.0F); RoyalBossEntity.this.playRoyalSound(RoyalBossEntity.this.royalBeamShootSound(), 1.0F); } @Override public void onComplete() { - if (RoyalBossEntity.this.activeBeamHead == head) { - RoyalBossEntity.this.stopRoyalBeam(); - } + RoyalBossEntity.this.stopRoyalBeam(head); + RoyalBossEntity.this.startRoyalRecovery(RECOVERY_AFTER_BEAM_TICKS); } })) { continue; } head.setBeamActive(true); - this.activeBeamHead = head; - this.beamHeadCursor = (head.slot().partIndex()) % this.heads.length; - this.beamCooldownTicks = cooldown; - this.beamStarted = false; - return; + activeBeams++; } } - private void stopRoyalBeam() { - if (this.activeBeamHead != null) { - this.activeBeamHead.setBeamActive(false); - this.activeBeamHead.stopShoot(); + protected int selectBeamVolleyLimit(Phase phase) { + return phase.maxConcurrentHeadAttacks(); + } + + protected boolean royalBeamUsesTrackedAim() { + return false; + } + + protected boolean isRoyalRecoveryActive() { + return this.recoveryWindowTicks > 0; + } + + protected void startRoyalRecovery(int ticks) { + this.recoveryWindowTicks = Math.max(this.recoveryWindowTicks, ticks); + } + + protected final void addGravityAwareImpulse(Entity entity, Vec3 worldImpulse) { + GravityApi.setWorldVelocity(entity, + GravityApi.getWorldVelocity(entity).add(worldImpulse)); + } + + protected final boolean isRoyalPhaseTransitionActive() { + return this.phaseTransitionTicks > 0; + } + + private void startRoyalPhaseTransition(Phase previousPhase, Phase nextPhase) { + this.phaseTransitionDuration = Math.max(1, this.royalPhaseTransitionDuration(nextPhase)); + this.phaseTransitionTicks = this.phaseTransitionDuration; + for (RoyalAttackLane lane : RoyalAttackLane.values()) { + this.attackScheduler.cancel(lane); } - this.activeBeamHead = null; - this.beamStarted = false; - this.attackScheduler.cancel(this.beamLane()); - this.beamController.stop(); - this.entityData.set(BEAM_ELEMENT, RoyalBeamElement.GENERIC.ordinal()); + for (RoyalHead head : this.heads) { + if (head.beamActive() || head.shooting()) { + this.stopRoyalBeam(head); + } + } + this.getNavigation().stop(); + this.onRoyalPhaseTransitionStarted(previousPhase, nextPhase); + } + + protected final List royalEncounterPlayers(ServerLevel level) { + double range = Math.max(32.0D, this.getAttributeValue(Attributes.FOLLOW_RANGE)); + LinkedHashSet players = new LinkedHashSet<>(this.bossEvent.getPlayers()); + players.addAll(level.getPlayers(player -> player.isAlive() + && !player.isSpectator() + && player.distanceToSqr(this) <= range * range)); + players.removeIf(player -> !player.isAlive() || player.isSpectator() || player.level() != level + || player.distanceToSqr(this) > range * range); + return List.copyOf(players); + } + + private void initializeMultiplayerScaling(LivingEntity target) { + if (this.multiplayerScalingInitialized || !(this.level() instanceof ServerLevel level)) { + return; + } + this.multiplayerScalingInitialized = true; + if (!AntarchySettings.royalBossMultiplayerScalingEnabled()) { + return; + } + int maxPlayers = Math.max(1, AntarchySettings.royalBossScalingMaxPlayers()); + double encounterRange = Math.max(32.0D, this.getAttributeValue(Attributes.FOLLOW_RANGE)); + List players = level.getPlayers(player -> player.isAlive() + && !player.isSpectator() + && player.distanceToSqr(this) <= encounterRange * encounterRange); + if (target instanceof ServerPlayer player && player.isAlive() && !players.contains(player)) { + players.add(player); + } + int participantCount = Math.min(maxPlayers, Math.max(1, players.size())); + for (ServerPlayer player : players) { + if (this.encounterParticipants.size() >= participantCount) { + break; + } + this.encounterParticipants.add(player.getUUID()); + } + double healthMultiplier = 1.0D + Math.max(0, participantCount - 1) + * Math.max(0.0D, AntarchySettings.royalBossHealthPerAdditionalPlayer()); + double baseHealth = this.getAttributeBaseValue(Attributes.MAX_HEALTH); + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(baseHealth * healthMultiplier); + this.setHealth(this.getMaxHealth()); + double damageMultiplier = Math.max(0.0D, participantCount - 1) + * Math.max(0.0D, AntarchySettings.royalBossDamagePerAdditionalPlayer()); + this.royalDamageMultiplier = 1.0D + damageMultiplier; + this.applyRoyalDamageModifier(); + } + + private void stopRoyalBeam(RoyalHead head) { + int index = head.slot().ordinal(); + head.setBeamActive(false); + head.stopShoot(); + this.beamControllers[index].stop(); + this.entityData.set(BEAM_ACTIVE[index], false); + this.entityData.set(BEAM_ELEMENT[index], RoyalBeamElement.GENERIC.ordinal()); this.playRoyalSound(this.royalBeamEndSound(), 1.0F); - this.setFiringRoyalBeam(false); - this.setRoyalBeamEndPosition(null); + this.setRoyalBeamEndPosition(head.slot(), null); + } + + protected final void stopRoyalBeamsForDirectedAttack() { + for (RoyalHead head : this.heads) { + if (head.beamActive() || head.shooting()) { + this.attackScheduler.cancel(this.headLane(head)); + this.stopRoyalBeam(head); + } + } } public Phase phase() { @@ -513,6 +849,12 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult } private void assignHeadTargets(LivingEntity fallback) { + if (!this.shouldDistributeHeadTargets(fallback)) { + for (RoyalHead head : this.heads) { + head.setTarget(fallback); + } + return; + } List candidates = this.level().getEntitiesOfClass( Player.class, this.getBoundingBox().inflate(AntarchySettings.royalBossFollowRange()), @@ -524,7 +866,7 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult return; } - int[] assignedCounts = new int[candidates.size()]; + Arrays.fill(this.assignedHeadCounts, 0); for (RoyalHead head : this.heads) { Vec3 anchor = this.headAnchor(head); int bestIndex = 0; @@ -532,45 +874,138 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult double bestDistance = Double.MAX_VALUE; for (int i = 0; i < candidates.size(); i++) { double distance = candidates.get(i).position().distanceToSqr(anchor); - if (assignedCounts[i] < bestCount || (assignedCounts[i] == bestCount && distance < bestDistance)) { + if (this.assignedHeadCounts[i] < bestCount || (this.assignedHeadCounts[i] == bestCount && distance < bestDistance)) { bestIndex = i; - bestCount = assignedCounts[i]; + bestCount = this.assignedHeadCounts[i]; bestDistance = distance; } } - assignedCounts[bestIndex]++; + this.assignedHeadCounts[bestIndex]++; head.setTarget(candidates.get(bestIndex)); } } - private void steerTowardTarget(LivingEntity target) { - double reach = this.getBbWidth() * 0.5D + this.biteReach() * 0.5D; + protected boolean shouldDistributeHeadTargets(LivingEntity primaryTarget) { + return true; + } + + private boolean steerTowardTarget(LivingEntity target) { double dx = target.getX() - this.getX(); double dz = target.getZ() - this.getZ(); - boolean closeHorizontally = (dx * dx + dz * dz) <= reach * reach; + double horizontalDistance = Math.sqrt(dx * dx + dz * dz); + Vec3 awayFromTarget = horizontalDistance > 1.0E-4D + ? new Vec3(-dx / horizontalDistance, 0.0D, -dz / horizontalDistance) + : this.getViewVector(1.0F).multiply(-1.0D, 0.0D, -1.0D).normalize(); + double standoff = this.combatStandoffDistance(); + Vec3 wanted = target.position().add(awayFromTarget.scale(standoff)); + boolean atStandoff = this.position().multiply(1.0D, 0.0D, 1.0D) + .distanceToSqr(wanted.multiply(1.0D, 0.0D, 1.0D)) <= 4.0D; + boolean anyHeadInBiteRange = Arrays.stream(this.heads) + .anyMatch(head -> this.headWithinBiteReach(head, target)); + double approachSpeed = anyHeadInBiteRange ? 1.0D : this.biteApproachSpeed(); - if (!this.isFlyingBoss()) { - if (closeHorizontally) { + if (!this.isRoyalFlying()) { + this.aerialCombatAnchor = null; + this.aerialCombatAnchorTicks = 0; + if (atStandoff) { this.getNavigation().stop(); } else { - this.getMoveControl().setWantedPosition(target.getX(), target.getY(), target.getZ(), 1.0D); + this.getMoveControl().setWantedPosition(wanted.x, target.getY(), wanted.z, approachSpeed); } - return; + return false; } - boolean inverted = AntarchyGravityApi.isGravityInverted(this); - double groundBelowTarget = this.groundYBelow(target.getX(), target.getZ()); - double wantedY = inverted + double verticalDistance = Math.abs(target.getY() + target.getBbHeight() * 0.5D + - (this.getY() + this.getBbHeight() * 0.5D)); + if (!this.landingForCombat && verticalDistance > 6.0D) { + if (this.aerialCombatAnchor == null || this.aerialCombatAnchorTicks-- <= 0) { + double anchorX = this.getX(); + double anchorZ = this.getZ(); + if (horizontalDistance > 10.0D) { + anchorX = wanted.x; + anchorZ = wanted.z; + } + this.aerialCombatAnchor = new Vec3(anchorX, this.getY(), anchorZ); + this.aerialCombatAnchorTicks = 20; + } + Vec3 anchor = this.aerialCombatAnchor; + this.getMoveControl().setWantedPosition(anchor.x, anchor.y, anchor.z, Math.min(approachSpeed, 0.85D)); + return true; + } + this.aerialCombatAnchor = null; + this.aerialCombatAnchorTicks = 0; + + boolean inverted = GravityApi.isGravityInverted(this); + double groundBelowTarget = this.groundYBelow(wanted.x, wanted.z); + double wantedY = this.landingForCombat + ? (inverted ? target.getY() + target.getBbHeight() - this.getBbHeight() : groundBelowTarget) + : inverted ? target.getY() - 3.0D : Mth.clamp(target.getY() + 3.0D, groundBelowTarget + FLYING_MIN_HOVER, groundBelowTarget + FLYING_MAX_HOVER_ABOVE_GROUND); boolean closeVertically = Math.abs(wantedY - this.getY()) <= 2.5D; - if (closeHorizontally && closeVertically) { + if (atStandoff && closeVertically) { this.getNavigation().stop(); } else { - this.getMoveControl().setWantedPosition(target.getX(), wantedY, target.getZ(), 1.1D); + this.getMoveControl().setWantedPosition(wanted.x, wantedY, wanted.z, approachSpeed); } + return false; + } + + protected double combatStandoffDistance() { + return Math.max(this.getBbWidth() * 0.55D, + BEAM_MUZZLE_FORWARD - this.biteReach() * 0.65D + 1.0D); + } + + private void tickCombatLocomotionMode(LivingEntity target) { + if (!this.isFlyingBoss() || this.managesOwnCombatLocomotion()) { + return; + } + boolean inverted = GravityApi.isGravityInverted(this); + double groundY = this.groundYBelow(this.getX(), this.getZ()); + if (this.landingForCombat) { + if (!target.onGround()) { + this.landingForCombat = false; + this.locomotionDecisionTicks = 60; + } else if (this.onGround() || !inverted && this.getY() <= groundY + 1.0D) { + this.landingForCombat = false; + this.setRoyalFlying(false); + this.locomotionDecisionTicks = 100 + this.random.nextInt(100); + } + return; + } + + if (--this.locomotionDecisionTicks > 0) { + return; + } + if (this.isRoyalFlying()) { + this.locomotionDecisionTicks = 60 + this.random.nextInt(80); + if (target.onGround() && this.random.nextDouble() < this.groundCombatBias()) { + this.landingForCombat = true; + } + } else if (!target.onGround() || this.random.nextDouble() >= this.groundCombatBias()) { + this.setRoyalFlying(true); + this.setDeltaMovement(this.getDeltaMovement().add(0.0D, 0.35D, 0.0D)); + this.locomotionDecisionTicks = 80 + this.random.nextInt(100); + } else { + this.locomotionDecisionTicks = 80 + this.random.nextInt(80); + } + } + + public boolean isRoyalFlying() { + return this.isFlyingBoss() && this.entityData.get(ROYAL_FLYING); + } + + protected final void setRoyalFlying(boolean flying) { + if (this.entityData.get(ROYAL_FLYING) == flying) { + return; + } + this.navigation.stop(); + this.entityData.set(ROYAL_FLYING, flying); + this.moveControl = flying ? this.flyingMoveControl : this.groundMoveControl; + this.navigation = flying ? this.flyingNavigation : this.groundNavigation; + this.setNoGravity(flying && !GravityApi.isGravityInverted(this)); } protected double groundYBelow(double x, double z) { @@ -579,7 +1014,7 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult } private void tickFlyingAltitude() { - if (AntarchyGravityApi.isGravityInverted(this)) { + if (GravityApi.isGravityInverted(this)) { return; } if (this.onGround()) { @@ -608,14 +1043,14 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult Vec3 forward = new Vec3(-Math.sin(yaw), 0.0D, Math.cos(yaw)); Vec3 center = new Vec3( this.getX() + forward.x * (this.getBbWidth() * 0.45D), - this.getY() + (this.isFlyingBoss() ? 0.0D : 1.0D), + this.getY() + (this.isRoyalFlying() ? 0.0D : 1.0D), this.getZ() + forward.z * (this.getBbWidth() * 0.45D)); RoyalBlockDestruction.destroySphere(serverLevel, this, center, CRUSH_RADIUS, CRUSH_MAX_BLOCKS, CRUSH_MAX_RESISTANCE, CRUSH_DROP_CHANCE); } private void startBite(RoyalHead head, Phase phase) { - int cooldown = Math.max(10, Mth.floor(AntarchySettings.royalBossBiteCooldownTicks() * phase.cooldownScale())); - if (!this.attackScheduler.start("bite_" + head.slot().name(), headLane(head), cooldown, + int cooldown = this.biteCooldownTicks(phase); + if (!this.beginRoyalAttack("bite_" + head.slot().name(), headLane(head), cooldown, BITE_HIT_TICK, 1, BITE_DURATION_TICKS - BITE_HIT_TICK, new RoyalAttackScheduler.Action() { @Override @@ -652,7 +1087,16 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult protected boolean beginRoyalAttack(String id, RoyalAttackLane lane, int cooldownTicks, int windupTicks, int activeTicks, int recoveryTicks, RoyalAttackScheduler.Action action) { - return this.attackScheduler.start(id, lane, cooldownTicks, windupTicks, activeTicks, recoveryTicks, action); + int protectedRecovery = recoveryTicks; + if (lane == RoyalAttackLane.LEFT_HEAD || lane == RoyalAttackLane.CENTER_HEAD || lane == RoyalAttackLane.RIGHT_HEAD) { + protectedRecovery = Math.max(recoveryTicks, + HEAD_ATTACK_ANIMATION_TICKS - Math.max(0, windupTicks) - Math.max(1, activeTicks)); + } + return this.attackScheduler.start(id, lane, cooldownTicks, windupTicks, activeTicks, protectedRecovery, action); + } + + protected int animationRecovery(int animationTicks, int windupTicks, int activeTicks, int recoveryTicks) { + return Math.max(recoveryTicks, animationTicks - Math.max(0, windupTicks) - Math.max(1, activeTicks)); } private void applyBiteHit(RoyalHead head) { @@ -661,11 +1105,11 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult } Vec3 anchor = this.headAnchor(head); double reach = this.biteReach(); - float damage = (float) (this.getAttributeValue(Attributes.ATTACK_DAMAGE) * AntarchySettings.royalBossBiteDamageMultiplier()); + float damage = (float) (this.getAttributeValue(Attributes.ATTACK_DAMAGE) * this.biteDamageMultiplier()); DamageSource damageSource = this.damageSources().mobAttack(this); AABB box = new AABB(anchor, anchor).inflate(reach); for (LivingEntity living : this.level().getEntitiesOfClass(LivingEntity.class, box, entity -> entity.isAlive() && entity != this)) { - if (living instanceof RoyalBossEntity || living.getType() == this.getType()) { + if (!this.canDamageWithRoyalAttack(living)) { continue; } if (living.position().distanceToSqr(anchor) > reach * reach) { @@ -705,16 +1149,38 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult double yaw = this.yBodyRot * Mth.DEG_TO_RAD; Vec3 forward = new Vec3(-Math.sin(yaw), 0.0D, Math.cos(yaw)); Vec3 right = new Vec3(forward.z, 0.0D, -forward.x); - return new Vec3( - this.getX() + forward.x * spec.forwardOffset() + right.x * spec.lateralOffset(), - this.getY() + spec.yOffset(), - this.getZ() + forward.z * spec.forwardOffset() + right.z * spec.lateralOffset()); + Vec3 localOffset = new Vec3( + forward.x * spec.forwardOffset() + right.x * spec.lateralOffset(), + spec.yOffset(), + forward.z * spec.forwardOffset() + right.z * spec.lateralOffset()); + return this.position().add(GravityRotationUtil.vecPlayerToWorld(localOffset, + GravityApi.getGravityDirection(this))); } protected Vec3 beamAnchor(RoyalHead head) { return beamAnchor(head.slot(), this.getX(), this.getY(), this.getZ(), this.getYRot()); } + protected Vec3 beamDirection(RoyalHead head) { + float yaw = this.getYRot() * Mth.DEG_TO_RAD; + Vec3 localDirection = new Vec3(-Math.sin(yaw), 0.0D, Math.cos(yaw)); + return GravityRotationUtil.vecPlayerToWorld(localDirection, + GravityApi.getGravityDirection(this)).normalize(); + } + + protected boolean targetInBeamLine(RoyalHead head, LivingEntity target) { + Vec3 origin = this.beamAnchor(head); + Vec3 direction = this.beamDirection(head); + Vec3 toTarget = target.getEyePosition().subtract(origin); + double forwardDistance = toTarget.dot(direction); + if (forwardDistance <= 0.0D) { + return false; + } + Vec3 perpendicular = toTarget.subtract(direction.scale(forwardDistance)); + double tolerance = Math.max(1.5D, target.getBbWidth() * 1.5D); + return perpendicular.lengthSqr() <= tolerance * tolerance; + } + private Vec3 beamAnchor(RoyalHead.Slot slot, double x, double y, double z, float yaw) { double yawRadians = yaw * Mth.DEG_TO_RAD; Vec3 forward = new Vec3(-Math.sin(yawRadians), 0.0D, Math.cos(yawRadians)); @@ -724,10 +1190,17 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult case CENTER -> 0.0D; case RIGHT -> BEAM_MUZZLE_LATERAL; }; - return new Vec3( - x + forward.x * BEAM_MUZZLE_FORWARD + right.x * lateral, - y + BEAM_MUZZLE_Y, - z + forward.z * BEAM_MUZZLE_FORWARD + right.z * lateral); + double vertical = slot == RoyalHead.Slot.CENTER ? BEAM_MUZZLE_CENTER_Y : BEAM_MUZZLE_SIDE_Y; + Vec3 localOffset = new Vec3( + forward.x * BEAM_MUZZLE_FORWARD + right.x * lateral, + vertical, + forward.z * BEAM_MUZZLE_FORWARD + right.z * lateral); + return new Vec3(x, y, z).add(GravityRotationUtil.vecPlayerToWorld(localOffset, + GravityApi.getGravityDirection(this))); + } + + protected double royalBeamMinimumRange() { + return AntarchySettings.queenBeamMinimumRange(); } protected RoyalHead royalHead(RoyalHead.Slot slot) { @@ -737,14 +1210,27 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult @Override public void die(DamageSource damageSource) { if (!this.level().isClientSide) { + this.stopTriggeredAnimation("wing_action", null); + this.stopTriggeredAnimation("head_left", null); + this.stopTriggeredAnimation("head_center", null); + this.stopTriggeredAnimation("head_right", null); + this.stopTriggeredAnimation("body_action", null); for (RoyalHead head : this.heads) { head.reset(); } - this.beamController.stop(); + for (BeamController controller : this.beamControllers) { + controller.stop(); + } this.setFiringRoyalBeam(false); - this.setRoyalBeamEndPosition(null); + for (RoyalHead head : this.heads) { + this.stopRoyalBeam(head); + } + this.setRoyalFlying(false); this.getNavigation().stop(); this.setDeltaMovement(Vec3.ZERO); + this.setXRot(0.0F); + this.setYHeadRot(this.getYRot()); + this.yBodyRot = this.getYRot(); } super.die(damageSource); } @@ -768,6 +1254,7 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult -0.2D - this.random.nextDouble() * 0.15D, (this.random.nextDouble() - 0.5D) * 0.12D); itemEntity.setDefaultPickUpDelay(); + RoyalLootDropGlow.start(itemEntity); this.level().addFreshEntity(itemEntity); return itemEntity; } @@ -775,6 +1262,16 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult @Override protected void tickDeath() { this.deathTime++; + this.setNoGravity(false); + this.setXRot(0.0F); + this.setYHeadRot(this.getYRot()); + this.yBodyRot = this.getYRot(); + Vec3 movement = this.getDeltaMovement(); + if (this.onGround()) { + this.setDeltaMovement(movement.x * 0.6D, 0.0D, movement.z * 0.6D); + } else { + this.setDeltaMovement(movement.x * 0.8D, Math.min(-0.12D, movement.y), movement.z * 0.8D); + } if (this.deathTime == 20 && !this.level().isClientSide()) { this.level().broadcastEntityEvent(this, (byte) 60); } @@ -798,6 +1295,9 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult @Override public boolean hurt(DamageSource source, float amount) { + if (source.is(DamageTypes.GENERIC_KILL)) { + return super.hurt(source, amount); + } float cappedAmount = (float) Math.min(amount, AntarchySettings.royalBossMaxSingleHitDamage()); return super.hurt(source, cappedAmount); } @@ -819,70 +1319,96 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult } public boolean isFiringRoyalBeam() { - return this.entityData.get(FIRING); + for (RoyalHead.Slot slot : RoyalHead.Slot.values()) { + if (this.isFiringRoyalBeam(slot)) return true; + } + return false; } public void setFiringRoyalBeam(boolean firing) { - this.entityData.set(FIRING, firing); } - public RoyalBeamController beamController() { - return this.beamController; + public BeamController beamController() { + return this.beamControllers[0]; } public void setRoyalBeamEndPosition(@Nullable Vec3 position) { - this.entityData.set(HAS_BEAM_END, position != null); + this.setRoyalBeamEndPosition(RoyalHead.Slot.CENTER, position); + } + + public void setRoyalBeamEndPosition(RoyalHead.Slot slot, @Nullable Vec3 position) { + int index = slot.ordinal(); + this.entityData.set(BEAM_ACTIVE[index], position != null || this.beamControllers[index].isFiring()); if (position != null) { - this.entityData.set(BEAM_END_X, (float) position.x); - this.entityData.set(BEAM_END_Y, (float) position.y); - this.entityData.set(BEAM_END_Z, (float) position.z); + this.entityData.set(BEAM_END_X[index], (float) position.x); + this.entityData.set(BEAM_END_Y[index], (float) position.y); + this.entityData.set(BEAM_END_Z[index], (float) position.z); } } @Nullable public Vec3 getRoyalBeamEndPosition() { - if (!this.entityData.get(HAS_BEAM_END)) { - return null; - } - return new Vec3(this.entityData.get(BEAM_END_X), this.entityData.get(BEAM_END_Y), this.entityData.get(BEAM_END_Z)); + return this.getRoyalBeamEndPosition(RoyalHead.Slot.CENTER); } public Vec3 getRoyalBeamShootFrom(float partialTicks) { - if (this.activeBeamHead != null) { - double x = Mth.lerp(partialTicks, this.xo, this.getX()); - double y = Mth.lerp(partialTicks, this.yo, this.getY()); - double z = Mth.lerp(partialTicks, this.zo, this.getZ()); - float yaw = Mth.rotLerp(partialTicks, this.yRotO, this.getYRot()); - return this.beamAnchor(this.activeBeamHead.slot(), x, y, z, yaw); - } + return this.getRoyalBeamShootFrom(RoyalHead.Slot.CENTER, partialTicks); + } + + public Vec3 getRoyalBeamShootFrom(RoyalHead.Slot slot, float partialTicks) { double x = Mth.lerp(partialTicks, this.xo, this.getX()); - double y = Mth.lerp(partialTicks, this.yo, this.getY()) + this.getBbHeight() * 0.72D; + double y = Mth.lerp(partialTicks, this.yo, this.getY()); double z = Mth.lerp(partialTicks, this.zo, this.getZ()); - return new Vec3(x, y, z); + float yaw = Mth.rotLerp(partialTicks, this.yRotO, this.getYRot()); + return this.beamAnchor(slot, x, y, z, yaw); } public RoyalBeamElement getRoyalBeamElement() { - int ordinal = this.entityData.get(BEAM_ELEMENT); + return this.getRoyalBeamElement(RoyalHead.Slot.CENTER); + } + + public RoyalBeamElement getRoyalBeamElement(RoyalHead.Slot slot) { + int ordinal = this.entityData.get(BEAM_ELEMENT[slot.ordinal()]); return ordinal >= 0 && ordinal < RoyalBeamElement.values().length ? RoyalBeamElement.values()[ordinal] : RoyalBeamElement.GENERIC; } + public boolean isFiringRoyalBeam(RoyalHead.Slot slot) { + return this.entityData.get(BEAM_ACTIVE[slot.ordinal()]); + } + + @Nullable + public Vec3 getRoyalBeamEndPosition(RoyalHead.Slot slot) { + int index = slot.ordinal(); + if (!this.entityData.get(BEAM_ACTIVE[index])) return null; + return new Vec3(this.entityData.get(BEAM_END_X[index]), this.entityData.get(BEAM_END_Y[index]), this.entityData.get(BEAM_END_Z[index])); + } + + @Nullable + public RoyalHead.Slot getRoyalBeamHeadSlot() { + for (RoyalHead.Slot slot : RoyalHead.Slot.values()) { + if (this.isFiringRoyalBeam(slot)) return slot; + } + return null; + } + @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { controllers.add(new AnimationController<>(this, "locomotion", 4, this::locomotionPredicate)); + controllers.add(new AnimationController<>(this, "wing_action", 0, RoyalBossEntity::headIdle) + .triggerableAnim("wing_gust", RawAnimation.begin().thenPlay("wing_gust"))); controllers.add(new AnimationController<>(this, "head_left", 0, RoyalBossEntity::headIdle) - .triggerableAnim("bite", RawAnimation.begin().thenPlay("bite_1")) - .triggerableAnim("shoot", RawAnimation.begin().thenPlay("shoot_1"))); - controllers.add(new AnimationController<>(this, "head_center", 0, RoyalBossEntity::headIdle) - .triggerableAnim("bite", RawAnimation.begin().thenPlay("bite_2")) - .triggerableAnim("shoot", RawAnimation.begin().thenPlay("shoot_2"))); - controllers.add(new AnimationController<>(this, "head_right", 0, RoyalBossEntity::headIdle) .triggerableAnim("bite", RawAnimation.begin().thenPlay("bite_3")) .triggerableAnim("shoot", RawAnimation.begin().thenPlay("shoot_3"))); + controllers.add(new AnimationController<>(this, "head_center", 0, RoyalBossEntity::headIdle) + .triggerableAnim("bite", RawAnimation.begin().thenPlay("bite_1")) + .triggerableAnim("shoot", RawAnimation.begin().thenPlay("shoot_1"))); + controllers.add(new AnimationController<>(this, "head_right", 0, RoyalBossEntity::headIdle) + .triggerableAnim("bite", RawAnimation.begin().thenPlay("bite_2")) + .triggerableAnim("shoot", RawAnimation.begin().thenPlay("shoot_2"))); controllers.add(new AnimationController<>(this, "body_action", 0, this::bodyActionPredicate) .triggerableAnim("stomp", RawAnimation.begin().thenPlay("stomp")) - .triggerableAnim("wing_gust", RawAnimation.begin().thenPlay("wing_gust")) .triggerableAnim("minion_spawn", RawAnimation.begin().thenPlay("minion_spawn"))); } @@ -890,7 +1416,7 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult if (this.isDeadOrDying()) { return PlayState.STOP; } - if (this.isFlyingBoss()) { + if (this.isRoyalFlying()) { state.setAndContinue(FLY_ANIM); } else if (state.isMoving()) { state.setAndContinue(WALK_ANIM); @@ -911,6 +1437,54 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult return PlayState.STOP; } + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putBoolean("RoyalFlying", this.isRoyalFlying()); + tag.putBoolean("RoyalScalingInitialized", this.multiplayerScalingInitialized); + tag.putInt("RoyalScalingParticipants", this.encounterParticipants.size()); + tag.putDouble("RoyalDamageMultiplier", this.royalDamageMultiplier); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + this.setRoyalFlying(!tag.contains("RoyalFlying") || tag.getBoolean("RoyalFlying")); + this.multiplayerScalingInitialized = tag.getBoolean("RoyalScalingInitialized"); + this.royalDamageMultiplier = Math.max(1.0D, tag.getDouble("RoyalDamageMultiplier")); + if (tag.contains("RoyalScalingParticipants")) { + int count = Math.max(1, tag.getInt("RoyalScalingParticipants")); + for (int i = 0; i < count; i++) { + this.encounterParticipants.add(new UUID(0L, i + 1L)); + } + } + this.applyRoyalDamageModifier(); + } + + @Override + public float scaleBeamDamage(float damage) { + return this.scaleRoyalDamage(damage); + } + + @Override + public boolean canBeamDamage(LivingEntity target) { + return this.canDamageWithRoyalAttack(target); + } + + public float scaleRoyalDamage(double damage) { + return (float) (damage * this.royalDamageMultiplier); + } + + private void applyRoyalDamageModifier() { + AttributeInstance attackDamage = this.getAttribute(Attributes.ATTACK_DAMAGE); + if (attackDamage == null || this.royalDamageMultiplier <= 1.0D + || attackDamage.getModifier(MULTIPLAYER_DAMAGE_UUID) != null) { + return; + } + attackDamage.addPermanentModifier(new AttributeModifier(MULTIPLAYER_DAMAGE_UUID, MULTIPLAYER_DAMAGE_ID.toString(), + this.royalDamageMultiplier - 1.0D, AttributeModifier.Operation.MULTIPLY_BASE)); + } + @Override public AnimatableInstanceCache getAnimatableInstanceCache() { return this.geoCache; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBossMultipartLayout.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBossMultipartLayout.java index 37b380e4..41e27f97 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBossMultipartLayout.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBossMultipartLayout.java @@ -1,7 +1,7 @@ package com.craisinlord.antarchy.content.entity.royal; -import com.craisinlord.antarchy.content.entity.multipart.MultipartLayout; -import com.craisinlord.antarchy.content.entity.multipart.MultipartPartDefinition; +import com.craisinlord.anthology.multipart.MultipartLayout; +import com.craisinlord.anthology.multipart.MultipartPartDefinition; public final class RoyalBossMultipartLayout implements MultipartLayout { public static final RoyalBossMultipartLayout INSTANCE = new RoyalBossMultipartLayout(); @@ -9,11 +9,11 @@ public final class RoyalBossMultipartLayout implements MultipartLayout { public static final MultipartPartDefinition BODY = new MultipartPartDefinition( "body", 20.0F, 24.0F, 1.00F, 0.0D, 3.0D, 0.0D, true); public static final MultipartPartDefinition LEFT_HEAD = new MultipartPartDefinition( - "left_head", 4.0F, 4.0F, 1.30F, 12.0D, 20.0D, -7.0D, true); + "left_head", 4.0F, 4.0F, 1.30F, 24.75D, 8.5D, -2.625D, true); public static final MultipartPartDefinition CENTER_HEAD = new MultipartPartDefinition( - "center_head", 4.5F, 4.5F, 1.20F, 13.0D, 22.0D, 0.0D, true); + "center_head", 4.5F, 4.5F, 1.20F, 24.75D, 9.5D, 0.0D, true); public static final MultipartPartDefinition RIGHT_HEAD = new MultipartPartDefinition( - "right_head", 4.0F, 4.0F, 1.30F, 12.0D, 20.0D, 7.0D, true); + "right_head", 4.0F, 4.0F, 1.30F, 24.75D, 8.5D, 2.625D, true); public static final MultipartPartDefinition LEFT_WING = new MultipartPartDefinition( "left_wing", 14.0F, 16.0F, 0.85F, -2.0D, 14.0D, -13.0D, true); public static final MultipartPartDefinition RIGHT_WING = new MultipartPartDefinition( diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalElementalProjectileEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalElementalProjectileEntity.java index 72feface..58c411fb 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalElementalProjectileEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalElementalProjectileEntity.java @@ -5,11 +5,14 @@ import com.craisinlord.antarchy.content.entity.royal.beam.RoyalBeamElement; import com.craisinlord.antarchy.config.AntarchySettings; import net.minecraft.core.BlockPos; import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; @@ -32,13 +35,18 @@ import software.bernie.geckolib.core.object.PlayState; import software.bernie.geckolib.core.animation.RawAnimation; import software.bernie.geckolib.util.GeckoLibUtil; -/** Shared travelling shell for the King's fireball and iceball. Impact rules stay element-specific. */ public class RoyalElementalProjectileEntity extends ThrowableProjectile implements GeoEntity { private static final EntityDataAccessor ATTACK_TYPE = SynchedEntityData.defineId(RoyalElementalProjectileEntity.class, EntityDataSerializers.INT); private static final int FIREBALL = 0; private static final int ICEBALL = 1; + private static final int DREAM_FIREBALL = 2; private static final int MAX_LIFETIME = 100; + private static final float FIREBALL_SPEED = 1.5F; + private static final float ICEBALL_SPEED = 1.2F; + private static final float DREAM_FIREBALL_SPEED = 1.05F; + private static final double PROJECTILE_INERTIA = 0.985D; + private static final float DREAM_FIREBALL_INERTIA = 0.96F; private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); public RoyalElementalProjectileEntity(EntityType type, Level level) { @@ -52,11 +60,39 @@ public class RoyalElementalProjectileEntity extends ThrowableProjectile implemen AntarchyObjects.ROYAL_ELEMENTAL_PROJECTILE.get(), level); projectile.setOwner(owner); projectile.setPos(position.x, position.y, position.z); - projectile.setAttackType(element == RoyalBeamElement.ICE ? ICEBALL : FIREBALL); - projectile.shoot(direction.x, direction.y, direction.z, element == RoyalBeamElement.ICE ? 0.8F : 1.05F, 0.0F); + projectile.setAttackType(element == RoyalBeamElement.ICE ? ICEBALL + : element == RoyalBeamElement.DREAM_FIRE ? DREAM_FIREBALL : FIREBALL); + float speed = element == RoyalBeamElement.ICE ? ICEBALL_SPEED + : element == RoyalBeamElement.DREAM_FIRE ? DREAM_FIREBALL_SPEED : FIREBALL_SPEED; + projectile.shoot(direction.x, direction.y, direction.z, speed, 0.0F); return projectile; } + public static Vec3 aimDirection(Vec3 origin, LivingEntity target, RoyalBeamElement element) { + double speed = element == RoyalBeamElement.ICE ? ICEBALL_SPEED : FIREBALL_SPEED; + double gravity = element == RoyalBeamElement.ICE ? 0.006D : 0.018D; + double inertia = PROJECTILE_INERTIA; + Vec3 bestDirection = target.getEyePosition().subtract(origin).normalize(); + double bestError = Double.MAX_VALUE; + + for (int ticks = 1; ticks < MAX_LIFETIME; ticks++) { + double dragDistance = (1.0D - Math.pow(inertia, ticks)) / (1.0D - inertia); + Vec3 predictedTarget = target.getEyePosition().add(target.getDeltaMovement().scale(ticks)); + Vec3 displacement = predictedTarget.subtract(origin); + double gravityCompensation = gravity * (ticks - dragDistance) / (1.0D - inertia); + Vec3 initialVelocity = new Vec3( + displacement.x / dragDistance, + (displacement.y + gravityCompensation) / dragDistance, + displacement.z / dragDistance); + double error = Math.abs(initialVelocity.length() - speed); + if (error < bestError) { + bestError = error; + bestDirection = initialVelocity.normalize(); + } + } + return bestDirection; + } + @Override protected void defineSynchedData() { this.entityData.define(ATTACK_TYPE, FIREBALL); @@ -66,16 +102,20 @@ public class RoyalElementalProjectileEntity extends ThrowableProjectile implemen return this.entityData.get(ATTACK_TYPE) == ICEBALL; } + public boolean isDreamFireball() { + return this.entityData.get(ATTACK_TYPE) == DREAM_FIREBALL; + } + private void setAttackType(int type) { this.entityData.set(ATTACK_TYPE, type); } protected double getDefaultGravity() { - return this.isIceball() ? 0.012D : 0.018D; + return this.isIceball() ? 0.006D : 0.018D; } protected float getInertia() { - return this.isIceball() ? 0.985F : 0.96F; + return this.isDreamFireball() ? DREAM_FIREBALL_INERTIA : (float) PROJECTILE_INERTIA; } @Override @@ -86,7 +126,7 @@ public class RoyalElementalProjectileEntity extends ThrowableProjectile implemen } super.tick(); if (this.level().isClientSide) { - this.level().addParticle(this.isIceball() ? ParticleTypes.SNOWFLAKE : ParticleTypes.FLAME, + this.level().addParticle(this.getTrailParticle(), this.getX(), this.getY(), this.getZ(), 0.0D, 0.0D, 0.0D); } } @@ -126,21 +166,51 @@ public class RoyalElementalProjectileEntity extends ThrowableProjectile implemen private void impactFire(ServerLevel level, Vec3 center) { DamageSource source = this.damageSources().mobProjectile(this, this.getOwner() instanceof LivingEntity living ? living : null); for (LivingEntity living : level.getEntitiesOfClass(LivingEntity.class, new AABB(center, center).inflate(5.0D), - entity -> entity.isAlive() && entity != this.getOwner())) { + this::canDamageWithImpact)) { double distance = Math.max(0.5D, living.position().distanceTo(center)); float falloff = (float) Math.max(0.25D, 1.0D - distance / 5.0D); - living.hurt(source, (float) (AntarchySettings.kingFireballDamage() * falloff)); + double damage = AntarchySettings.kingFireballDamage() * falloff; + living.hurt(source, this.getOwner() instanceof RoyalBossEntity royalBoss + ? royalBoss.scaleRoyalDamage(damage) : (float) damage); living.setRemainingFireTicks(Math.max(living.getRemainingFireTicks(), 120)); } - RoyalBlockDestruction.destroySphere(level, this, center, AntarchySettings.kingFireballRadius(), AntarchySettings.kingElementalTerrainCap(), 80.0D, 0.15F); + igniteImpact(level, center, this.isDreamFireball()); level.sendParticles(ParticleTypes.EXPLOSION_EMITTER, center.x, center.y, center.z, 4, 1.5D, 1.5D, 1.5D, 0.0D); + level.playSound(null, BlockPos.containing(center), SoundEvents.GENERIC_EXPLODE, + SoundSource.HOSTILE, this.isDreamFireball() ? 1.15F : 1.0F, + this.isDreamFireball() ? 0.78F : 0.92F); + } + + private void igniteImpact(ServerLevel level, Vec3 center, boolean dream) { + double radius = AntarchySettings.kingFireballRadius(); + int minX = (int) Math.floor(center.x - radius); + int minY = (int) Math.floor(center.y - radius); + int minZ = (int) Math.floor(center.z - radius); + int maxX = (int) Math.floor(center.x + radius); + int maxY = (int) Math.floor(center.y + radius); + int maxZ = (int) Math.floor(center.z + radius); + var fire = dream + ? BuiltInRegistries.BLOCK.getOptional(new net.minecraft.resources.ResourceLocation( + "antarchy", "dream_fire")).orElse(Blocks.FIRE) + : Blocks.FIRE; + for (BlockPos pos : BlockPos.betweenClosed(minX, minY, minZ, maxX, maxY, maxZ)) { + if (pos.distToCenterSqr(center.x, center.y, center.z) > radius * radius || !level.isEmptyBlock(pos)) { + continue; + } + BlockState state = fire.defaultBlockState(); + if (state.canSurvive(level, pos)) { + level.setBlockAndUpdate(pos, state); + } + } } private void impactIce(ServerLevel level, Vec3 center) { DamageSource source = this.damageSources().mobProjectile(this, this.getOwner() instanceof LivingEntity living ? living : null); for (LivingEntity living : level.getEntitiesOfClass(LivingEntity.class, new AABB(center, center).inflate(5.0D), - entity -> entity.isAlive() && entity != this.getOwner())) { - living.hurt(source, (float) AntarchySettings.kingIceballDamage()); + this::canDamageWithImpact)) { + double damage = AntarchySettings.kingIceballDamage(); + living.hurt(source, this.getOwner() instanceof RoyalBossEntity royalBoss + ? royalBoss.scaleRoyalDamage(damage) : (float) damage); living.setTicksFrozen(Math.min(living.getTicksRequiredToFreeze() + 80, living.getTicksFrozen() + 180)); living.addEffect(new net.minecraft.world.effect.MobEffectInstance(net.minecraft.world.effect.MobEffects.MOVEMENT_SLOWDOWN, 120, 3)); } @@ -148,6 +218,14 @@ public class RoyalElementalProjectileEntity extends ThrowableProjectile implemen level.sendParticles(ParticleTypes.SNOWFLAKE, center.x, center.y, center.z, 80, 4.0D, 2.0D, 4.0D, 0.08D); } + private boolean canDamageWithImpact(LivingEntity target) { + Entity owner = this.getOwner(); + if (!target.isAlive() || target == owner) { + return false; + } + return !(owner instanceof RoyalBossEntity royalBoss) || royalBoss.canDamageWithRoyalAttack(target); + } + private void coverInIce(ServerLevel level, Vec3 center, double radius, int cap) { int changed = 0; int minX = (int) Math.floor(center.x - radius); @@ -167,7 +245,15 @@ public class RoyalElementalProjectileEntity extends ThrowableProjectile implemen } protected net.minecraft.core.particles.ParticleOptions getTrailParticle() { - return this.isIceball() ? ParticleTypes.SNOWFLAKE : ParticleTypes.FLAME; + if (this.isIceball()) { + return ParticleTypes.SNOWFLAKE; + } + if (this.isDreamFireball() + && BuiltInRegistries.PARTICLE_TYPE.get(new net.minecraft.resources.ResourceLocation( + "antarchy", "dream_fire_flame")) instanceof net.minecraft.core.particles.ParticleOptions dreamFlame) { + return dreamFlame; + } + return ParticleTypes.FLAME; } @Override diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalHead.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalHead.java index 43e8de4b..d55d6cfa 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalHead.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalHead.java @@ -6,9 +6,9 @@ import org.jetbrains.annotations.Nullable; public final class RoyalHead { public enum Slot { - LEFT(1, "head_left", "bite_1", "shoot_1"), - CENTER(2, "head_center", "bite_2", "shoot_2"), - RIGHT(3, "head_right", "bite_3", "shoot_3"); + LEFT(1, "head_left", "bite_3", "shoot_3"), + CENTER(2, "head_center", "bite_1", "shoot_1"), + RIGHT(3, "head_right", "bite_2", "shoot_2"); private final int partIndex; private final String controllerName; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalIceSpikeEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalIceSpikeEntity.java index ae765726..56467d26 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalIceSpikeEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalIceSpikeEntity.java @@ -12,6 +12,8 @@ import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.level.Level; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; +import java.util.UUID; +import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; import software.bernie.geckolib.core.animation.AnimatableManager; @@ -22,11 +24,18 @@ import software.bernie.geckolib.core.animation.RawAnimation; import software.bernie.geckolib.util.GeckoLibUtil; public class RoyalIceSpikeEntity extends Entity implements GeoEntity { - // The exported asset contains one coordinated animation for all four spike groups. private static final RawAnimation SPIKE_ANIMATION = RawAnimation.begin().thenPlay("animation"); private static final String ANIMATION_CONTROLLER = "ice_spike"; private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); private boolean impacted; + @Nullable + private UUID ownerId; + private float customImpactDamage = -1.0F; + private double customImpactRadius = 2.2D; + private int customFreezeTicks = 100; + private int customSlowTicks; + private int customSlowAmplifier; + private double customKnockup = 0.35D; public RoyalIceSpikeEntity(EntityType type, Level level) { super(type, level); @@ -40,6 +49,24 @@ public class RoyalIceSpikeEntity extends Entity implements GeoEntity { return spike; } + public static RoyalIceSpikeEntity create(ServerLevel level, Vec3 position, LivingEntity owner) { + RoyalIceSpikeEntity spike = create(level, position); + spike.ownerId = owner.getUUID(); + return spike; + } + + public static RoyalIceSpikeEntity create(ServerLevel level, Vec3 position, LivingEntity owner, + float damage, double radius, int freezeTicks, int slowTicks, int slowAmplifier) { + RoyalIceSpikeEntity spike = create(level, position, owner); + spike.customImpactDamage = damage; + spike.customImpactRadius = radius; + spike.customFreezeTicks = freezeTicks; + spike.customSlowTicks = slowTicks; + spike.customSlowAmplifier = slowAmplifier; + spike.customKnockup = 0.1D; + return spike; + } + @Override protected void defineSynchedData() { } @@ -64,24 +91,71 @@ public class RoyalIceSpikeEntity extends Entity implements GeoEntity { private void impact(ServerLevel level) { DamageSource source = this.damageSources().magic(); + Entity owner = this.ownerId == null ? null : level.getEntity(this.ownerId); + if (this.ownerId != null && owner == null) return; for (LivingEntity living : level.getEntitiesOfClass(LivingEntity.class, - new AABB(this.blockPosition()).inflate(2.2D), entity -> entity.isAlive())) { - living.hurt(source, (float) AntarchySettings.kingIceSpikeDamage()); - living.setTicksFrozen(Math.min(living.getTicksRequiredToFreeze() + 60, living.getTicksFrozen() + 100)); - living.setDeltaMovement(living.getDeltaMovement().add(0.0D, 0.35D, 0.0D)); + new AABB(this.blockPosition()).inflate(this.customImpactRadius), entity -> entity.isAlive() + && entity.distanceToSqr(this.position()) <= this.customImpactRadius * this.customImpactRadius + && canHitOwnerTarget(owner, entity))) { + float damage = this.customImpactDamage >= 0.0F ? this.customImpactDamage + : owner instanceof RoyalBossEntity royalBoss + ? royalBoss.scaleRoyalDamage(AntarchySettings.kingIceSpikeDamage()) + : (float) AntarchySettings.kingIceSpikeDamage(); + boolean hit = owner instanceof net.minecraft.world.entity.player.Player player && this.customImpactDamage >= 0.0F + ? com.craisinlord.antarchy.content.item.RoyalGuardianSwordAbilities.applySecondaryDamage(player, living, damage) + : living.hurt(source, damage); + if (!hit) continue; + living.setTicksFrozen(Math.min(living.getTicksRequiredToFreeze() + 60, living.getTicksFrozen() + this.customFreezeTicks)); + if (this.customSlowTicks > 0) { + living.addEffect(new net.minecraft.world.effect.MobEffectInstance( + net.minecraft.world.effect.MobEffects.MOVEMENT_SLOWDOWN, this.customSlowTicks, this.customSlowAmplifier)); + } + living.setDeltaMovement(living.getDeltaMovement().add(0.0D, this.customKnockup, 0.0D)); living.hasImpulse = true; } level.sendParticles(ParticleTypes.SNOWFLAKE, this.getX(), this.getY() + 1.5D, this.getZ(), 25, 1.5D, 1.0D, 1.5D, 0.04D); } + private boolean canHitOwnerTarget(@Nullable Entity owner, LivingEntity target) { + if (owner == null) return this.ownerId == null; + if (target == owner || target.isAlliedTo(owner) || owner.isAlliedTo(target)) return false; + if (owner instanceof RoyalBossEntity royalBoss) return royalBoss.canDamageWithRoyalAttack(target); + if (owner instanceof net.minecraft.world.entity.player.Player player) { + return com.craisinlord.antarchy.content.item.RoyalGuardianSwordAbilities.canDamageTarget(player, target, false); + } + return true; + } + @Override protected void readAdditionalSaveData(CompoundTag tag) { this.impacted = tag.getBoolean("Impacted"); + if (tag.hasUUID("Owner")) { + this.ownerId = tag.getUUID("Owner"); + } + if (tag.contains("CustomImpactDamage")) { + this.customImpactDamage = tag.getFloat("CustomImpactDamage"); + this.customImpactRadius = tag.getDouble("CustomImpactRadius"); + this.customFreezeTicks = tag.getInt("CustomFreezeTicks"); + this.customSlowTicks = tag.getInt("CustomSlowTicks"); + this.customSlowAmplifier = tag.getInt("CustomSlowAmplifier"); + this.customKnockup = tag.getDouble("CustomKnockup"); + } } @Override protected void addAdditionalSaveData(CompoundTag tag) { tag.putBoolean("Impacted", this.impacted); + if (this.ownerId != null) { + tag.putUUID("Owner", this.ownerId); + } + if (this.customImpactDamage >= 0.0F) { + tag.putFloat("CustomImpactDamage", this.customImpactDamage); + tag.putDouble("CustomImpactRadius", this.customImpactRadius); + tag.putInt("CustomFreezeTicks", this.customFreezeTicks); + tag.putInt("CustomSlowTicks", this.customSlowTicks); + tag.putInt("CustomSlowAmplifier", this.customSlowAmplifier); + tag.putDouble("CustomKnockup", this.customKnockup); + } } @Override diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalLootDropGlow.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalLootDropGlow.java new file mode 100644 index 00000000..a1a04227 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalLootDropGlow.java @@ -0,0 +1,37 @@ +package com.craisinlord.antarchy.content.entity.royal; + +import net.minecraft.world.entity.item.ItemEntity; + +public final class RoyalLootDropGlow { + private static final String TAG_PREFIX = "antarchy_royal_loot_glow_until_"; + public static final int DURATION_TICKS = 20 * 120; + + private RoyalLootDropGlow() { + } + + public static void start(ItemEntity itemEntity) { + long expiryTick = itemEntity.level().getGameTime() + DURATION_TICKS; + itemEntity.addTag(TAG_PREFIX + expiryTick); + itemEntity.setGlowingTag(true); + } + + public static void tick(ItemEntity itemEntity) { + if (itemEntity.level().isClientSide) return; + for (String tag : itemEntity.getTags()) { + if (!tag.startsWith(TAG_PREFIX)) continue; + long expiryTick; + try { + expiryTick = Long.parseLong(tag.substring(TAG_PREFIX.length())); + } catch (NumberFormatException ignored) { + itemEntity.removeTag(tag); + continue; + } + if (itemEntity.level().getGameTime() < expiryTick) { + itemEntity.setGlowingTag(true); + return; + } + itemEntity.removeTag(tag); + itemEntity.setGlowingTag(false); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalMountEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalMountEntity.java index 78d7f1dc..6cf4f91b 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalMountEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalMountEntity.java @@ -4,7 +4,13 @@ import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.entity.royal.beam.RoyalBeamElement; -import java.util.UUID; +import com.craisinlord.anthology.beam.BeamController; +import com.craisinlord.anthology.beam.BeamSettings; +import com.craisinlord.anthology.beam.BeamTerrainMode; +import com.craisinlord.antarchy.content.effect.RoyalEffectEligibility; +import com.craisinlord.antarchy.content.effect.RoyalEffectHooks; +import com.craisinlord.anthology.time.TimeDilationApi; +import net.minecraft.resources.ResourceLocation; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.syncher.EntityDataAccessor; @@ -20,12 +26,15 @@ import net.minecraft.world.InteractionResult; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.AgeableMob; import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityDimensions; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.MoverType; +import net.minecraft.world.entity.Pose; import net.minecraft.world.entity.TamableAnimal; import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.ai.control.FlyingMoveControl; import net.minecraft.world.entity.ai.control.MoveControl; @@ -40,17 +49,24 @@ import net.minecraft.world.entity.ai.goal.target.OwnerHurtTargetGoal; import net.minecraft.world.entity.ai.navigation.FlyingPathNavigation; import net.minecraft.world.entity.ai.navigation.GroundPathNavigation; import net.minecraft.world.entity.ai.navigation.PathNavigation; +import net.minecraft.world.entity.monster.Enemy; import net.minecraft.world.entity.animal.FlyingAnimal; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; +import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.pathfinder.BlockPathTypes; +import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.core.particles.ParticleTypes; +import java.util.UUID; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.core.animation.Animation; import software.bernie.geckolib.core.animation.AnimatableManager; import software.bernie.geckolib.core.animation.AnimationController; import software.bernie.geckolib.core.animation.AnimationState; @@ -59,6 +75,8 @@ import software.bernie.geckolib.core.animation.RawAnimation; import software.bernie.geckolib.util.GeckoLibUtil; public abstract class RoyalMountEntity extends TamableAnimal implements GeoEntity, FlyingAnimal { + private static final ResourceLocation GROWTH_HEALTH_MODIFIER = new ResourceLocation("antarchy", "royal_mount_growth_health"); + private static final UUID GROWTH_HEALTH_MODIFIER_UUID = UUID.nameUUIDFromBytes(GROWTH_HEALTH_MODIFIER.toString().getBytes()); public static final int ANIM_IDLE = 0; public static final int ANIM_WALK = 1; public static final int ANIM_FLY = 2; @@ -73,19 +91,39 @@ public abstract class RoyalMountEntity extends TamableAnimal implements GeoEntit SynchedEntityData.defineId(RoyalMountEntity.class, EntityDataSerializers.BOOLEAN); private static final EntityDataAccessor SADDLED = SynchedEntityData.defineId(RoyalMountEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor BEAM_ACTIVE = + SynchedEntityData.defineId(RoyalMountEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor BEAM_HEAD = + SynchedEntityData.defineId(RoyalMountEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor HAS_BEAM_END = + SynchedEntityData.defineId(RoyalMountEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor BEAM_END_X = + SynchedEntityData.defineId(RoyalMountEntity.class, EntityDataSerializers.FLOAT); + private static final EntityDataAccessor BEAM_END_Y = + SynchedEntityData.defineId(RoyalMountEntity.class, EntityDataSerializers.FLOAT); + private static final EntityDataAccessor BEAM_END_Z = + SynchedEntityData.defineId(RoyalMountEntity.class, EntityDataSerializers.FLOAT); + private static final EntityDataAccessor GROWTH_PROGRESS = + SynchedEntityData.defineId(RoyalMountEntity.class, EntityDataSerializers.FLOAT); + private static final EntityDataAccessor QUIRKING = + SynchedEntityData.defineId(RoyalMountEntity.class, EntityDataSerializers.BOOLEAN); private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); private static final RawAnimation QUIRK_ANIM = RawAnimation.begin().thenLoop("quirk"); private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); private static final RawAnimation FLY_ANIM = RawAnimation.begin().thenLoop("fly"); - private static final RawAnimation BITE_ANIM = RawAnimation.begin().thenPlay("bite"); - private static final RawAnimation FLY_BITE_ANIM = RawAnimation.begin().thenPlay("fly_bite"); - private static final RawAnimation SHOOT_ANIM = RawAnimation.begin().thenPlay("shoot"); - private static final RawAnimation FLY_SHOOT_ANIM = RawAnimation.begin().thenPlay("fly_shoot"); + private static final RawAnimation BITE_ANIM = RawAnimation.begin().then("bite", Animation.LoopType.PLAY_ONCE); + private static final RawAnimation FLY_BITE_ANIM = RawAnimation.begin().then("fly_bite", Animation.LoopType.PLAY_ONCE); + private static final RawAnimation SHOOT_ANIM = RawAnimation.begin().then("shoot", Animation.LoopType.PLAY_ONCE); + private static final RawAnimation FLY_SHOOT_ANIM = RawAnimation.begin().then("fly_shoot", Animation.LoopType.PLAY_ONCE); private static final int ACTION_TICKS = 12; private static final int BITE_HIT_TICK = 6; - private static final int GROW_TICKS = 24000; + private static final int BEAM_WINDUP_TICKS = 24; + private static final int BEAM_COOLDOWN_TICKS = 240; + private static final int BEAM_DURATION_TICKS = 12; + private static final int COMMAND_COOLDOWN_TICKS = 360; + private static final int TIME_FIELD_COOLDOWN_TICKS = 260; private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); private final MoveControl groundMoveControl; @@ -100,6 +138,12 @@ public abstract class RoyalMountEntity extends TamableAnimal implements GeoEntit private int flapSoundTimer; private boolean riderAscendPressed; private boolean riderDescendPressed; + private final BeamController beamController = new BeamController(this); + private int beamWindupTicks; + private int beamCooldownTicks; + private int beamHead; + private int commandCooldownTicks; + private int timeFieldCooldownTicks; protected RoyalMountEntity(EntityType entityType, Level level) { super(entityType, level); @@ -166,14 +210,15 @@ public abstract class RoyalMountEntity extends TamableAnimal implements GeoEntit this.goalSelector.addGoal(1, new SitWhenOrderedToGoal(this) { @Override public boolean canUse() { - return !RoyalMountEntity.this.isBaby() && super.canUse(); + return super.canUse(); } }); this.goalSelector.addGoal(2, new RoyalMountSpitGoal(this)); this.goalSelector.addGoal(3, new net.minecraft.world.entity.ai.goal.MeleeAttackGoal(this, 1.2D, true) { @Override protected void checkAndPerformAttack(LivingEntity target, double distance) { - if (this.isTimeToAttack()) { + if (this.isTimeToAttack() && distance <= this.getAttackReachSqr(target) + && this.mob.getSensing().hasLineOfSight(target)) { this.resetAttackCooldown(); RoyalMountEntity.this.startBite(); } @@ -181,14 +226,14 @@ public abstract class RoyalMountEntity extends TamableAnimal implements GeoEntit @Override public boolean canUse() { - return !RoyalMountEntity.this.isBaby() && !RoyalMountEntity.this.isVehicle() && super.canUse(); + return !RoyalMountEntity.this.isVehicle() && super.canUse(); } }); this.goalSelector.addGoal(4, new RoyalMountFollowOwnerGoal(this)); this.goalSelector.addGoal(6, new WaterAvoidingRandomStrollGoal(this, 0.8D) { @Override public boolean canUse() { - return !RoyalMountEntity.this.isBaby() && !RoyalMountEntity.this.isVehicle() + return !RoyalMountEntity.this.isVehicle() && !RoyalMountEntity.this.isOrderedToSit() && super.canUse(); } }); @@ -196,25 +241,25 @@ public abstract class RoyalMountEntity extends TamableAnimal implements GeoEntit this.goalSelector.addGoal(8, new RandomLookAroundGoal(this) { @Override public boolean canUse() { - return !RoyalMountEntity.this.isBaby() && super.canUse(); + return super.canUse(); } }); this.targetSelector.addGoal(1, new OwnerHurtByTargetGoal(this) { @Override public boolean canUse() { - return !RoyalMountEntity.this.isBaby() && super.canUse(); + return super.canUse(); } }); this.targetSelector.addGoal(2, new OwnerHurtTargetGoal(this) { @Override public boolean canUse() { - return !RoyalMountEntity.this.isBaby() && super.canUse(); + return super.canUse(); } }); this.targetSelector.addGoal(3, new HurtByTargetGoal(this) { @Override public boolean canUse() { - return !RoyalMountEntity.this.isBaby() && super.canUse(); + return super.canUse(); } }.setAlertOthers()); } @@ -225,6 +270,14 @@ public abstract class RoyalMountEntity extends TamableAnimal implements GeoEntit this.entityData.define(ANIM_STATE, ANIM_IDLE); this.entityData.define(FLYING, false); this.entityData.define(SADDLED, false); + this.entityData.define(BEAM_ACTIVE, false); + this.entityData.define(BEAM_HEAD, -1); + this.entityData.define(HAS_BEAM_END, false); + this.entityData.define(BEAM_END_X, 0.0F); + this.entityData.define(BEAM_END_Y, 0.0F); + this.entityData.define(BEAM_END_Z, 0.0F); + this.entityData.define(GROWTH_PROGRESS, 0.0F); + this.entityData.define(QUIRKING, false); } @Override @@ -232,6 +285,10 @@ public abstract class RoyalMountEntity extends TamableAnimal implements GeoEntit super.addAdditionalSaveData(tag); tag.putBoolean("Saddled", this.isSaddled()); tag.putBoolean("Flying", this.isFlying()); + tag.putInt("BeamCooldown", this.beamCooldownTicks); + tag.putInt("CommandCooldown", this.commandCooldownTicks); + tag.putInt("TimeFieldCooldown", this.timeFieldCooldownTicks); + tag.putFloat("GrowthProgress", this.getGrowthProgress()); } @Override @@ -239,12 +296,33 @@ public abstract class RoyalMountEntity extends TamableAnimal implements GeoEntit super.readAdditionalSaveData(tag); this.setSaddled(tag.getBoolean("Saddled")); this.setFlying(tag.getBoolean("Flying")); + this.actionTicks = 0; + this.actionHit = false; + this.spitCooldown = 0; + this.beamCooldownTicks = Math.max(0, tag.getInt("BeamCooldown")); + this.commandCooldownTicks = Math.max(0, tag.getInt("CommandCooldown")); + this.timeFieldCooldownTicks = Math.max(0, tag.getInt("TimeFieldCooldown")); + this.setGrowthProgress(tag.contains("GrowthProgress") ? tag.getFloat("GrowthProgress") : 0.0F); } public boolean isFlying() { return this.entityData.get(FLYING); } + @Override + public void onSyncedDataUpdated(EntityDataAccessor key) { + super.onSyncedDataUpdated(key); + if (FLYING.equals(key) && this.groundMoveControl != null) { + boolean flying = this.entityData.get(FLYING); + this.moveControl = flying ? this.flyingMoveControl : this.groundMoveControl; + this.navigation = flying ? this.flyingNavigation : this.groundNavigation; + this.setNoGravity(flying); + } + if (GROWTH_PROGRESS.equals(key)) { + this.refreshDimensions(); + } + } + public void setFlying(boolean flying) { if (this.entityData.get(FLYING) != flying) { this.entityData.set(FLYING, flying); @@ -273,12 +351,44 @@ public abstract class RoyalMountEntity extends TamableAnimal implements GeoEntit this.entityData.set(ANIM_STATE, state); } - public float getAgeScale() { - if (!this.isBaby()) { - return 1.0F; + public float getGrowthScale() { + return 1.0F + 14.0F * this.getGrowthProgress(); + } + + public float getGrowthProgress() { + return this.entityData.get(GROWTH_PROGRESS); + } + + public void setGrowthProgress(float progress) { + float clamped = Mth.clamp(progress, 0.0F, 1.0F); + if (this.getGrowthProgress() != clamped) { + float oldHealth = this.getHealth(); + this.entityData.set(GROWTH_PROGRESS, clamped); + var maxHealth = this.getAttribute(Attributes.MAX_HEALTH); + if (maxHealth != null) { + maxHealth.removeModifier(GROWTH_HEALTH_MODIFIER_UUID); + if (clamped > 0.0F) { + maxHealth.addTransientModifier(new AttributeModifier(GROWTH_HEALTH_MODIFIER_UUID, GROWTH_HEALTH_MODIFIER.toString(), + this.getGrowthScale() - 1.0D, AttributeModifier.Operation.MULTIPLY_BASE)); + } + this.setHealth(Math.min(oldHealth, this.getMaxHealth())); + } + this.refreshDimensions(); } - float progress = 1.0F - Mth.clamp(-this.getAge() / (float) GROW_TICKS, 0.0F, 1.0F); - return 0.35F + 0.65F * progress; + } + + @Override + public boolean hurt(DamageSource source, float amount) { + Entity attacker = source.getEntity(); + if (attacker != null && this.hasPassenger(attacker)) { + return false; + } + return super.hurt(source, amount); + } + + @Override + public EntityDimensions getDimensions(Pose pose) { + return super.getDimensions(pose).scale(this.getGrowthScale()); } @Override @@ -290,21 +400,37 @@ public abstract class RoyalMountEntity extends TamableAnimal implements GeoEntit public InteractionResult mobInteract(Player player, InteractionHand hand) { ItemStack stack = player.getItemInHand(hand); - if (this.isFood(stack)) { + if (stack.is(Items.GOLDEN_APPLE) && !this.isTame()) { + if (!this.level().isClientSide) { + if (!player.getAbilities().instabuild) { + stack.shrink(1); + } + this.tame(player); + this.heal(8.0F); + this.level().broadcastEntityEvent(this, (byte) 7); + } + return InteractionResult.sidedSuccess(this.level().isClientSide); + } + + if (stack.is(Items.ENCHANTED_GOLDEN_APPLE) && this.isTame() && this.isOwnedBy(player)) { if (!this.level().isClientSide) { if (!player.getAbilities().instabuild) { stack.shrink(1); } this.heal(8.0F); - if (this.isBaby()) { - this.ageUp((int) (-this.getAge() * 0.1F), true); - } - if (!this.isTame() && this.random.nextInt(3) == 0) { - this.tame(player); - this.level().broadcastEntityEvent(this, (byte) 7); - } else { - this.level().broadcastEntityEvent(this, (byte) 6); + this.setGrowthProgress(this.getGrowthProgress() + (1.0F - this.getGrowthProgress()) * 0.1F); + this.level().broadcastEntityEvent(this, (byte) 6); + } + return InteractionResult.sidedSuccess(this.level().isClientSide); + } + + if (this.isFood(stack)) { + if (!this.level().isClientSide && this.isTame() && this.isOwnedBy(player) && this.getHealth() < this.getMaxHealth()) { + if (!player.getAbilities().instabuild) { + stack.shrink(1); } + this.heal(8.0F); + this.level().broadcastEntityEvent(this, (byte) 6); } return InteractionResult.sidedSuccess(this.level().isClientSide); } @@ -322,12 +448,7 @@ public abstract class RoyalMountEntity extends TamableAnimal implements GeoEntit } if (stack.isEmpty() && player.isSecondaryUseActive()) { - if (this.isSaddled()) { - if (!this.level().isClientSide) { - this.setSaddled(false); - this.spawnAtLocation(new ItemStack(Items.SADDLE)); - } - } else if (!this.level().isClientSide) { + if (!this.level().isClientSide) { this.setOrderedToSit(!this.isOrderedToSit()); this.setInSittingPose(this.isOrderedToSit()); this.navigation.stop(); @@ -336,7 +457,7 @@ public abstract class RoyalMountEntity extends TamableAnimal implements GeoEntit return InteractionResult.sidedSuccess(this.level().isClientSide); } - if (stack.isEmpty() && !this.isBaby() && !player.isPassenger()) { + if (stack.isEmpty() && !player.isPassenger()) { if (!this.level().isClientSide) { this.setOrderedToSit(false); this.setInSittingPose(false); @@ -364,17 +485,19 @@ public abstract class RoyalMountEntity extends TamableAnimal implements GeoEntit public void tick() { super.tick(); - if (this.isBaby()) { - this.refreshDimensions(); - } - if (this.level().isClientSide) { return; } + LivingEntity target = this.getTarget(); + if (target != null && !this.canAttack(target)) { + this.setTarget(null); + } + if (this.spitCooldown > 0) { this.spitCooldown--; } + this.tickRoyalAbilities(); if ((this.isFlying() || !this.onGround()) && --this.flapSoundTimer <= 0) { this.flapSoundTimer = 24 + this.random.nextInt(12); @@ -382,6 +505,7 @@ public abstract class RoyalMountEntity extends TamableAnimal implements GeoEntit } if (this.actionTicks > 0) { + this.entityData.set(QUIRKING, false); this.actionTicks--; if (!this.actionHit && this.actionTicks <= ACTION_TICKS - BITE_HIT_TICK && (this.getAnimState() == ANIM_BITE || this.getAnimState() == ANIM_FLY_BITE)) { @@ -403,6 +527,111 @@ public abstract class RoyalMountEntity extends TamableAnimal implements GeoEntit if (this.getAnimState() == ANIM_IDLE && this.quirkTimer == 0 && this.random.nextInt(600) == 0) { this.quirkTimer = 80; } + this.entityData.set(QUIRKING, this.quirkTimer > 0 && this.getAnimState() == ANIM_IDLE); + } + + private void tickRoyalAbilities() { + if (this.beamCooldownTicks > 0) this.beamCooldownTicks--; + if (this.commandCooldownTicks > 0) this.commandCooldownTicks--; + if (this.timeFieldCooldownTicks > 0) this.timeFieldCooldownTicks--; + if (this.beamWindupTicks > 0) { + this.beamWindupTicks--; + if (this.beamWindupTicks == 0) { + this.beamController.start(this.beamShootFrom(), this.beamTargetPosition(), BEAM_DURATION_TICKS); + this.entityData.set(BEAM_ACTIVE, true); + } + } + if (this.beamController.isFiring()) { + this.beamController.tick(this.beamShootFrom(), this.getTarget(), this.beamSettings(), BeamTerrainMode.NONE, this::setBeamEndPosition); + if (!this.beamController.isFiring()) { + this.entityData.set(BEAM_ACTIVE, false); + this.entityData.set(BEAM_HEAD, -1); + this.beamCooldownTicks = BEAM_COOLDOWN_TICKS; + } + return; + } + if (this.isOrderedToSit()) return; + LivingEntity target = this.getTarget(); + if (target == null && this.getControllingPassenger() instanceof Player) { + target = this.frontTarget(); + if (target != null) this.setTarget(target); + } + if (target == null || !target.isAlive() || !this.hasLineOfSight(target)) return; + double targetDistance = this.distanceTo(target); + if (this.beamCooldownTicks <= 0 && this.beamWindupTicks <= 0 && targetDistance > 7.0D && targetDistance < 28.0D && this.tickCount % 20 == 0) { + this.beamHead = (this.beamHead + 1) % 3; + this.entityData.set(BEAM_HEAD, this.beamHead); + this.beamWindupTicks = BEAM_WINDUP_TICKS; + this.setAnimState(this.isFlying() ? ANIM_FLY_SHOOT : ANIM_SHOOT); + this.triggerAnim("main", this.isFlying() ? "fly_shoot" : "shoot"); + this.playSound(this.shootSound(), 0.9F, 0.75F); + } + if (this instanceof PrinceEntity && this.commandCooldownTicks <= 0 && this.tickCount % 20 == 0) { + this.performPrinceCommand(); + } + if (this instanceof PrincessEntity && this.timeFieldCooldownTicks <= 0 && this.tickCount % 20 == 0) { + this.performPrincessTimeField(target); + } + } + + private void performPrinceCommand() { + if (!(this.level() instanceof ServerLevel level) || RoyalEffectHooks.commandedHolder() == null) return; + int applied = 0; + for (Mob mob : level.getEntitiesOfClass(Mob.class, this.getBoundingBox().inflate(16.0D), mob -> + mob != this && mob.isAlive() && mob instanceof Enemy && !mob.isAlliedTo(this) + && !(mob instanceof RoyalBossEntity) && RoyalEffectEligibility.canApplyCommanded(mob))) { + if (applied >= 5) break; + if (mob.addEffect(new MobEffectInstance(RoyalEffectHooks.commandedHolder(), 300), this)) { + applied++; + level.sendParticles(ParticleTypes.HAPPY_VILLAGER, mob.getX(), mob.getY() + mob.getBbHeight(), mob.getZ(), 4, 0.2D, 0.2D, 0.2D, 0.02D); + } + } + if (applied > 0) { + this.commandCooldownTicks = COMMAND_COOLDOWN_TICKS; + this.playSound(this.shootSound(), 1.0F, 0.65F); + } + } + + private void performPrincessTimeField(@Nullable LivingEntity target) { + if (!(this.level() instanceof ServerLevel level)) return; + Vec3 center = target != null && target.isAlive() ? target.position() : this.position(); + TimeDilationApi.createField(level, center, 8.0D, 0.45D, 100, this.getUUID()); + this.timeFieldCooldownTicks = TIME_FIELD_COOLDOWN_TICKS; + level.sendParticles(ParticleTypes.END_ROD, center.x, center.y + 0.5D, center.z, 28, 1.2D, 0.6D, 1.2D, 0.03D); + } + + private BeamSettings beamSettings() { + float damage = this instanceof PrincessEntity ? 10.0F : 12.0F; + return new BeamSettings(28.0D, 0.08D, 4.0D, BEAM_DURATION_TICKS, 6, BEAM_COOLDOWN_TICKS, + 0.35F, 0.45F, damage, 0.45F, 3, 0.0D, 0.0F, 0.0F, 0, 0.0F, 0.0F, 0.0F, false, true); + } + + private Vec3 beamTargetPosition() { + LivingEntity target = this.getTarget(); + return target != null ? target.getEyePosition() : this.getEyePosition().add(this.getLookAngle().scale(20.0D)); + } + + public Vec3 beamShootFrom() { + float scale = this.getGrowthScale(); + Vec3 forward = Vec3.directionFromRotation(0.0F, this.getYRot()); + Vec3 side = new Vec3(-forward.z, 0.0D, forward.x); + return this.position().add(0.0D, 1.0D * scale, 0.0D).add(forward.scale(1.05D * scale)).add(side.scale((this.getBeamHead() - 1) * 0.72D * scale)); + } + + public int getBeamHead() { return this.entityData.get(BEAM_HEAD); } + public boolean isFiringBeam() { return this.entityData.get(BEAM_ACTIVE); } + public Vec3 getBeamEndPosition() { + return this.entityData.get(HAS_BEAM_END) ? new Vec3(this.entityData.get(BEAM_END_X), this.entityData.get(BEAM_END_Y), this.entityData.get(BEAM_END_Z)) : null; + } + public RoyalBeamElement getBeamElement() { return RoyalBeamElement.GENERIC; } + public BeamController beamController() { return this.beamController; } + private void setBeamEndPosition(@Nullable Vec3 position) { + this.entityData.set(HAS_BEAM_END, position != null); + if (position != null) { + this.entityData.set(BEAM_END_X, (float) position.x); + this.entityData.set(BEAM_END_Y, (float) position.y); + this.entityData.set(BEAM_END_Z, (float) position.z); + } } private void tickFlightState() { @@ -447,11 +676,17 @@ public abstract class RoyalMountEntity extends TamableAnimal implements GeoEntit if (target == null && this.getControllingPassenger() instanceof Player) { target = this.frontTarget(); } - if (target != null && target.distanceTo(this) < 5.0D) { + if (target != null && this.canAttack(target) && target.distanceTo(this) < 5.0D) { target.hurt(this.damageSources().mobAttack(this), (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE)); } } + @Override + public boolean canAttack(LivingEntity target) { + return !(target instanceof RoyalMountEntity other && this.isTame() && other.isTame()) + && super.canAttack(target); + } + @Nullable private LivingEntity frontTarget() { Vec3 look = this.getLookAngle(); @@ -462,6 +697,9 @@ public abstract class RoyalMountEntity extends TamableAnimal implements GeoEntit if (candidate == this || candidate == this.getControllingPassenger() || candidate == this.getOwner()) { continue; } + if (!this.canAttack(candidate)) { + continue; + } Vec3 to = candidate.getEyePosition().subtract(eye); double dist = to.length(); if (dist > 6.0D || dist < 1.0E-3D) { @@ -539,6 +777,11 @@ public abstract class RoyalMountEntity extends TamableAnimal implements GeoEntit public void setRiderAscend(boolean pressed) { this.riderAscendPressed = pressed; + if (pressed && !this.isFlying() && this.getControllingPassenger() != null) { + this.setFlying(true); + this.setDeltaMovement(this.getDeltaMovement().add(0.0D, 0.35D, 0.0D)); + this.hasImpulse = true; + } } public void setRiderDescend(boolean pressed) { @@ -549,6 +792,54 @@ public abstract class RoyalMountEntity extends TamableAnimal implements GeoEntit return this.isTame() && this.isOwnedBy(player) && this.getControllingPassenger() == player; } + public AABB assistedMountBox() { + float scale = this.getGrowthScale(); + double half = Math.max(this.getBbWidth() * 0.5D, 2.2D * scale); + double height = Math.max(this.getBbHeight(), 1.4D * scale); + return new AABB(this.getX() - half, this.getY(), this.getZ() - half, + this.getX() + half, this.getY() + height, this.getZ() + half); + } + + @Nullable + public static RoyalMountEntity findAssistedMountTarget(Player player, double extraReach) { + if (player.isPassenger() || player.isSpectator() || !player.getMainHandItem().isEmpty()) { + return null; + } + Vec3 eye = player.getEyePosition(); + Vec3 end = eye.add(player.getViewVector(1.0F).scale(com.craisinlord.antarchy.compat.entity.EntityReach.entityInteractionRange(player) + extraReach)); + RoyalMountEntity best = null; + double bestDistance = Double.MAX_VALUE; + for (RoyalMountEntity mount : player.level().getEntitiesOfClass(RoyalMountEntity.class, player.getBoundingBox().inflate(80.0D), + mount -> mount.isAlive() && mount.isTame() && mount.isOwnedBy(player) && !mount.isVehicle())) { + AABB box = mount.assistedMountBox(); + double distance; + if (box.contains(eye)) { + distance = 0.0D; + } else { + var hit = box.clip(eye, end); + if (hit.isEmpty()) { + continue; + } + distance = hit.get().distanceToSqr(eye); + } + if (distance < bestDistance) { + bestDistance = distance; + best = mount; + } + } + return best; + } + + public static boolean tryAssistedMount(ServerPlayer player) { + RoyalMountEntity mount = findAssistedMountTarget(player, 2.0D); + if (mount == null) { + return false; + } + mount.setOrderedToSit(false); + mount.setInSittingPose(false); + return player.startRiding(mount); + } + @Nullable @Override public LivingEntity getControllingPassenger() { @@ -565,8 +856,10 @@ public abstract class RoyalMountEntity extends TamableAnimal implements GeoEntit if (!this.hasPassenger(passenger)) { return; } - double yOffset = (this.isFlying() ? 1.55D : 1.35D) * this.getAgeScale(); - Vec3 back = this.getLookAngle().scale(-0.35D * this.getAgeScale()); + float scale = this.getGrowthScale(); + double yOffset = 1.3D * scale; + double backDistance = 0.35D * scale; + Vec3 back = Vec3.directionFromRotation(0.0F, this.getYRot()).scale(-backDistance); moveFunction.accept(passenger, this.getX() + back.x, this.getY() + yOffset, this.getZ() + back.z); } @@ -648,7 +941,7 @@ public abstract class RoyalMountEntity extends TamableAnimal implements GeoEntit return switch (this.getAnimState()) { case ANIM_WALK -> state.setAndContinue(WALK_ANIM); case ANIM_FLY, ANIM_FLY_BITE, ANIM_FLY_SHOOT -> state.setAndContinue(FLY_ANIM); - default -> state.setAndContinue(this.quirkTimer > 0 ? QUIRK_ANIM : IDLE_ANIM); + default -> state.setAndContinue(this.entityData.get(QUIRKING) ? QUIRK_ANIM : IDLE_ANIM); }; } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalMountFollowOwnerGoal.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalMountFollowOwnerGoal.java index b85c10b3..0235984e 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalMountFollowOwnerGoal.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalMountFollowOwnerGoal.java @@ -1,5 +1,6 @@ package com.craisinlord.antarchy.content.entity.royal; +import net.minecraft.core.BlockPos; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.ai.goal.Goal; import net.minecraft.world.phys.Vec3; @@ -58,7 +59,7 @@ public class RoyalMountFollowOwnerGoal extends Goal { double distanceSqr = this.mount.distanceToSqr(this.owner); if (distanceSqr > TELEPORT_DISTANCE * TELEPORT_DISTANCE) { - this.mount.teleportTo(this.owner.getX(), this.owner.getY(), this.owner.getZ()); + this.trySafeTeleport(); return; } @@ -81,4 +82,29 @@ public class RoyalMountFollowOwnerGoal extends Goal { public boolean requiresUpdateEveryTick() { return true; } + + private void trySafeTeleport() { + Vec3 ownerPosition = this.owner.position(); + BlockPos ownerBlock = this.owner.blockPosition(); + for (int radius = 0; radius <= 2; radius++) { + for (int dx = -radius; dx <= radius; dx++) { + for (int dz = -radius; dz <= radius; dz++) { + for (int dy = -1; dy <= 2; dy++) { + double x = ownerPosition.x + dx + 0.5D; + double y = ownerBlock.getY() + dy; + double z = ownerPosition.z + dz + 0.5D; + BlockPos floor = BlockPos.containing(x, y - 0.1D, z); + var destination = this.mount.getBoundingBox().move(x - this.mount.getX(), y - this.mount.getY(), z - this.mount.getZ()); + if (!this.mount.level().noCollision(this.mount, destination)) { + continue; + } + if (this.mount.isFlying() || !this.mount.level().getBlockState(floor).getCollisionShape(this.mount.level(), floor).isEmpty()) { + this.mount.teleportTo(x, y, z); + return; + } + } + } + } + } + } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalMountSpitGoal.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalMountSpitGoal.java index 09358abb..1dfa4f6b 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalMountSpitGoal.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalMountSpitGoal.java @@ -13,11 +13,11 @@ public class RoyalMountSpitGoal extends Goal { @Override public boolean canUse() { - if (this.mount.isBaby() || this.mount.isVehicle() || this.mount.isOrderedToSit()) { + if (this.mount.isVehicle() || this.mount.isOrderedToSit()) { return false; } LivingEntity target = this.mount.getTarget(); - if (target == null || !target.isAlive()) { + if (target == null || !target.isAlive() || !this.mount.canAttack(target)) { return false; } double distance = this.mount.distanceTo(target); @@ -32,7 +32,7 @@ public class RoyalMountSpitGoal extends Goal { @Override public void tick() { LivingEntity target = this.mount.getTarget(); - if (target == null) { + if (target == null || !this.mount.canAttack(target)) { return; } this.mount.getLookControl().setLookAt(target, 30.0F, 30.0F); diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/attack/RoyalAttackScheduler.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/attack/RoyalAttackScheduler.java index dfa2d0ea..b885a307 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/attack/RoyalAttackScheduler.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/attack/RoyalAttackScheduler.java @@ -8,10 +8,10 @@ import java.util.Map; import java.util.function.ToIntFunction; import net.minecraft.util.RandomSource; -/** Shared server-side arbitration for Royal attack lifecycles. */ public final class RoyalAttackScheduler { public interface Action { default void onStart() {} + default void onWindup(int elapsedTicks, int remainingTicks) {} default void onActive(int elapsedTicks) {} default void onComplete() {} } @@ -45,6 +45,9 @@ public final class RoyalAttackScheduler { running.elapsedTicks++; int activeStart = running.windupTicks; int activeEnd = activeStart + running.activeTicks; + if (running.elapsedTicks < activeStart) { + running.action.onWindup(running.elapsedTicks, activeStart - running.elapsedTicks); + } if (running.elapsedTicks >= activeStart && running.elapsedTicks < activeEnd) { running.action.onActive(running.elapsedTicks - activeStart); } @@ -117,6 +120,10 @@ public final class RoyalAttackScheduler { return cooldowns.getOrDefault(id, 0); } + public void resetCooldown(String id) { + cooldowns.remove(id); + } + public void cancel(RoyalAttackLane lane) { active.remove(lane); } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/attack/RoyalEffectController.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/attack/RoyalEffectController.java index f0da3ab0..31c88218 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/attack/RoyalEffectController.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/attack/RoyalEffectController.java @@ -3,7 +3,6 @@ package com.craisinlord.antarchy.content.entity.royal.attack; import java.util.HashMap; import java.util.Map; -/** Owns persistent per-tick effects started by a Royal attack. */ public final class RoyalEffectController { private record Effect(Runnable tick, Runnable end, int duration, int age) { private Effect advance() { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/beam/RoyalBeamController.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/beam/RoyalBeamController.java deleted file mode 100644 index 75fdfcfe..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/beam/RoyalBeamController.java +++ /dev/null @@ -1,345 +0,0 @@ -package com.craisinlord.antarchy.content.entity.royal.beam; - -import java.util.List; -import java.util.HashSet; -import java.util.Set; -import java.util.function.Consumer; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.tags.BlockTags; -import net.minecraft.util.Mth; -import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.EntitySelector; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.Mob; -import net.minecraft.world.entity.ai.attributes.Attributes; -import net.minecraft.world.level.ClipContext; -import net.minecraft.world.level.GameRules; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.HitResult; -import net.minecraft.world.phys.Vec3; -import org.jetbrains.annotations.Nullable; - -public final class RoyalBeamController { - private static final int INITIAL_TRACKING_DELAY_TICKS = 8; - private final Mob owner; - private Vec3 serverTarget; - private Vec3 beamEndPosition; - private int beamTicks; - private int beamAgeTicks; - private int trackingDelayTicks; - private int terrainMutationsThisTick; - private static final int ICE_MUTATIONS_PER_TICK = 3; - private static final float ICE_IMPACT_RADIUS = 2.0F; - - public RoyalBeamController(Mob owner) { - this.owner = owner; - } - - public boolean isFiring() { - return this.beamTicks > 0; - } - - public int beamTicks() { - return this.beamTicks; - } - - @Nullable - public Vec3 beamEndPosition() { - return this.beamEndPosition; - } - - public void start(Vec3 shootFrom, Vec3 target, int durationTicks) { - this.serverTarget = target; - this.beamEndPosition = target; - this.beamTicks = Math.max(1, durationTicks); - this.beamAgeTicks = 0; - this.trackingDelayTicks = INITIAL_TRACKING_DELAY_TICKS; - } - - public void stop() { - this.serverTarget = null; - this.beamEndPosition = null; - this.beamTicks = 0; - this.beamAgeTicks = 0; - } - - public void tick( - Vec3 shootFrom, - @Nullable LivingEntity target, - RoyalBeamSettings settings, - RoyalBeamTerrainMode terrainMode, - Consumer<@Nullable Vec3> syncedEndPosition - ) { - if (this.beamTicks <= 0) { - syncedEndPosition.accept(null); - return; - } - - this.beamTicks--; - this.beamAgeTicks++; - this.terrainMutationsThisTick = 0; - if (this.trackingDelayTicks > 0) { - this.trackingDelayTicks--; - } else if (target != null && target.isAlive()) { - Vec3 targetEye = target.getEyePosition(); - this.serverTarget = this.serverTarget == null - ? targetEye - : this.serverTarget.add(targetEye.subtract(this.serverTarget).scale(settings.targetTracking())); - } - if (this.serverTarget == null) { - this.stop(); - syncedEndPosition.accept(null); - return; - } - - Vec3 direction = this.serverTarget.subtract(shootFrom).normalize(); - if (direction.lengthSqr() < 1.0E-7D) { - direction = this.owner.getLookAngle(); - } - double committedDistance = Math.min(settings.range(), shootFrom.distanceTo(this.serverTarget)); - double travelProgress = Mth.clamp(this.beamAgeTicks / (double) settings.travelTicks(), 0.0D, 1.0D); - double currentRange = Math.max(settings.pathStep(), committedDistance * travelProgress); - Vec3 clipEnd = shootFrom.add(direction.scale(currentRange)); - HitResult hit = this.owner.level().clip(new ClipContext( - shootFrom, - clipEnd, - ClipContext.Block.COLLIDER, - ClipContext.Fluid.NONE, - this.owner - )); - this.beamEndPosition = hit.getLocation(); - syncedEndPosition.accept(this.beamEndPosition); - - if (!this.owner.level().isClientSide && this.beamEndPosition != null) { - boolean impactedBlock = hit.getType() == HitResult.Type.BLOCK; - marchDamageAndTerrain(shootFrom, this.beamEndPosition, settings, terrainMode, impactedBlock); - } - - if (this.beamTicks <= 0) { - this.stop(); - syncedEndPosition.accept(null); - } - } - - private void marchDamageAndTerrain( - Vec3 shootFrom, - Vec3 beamEnd, - RoyalBeamSettings settings, - RoyalBeamTerrainMode terrainMode, - boolean impactedBlock - ) { - Vec3 direction = beamEnd.subtract(shootFrom).normalize(); - double distance = shootFrom.distanceTo(beamEnd); - DamageSource damageSource = this.owner.damageSources().mobAttack(this.owner); - Set damagedThisTick = new HashSet<>(); - boolean pathMutates = terrainMode == RoyalBeamTerrainMode.DESTROY; - for (double walked = settings.pathStep(); walked < Math.min(distance, settings.range()); walked += settings.pathStep()) { - Vec3 sample = shootFrom.add(direction.scale(walked)); - hurtEntitiesAround(sample, settings.pathDamageRadius(), settings.damage(), settings.knockback(), damageSource, settings.requireLineOfSightForDamage(), damagedThisTick); - if (pathMutates && shouldMutateTerrain(settings, walked)) { - mutateTerrainAround(sample, settings.pathTerrainRadius(), settings, terrainMode); - } - } - - hurtEntitiesAround(beamEnd, settings.impactDamageRadius(), settings.damage(), settings.knockback(), damageSource, settings.requireLineOfSightForDamage(), damagedThisTick); - - if (!shouldMutateTerrain(settings, distance)) { - return; - } - if (terrainMode == RoyalBeamTerrainMode.BUILD_ICE) { - if (impactedBlock) { - mutateTerrainAround(beamEnd, ICE_IMPACT_RADIUS, settings, terrainMode); - } - } else { - mutateTerrainAround(beamEnd, settings.impactTerrainRadius(), settings, terrainMode); - } - } - - private boolean shouldMutateTerrain(RoyalBeamSettings settings, double distanceFromOwner) { - return settings.terrainEnabled() - && settings.maxTerrainMutationsPerTick() > 0 - && this.beamTicks % settings.terrainIntervalTicks() == 0 - && distanceFromOwner <= settings.maxTerrainDistance() - && this.owner.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); - } - - private boolean hurtEntitiesAround( - Vec3 center, - float radius, - float damageAmount, - float knockbackAmount, - DamageSource damageSource, - boolean requireLineOfSight, - Set damagedThisTick - ) { - if (radius <= 0.0F || damageAmount <= 0.0F) { - return false; - } - - AABB aabb = new AABB(center.subtract(radius, radius, radius), center.add(radius, radius, radius)); - List entities = this.owner.level().getEntitiesOfClass( - LivingEntity.class, - aabb, - EntitySelector.NO_CREATIVE_OR_SPECTATOR - ); - boolean hurtAny = false; - for (LivingEntity living : entities) { - if (living.is(this.owner) - || this.owner.isAlliedTo(living) - || living.getType() == this.owner.getType() - || living.distanceToSqr(center) > radius * radius - || damagedThisTick.contains(living.getId()) - || requireLineOfSight && !canEntityBeHurtFrom(center, living)) { - continue; - } - if (living.hurt(damageSource, damageAmount)) { - damagedThisTick.add(living.getId()); - hurtAny = true; - knockbackTarget(living, knockbackAmount); - } - } - return hurtAny; - } - - private boolean canEntityBeHurtFrom(Vec3 center, LivingEntity living) { - Vec3 targetCenter = living.position().add(0.0D, living.getBbHeight() * 0.5D, 0.0D); - return this.owner.level().clip(new ClipContext( - center, - targetCenter, - ClipContext.Block.COLLIDER, - ClipContext.Fluid.NONE, - this.owner - )).getType() == HitResult.Type.MISS; - } - - private void knockbackTarget(Entity target, double strength) { - if (strength <= 0.0D) { - return; - } - - double resistance = target instanceof LivingEntity living - ? living.getAttributeValue(Attributes.KNOCKBACK_RESISTANCE) - : 0.0D; - double appliedStrength = strength * Math.max(0.0D, 1.0D - resistance); - if (appliedStrength <= 0.0D) { - return; - } - - Vec3 push = target.position().subtract(this.owner.position()).multiply(1.0D, 0.0D, 1.0D).normalize().scale(appliedStrength); - Vec3 movement = target.getDeltaMovement(); - target.setDeltaMovement( - movement.x * 0.5D + push.x, - Math.min(0.4D, movement.y * 0.5D + appliedStrength), - movement.z * 0.5D + push.z - ); - target.hasImpulse = true; - } - - private void mutateTerrainAround( - Vec3 center, - float radius, - RoyalBeamSettings settings, - RoyalBeamTerrainMode terrainMode - ) { - if (terrainMode == RoyalBeamTerrainMode.NONE || radius <= 0.0F) { - return; - } - - Level level = this.owner.level(); - int minX = Mth.floor(center.x - radius); - int minY = Mth.floor(center.y - radius); - int minZ = Mth.floor(center.z - radius); - int maxX = Mth.floor(center.x + radius); - int maxY = Mth.floor(center.y + radius); - int maxZ = Mth.floor(center.z + radius); - float radiusSqr = radius * radius; - - int cap = terrainMode == RoyalBeamTerrainMode.BUILD_ICE - ? Math.min(ICE_MUTATIONS_PER_TICK, settings.maxTerrainMutationsPerTick()) - : settings.maxTerrainMutationsPerTick(); - for (BlockPos cursor : BlockPos.betweenClosed(minX, minY, minZ, maxX, maxY, maxZ)) { - if (this.terrainMutationsThisTick >= cap) { - return; - } - BlockPos pos = cursor.immutable(); - if (pos.distToCenterSqr(center.x, center.y, center.z) > radiusSqr - || this.owner.getRandom().nextFloat() > settings.terrainMutationChance() - || pos.getY() < level.getMinBuildHeight() - || pos.getY() >= level.getMaxBuildHeight() - || !level.getWorldBorder().isWithinBounds(pos)) { - continue; - } - - BlockState existing = level.getBlockState(pos); - if (terrainMode == RoyalBeamTerrainMode.DESTROY) { - destroyBeamBlock(level, pos, existing, settings); - } else if (terrainMode == RoyalBeamTerrainMode.BUILD_ICE) { - buildIceBlock(level, pos, existing, settings); - } - } - } - - private void destroyBeamBlock(Level level, BlockPos pos, BlockState existing, RoyalBeamSettings settings) { - if (existing.isAir() - || level.getBlockEntity(pos) != null - || existing.getDestroySpeed(level, pos) < 0.0F - || existing.getBlock().getExplosionResistance() > settings.maxTerrainResistance() - || existing.getCollisionShape(level, pos).isEmpty()) { - return; - } - - if (this.owner.getRandom().nextFloat() <= settings.terrainDropChance()) { - level.destroyBlock(pos, true, this.owner); - } else { - level.levelEvent(2001, pos, Block.getId(existing)); - level.setBlockAndUpdate(pos, Blocks.AIR.defaultBlockState()); - } - this.terrainMutationsThisTick++; - } - - private void buildIceBlock(Level level, BlockPos pos, BlockState existing, RoyalBeamSettings settings) { - boolean replaceable = existing.isAir() - || existing.canBeReplaced() - || !existing.getFluidState().isEmpty(); - if (!replaceable || level.getBlockEntity(pos) != null || existing.is(BlockTags.ICE)) { - return; - } - if (!touchesFreezableSurface(level, pos)) { - return; - } - - level.levelEvent(2001, pos, Block.getId(existing)); - level.setBlock(pos, randomIceBlock().defaultBlockState(), Block.UPDATE_ALL); - this.terrainMutationsThisTick++; - } - - private static boolean touchesFreezableSurface(Level level, BlockPos pos) { - for (Direction direction : Direction.values()) { - BlockPos neighbor = pos.relative(direction); - BlockState state = level.getBlockState(neighbor); - if (state.is(BlockTags.ICE) || state.is(Blocks.SNOW_BLOCK)) { - continue; - } - if (state.isFaceSturdy(level, neighbor, direction.getOpposite())) { - return true; - } - } - return false; - } - - private Block randomIceBlock() { - return switch (this.owner.getRandom().nextInt(5)) { - case 0 -> Blocks.BLUE_ICE; - case 1 -> Blocks.PACKED_ICE; - case 2 -> Blocks.FROSTED_ICE; - case 3 -> Blocks.SNOW_BLOCK; - default -> Blocks.ICE; - }; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/beam/RoyalBeamElement.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/beam/RoyalBeamElement.java index 3706166d..57d4e0ac 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/beam/RoyalBeamElement.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/beam/RoyalBeamElement.java @@ -4,5 +4,10 @@ public enum RoyalBeamElement { GENERIC, FIRE, LIGHTNING, - ICE + ICE, + QUEEN_PURPLE, + QUEEN_RED, + QUEEN_BLACK, + DREAM_FIRE, + KING_GOLD } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/beam/RoyalBeamSettings.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/beam/RoyalBeamSettings.java deleted file mode 100644 index 13f304a2..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/beam/RoyalBeamSettings.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.craisinlord.antarchy.content.entity.royal.beam; - -public record RoyalBeamSettings( - double range, - double targetTracking, - double pathStep, - int durationTicks, - int travelTicks, - int cooldownTicks, - float pathDamageRadius, - float impactDamageRadius, - float damage, - float knockback, - int terrainIntervalTicks, - double maxTerrainDistance, - float pathTerrainRadius, - float impactTerrainRadius, - int maxTerrainMutationsPerTick, - float terrainMutationChance, - float terrainDropChance, - float maxTerrainResistance, - boolean terrainEnabled, - boolean requireLineOfSightForDamage -) { - public static RoyalBeamSettings tremorzillaLike(float damage, boolean terrainEnabled) { - return new RoyalBeamSettings( - 100.0D, - 0.1D, - 7.5D, - 30, - 12, - 90, - 6.0F, - 6.0F, - damage, - 1.0F, - 3, - 100.0D, - 5.0F, - 4.0F, - 192, - 1.0F, - 0.08F, - 15.0F, - terrainEnabled, - true - ); - } - - public RoyalBeamSettings { - range = Math.max(1.0D, range); - targetTracking = net.minecraft.util.Mth.clamp(targetTracking, 0.0D, 1.0D); - pathStep = Math.max(1.0D, pathStep); - durationTicks = Math.max(1, durationTicks); - travelTicks = Math.max(1, travelTicks); - cooldownTicks = Math.max(1, cooldownTicks); - pathDamageRadius = Math.max(0.0F, pathDamageRadius); - impactDamageRadius = Math.max(0.0F, impactDamageRadius); - damage = Math.max(0.0F, damage); - knockback = Math.max(0.0F, knockback); - terrainIntervalTicks = Math.max(1, terrainIntervalTicks); - maxTerrainDistance = Math.max(0.0D, maxTerrainDistance); - pathTerrainRadius = Math.max(0.0F, pathTerrainRadius); - impactTerrainRadius = Math.max(0.0F, impactTerrainRadius); - maxTerrainMutationsPerTick = Math.max(0, maxTerrainMutationsPerTick); - terrainMutationChance = net.minecraft.util.Mth.clamp(terrainMutationChance, 0.0F, 1.0F); - terrainDropChance = net.minecraft.util.Mth.clamp(terrainDropChance, 0.0F, 1.0F); - maxTerrainResistance = Math.max(0.0F, maxTerrainResistance); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/beam/RoyalBeamTerrainMode.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/beam/RoyalBeamTerrainMode.java deleted file mode 100644 index 4d848e8a..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/beam/RoyalBeamTerrainMode.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.craisinlord.antarchy.content.entity.royal.beam; - -public enum RoyalBeamTerrainMode { - NONE, - DESTROY, - BUILD_ICE -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/AdvanceDecree.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/AdvanceDecree.java deleted file mode 100644 index f28bf41a..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/AdvanceDecree.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.craisinlord.antarchy.content.entity.royal.decree; -import com.craisinlord.antarchy.content.entity.royal.KingEntity; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.entity.LivingEntity; -public final class AdvanceDecree implements RoyalDecree { - private static final double REQUIRED_RANGE = 14.0D; - public String translationKey() { return "decree.antarchy.advance"; } - public void apply(ServerLevel level, KingEntity king, LivingEntity target) { king.setDecreeRetreatPressure(true); } - @Override public Evaluation evaluate(ServerLevel level, KingEntity king, LivingEntity target) { - return target.distanceTo(king) > REQUIRED_RANGE ? Evaluation.VIOLATED : Evaluation.COMPLIANT; - } - @Override - public int contextWeight(KingEntity king, LivingEntity target) { - return 4 + king.behaviorScore(KingEntity.Behavior.KEEPING_FAR); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/CloseQuartersDecree.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/CloseQuartersDecree.java index 7c0f6d19..a1d671a3 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/CloseQuartersDecree.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/CloseQuartersDecree.java @@ -4,7 +4,17 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.LivingEntity; public final class CloseQuartersDecree implements RoyalDecree { public String translationKey() { return "decree.antarchy.close_quarters"; } - public void apply(ServerLevel level, KingEntity king, LivingEntity target) { } + public void apply(ServerLevel level, KingEntity king, LivingEntity target) { + king.requestCloseQuartersAssault(target); + } + @Override + public Evaluation evaluate(ServerLevel level, KingEntity king, LivingEntity target) { + return king.evaluateCloseQuarters(target); + } + @Override + public int countdownTicks(KingEntity king, LivingEntity target) { + return king.closeQuartersCountdownTicks(target); + } @Override public int contextWeight(KingEntity king, LivingEntity target) { return 4 + king.behaviorScore(KingEntity.Behavior.RANGED); diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/ComeNoCloserDecree.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/ComeNoCloserDecree.java index f98e4ef9..4df50114 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/ComeNoCloserDecree.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/ComeNoCloserDecree.java @@ -6,7 +6,7 @@ public final class ComeNoCloserDecree implements RoyalDecree { public String translationKey() { return "decree.antarchy.come_no_closer"; } public void apply(ServerLevel level, KingEntity king, LivingEntity target) { } @Override public Evaluation evaluate(ServerLevel level, KingEntity king, LivingEntity target) { - return target.distanceTo(king) <= 16.0D ? Evaluation.VIOLATED : Evaluation.COMPLIANT; + return target.distanceToSqr(king) <= 256.0D ? Evaluation.VIOLATED : Evaluation.COMPLIANT; } @Override public int contextWeight(KingEntity king, LivingEntity target) { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/FightMeCowardDecree.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/FightMeCowardDecree.java index d541f8b7..9af0aef8 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/FightMeCowardDecree.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/FightMeCowardDecree.java @@ -1,13 +1,19 @@ package com.craisinlord.antarchy.content.entity.royal.decree; import com.craisinlord.antarchy.content.entity.royal.KingEntity; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.phys.Vec3; public final class FightMeCowardDecree implements RoyalDecree { + private static final int APPROACH_TICKS = 80; + private final Map deadlines = new HashMap<>(); public String name() { return "FIGHT ME, COWARD!"; } public String translationKey() { return "decree.antarchy.fight_me_coward"; } public void apply(ServerLevel level, KingEntity king, LivingEntity target) { - if (target.distanceTo(king) > 28.0D) { + this.deadlines.computeIfAbsent(target.getUUID(), ignored -> target.tickCount + APPROACH_TICKS); + if (target.distanceToSqr(king) > 784.0D) { Vec3 pull = king.position().subtract(target.position()).normalize().scale(0.35D); target.setDeltaMovement(target.getDeltaMovement().add(pull.x, 0.05D, pull.z)); target.hasImpulse = true; @@ -15,6 +21,21 @@ public final class FightMeCowardDecree implements RoyalDecree { } @Override public Evaluation evaluate(ServerLevel level, KingEntity king, LivingEntity target) { - return target.distanceTo(king) > 28.0D ? Evaluation.VIOLATED : Evaluation.COMPLIANT; + int deadline = this.deadlines.computeIfAbsent(target.getUUID(), ignored -> target.tickCount + APPROACH_TICKS); + return target.tickCount >= deadline && target.distanceToSqr(king) > 784.0D + ? Evaluation.VIOLATED : Evaluation.COMPLIANT; + } + + @Override + public int countdownTicks(KingEntity king, LivingEntity target) { + if (target.distanceToSqr(king) <= 784.0D) { + return -1; + } + return this.deadlines.getOrDefault(target.getUUID(), target.tickCount + APPROACH_TICKS) - target.tickCount; + } + + @Override + public void onEnded() { + this.deadlines.clear(); } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/KeepYourDistanceDecree.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/KeepYourDistanceDecree.java deleted file mode 100644 index cc876daa..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/KeepYourDistanceDecree.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.craisinlord.antarchy.content.entity.royal.decree; -import com.craisinlord.antarchy.content.entity.royal.KingEntity; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.entity.LivingEntity; -public final class KeepYourDistanceDecree implements RoyalDecree { - private static final double INNER_RADIUS = 16.0D; - public String translationKey() { return "decree.antarchy.keep_your_distance"; } - public void apply(ServerLevel level, KingEntity king, LivingEntity target) { } - @Override public Evaluation evaluate(ServerLevel level, KingEntity king, LivingEntity target) { - return target.distanceTo(king) <= INNER_RADIUS ? Evaluation.VIOLATED : Evaluation.COMPLIANT; - } - @Override - public int contextWeight(KingEntity king, LivingEntity target) { - return 4 + king.behaviorScore(KingEntity.Behavior.HUGGING); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/KneelDecree.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/KneelDecree.java index 2f817a00..bb8566ff 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/KneelDecree.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/KneelDecree.java @@ -10,13 +10,25 @@ public final class KneelDecree implements RoyalDecree { public String translationKey() { return "decree.antarchy.kneel"; } public void apply(ServerLevel level, KingEntity king, LivingEntity target) { UUID id = target.getUUID(); - if (target.isCrouching()) { deadlines.remove(id); king.clearActiveDecree(target); return; } - int deadline = deadlines.computeIfAbsent(id, ignored -> target.tickCount + 100); - if (target.tickCount >= deadline) { king.failActiveDecree(target); } + deadlines.computeIfAbsent(id, ignored -> target.tickCount + 100); } @Override - public int countdownTicks(LivingEntity target) { + public Evaluation evaluate(ServerLevel level, KingEntity king, LivingEntity target) { + if (target.isCrouching()) { + return Evaluation.COMPLETE; + } + int deadline = deadlines.computeIfAbsent(target.getUUID(), ignored -> target.tickCount + 100); + return target.tickCount >= deadline ? Evaluation.VIOLATED : Evaluation.COMPLIANT; + } + + @Override + public int countdownTicks(KingEntity king, LivingEntity target) { return this.deadlines.getOrDefault(target.getUUID(), target.tickCount + 100) - target.tickCount; } + + @Override + public void onEnded() { + this.deadlines.clear(); + } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/NoRetreatDecree.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/NoRetreatDecree.java deleted file mode 100644 index 53a8ed1f..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/NoRetreatDecree.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.craisinlord.antarchy.content.entity.royal.decree; -import com.craisinlord.antarchy.content.entity.royal.KingEntity; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.entity.LivingEntity; -public final class NoRetreatDecree implements RoyalDecree { - private static final double ALLOWED_RANGE = 26.0D; - public String translationKey() { return "decree.antarchy.no_retreat"; } - public void apply(ServerLevel level, KingEntity king, LivingEntity target) { - if (target.distanceTo(king) > ALLOWED_RANGE) { - king.invokeJudgment(target); - } - } - @Override - public int contextWeight(KingEntity king, LivingEntity target) { - return 4 + king.behaviorScore(KingEntity.Behavior.RETREATING); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/RoyalDecree.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/RoyalDecree.java index b75a43c1..8bf8a971 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/RoyalDecree.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/RoyalDecree.java @@ -18,7 +18,7 @@ public interface RoyalDecree { return Evaluation.COMPLIANT; } - default int countdownTicks(LivingEntity target) { + default int countdownTicks(KingEntity king, LivingEntity target) { return -1; } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/StandYourGroundDecree.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/StandYourGroundDecree.java index 622ff408..36fdc3f3 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/StandYourGroundDecree.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/StandYourGroundDecree.java @@ -11,9 +11,13 @@ public final class StandYourGroundDecree implements RoyalDecree { private final Map anchors = new HashMap<>(); public String translationKey() { return "decree.antarchy.stand_your_ground"; } public void apply(ServerLevel level, KingEntity king, LivingEntity target) { - Vec3 anchor = this.anchors.computeIfAbsent(target.getUUID(), ignored -> target.position()); + this.anchors.computeIfAbsent(target.getUUID(), ignored -> target.position()); } @Override public Evaluation evaluate(ServerLevel level, KingEntity king, LivingEntity target) { + if (target instanceof net.minecraft.server.level.ServerPlayer player && player.isFallFlying()) { + this.anchors.put(target.getUUID(), target.position()); + return Evaluation.COMPLIANT; + } Vec3 anchor = this.anchors.computeIfAbsent(target.getUUID(), ignored -> target.position()); return target.position().distanceToSqr(anchor) > ALLOWED_DRIFT * ALLOWED_DRIFT ? Evaluation.VIOLATED : Evaluation.COMPLIANT; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/cloud_shark/SharknadoManager.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/stratoshark/SharknadoManager.java similarity index 92% rename from common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/cloud_shark/SharknadoManager.java rename to common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/stratoshark/SharknadoManager.java index 5960e1e1..c425306d 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/cloud_shark/SharknadoManager.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/stratoshark/SharknadoManager.java @@ -1,4 +1,4 @@ -package com.craisinlord.antarchy.content.entity.cloud_shark; +package com.craisinlord.antarchy.content.entity.stratoshark; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.player.Player; @@ -47,24 +47,24 @@ public final class SharknadoManager { } - public boolean tryFormOrJoin(CloudSharkEntity shark, ServerLevel level) { + public boolean tryFormOrJoin(StratosharkEntity shark, ServerLevel level) { if (tryJoinExisting(shark)) return true; - List soloNearby = getSoloSharksNear(shark, level); + List soloNearby = getSoloSharksNear(shark, level); if (soloNearby.size() + 1 < MIN_SHARKS_TO_FORM) return false; UUID myUuid = shark.getUUID(); - for (CloudSharkEntity other : soloNearby) { + for (StratosharkEntity other : soloNearby) { if (other.getUUID().compareTo(myUuid) < 0) return false; } - List all = new ArrayList<>(); + List all = new ArrayList<>(); all.add(shark); all.addAll(soloNearby); formTornado(all, level); return true; } - private void formTornado(List sharks, ServerLevel level) { + private void formTornado(List sharks, ServerLevel level) { UUID id = UUID.randomUUID(); SharknadoEntry entry = new SharknadoEntry(id); int idx = 0; @@ -72,7 +72,7 @@ public final class SharknadoManager { for (int tier = 2; tier >= 0; tier--) { for (int slot = 0; slot < TIER_MAX_SLOTS[tier]; slot++) { if (idx >= sharks.size()) break outer; - CloudSharkEntity s = sharks.get(idx++); + StratosharkEntity s = sharks.get(idx++); entry.add(s, tier, slot); sharkToTornado.put(s.getUUID(), id); s.onJoinSharknado(id, tier, slot); @@ -87,7 +87,7 @@ public final class SharknadoManager { tornadoes.put(id, entry); } - private boolean tryJoinExisting(CloudSharkEntity shark) { + private boolean tryJoinExisting(StratosharkEntity shark) { UUID bestId = null; double bestDistSqr = FORM_SEARCH_RADIUS_SQR; @@ -210,7 +210,7 @@ public final class SharknadoManager { } - public void unregisterShark(CloudSharkEntity shark) { + public void unregisterShark(StratosharkEntity shark) { UUID tornadoId = sharkToTornado.remove(shark.getUUID()); if (tornadoId == null) return; SharknadoEntry entry = tornadoes.get(tornadoId); @@ -275,10 +275,10 @@ public final class SharknadoManager { } - private List getSoloSharksNear(CloudSharkEntity seeker, ServerLevel level) { - List result = new ArrayList<>(); - for (CloudSharkEntity other : level.getEntitiesOfClass( - CloudSharkEntity.class, seeker.getBoundingBox().inflate(FORM_SEARCH_RADIUS))) { + private List getSoloSharksNear(StratosharkEntity seeker, ServerLevel level) { + List result = new ArrayList<>(); + for (StratosharkEntity other : level.getEntitiesOfClass( + StratosharkEntity.class, seeker.getBoundingBox().inflate(FORM_SEARCH_RADIUS))) { if (other == seeker) continue; if (sharkToTornado.containsKey(other.getUUID())) continue; double dx = other.getX() - seeker.getX(); @@ -303,11 +303,11 @@ public final class SharknadoManager { SharknadoEntry(UUID id) { this.id = id; } - void add(CloudSharkEntity shark, int tier, int slot) { + void add(StratosharkEntity shark, int tier, int slot) { slots.add(new SharkSlot(shark, tier, slot)); } - void removeShark(CloudSharkEntity shark) { + void removeShark(StratosharkEntity shark) { slots.removeIf(s -> s.shark == shark); } @@ -386,11 +386,11 @@ public final class SharknadoManager { } private static final class SharkSlot { - final CloudSharkEntity shark; + final StratosharkEntity shark; final int tier; final int slot; - SharkSlot(CloudSharkEntity shark, int tier, int slot) { + SharkSlot(StratosharkEntity shark, int tier, int slot) { this.shark = shark; this.tier = tier; this.slot = slot; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/stratoshark/StratosharkEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/stratoshark/StratosharkEntity.java new file mode 100644 index 00000000..309c6492 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/stratoshark/StratosharkEntity.java @@ -0,0 +1,702 @@ +package com.craisinlord.antarchy.content.entity.stratoshark; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; +import com.craisinlord.anthology.gravity.GravityRotationUtil; +import net.minecraft.core.BlockPos; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.Difficulty; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.ai.control.FlyingMoveControl; +import net.minecraft.world.entity.ai.goal.Goal; +import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; +import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; +import net.minecraft.world.entity.ai.navigation.FlyingPathNavigation; +import net.minecraft.world.entity.ai.navigation.PathNavigation; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.Nullable; +import software.bernie.geckolib.animatable.GeoEntity; +import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.core.animation.AnimatableManager; +import software.bernie.geckolib.core.animation.AnimationController; +import software.bernie.geckolib.core.animation.AnimationState; +import software.bernie.geckolib.core.object.PlayState; +import software.bernie.geckolib.core.animation.RawAnimation; +import software.bernie.geckolib.util.GeckoLibUtil; + +import java.util.EnumSet; +import java.util.UUID; + +public class StratosharkEntity extends Monster implements GeoEntity { + private static final double PATROL_SPEED = 0.95D; + private static final double STRAFE_SPEED = 1.2D; + private static final double DIVE_SPEED = 1.9D; + private static final double RECOVERY_SPEED = 1.15D; + private static final double ORBIT_SPEED = 1.1D; + private static final double REJOIN_SPEED = 1.25D; + private static final int STRAFE_MIN_TICKS = 14; + private static final int STRAFE_MAX_TICKS = 28; + private static final int DIVE_RECOVERY_TICKS = 12; + private static final int DIVE_TOTAL_TICKS = 26; + private static final int PATROL_MIN_TICKS = 20; + private static final int PATROL_MAX_TICKS = 40; + private static final int FLY_SOUND_INTERVAL_TICKS = 80; + + private static final int SHARKNADO_REFRESH_INTERVAL = 20; + + private static final double REJOIN_SNAP_DIST_SQR = 9.0D; + private static final int ANIM_IDLE = 0; + private static final int ANIM_SWIM = 1; + private static final int ANIM_ATTACK = 2; + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation SWIM_ANIM = RawAnimation.begin().thenLoop("swim"); + private static final RawAnimation ATTACK_ANIM = RawAnimation.begin().thenPlay("attack"); + + private static final net.minecraft.network.syncher.EntityDataAccessor ANIMATION_STATE = + net.minecraft.network.syncher.SynchedEntityData.defineId( + StratosharkEntity.class, net.minecraft.network.syncher.EntityDataSerializers.INT); + @Nullable private Vec3 patrolTarget; + @Nullable private Vec3 recoveryTarget; + @Nullable private Vec3 strafeTarget; + @Nullable private Vec3 diveStrikeTarget; + private int patrolRetargetTicks; + private int currentStrafeDuration = this.nextStrafeDuration(); + private int strafeTicks = this.currentStrafeDuration; + private int attackTicks; + private int diveCooldown = 20; + private float orbitDirection = 1.0F; + private boolean dealtDamageThisDive; + private double currentStrafeRadius = 4.75D; + private double currentStrafeHeightOffset = 2.6D; + private double currentStrafeAngleOffset; + private int flySoundCooldown; + + @Nullable private UUID sharknadoId; + private int sharknadoTier = -1; + private int sharknadoSlotIndex = -1; + private SharknadoMobState sharknadoMobState = SharknadoMobState.SOLO; + + private int nextSharknadoRefreshTick = 0; + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + public StratosharkEntity(EntityType entityType, Level level) { + super(entityType, level); + this.moveControl = new FlyingMoveControl(this, 20, true); + this.xpReward = 8; + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.stratosharkHealth()) + .add(Attributes.ATTACK_DAMAGE, AntarchySettings.stratosharkAttackDamage()) + .add(Attributes.MOVEMENT_SPEED, AntarchySettings.stratosharkMovementSpeed()) + .add(Attributes.FLYING_SPEED, AntarchySettings.stratosharkFlyingSpeed()) + .add(Attributes.FOLLOW_RANGE, 40.0D) + .add(Attributes.KNOCKBACK_RESISTANCE, AntarchySettings.stratosharkKnockbackResistance()); + } + + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, net.minecraft.world.entity.MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData, @org.jetbrains.annotations.Nullable net.minecraft.nbt.CompoundTag dataTag) { + com.craisinlord.antarchy.content.entity.ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.stratosharkHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData, dataTag); + } + + private static final int MIN_SPAWN_HEIGHT_ABOVE_TERRAIN = 16; + + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, + MobSpawnType spawnReason, BlockPos pos, RandomSource random) { + if (level.getDifficulty() == Difficulty.PEACEFUL || !level.getFluidState(pos).isEmpty()) { + return false; + } + if (!level.isEmptyBlock(pos) || !level.isEmptyBlock(pos.above()) || !level.isEmptyBlock(pos.below())) { + return false; + } + if (spawnReason == MobSpawnType.SPAWNER || spawnReason == MobSpawnType.SPAWN_EGG + || spawnReason == MobSpawnType.COMMAND || spawnReason == MobSpawnType.BUCKET) { + return true; + } + int terrainHeight = level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, pos.getX(), pos.getZ()); + return pos.getY() >= terrainHeight + MIN_SPAWN_HEIGHT_ABOVE_TERRAIN; + } + + @Override + protected void defineSynchedData() { + super.defineSynchedData(); + this.entityData.define(ANIMATION_STATE, ANIM_IDLE); + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(1, new SharknadoOrbitGoal(this)); + + HurtByTargetGoal hurtByTargetGoal = new HurtByTargetGoal(this); + hurtByTargetGoal.setAlertOthers(StratosharkEntity.class); + this.targetSelector.addGoal(1, hurtByTargetGoal); + this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, StratosharkEntity::isTargetablePlayer)); + } + + private static boolean isTargetablePlayer(LivingEntity target) { + return !(target instanceof Player player) || (!player.isCreative() && !player.isSpectator()); + } + + @Override + protected PathNavigation createNavigation(Level level) { + FlyingPathNavigation navigation = new FlyingPathNavigation(this, level); + navigation.setCanOpenDoors(false); + navigation.setCanFloat(true); + navigation.setCanPassDoors(true); + return navigation; + } + + @Override + public void tick() { + super.tick(); + this.setNoGravity(true); + + if (this.level().isClientSide) { + this.tickClientParticles(); + this.updateFlightRotation(); + return; + } + + if (this.diveCooldown > 0) this.diveCooldown--; + if (this.tickCount >= this.nextSharknadoRefreshTick) { + this.nextSharknadoRefreshTick = this.tickCount + SHARKNADO_REFRESH_INTERVAL; + if (this.sharknadoMobState == SharknadoMobState.SOLO) { + this.refreshSharknado(); + } else { + this.validateSharknadoMembership(); + } + } + if (this.tickCount % 200 == 0 && this.level() instanceof ServerLevel serverLevel) { + SharknadoManager.get(serverLevel).cleanup(serverLevel); + } + switch (this.sharknadoMobState) { + case ORBITING -> { + if (this.sharknadoId != null && this.level() instanceof ServerLevel serverLevel) { + SharknadoManager.get(serverLevel).tickSharknado(this.sharknadoId, serverLevel); + } + this.updateFlightRotation(); + this.updateAnimationState(); + return; + } + case REJOINING -> { + this.tickRejoin(); + this.updateFlightRotation(); + this.updateAnimationState(); + return; + } + default -> { + } + } + LivingEntity target = this.getTarget(); + if ((target == null || !target.isAlive()) && this.tickCount % 10 == 0) { + Player nearbyPlayer = this.level().getNearestPlayer(this, 32.0D); + if (nearbyPlayer != null && isTargetablePlayer(nearbyPlayer) && this.canAttack(nearbyPlayer)) { + this.setTarget(nearbyPlayer); + target = nearbyPlayer; + } + } + + if (target != null && target.isAlive()) { + this.tickCombatMovement(target); + } else { + this.tickPatrolMovement(); + } + + this.tickFlySound(); + + this.updateFlightRotation(); + this.updateAnimationState(); + } + + + private void refreshSharknado() { + if (!(this.level() instanceof ServerLevel serverLevel)) return; + if (this.getTarget() != null && this.getTarget().isAlive()) return; + SharknadoManager.get(serverLevel).tryFormOrJoin(this, serverLevel); + } + + + private void validateSharknadoMembership() { + if (this.sharknadoId == null) { + this.forceResetToSolo(); + return; + } + if (!(this.level() instanceof ServerLevel serverLevel)) return; + if (!SharknadoManager.get(serverLevel).isInSharknado(this.getUUID())) { + this.forceResetToSolo(); + } + } + + + void onJoinSharknado(UUID id, int tier, int slot) { + this.sharknadoId = id; + this.sharknadoTier = tier; + this.sharknadoSlotIndex = slot; + this.sharknadoMobState = SharknadoMobState.ORBITING; + this.patrolTarget = null; + this.strafeTarget = null; + this.diveStrikeTarget = null; + this.setTarget(null); + } + + + void onLeaveSharknado() { + this.forceResetToSolo(); + } + + + void launchFromSharknado(Player target) { + this.sharknadoMobState = SharknadoMobState.LAUNCHED; + this.setTarget(target); + this.attackTicks = 0; + this.diveCooldown = 0; + this.dealtDamageThisDive = false; + this.recoveryTarget = null; + this.diveStrikeTarget = null; + this.startNewStrafeCycle(); + } + + + boolean isOrbiting() { + return this.sharknadoMobState == SharknadoMobState.ORBITING; + } + + private void forceResetToSolo() { + this.sharknadoId = null; + this.sharknadoTier = -1; + this.sharknadoSlotIndex = -1; + this.sharknadoMobState = SharknadoMobState.SOLO; + this.recoveryTarget = null; + this.strafeTarget = null; + this.diveStrikeTarget = null; + this.nextSharknadoRefreshTick = this.tickCount + SHARKNADO_REFRESH_INTERVAL; + } + + + private void tickRejoin() { + if (this.sharknadoId == null || !(this.level() instanceof ServerLevel serverLevel)) { + this.forceResetToSolo(); + return; + } + Vec3 orbitTarget = SharknadoManager.get(serverLevel) + .getOrbitTarget(this.sharknadoId, this.sharknadoTier, this.sharknadoSlotIndex); + if (orbitTarget == null) { + this.forceResetToSolo(); + return; + } + this.getMoveControl().setWantedPosition(orbitTarget.x, orbitTarget.y, orbitTarget.z, REJOIN_SPEED); + if (this.distanceToSqr(orbitTarget) < REJOIN_SNAP_DIST_SQR) { + this.sharknadoMobState = SharknadoMobState.ORBITING; + this.setTarget(null); + } + } + + @Override + public boolean doHurtTarget(Entity target) { + boolean hurt = super.doHurtTarget(target); + if (hurt && target instanceof LivingEntity livingTarget) { + Vec3 horizontal = this.toLocalPlane(livingTarget.position().subtract(this.position())); + if (horizontal.lengthSqr() < 1.0E-4D) horizontal = this.toLocalPlane(this.getForward()); + if (horizontal.lengthSqr() < 1.0E-4D) horizontal = new Vec3(1.0D, 0.0D, 0.0D); + horizontal = horizontal.normalize(); + Vec3 sideways = new Vec3(-horizontal.z, 0.0D, horizontal.x); + if (this.random.nextBoolean()) sideways = sideways.scale(-1.0D); + Vec3 knockback = horizontal.scale(0.7D).add(sideways.scale(0.45D)); + Vec3 worldKnockback = this.toWorld(knockback.x, 0.28D, knockback.z); + livingTarget.push(worldKnockback.x, worldKnockback.y, worldKnockback.z); + this.playSound(AntarchySoundEvents.STRATOSHARK_BITE.get(), 1.0F, 0.85F + this.random.nextFloat() * 0.2F); + } + return hurt; + } + + @Override + public boolean causeFallDamage(float fallDistance, float multiplier, DamageSource source) { + return false; + } + + @Override + protected void checkFallDamage(double y, boolean onGround, + net.minecraft.world.level.block.state.BlockState state, BlockPos pos) {} + + @Override + protected SoundEvent getAmbientSound() { return null; } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { return AntarchySoundEvents.STRATOSHARK_HURT.get(); } + + @Override + protected SoundEvent getDeathSound() { return AntarchySoundEvents.STRATOSHARK_DEATH.get(); } + + @Override + protected float getSoundVolume() { return 0.9F; } + + @Override + protected boolean shouldDespawnInPeaceful() { return true; } + + @Override + public void remove(Entity.RemovalReason reason) { + if (!this.level().isClientSide + && this.sharknadoId != null + && this.level() instanceof ServerLevel serverLevel) { + SharknadoManager.get(serverLevel).unregisterShark(this); + } + super.remove(reason); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 0, this::mainAnimController) + .triggerableAnim("attack", ATTACK_ANIM)); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { return this.geoCache; } + + private void tickFlySound() { + if (this.flySoundCooldown > 0) { + this.flySoundCooldown--; + } + + boolean isFlyingAnim = this.getAnimationState() == ANIM_SWIM; + boolean isMoving = this.toLocal(this.getDeltaMovement()).horizontalDistanceSqr() > 0.0125D; + if (!isFlyingAnim || !isMoving) { + this.flySoundCooldown = 0; + return; + } + + if (this.flySoundCooldown > 0) { + return; + } + + this.playSound(AntarchySoundEvents.STRATOSHARK_FLY.get(), 0.7F, 1.0F); + this.flySoundCooldown = FLY_SOUND_INTERVAL_TICKS; + } + + private void tickPatrolMovement() { + this.resetCombatFlightState(); + + if (this.patrolRetargetTicks-- <= 0 + || this.patrolTarget == null + || this.position().distanceToSqr(this.patrolTarget) < 5.0D) { + this.patrolRetargetTicks = PATROL_MIN_TICKS + + this.random.nextInt(PATROL_MAX_TICKS - PATROL_MIN_TICKS + 1); + this.patrolTarget = this.findPatrolTarget(); + } + if (this.patrolTarget != null) { + this.getMoveControl().setWantedPosition( + this.patrolTarget.x, this.patrolTarget.y, this.patrolTarget.z, PATROL_SPEED); + } + } + + private void tickCombatMovement(LivingEntity target) { + this.patrolTarget = null; + if (this.strafeTarget == null || this.strafeTicks <= 0) { + this.startNewStrafeCycle(); + } + + if (this.attackTicks > 0) { + this.tickDive(target); + return; + } + + this.strafeTarget = this.getStrafePoint(target); + this.getMoveControl().setWantedPosition( + this.strafeTarget.x, this.strafeTarget.y, this.strafeTarget.z, STRAFE_SPEED); + + if (--this.strafeTicks <= 0) { + if (this.random.nextFloat() < 0.6F) this.orbitDirection *= -1.0F; + this.startNewStrafeCycle(); + } + + if (this.canStartDive(target)) this.startDive(target); + } + + private void tickDive(LivingEntity target) { + boolean recovering = this.attackTicks <= DIVE_RECOVERY_TICKS; + if (!recovering) { + Vec3 strikeTarget = this.diveStrikeTarget != null + ? this.diveStrikeTarget + : this.createDiveStrikeTarget(target); + this.getMoveControl().setWantedPosition( + strikeTarget.x, strikeTarget.y - 0.15D, strikeTarget.z, DIVE_SPEED); + if (!this.dealtDamageThisDive && this.canConnectDive(target)) { + this.doHurtTarget(target); + this.dealtDamageThisDive = true; + this.recoveryTarget = this.createRecoveryTarget(strikeTarget); + this.attackTicks = DIVE_RECOVERY_TICKS; + } + } else { + Vec3 retreat = this.recoveryTarget != null + ? this.recoveryTarget : this.createRecoveryTarget( + this.diveStrikeTarget != null ? this.diveStrikeTarget : target.position()); + this.getMoveControl().setWantedPosition(retreat.x, retreat.y, retreat.z, RECOVERY_SPEED); + } + + if (--this.attackTicks <= 0) { + this.resetCombatFlightState(); + this.diveCooldown = 18 + this.random.nextInt(16); + if (this.sharknadoMobState == SharknadoMobState.LAUNCHED) { + this.sharknadoMobState = SharknadoMobState.REJOINING; + this.setTarget(null); + } + } + } + + private void startDive(LivingEntity target) { + this.attackTicks = DIVE_TOTAL_TICKS; + this.dealtDamageThisDive = false; + this.recoveryTarget = null; + this.diveStrikeTarget = this.createDiveStrikeTarget(target); + this.setAnimationState(ANIM_ATTACK); + } + + private boolean canStartDive(LivingEntity target) { + if (this.diveCooldown > 0 || !this.hasLineOfSight(target)) return false; + if (this.strafeTicks > Math.max(6, this.currentStrafeDuration / 2)) return false; + double distanceToTarget = this.distanceToSqr(target); + double localHeight = this.toLocal(target.position().subtract(this.position())).y; + return distanceToTarget >= 9.0D + && distanceToTarget <= 144.0D + && localHeight < -0.5D; + } + + private boolean canConnectDive(LivingEntity target) { + return this.hasLineOfSight(target) + && this.distanceToSqr(target) <= this.getDiveReachSqr(target); + } + + private double getDiveReachSqr(LivingEntity target) { + double reach = this.getBbWidth() * 1.8D + target.getBbWidth(); + return reach * reach + 1.0D; + } + + private Vec3 getStrafePoint(LivingEntity target) { + double angle = this.tickCount * 0.18D * this.orbitDirection + this.currentStrafeAngleOffset; + Vec3 localOffset = new Vec3( + Math.cos(angle) * this.currentStrafeRadius, + this.currentStrafeHeightOffset + Math.sin((this.tickCount + this.getId()) * 0.14D) * 0.5D, + Math.sin(angle) * this.currentStrafeRadius + ); + return target.position().add(this.toWorld(localOffset)); + } + + private Vec3 createRecoveryTarget(Vec3 strikeTarget) { + double radius = this.currentStrafeRadius + 1.5D + this.random.nextDouble() * 1.2D; + double angle = this.currentStrafeAngleOffset + (Math.PI / 2.0D) * this.orbitDirection; + Vec3 localOffset = new Vec3( + Math.cos(angle) * radius, + 2.0D + this.random.nextDouble() * 1.2D, + Math.sin(angle) * radius + ); + return strikeTarget.add(this.toWorld(localOffset)); + } + + private Vec3 createDiveStrikeTarget(LivingEntity target) { + Vec3 predictedOffset = target.getDeltaMovement().scale(5.0D); + return target.position() + .add(predictedOffset) + .add(this.toWorld(0.0D, target.getBbHeight() * 0.45D, 0.0D)); + } + + private Vec3 findPatrolTarget() { + BlockPos origin = this.blockPosition(); + for (int attempt = 0; attempt < 18; attempt++) { + BlockPos candidate = origin.offset( + this.random.nextInt(25) - 12, + this.random.nextInt(11) - 4, + this.random.nextInt(25) - 12); + if (!this.level().isEmptyBlock(candidate) || !this.level().isEmptyBlock(candidate.above())) continue; + BlockPos terrainPos = this.level().getHeightmapPos( + Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, + new BlockPos(candidate.getX(), origin.getY(), candidate.getZ())); + double terrainBandY = terrainPos.getY() + 6.0D + this.random.nextDouble() * 5.0D; + double y = Math.max(candidate.getY() + 0.5D, terrainBandY); + return new Vec3(candidate.getX() + 0.5D, y, candidate.getZ() + 0.5D); + } + return this.position().add( + (this.random.nextDouble() - 0.5D) * 10.0D, + this.random.nextDouble() * 4.0D - 1.0D, + (this.random.nextDouble() - 0.5D) * 10.0D); + } + + private void tickClientParticles() { + boolean emitParticles = this.getAnimationState() == ANIM_ATTACK + || this.getTarget() != null + || this.sharknadoMobState == SharknadoMobState.ORBITING; + + if (emitParticles && this.tickCount % 3 == 0) { + this.level().addParticle( + ParticleTypes.CLOUD, + this.getX() + (this.random.nextDouble() - 0.5D) * this.getBbWidth(), + this.getY() + 0.35D + this.random.nextDouble() * 0.5D, + this.getZ() + (this.random.nextDouble() - 0.5D) * this.getBbWidth(), + 0.0D, 0.02D, 0.0D); + } + } + + private PlayState mainAnimController(AnimationState state) { + return switch (this.getAnimationState()) { + case ANIM_ATTACK -> state.setAndContinue(ATTACK_ANIM); + case ANIM_SWIM -> state.setAndContinue(SWIM_ANIM); + default -> state.setAndContinue(IDLE_ANIM); + }; + } + + private int getAnimationState() { + return this.entityData.get(ANIMATION_STATE); + } + + private void setAnimationState(int animationState) { + if (this.entityData.get(ANIMATION_STATE) != animationState) { + this.entityData.set(ANIMATION_STATE, animationState); + if (animationState == ANIM_ATTACK) { + this.triggerAnim("main_controller", "attack"); + } + } + } + + private void updateAnimationState() { + if (this.attackTicks > 0) { + this.setAnimationState(ANIM_ATTACK); + return; + } + Vec3 velocity = this.getDeltaMovement(); + if (this.getTarget() != null + || this.sharknadoMobState != SharknadoMobState.SOLO + || velocity.lengthSqr() > 1.0E-4D) { + this.setAnimationState(ANIM_SWIM); + return; + } + this.setAnimationState(ANIM_IDLE); + } + + private void updateFlightRotation() { + Vec3 velocity = this.toLocal(this.getDeltaMovement()); + if (velocity.horizontalDistanceSqr() > 1.0E-4D) { + float targetYaw = (float) (Mth.atan2(velocity.z, velocity.x) * (180.0D / Math.PI)) - 90.0F; + this.setYRot(Mth.approachDegrees(this.getYRot(), targetYaw, 8.0F)); + this.yBodyRot = this.getYRot(); + this.yHeadRot = this.getYRot(); + } + if (velocity.lengthSqr() > 1.0E-4D) { + float targetPitch = (float) (-(Mth.atan2(velocity.y, velocity.horizontalDistance()) + * (180.0D / Math.PI))); + this.setXRot(Mth.approachDegrees(this.getXRot(), targetPitch, 6.0F)); + } + } + + private GravityDirection gravityDirection() { + return GravityApi.getGravityDirection(this); + } + + private Vec3 toLocal(Vec3 worldVector) { + return GravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); + } + + private Vec3 toWorld(Vec3 localVector) { + return GravityRotationUtil.vecPlayerToWorld(localVector, this.gravityDirection()); + } + + private Vec3 toWorld(double x, double y, double z) { + return GravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); + } + + private Vec3 toLocalPlane(Vec3 worldVector) { + Vec3 local = this.toLocal(worldVector); + return new Vec3(local.x, 0.0D, local.z); + } + + private int nextStrafeDuration() { + return STRAFE_MIN_TICKS + this.random.nextInt(STRAFE_MAX_TICKS - STRAFE_MIN_TICKS + 1); + } + + private void startNewStrafeCycle() { + this.currentStrafeDuration = this.nextStrafeDuration(); + this.strafeTicks = this.currentStrafeDuration; + this.currentStrafeRadius = 4.25D + this.random.nextDouble() * 1.25D; + this.currentStrafeHeightOffset = 2.2D + this.random.nextDouble() * 0.9D; + this.currentStrafeAngleOffset = this.random.nextDouble() * (Math.PI * 2.0D); + this.strafeTarget = null; + } + + private void resetCombatFlightState() { + this.attackTicks = 0; + this.dealtDamageThisDive = false; + this.recoveryTarget = null; + this.diveStrikeTarget = null; + this.startNewStrafeCycle(); + } + + + enum SharknadoMobState { + + SOLO, + + ORBITING, + + LAUNCHED, + + REJOINING + } + + + private static final class SharknadoOrbitGoal extends Goal { + + private final StratosharkEntity shark; + + SharknadoOrbitGoal(StratosharkEntity shark) { + this.shark = shark; + this.setFlags(EnumSet.of(Flag.MOVE)); + } + + @Override + public boolean canUse() { + return shark.sharknadoMobState == SharknadoMobState.ORBITING; + } + + @Override + public boolean canContinueToUse() { + return shark.sharknadoMobState == SharknadoMobState.ORBITING; + } + + @Override + public void tick() { + if (shark.sharknadoId == null) return; + if (!(shark.level() instanceof ServerLevel serverLevel)) return; + + SharknadoManager manager = SharknadoManager.get(serverLevel); + Vec3 orbitTarget = manager.getOrbitTarget( + shark.sharknadoId, + shark.sharknadoTier, + shark.sharknadoSlotIndex); + + if (orbitTarget == null) { + return; + } + + shark.getMoveControl().setWantedPosition( + orbitTarget.x, orbitTarget.y, orbitTarget.z, ORBIT_SPEED); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/trades/ComputerScientistTradeManager.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/trades/ComputerScientistTradeManager.java new file mode 100644 index 00000000..6fad563f --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/trades/ComputerScientistTradeManager.java @@ -0,0 +1,126 @@ +package com.craisinlord.antarchy.content.entity.trades; + +import com.craisinlord.antos.content.AntOSObjects; +import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.packs.resources.ResourceManager; +import net.minecraft.server.packs.resources.SimpleJsonResourceReloadListener; +import net.minecraft.util.profiling.ProfilerFiller; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.world.entity.npc.VillagerTrades; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.trading.MerchantOffer; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public final class ComputerScientistTradeManager extends SimpleJsonResourceReloadListener { + private static final Gson GSON = new Gson(); + private static final String DIRECTORY = "computer_scientist_trades"; + private static final List GENERAL_DISKS = List.of( + id("high_fructose_corn_syrup"), + id("elythia"), id("flying_squirrel"), id("rainbow_ant"), id("kraken"), id("cavaryn"), id("thoraxis"), + id("temporal_fields"), id("bloodglass"), id("vortex")); + private static volatile List loadedTrades = List.of(); + + public ComputerScientistTradeManager() { + super(GSON, DIRECTORY); + } + + public static int[] slotsPerLevel() { + return new int[] {4, 2, 2, 3, 5}; + } + + public static VillagerTrades.ItemListing listing(int level, int index) { + return (trader, random) -> { + TradeEntry trade = loadedTrades.stream() + .filter(entry -> entry.level == level && entry.index == index) + .findFirst() + .orElse(null); + return trade == null ? null : trade.createOffer(random); + }; + } + + @Override + protected void apply(Map object, ResourceManager resourceManager, ProfilerFiller profiler) { + List parsed = new ArrayList<>(); + for (JsonElement file : object.values()) { + if (!file.isJsonObject()) continue; + JsonObject root = file.getAsJsonObject(); + if (root.has("trades") && root.get("trades").isJsonArray()) { + for (JsonElement element : root.getAsJsonArray("trades")) { + if (element.isJsonObject()) parsed.add(parse(element.getAsJsonObject())); + } + } else { + parsed.add(parse(root)); + } + } + loadedTrades = List.copyOf(parsed); + } + + private static TradeEntry parse(JsonObject json) { + return new TradeEntry( + integer(json, "level", 1), integer(json, "index", 0), + stack(json.getAsJsonObject("buy")), + json.has("second_buy") ? stack(json.getAsJsonObject("second_buy")) : null, + stack(json.getAsJsonObject("sell")), + json.has("sell_disk") ? json.get("sell_disk").getAsString() : null, + integer(json, "max_uses", 12), integer(json, "villager_xp", 5), + json.has("price_multiplier") ? json.get("price_multiplier").getAsFloat() : 0.05F, + json.has("chance") ? json.get("chance").getAsFloat() : 1.0F); + } + + private record TradeEntry(int level, int index, StackRange buy, StackRange secondBuy, + StackRange sell, String sellDisk, int maxUses, int villagerXp, + float priceMultiplier, float chance) { + private MerchantOffer createOffer(net.minecraft.util.RandomSource random) { + if (random.nextFloat() > chance) return null; + ItemStack buyCost = buy.toStack(random); + ItemStack secondCost = secondBuy == null ? ItemStack.EMPTY : secondBuy.toStack(random); + ItemStack result = sellDisk == null ? sell.toStack(random) : diskStack(sellDisk, random, sell.toStack(random).getCount()); + return new MerchantOffer(buyCost, secondCost, result, maxUses, villagerXp, priceMultiplier); + } + } + + private record StackRange(ResourceLocation item, int min, int max) { + private Item itemValue() { + return BuiltInRegistries.ITEM.get(item); + } + + private int count(net.minecraft.util.RandomSource random) { + return min == max ? min : min + random.nextInt(max - min + 1); + } + + private ItemStack toStack(net.minecraft.util.RandomSource random) { + return new ItemStack(itemValue(), count(random)); + } + } + + private static StackRange stack(JsonObject json) { + int min = integer(json, "min", integer(json, "count", 1)); + int max = integer(json, "max", min); + return new StackRange(new ResourceLocation(json.get("item").getAsString()), min, max); + } + + private static ItemStack diskStack(String diskType, net.minecraft.util.RandomSource random, int count) { + ResourceLocation diskId = diskType.equals("random_general") + ? GENERAL_DISKS.get(random.nextInt(GENERAL_DISKS.size())) + : new ResourceLocation(diskType); + ItemStack disk = new ItemStack(AntOSObjects.FLOPPY_DISK.get(), count); + AntOSObjects.setFloppyDiskId(disk, diskId); + return disk; + } + + private static int integer(JsonObject json, String key, int fallback) { + return json.has(key) ? json.get(key).getAsInt() : fallback; + } + + private static ResourceLocation id(String path) { + return new ResourceLocation("antarchy", path); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/trades/DrTrayaurusTradeManager.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/trades/DrTrayaurusTradeManager.java index 5a3ce9e6..b592f24a 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/trades/DrTrayaurusTradeManager.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/trades/DrTrayaurusTradeManager.java @@ -6,7 +6,13 @@ import com.google.gson.JsonParseException; import com.mojang.serialization.Codec; import com.mojang.serialization.JsonOps; import com.mojang.serialization.codecs.RecordCodecBuilder; +import com.mojang.logging.LogUtils; +import net.minecraft.core.HolderLookup; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtOps; +import net.minecraft.nbt.Tag; import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.ExtraCodecs; import net.minecraft.server.packs.resources.ResourceManager; import net.minecraft.server.packs.resources.SimpleJsonResourceReloadListener; import net.minecraft.util.profiling.ProfilerFiller; @@ -19,8 +25,10 @@ import net.minecraft.world.item.trading.MerchantOffers; import java.util.ArrayList; import java.util.List; import java.util.Optional; +import org.slf4j.Logger; public final class DrTrayaurusTradeManager extends SimpleJsonResourceReloadListener { + private static final Logger LOGGER = LogUtils.getLogger(); private static final Gson GSON = new Gson(); private static final String DIRECTORY = "trayaurus_trades"; private static final Codec TRADE_FILE_CODEC = RecordCodecBuilder.create(instance -> instance.group( @@ -46,10 +54,10 @@ public final class DrTrayaurusTradeManager extends SimpleJsonResourceReloadListe loadedTrades = parsedTrades.isEmpty() ? defaultTrades() : List.copyOf(parsedTrades); } - public static MerchantOffers createOffers() { + public static MerchantOffers createOffers(HolderLookup.Provider registries) { MerchantOffers offers = new MerchantOffers(); for (TradeEntry trade : loadedTrades) { - trade.toOffer().ifPresent(offers::add); + trade.toOffer(registries).ifPresent(offers::add); } return offers; } @@ -77,25 +85,25 @@ public final class DrTrayaurusTradeManager extends SimpleJsonResourceReloadListe Codec.FLOAT.optionalFieldOf("price_multiplier", 0.05F).forGetter(TradeEntry::priceMultiplier) ).apply(instance, TradeEntry::new)); - private Optional toOffer() { + private Optional toOffer(HolderLookup.Provider registries) { if (this.maxUses < 1 || this.villagerXp < 1 || this.villagerXp > 99) { return Optional.empty(); } - ItemStack buyStack = this.buy.toStack(); - if (buyStack.isEmpty()) { + Optional buyCost = this.buy.toCost(registries); + if (buyCost.isEmpty()) { return Optional.empty(); } - ItemStack secondBuyStack = this.secondBuy.map(StackEntry::toStack).orElse(ItemStack.EMPTY); - ItemStack sellStack = this.sell.toStack(); + Optional secondBuyCost = this.secondBuy.flatMap(entry -> entry.toCost(registries)); + ItemStack sellStack = this.sell.toStack(registries); if (sellStack.isEmpty()) { return Optional.empty(); } return Optional.of(new MerchantOffer( - buyStack, - secondBuyStack, + buyCost.get(), + secondBuyCost.orElse(ItemStack.EMPTY), sellStack, this.maxUses, this.villagerXp, @@ -104,22 +112,60 @@ public final class DrTrayaurusTradeManager extends SimpleJsonResourceReloadListe } } - private record StackEntry(ResourceLocation itemId, int count) { + private record StackEntry(ResourceLocation itemId, int count, Optional components) { private static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( ResourceLocation.CODEC.fieldOf("item").forGetter(StackEntry::itemId), - Codec.INT.optionalFieldOf("count", 1).forGetter(StackEntry::count) + Codec.INT.optionalFieldOf("count", 1).forGetter(StackEntry::count), + ExtraCodecs.JSON.optionalFieldOf("components").forGetter(StackEntry::components) ).apply(instance, StackEntry::new)); + private StackEntry(ResourceLocation itemId, int count) { + this(itemId, count, Optional.empty()); + } + private Optional item() { return BuiltInRegistries.ITEM.getOptional(this.itemId) .filter(item -> item != net.minecraft.world.item.Items.AIR); } - private ItemStack toStack() { - return this.item() - .filter(item -> this.count > 0) - .map(item -> new ItemStack(item, this.count)) - .orElse(ItemStack.EMPTY); + private ItemStack toStack(HolderLookup.Provider registries) { + Optional item = this.item().filter(found -> this.count > 0); + if (item.isEmpty()) { + return ItemStack.EMPTY; + } + ItemStack stack = new ItemStack(item.get(), this.count); + if (this.components.isPresent()) { + Optional patch = this.parseComponents(); + if (patch.isEmpty()) { + return ItemStack.EMPTY; + } + stack.getOrCreateTag().merge(patch.get()); + } + return stack; + } + + private Optional toCost(HolderLookup.Provider registries) { + Optional item = this.item().filter(found -> this.count > 0); + if (item.isEmpty()) { + return Optional.empty(); + } + if (this.components.isEmpty()) { + return Optional.of(new ItemStack(item.get(), this.count)); + } + return this.parseComponents().map(predicate -> { + ItemStack stack = new ItemStack(item.get(), this.count); + stack.setTag(predicate.copy()); + return stack; + }); + } + + private Optional parseComponents() { + Tag tag = JsonOps.INSTANCE.convertTo(NbtOps.INSTANCE, this.components.get()); + if (tag instanceof CompoundTag compound) { + return Optional.of(compound); + } + LOGGER.error("Dr. Trayaurus trade {}: bad components: expected an object", this.itemId); + return Optional.empty(); } } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/trades/PestControlTradeManager.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/trades/PestControlTradeManager.java new file mode 100644 index 00000000..9decbe43 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/trades/PestControlTradeManager.java @@ -0,0 +1,75 @@ +package com.craisinlord.antarchy.content.entity.trades; + +import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import net.minecraft.core.registries.BuiltInRegistries; +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 net.minecraft.world.entity.npc.VillagerTrades; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.trading.MerchantOffer; + +public final class PestControlTradeManager extends SimpleJsonResourceReloadListener { + private static final Gson GSON = new Gson(); + private static volatile List trades = List.of(); + + public PestControlTradeManager() { + super(GSON, "pest_control_trades"); + } + + public static int[] slotsPerLevel() { + return new int[] {3, 4, 3, 2, 2}; + } + + public static VillagerTrades.ItemListing listing(int level, int index) { + return (villager, random) -> trades.stream().filter(entry -> entry.level == level && entry.index == index) + .findFirst().map(entry -> entry.offer(random)).orElse(null); + } + + @Override + protected void apply(Map resources, ResourceManager manager, ProfilerFiller profiler) { + List parsed = new ArrayList<>(); + for (JsonElement resource : resources.values()) { + if (!resource.isJsonObject()) continue; + JsonObject root = resource.getAsJsonObject(); + if (root.has("trades")) { + for (JsonElement element : root.getAsJsonArray("trades")) if (element.isJsonObject()) parsed.add(Entry.parse(element.getAsJsonObject())); + } else parsed.add(Entry.parse(root)); + } + trades = List.copyOf(parsed); + } + + private record Entry(int level, int index, String buy, int buyCount, String sell, int sellCount, + String secondBuy, int secondBuyCount, int maxUses, int xp) { + private MerchantOffer offer(RandomSource random) { + var buyItem = BuiltInRegistries.ITEM.get(new ResourceLocation(buy)); + var sellItem = BuiltInRegistries.ITEM.get(new ResourceLocation(sell)); + ItemStack secondCost = secondBuy == null ? ItemStack.EMPTY + : new ItemStack(BuiltInRegistries.ITEM.get(new ResourceLocation(secondBuy)), secondBuyCount); + return new MerchantOffer(new ItemStack(buyItem, buyCount), secondCost, new ItemStack(sellItem, sellCount), maxUses, xp, 0.05F); + } + + private static Entry parse(JsonObject json) { + JsonObject buy = json.getAsJsonObject("buy"); + JsonObject sell = json.getAsJsonObject("sell"); + JsonObject second = json.has("second_buy") ? json.getAsJsonObject("second_buy") : null; + return new Entry(json.get("level").getAsInt(), json.get("index").getAsInt(), buy.get("item").getAsString(), + count(buy), sell.get("item").getAsString(), count(sell), second == null ? null : second.get("item").getAsString(), + second == null ? 0 : count(second), json.has("max_uses") ? json.get("max_uses").getAsInt() : 12, + json.has("villager_xp") ? json.get("villager_xp").getAsInt() : 5); + } + + private static int count(JsonObject stack) { + if (stack.has("min") && stack.has("max")) return stack.get("min").getAsInt(); + return stack.has("count") ? stack.get("count").getAsInt() : stack.get("min").getAsInt(); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/vortex/VortexEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/vortex/VortexEntity.java index 56c55950..18768f93 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/vortex/VortexEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/vortex/VortexEntity.java @@ -2,6 +2,8 @@ package com.craisinlord.antarchy.content.entity.vortex; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityRotationUtil; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.syncher.EntityDataAccessor; @@ -200,7 +202,10 @@ public class VortexEntity extends Monster implements GeoEntity { private void tickCombatMovement(LivingEntity target) { this.faceTowards(target.position().add(0.0D, target.getBbHeight() * 0.5D, 0.0D), 12.0F, 8.0F); - this.getMoveControl().setWantedPosition(target.getX(), target.getY() + 2.5D, target.getZ(), 0.38D); + Vec3 gravityUp = Vec3.atLowerCornerOf( + GravityRotationUtil.getGravityDownDirection(this).getOpposite().getNormal()); + Vec3 hoverPosition = target.position().add(gravityUp.scale(2.5D)); + this.getMoveControl().setWantedPosition(hoverPosition.x, hoverPosition.y, hoverPosition.z, 0.38D); if (this.attackCooldown <= 0 && this.distanceToSqr(target) <= ATTACK_RANGE * ATTACK_RANGE @@ -251,6 +256,7 @@ public class VortexEntity extends Monster implements GeoEntity { double distance = direction.length(); Vec3 drift = distance > 1.0E-6D ? direction.scale(0.24D / distance) : this.getViewVector(1.0F).scale(0.24D); WindVortexEntity vortex = WindVortexEntity.create(serverLevel, windVortexTypeSupplier.get(), origin, Vec3.ZERO, this, true); + vortex.setAxis(GravityRotationUtil.getGravityDownDirection(this).getOpposite()); vortex.setTravel(drift); vortex.setTravelDuration(Mth.clamp((int) Math.ceil(distance / drift.length()), 8, 36)); vortex.setHoming(false); diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/vortex/WindVortexEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/vortex/WindVortexEntity.java index 3f4fa606..c030aca8 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/vortex/WindVortexEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/vortex/WindVortexEntity.java @@ -2,6 +2,8 @@ package com.craisinlord.antarchy.content.entity.vortex; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityRotationUtil; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; @@ -75,6 +77,7 @@ public class WindVortexEntity extends Entity { private static final double FALL_ACCELERATION = 0.006D; private static final double MAX_FALL_SPEED = 0.08D; private static final double MINIMUM_DOWNWARD_DRIFT = 0.012D; + private static final double ENTITY_FORCE_SPEED_SCALE = 0.5D; private static final int FADE_OUT_TICKS = 8; public enum VortexMode { @@ -105,7 +108,6 @@ public class WindVortexEntity extends Entity { public WindVortexEntity(EntityType entityType, Level level) { super(entityType, level); - this.noCulling = true; } public static WindVortexEntity create(Level level, EntityType type, Vec3 position, @@ -208,12 +210,10 @@ public class WindVortexEntity extends Entity { } } else if (!lensVortex) { Vec3 current = this.getDeltaMovement(); + Vec3 axis = this.getAxis(); double downwardSpeed = Math.min(MAX_FALL_SPEED, Math.max(MINIMUM_DOWNWARD_DRIFT, - -current.y + FALL_ACCELERATION)); - Vec3 drift = new Vec3( - current.x * DRIFT_FRICTION, - -downwardSpeed, - current.z * DRIFT_FRICTION); + -current.dot(axis) + FALL_ACCELERATION)); + Vec3 drift = current.scale(DRIFT_FRICTION).add(axis.scale(-downwardSpeed)); Vec3 from = this.position(); Vec3 to = from.add(drift); HitResult blockHit = this.level().clip( @@ -323,20 +323,17 @@ public class WindVortexEntity extends Entity { : this.getDeltaMovement(); double speed = Mth.clamp(incoming.length(), 0.2D, 0.9D); Vec3 flow = incoming; - if (normal.y > 0.5D) { - flow = new Vec3(incoming.x, 0.0D, incoming.z); - } else if (normal.y < -0.5D) { - flow = new Vec3(incoming.x, 0.0D, incoming.z).add(0.0D, -0.08D, 0.0D); - } else { - Vec3 tangent = incoming.subtract(normal.scale(incoming.dot(normal))); + Vec3 tangent = incoming.subtract(normal.scale(incoming.dot(normal))); + if (tangent.lengthSqr() < 1.0E-6D) { + tangent = this.getAxis().cross(normal); if (tangent.lengthSqr() < 1.0E-6D) { - tangent = new Vec3(-normal.z, 0.0D, normal.x); - if (tangent.lengthSqr() < 1.0E-6D) { - tangent = new Vec3(0.0D, 0.0D, 1.0D); - } + tangent = new Vec3(0.0D, 1.0D, 0.0D).cross(normal); + } + if (tangent.lengthSqr() < 1.0E-6D) { + tangent = new Vec3(1.0D, 0.0D, 0.0D); } - flow = tangent.normalize().scale(speed); } + flow = tangent.normalize().scale(speed); if (flow.lengthSqr() < 1.0E-6D) { this.travelVelocity = Vec3.ZERO; this.setDeltaMovement(Vec3.ZERO); @@ -378,12 +375,6 @@ public class WindVortexEntity extends Entity { return; } - for (ServerPlayer player : serverLevel.players()) { - if (area.intersects(player.getBoundingBox())) { - this.captureEntity(player, height, basis, mode); - } - } - Iterator> iterator = this.carriedProgress.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry entry = iterator.next(); @@ -509,27 +500,28 @@ public class WindVortexEntity extends Entity { case GATHER_RETURN -> (0.05D + progress * 0.08D) * massScale; } * playerScale; if (mode == VortexMode.UPWARD && entity.onGround()) { - axialSpeed = Math.max(axialSpeed, entity instanceof Player ? 0.38D : 0.3D); + axialSpeed = Math.max(axialSpeed, + (entity instanceof Player ? 0.38D : 0.3D) * ENTITY_FORCE_SPEED_SCALE); } Vec3 wanted = radial.scale(radialError * pull) .add(tangent.scale(spin)) - .add(basis.axis.scale(axialSpeed)); - Vec3 current = entity.getDeltaMovement(); - Vec3 updatedMovement = new Vec3( - Mth.lerp(0.72D, current.x, wanted.x), - Mth.lerp(0.58D, current.y, wanted.y), - Mth.lerp(0.72D, current.z, wanted.z) - ); + .add(basis.axis.scale(axialSpeed)) + .scale(ENTITY_FORCE_SPEED_SCALE); + Vec3 current = GravityApi.getWorldVelocity(entity); + Vec3 updatedMovement = current.lerp(wanted, 0.72D); if (this.travelling) { - updatedMovement = updatedMovement.add(this.travelVelocity.x * 0.8D, 0.0D, this.travelVelocity.z * 0.8D); + updatedMovement = updatedMovement.add(this.travelVelocity.scale(0.8D * ENTITY_FORCE_SPEED_SCALE)); } if (mode == VortexMode.UPWARD && entity.onGround()) { - double minRise = entity instanceof Player ? 0.38D : 0.3D; - updatedMovement = new Vec3(updatedMovement.x, Math.max(updatedMovement.y, minRise), updatedMovement.z); + double minRise = (entity instanceof Player ? 0.38D : 0.3D) * ENTITY_FORCE_SPEED_SCALE; + Vec3 gravityUp = Vec3.atLowerCornerOf( + GravityRotationUtil.getGravityDownDirection(entity).getOpposite().getNormal()); + double minimumAxialSpeed = Math.max(updatedMovement.dot(gravityUp), minRise); + updatedMovement = updatedMovement.add(gravityUp.scale(minimumAxialSpeed - updatedMovement.dot(gravityUp))); entity.setOnGround(false); } - entity.setDeltaMovement(updatedMovement); + GravityApi.setWorldVelocity(entity, updatedMovement); if (entity instanceof Player) { entity.setOnGround(false); } @@ -543,7 +535,9 @@ public class WindVortexEntity extends Entity { Vec3 radial = radialVector.lengthSqr() < 1.0E-6D ? basis.sideA : radialVector.scale(1.0D / horizontal); Vec3 tangent = basis.axis.cross(radial).normalize(); double scale = this.launchStrength * Mth.clamp(this.getVortexHeight() / 5.0D, 0.5D, 2.5D); - entity.setDeltaMovement(tangent.scale(0.72D * scale).add(radial.scale(0.34D * scale)).add(basis.axis.scale((0.78D + progress * 0.28D) * scale))); + this.setWorldVelocity(entity, tangent.scale(0.72D * scale * ENTITY_FORCE_SPEED_SCALE) + .add(radial.scale(0.34D * scale * ENTITY_FORCE_SPEED_SCALE)) + .add(basis.axis.scale((0.78D + progress * 0.28D) * scale * ENTITY_FORCE_SPEED_SCALE))); entity.hasImpulse = true; this.syncPlayerMotion(entity); } @@ -575,9 +569,11 @@ public class WindVortexEntity extends Entity { Vec3 toOwner = target.subtract(entity.position()); double distance = toOwner.length(); Vec3 direction = distance < 1.0E-4D ? new Vec3(0.0D, 1.0D, 0.0D) : toOwner.scale(1.0D / distance); - double arc = Mth.clamp(distance * 0.06D, 0.25D, 1.1D); - double power = this.launchStrength * Mth.clamp(distance / 6.0D, 0.6D, 2.0D); - entity.setDeltaMovement(direction.scale(power).add(0.0D, arc, 0.0D)); + double arc = Mth.clamp(distance * 0.06D, 0.25D, 1.1D) * ENTITY_FORCE_SPEED_SCALE; + double power = this.launchStrength * Mth.clamp(distance / 6.0D, 0.6D, 2.0D) * ENTITY_FORCE_SPEED_SCALE; + Vec3 gravityUp = Vec3.atLowerCornerOf( + GravityRotationUtil.getGravityDownDirection(entity).getOpposite().getNormal()); + this.setWorldVelocity(entity, direction.scale(power).add(gravityUp.scale(arc))); entity.fallDistance = 0.0F; entity.hasImpulse = true; entity.hurtMarked = true; @@ -595,6 +591,10 @@ public class WindVortexEntity extends Entity { } } + private void setWorldVelocity(Entity entity, Vec3 velocity) { + GravityApi.setWorldVelocity(entity, velocity); + } + private DamageSource damageSource() { Entity owner = this.getOwnerEntity(); if (owner instanceof LivingEntity living) { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/fluid/AntarchyFluidChecks.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/fluid/AntarchyFluidChecks.java index 27c89a2c..7d91b7d0 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/fluid/AntarchyFluidChecks.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/fluid/AntarchyFluidChecks.java @@ -51,11 +51,6 @@ public final class AntarchyFluidChecks { return BILE_VEIN_ID.equals(blockId); } - /** - * Bile always wins: worldgen foliage must not anchor on or near bile fluid or its solid - * bile_vein shell, since cyst/vein features can carve into a neighboring chunk after this - * chunk's vegetation has already been placed. - */ public static boolean hasBileNearby(LevelAccessor level, BlockPos center, int radius) { BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); for (int dx = -radius; dx <= radius; dx++) { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/fluid/AntiwaterBubbleColumnUtil.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/fluid/AntiwaterBubbleColumnUtil.java deleted file mode 100644 index 4afa42da..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/fluid/AntiwaterBubbleColumnUtil.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.craisinlord.antarchy.content.fluid; - -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.world.level.LevelAccessor; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.BubbleColumnBlock; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.material.FluidState; - -/** Converts a full Antiwater cell next to a vanilla bubble-column source. */ -public final class AntiwaterBubbleColumnUtil { - private AntiwaterBubbleColumnUtil() { - } - - public static void update(LevelAccessor level, BlockPos pos, FluidState fluidState) { - if (!AntarchyFluidChecks.isAntiwater(fluidState) - || (!fluidState.isSource() && fluidState.getAmount() < 7)) { - return; - } - - BlockState below = level.getBlockState(pos.below()); - if (isBubbleSource(below)) { - replaceColumn(level, pos, Direction.UP, below.is(Blocks.MAGMA_BLOCK)); - return; - } - - BlockState above = level.getBlockState(pos.above()); - if (isBubbleSource(above)) { - replaceColumn(level, pos, Direction.DOWN, above.is(Blocks.MAGMA_BLOCK)); - } - } - - private static boolean isBubbleSource(BlockState state) { - return state.is(Blocks.MAGMA_BLOCK) || state.is(Blocks.SOUL_SAND); - } - - private static void replaceColumn(LevelAccessor level, BlockPos start, Direction direction, boolean dragDown) { - BlockPos.MutableBlockPos cursor = start.mutable(); - BlockState columnState = Blocks.BUBBLE_COLUMN.defaultBlockState() - .setValue(BubbleColumnBlock.DRAG_DOWN, dragDown); - - while (true) { - BlockState state = level.getBlockState(cursor); - FluidState fluidState = state.getFluidState(); - if (!AntarchyFluidChecks.isAntiwater(fluidState) - && !state.is(Blocks.BUBBLE_COLUMN)) { - return; - } - - level.setBlock(cursor, columnState, 3); - cursor.move(direction); - } - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityAccess.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityAccess.java deleted file mode 100644 index 4fd8661e..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityAccess.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.craisinlord.antarchy.content.gravity; - -public interface AntarchyGravityAccess { - AntarchyGravityDirection antarchy$getGravityDirection(); - - AntarchyGravityDirection antarchy$getPrevGravityDirection(); - - boolean antarchy$isGravityForced(); - - int antarchy$getGravityTransitionDuration(); - - int antarchy$getGravityTransitionRemaining(); - - void antarchy$setGravityState(AntarchyGravityDirection direction, boolean forced, AntarchyGravityTransition transition); - - void antarchy$applySyncedGravityState( - AntarchyGravityDirection direction, - AntarchyGravityDirection previousDirection, - boolean forced, - int transitionDuration, - int transitionRemaining - ); -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityApi.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityApi.java deleted file mode 100644 index 62fe9dc9..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityApi.java +++ /dev/null @@ -1,115 +0,0 @@ -package com.craisinlord.antarchy.content.gravity; - -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.item.ItemEntity; -import net.minecraft.world.phys.Vec3; - -public final class AntarchyGravityApi { - public interface GravitySyncDispatcher { - void onGravityStateChanged(Entity entity); - } - - private static GravitySyncDispatcher syncDispatcher = entity -> { - }; - - private AntarchyGravityApi() { - } - - public static AntarchyGravityDirection getGravityDirection(Entity entity) { - return access(entity).antarchy$getGravityDirection(); - } - - public static AntarchyGravityDirection getPrevGravityDirection(Entity entity) { - return access(entity).antarchy$getPrevGravityDirection(); - } - - public static boolean isGravityForced(Entity entity) { - return access(entity).antarchy$isGravityForced(); - } - - public static boolean isGravityInverted(Entity entity) { - return getGravityDirection(entity).isInverted(); - } - - public static int getTransitionDuration(Entity entity) { - return access(entity).antarchy$getGravityTransitionDuration(); - } - - public static int getTransitionRemaining(Entity entity) { - return access(entity).antarchy$getGravityTransitionRemaining(); - } - - public static float getGravityFlipProgress(Entity entity, float partialTick) { - AntarchyGravityAccess access = access(entity); - AntarchyGravityDirection current = access.antarchy$getGravityDirection(); - AntarchyGravityDirection previous = access.antarchy$getPrevGravityDirection(); - int duration = access.antarchy$getGravityTransitionDuration(); - int remaining = access.antarchy$getGravityTransitionRemaining(); - if (duration <= 0 || current == previous) { - return current.isInverted() ? 1.0F : 0.0F; - } - - float elapsed = duration - remaining + partialTick; - float fraction = Math.max(0.0F, Math.min(1.0F, elapsed / duration)); - return previous.isInverted() ? 1.0F - fraction : fraction; - } - - public static void setGravityDirection(Entity entity, AntarchyGravityDirection direction) { - setGravityDirection(entity, direction, false, AntarchyGravityTransition.INSTANT); - } - - public static void setGravityDirection(Entity entity, AntarchyGravityDirection direction, AntarchyGravityTransition transition) { - setGravityDirection(entity, direction, false, transition); - } - - public static void setGravityDirection(Entity entity, AntarchyGravityDirection direction, boolean forced) { - setGravityDirection(entity, direction, forced, AntarchyGravityTransition.INSTANT); - } - - public static void setGravityDirection(Entity entity, AntarchyGravityDirection direction, boolean forced, AntarchyGravityTransition transition) { - access(entity).antarchy$setGravityState(direction, forced, transition); - } - - public static void setForcedGravityDirection(Entity entity, AntarchyGravityDirection direction) { - setForcedGravityDirection(entity, direction, AntarchyGravityTransition.INSTANT); - } - - public static void setForcedGravityDirection(Entity entity, AntarchyGravityDirection direction, AntarchyGravityTransition transition) { - access(entity).antarchy$setGravityState(direction, true, transition); - } - - public static void clearForcedGravity(Entity entity) { - access(entity).antarchy$setGravityState(AntarchyGravityDirection.DOWN, false, AntarchyGravityTransition.INSTANT); - } - - public static void applySyncedState( - Entity entity, - AntarchyGravityDirection direction, - AntarchyGravityDirection previousDirection, - boolean forced, - int transitionDuration, - int transitionRemaining - ) { - access(entity).antarchy$applySyncedGravityState(direction, previousDirection, forced, transitionDuration, transitionRemaining); - } - - public static void setSyncDispatcher(GravitySyncDispatcher dispatcher) { - syncDispatcher = dispatcher; - } - - public static void notifyGravityStateChanged(Entity entity) { - syncDispatcher.onGravityStateChanged(entity); - } - - public static void setWorldVelocity(ItemEntity entity, Vec3 velocity) { - entity.setDeltaMovement(velocity); - } - - private static AntarchyGravityAccess access(Entity entity) { - if (entity instanceof AntarchyGravityAccess access) { - return access; - } - - throw new IllegalStateException("Entity " + entity + " is missing Antarchy gravity state"); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityDirection.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityDirection.java deleted file mode 100644 index 183d1489..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityDirection.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.craisinlord.antarchy.content.gravity; - -import java.util.Optional; - -public enum AntarchyGravityDirection { - DOWN(0, "down", false), - UP(1, "up", true); - - private final int id; - private final String serializedName; - private final boolean inverted; - - AntarchyGravityDirection(int id, String serializedName, boolean inverted) { - this.id = id; - this.serializedName = serializedName; - this.inverted = inverted; - } - - public int getId() { - return this.id; - } - - public String getSerializedName() { - return this.serializedName; - } - - public boolean isInverted() { - return this.inverted; - } - - public static AntarchyGravityDirection byId(int id) { - return id == UP.id ? UP : DOWN; - } - - public static Optional parse(String value) { - for (AntarchyGravityDirection direction : values()) { - if (direction.serializedName.equalsIgnoreCase(value)) { - return Optional.of(direction); - } - } - - return Optional.empty(); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityRotationUtil.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityRotationUtil.java deleted file mode 100644 index 1f6c6c3b..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityRotationUtil.java +++ /dev/null @@ -1,140 +0,0 @@ -package com.craisinlord.antarchy.content.gravity; - -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.phys.Vec2; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec3; -import org.joml.Quaternionf; -import org.joml.Vector3f; - -public final class AntarchyGravityRotationUtil { - private AntarchyGravityRotationUtil() { - } - - public static Vec3 vecWorldToPlayer(Vec3 vector, AntarchyGravityDirection direction) { - if (!direction.isInverted()) { - return vector; - } - - return new Vec3(-vector.x, -vector.y, vector.z); - } - - public static Vec3 vecWorldToPlayer(double x, double y, double z, AntarchyGravityDirection direction) { - return vecWorldToPlayer(new Vec3(x, y, z), direction); - } - - public static Vec3 vecPlayerToWorld(Vec3 vector, AntarchyGravityDirection direction) { - if (!direction.isInverted()) { - return vector; - } - - return new Vec3(-vector.x, -vector.y, vector.z); - } - - public static Vec3 vecPlayerToWorld(double x, double y, double z, AntarchyGravityDirection direction) { - return vecPlayerToWorld(new Vec3(x, y, z), direction); - } - - public static Vec3 maskPlayerToWorld(Vec3 vector, AntarchyGravityDirection direction) { - return vector; - } - - public static Vec3 getEyeOffset(Entity entity, double eyeHeight) { - return vecPlayerToWorld(new Vec3(0.0D, eyeHeight, 0.0D), AntarchyGravityApi.getGravityDirection(entity)); - } - - public static Vec3 getEyeOffset(Entity entity, double eyeHeight, float partialTick) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - if (!direction.isInverted() && AntarchyGravityApi.getGravityFlipProgress(entity, partialTick) <= 0.0F) { - return new Vec3(0.0D, eyeHeight, 0.0D); - } - - Vector3f offset = new Vector3f(0.0F, (float) eyeHeight, 0.0F); - offset.rotate(getWorldRotationQuaternion(entity, partialTick)); - return new Vec3(offset.x(), offset.y(), offset.z()); - } - - public static AABB boxPlayerToWorld(AABB box, AntarchyGravityDirection direction) { - if (!direction.isInverted()) { - return box; - } - - return new AABB( - vecPlayerToWorld(new Vec3(box.minX, box.minY, box.minZ), direction), - vecPlayerToWorld(new Vec3(box.maxX, box.maxY, box.maxZ), direction) - ); - } - - public static AABB boxWorldToPlayer(AABB box, AntarchyGravityDirection direction) { - if (!direction.isInverted()) { - return box; - } - - return new AABB( - vecWorldToPlayer(new Vec3(box.minX, box.minY, box.minZ), direction), - vecWorldToPlayer(new Vec3(box.maxX, box.maxY, box.maxZ), direction) - ); - } - - public static Quaternionf getWorldRotationQuaternion(Entity entity, float partialTick) { - return rotationAroundNegativeZ(180.0F * AntarchyGravityApi.getGravityFlipProgress(entity, partialTick)); - } - - public static Quaternionf getCameraRotationQuaternion(Entity entity, float partialTick) { - return rotationAroundNegativeZ(-180.0F * AntarchyGravityApi.getGravityFlipProgress(entity, partialTick)); - } - - public static Vec2 rotWorldToPlayer(float yaw, float pitch, AntarchyGravityDirection direction) { - Vec3 vector = vecWorldToPlayer(rotToVec(yaw, pitch), direction); - return vecToRot(vector); - } - - public static Vec2 rotPlayerToWorld(float yaw, float pitch, AntarchyGravityDirection direction) { - Vec3 vector = vecPlayerToWorld(rotToVec(yaw, pitch), direction); - return vecToRot(vector); - } - - public static Direction getGravityDownDirection(Entity entity) { - return AntarchyGravityApi.isGravityInverted(entity) ? Direction.UP : Direction.DOWN; - } - - public static BlockPos getSupportingBlockPos(Entity entity, double offset) { - Direction direction = getGravityDownDirection(entity); - Vec3 pos = entity.position().add( - direction.getStepX() * offset, - direction.getStepY() * offset, - direction.getStepZ() * offset - ); - return BlockPos.containing(pos); - } - - private static Quaternionf rotationAroundNegativeZ(float degrees) { - return new Quaternionf().fromAxisAngleDeg(0.0F, 0.0F, -1.0F, degrees); - } - - private static Vec3 rotToVec(float yaw, float pitch) { - double radPitch = pitch * 0.017453292F; - double radNegYaw = -yaw * 0.017453292F; - double cosNegYaw = Math.cos(radNegYaw); - double sinNegYaw = Math.sin(radNegYaw); - double cosPitch = Math.cos(radPitch); - double sinPitch = Math.sin(radPitch); - return new Vec3(sinNegYaw * cosPitch, -sinPitch, cosNegYaw * cosPitch); - } - - private static Vec2 vecToRot(Vec3 vector) { - double sinPitch = -vector.y; - double radPitch = Math.asin(sinPitch); - double cosPitch = Math.cos(radPitch); - double sinNegYaw = vector.x / cosPitch; - double cosNegYaw = Math.max(-1.0D, Math.min(1.0D, vector.z / cosPitch)); - double radNegYaw = Math.acos(cosNegYaw); - if (sinNegYaw < 0.0D) { - radNegYaw = Math.PI * 2.0D - radNegYaw; - } - - return new Vec2((float) (-radNegYaw / 0.017453292F), (float) (radPitch / 0.017453292F)); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityTransition.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityTransition.java deleted file mode 100644 index b58f2bf7..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityTransition.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.craisinlord.antarchy.content.gravity; - -public record AntarchyGravityTransition(int durationTicks) { - public static final AntarchyGravityTransition INSTANT = new AntarchyGravityTransition(0); - - public AntarchyGravityTransition { - durationTicks = Math.max(0, durationTicks); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyMountedGravityHelper.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyMountedGravityHelper.java deleted file mode 100644 index bf4053e8..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyMountedGravityHelper.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.craisinlord.antarchy.content.gravity; - -import com.craisinlord.antarchy.content.AntarchyObjects; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; - -public final class AntarchyMountedGravityHelper { - private static final AntarchyGravityTransition STACK_TRANSITION = new AntarchyGravityTransition(12); - - private AntarchyMountedGravityHelper() { - } - - public static void syncConnectedStack(Entity entity) { - if (entity == null || entity.level().isClientSide()) { - return; - } - syncRootStack(entity.getRootVehicle(), null); - } - - public static void syncConnectedStackIgnoring(Entity entity, LivingEntity ignoredEffectSource) { - if (entity == null || entity.level().isClientSide()) { - return; - } - syncRootStack(entity.getRootVehicle(), ignoredEffectSource); - } - - public static void syncSeparatedStacks(Entity previousVehicle, Entity detachedEntity) { - if (previousVehicle != null && !previousVehicle.level().isClientSide()) { - syncRootStack(previousVehicle.getRootVehicle(), null); - } - if (detachedEntity != null && !detachedEntity.level().isClientSide()) { - syncRootStack(detachedEntity.getRootVehicle(), null); - } - } - - private static void syncRootStack(Entity root, LivingEntity ignoredEffectSource) { - boolean shouldInvert = stackHasInvertedEffect(root, ignoredEffectSource); - applyGravityState(root, shouldInvert); - for (Entity passenger : root.getIndirectPassengers()) { - applyGravityState(passenger, shouldInvert); - } - } - - private static boolean stackHasInvertedEffect(Entity root, LivingEntity ignoredEffectSource) { - if (hasInvertedEffect(root, ignoredEffectSource)) { - return true; - } - for (Entity passenger : root.getIndirectPassengers()) { - if (hasInvertedEffect(passenger, ignoredEffectSource)) { - return true; - } - } - return false; - } - - private static boolean hasInvertedEffect(Entity entity, LivingEntity ignoredEffectSource) { - return entity instanceof LivingEntity living - && living != ignoredEffectSource - && living.hasEffect(AntarchyObjects.INVERTED_EFFECT.get()); - } - - private static void applyGravityState(Entity entity, boolean shouldInvert) { - if (shouldInvert) { - if (AntarchyGravityApi.getGravityDirection(entity) != AntarchyGravityDirection.UP) { - AntarchyGravityApi.setForcedGravityDirection(entity, AntarchyGravityDirection.UP, STACK_TRANSITION); - } - return; - } - - if (AntarchyGravityApi.isGravityForced(entity)) { - AntarchyGravityApi.setGravityDirection(entity, AntarchyGravityDirection.DOWN, false, STACK_TRANSITION); - } - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/gravity/GravityWalkNodeEvaluator.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/gravity/GravityWalkNodeEvaluator.java deleted file mode 100644 index dbcfc0af..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/gravity/GravityWalkNodeEvaluator.java +++ /dev/null @@ -1,184 +0,0 @@ -package com.craisinlord.antarchy.content.gravity; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import net.minecraft.util.Mth; -import net.minecraft.world.entity.Mob; -import net.minecraft.world.level.BlockGetter; -import net.minecraft.world.level.PathNavigationRegion; -import net.minecraft.world.level.pathfinder.Node; -import net.minecraft.world.level.pathfinder.BlockPathTypes; -import net.minecraft.world.level.pathfinder.WalkNodeEvaluator; - -public class GravityWalkNodeEvaluator extends WalkNodeEvaluator { - private static final Logger LOGGER = LoggerFactory.getLogger("Antarchy/Pathfinding"); - private static final int[][] INVERTED_NEIGHBOR_OFFSETS = { - {1, 0, 0}, - {-1, 0, 0}, - {0, 0, 1}, - {0, 0, -1}, - {1, 0, 1}, - {1, 0, -1}, - {-1, 0, 1}, - {-1, 0, -1}, - {0, 1, 0}, - {0, -1, 0} - }; - - private int antarchy$loggedPrepare; - private int antarchy$loggedGetStart; - private int antarchy$loggedPathType; - private int antarchy$loggedNeighbors; - - @Override - public void prepare(PathNavigationRegion sourceIn, Mob mob) { - super.prepare(sourceIn, mob); - this.antarchy$loggedPrepare = 0; - this.antarchy$loggedGetStart = 0; - this.antarchy$loggedPathType = 0; - this.antarchy$loggedNeighbors = 0; - - if (AntarchyGravityApi.isGravityInverted(mob)) { - LOGGER.debug( - "[Path] prepare inverted mob={} pos=({}, {}, {}) size=({}, {})", - mob.getClass().getSimpleName(), - Mth.floor(mob.getX()), - Mth.floor(mob.getY()), - Mth.floor(mob.getZ()), - mob.getBbWidth(), - mob.getBbHeight() - ); - } - } - - @Override - public void done() { - if (this.mob != null && AntarchyGravityApi.isGravityInverted(this.mob)) { - LOGGER.debug("[Path] done inverted mob={}", this.mob.getClass().getSimpleName()); - } - super.done(); - } - - @Override - public Node getStart() { - if (!AntarchyGravityApi.isGravityInverted(this.mob)) { - return super.getStart(); - } - - int x = Mth.floor(this.mob.getX()); - int z = Mth.floor(this.mob.getZ()); - int y = Mth.floor(this.mob.getY() + this.mob.getBbHeight()) - 1; - - Node node = this.getNode(x, y, z); - node.type = BlockPathTypes.WALKABLE; - node.costMalus = this.mob.getPathfindingMalus(BlockPathTypes.WALKABLE); - - if (this.antarchy$loggedGetStart < 8) { - LOGGER.debug( - "[Path] getStart inverted mob={} node=({}, {}, {}) type={} malus={}", - this.mob.getClass().getSimpleName(), - x, - y, - z, - node.type, - node.costMalus - ); - this.antarchy$loggedGetStart++; - } - - return node; - } - - @Override - public BlockPathTypes getBlockPathType(BlockGetter level, int x, int y, int z, Mob mob) { - if (!AntarchyGravityApi.isGravityInverted(mob)) { - return super.getBlockPathType(level, x, y, z, mob); - } - - BlockPathTypes ceilingType = this.getBlockPathType(level, x, y + 1, z); - if (mob.getPathfindingMalus(ceilingType) >= 0.0F) { - return BlockPathTypes.OPEN; - } - - BlockPathTypes result = BlockPathTypes.WALKABLE; - for (int dw = 0; dw < this.entityWidth; dw++) { - for (int dd = 0; dd < this.entityDepth; dd++) { - for (int dh = 0; dh < this.entityHeight; dh++) { - BlockPathTypes type = this.getBlockPathType(level, x + dw, y - dh, z + dd); - float malus = mob.getPathfindingMalus(type); - if (malus < 0.0F) { - return type; - } - if (malus >= mob.getPathfindingMalus(result)) { - result = type; - } - } - } - } - - if (this.antarchy$loggedPathType < 16) { - LOGGER.debug( - "[Path] type inverted mob={} pos=({}, {}, {}) ceiling={} result={}", - mob.getClass().getSimpleName(), - x, - y, - z, - ceilingType, - result - ); - this.antarchy$loggedPathType++; - } - - return result; - } - - @Override - public int getNeighbors(Node[] neighbors, Node current) { - if (!AntarchyGravityApi.isGravityInverted(this.mob)) { - return super.getNeighbors(neighbors, current); - } - - int count = 0; - for (int[] offset : INVERTED_NEIGHBOR_OFFSETS) { - count += this.antarchy$addNeighbor(neighbors, count, current.x + offset[0], current.y + offset[1], current.z + offset[2]); - } - - if (this.antarchy$loggedNeighbors < 16) { - LOGGER.debug( - "[Path] neighbors inverted mob={} node=({}, {}, {}) count={}", - this.mob.getClass().getSimpleName(), - current.x, - current.y, - current.z, - count - ); - this.antarchy$loggedNeighbors++; - } - - return count; - } - - private int antarchy$addNeighbor(Node[] neighbors, int index, int x, int y, int z) { - BlockPathTypes type = this.getBlockPathType(this.level, x, y, z, this.mob); - if (this.mob.getPathfindingMalus(type) < 0.0F) { - if (this.antarchy$loggedNeighbors < 16) { - LOGGER.debug( - "[Path] reject mob={} pos=({}, {}, {}) type={} malus={}", - this.mob.getClass().getSimpleName(), - x, - y, - z, - type, - this.mob.getPathfindingMalus(type) - ); - } - return 0; - } - - Node node = this.getNode(x, y, z); - node.type = type; - node.costMalus = this.mob.getPathfindingMalus(type); - neighbors[index] = node; - return 1; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/horde/CavarynCreatureSpawner.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/horde/CavarynCreatureSpawner.java index c14491b4..0172969a 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/horde/CavarynCreatureSpawner.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/horde/CavarynCreatureSpawner.java @@ -21,15 +21,6 @@ import net.minecraft.world.phys.AABB; import java.util.HashMap; import java.util.Map; -/** - * Tops up stink bug / rolly polly populations near players in Cavaryn. - * - * Vanilla's NaturalSpawner picks a spawn Y uniformly at random between the dimension's min_y - * and a column's heightmap top. In Cavaryn that range spans the full 208-block dimension height, - * but any given column's actual floor only occupies a sliver of that, so the vanilla algorithm - * almost never lands on real ground even though floor itself is common. This scans a column - * directly for a real floor spot instead. - */ public final class CavarynCreatureSpawner { private static final ResourceKey CAVARYN = ResourceKey.create( net.minecraft.core.registries.Registries.DIMENSION, diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/horde/CavarynHordeManager.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/horde/CavarynHordeManager.java index fec6ccdf..d4d61e46 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/horde/CavarynHordeManager.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/horde/CavarynHordeManager.java @@ -4,6 +4,7 @@ import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.AntarchyGameRules; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.antarchy.content.advancement.AntarchyAdvancementTriggers; import com.craisinlord.antarchy.content.entity.JerryEntity; import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakeSync; import com.craisinlord.antarchy.content.network.HordeIntensitySync; @@ -55,6 +56,10 @@ public final class CavarynHordeManager { Registries.BIOME, new ResourceLocation(Antarchy.MODID, "biowart_caves") ); + private static final ResourceKey CAVARYN_MOLEWORM_CAVES = ResourceKey.create( + Registries.BIOME, + new ResourceLocation(Antarchy.MODID, "cavaryn_moleworm_caves") + ); private static final ResourceLocation DORMANT_HORDE = hordeId("dormant"); private static final ResourceLocation AWAKENING_HORDE = hordeId("awakening"); private static final ResourceLocation WAVE_ONE_HORDE = hordeId("wave_1"); @@ -65,6 +70,8 @@ public final class CavarynHordeManager { private static final int GROUP_RADIUS_BLOCKS = 128; private static final int ATTENTION_THRESHOLD = 100; + private static final int TIGERS_EYE_TRIGGER_LEVEL = 125; + private static final ResourceLocation TIGERS_EYE_BLOCK = new ResourceLocation(Antarchy.MODID, "tigers_eye_block"); private static final int HOSTILE_KILL_ATTENTION = 4; private static final int MOB_KILL_ATTENTION = 3; private static final int EGG_OR_NEST_BREAK_ATTENTION = 5; @@ -125,7 +132,11 @@ public final class CavarynHordeManager { } public static void recordBlockBreak(ServerPlayer player, BlockState brokenState, BlockPos pos) { - if (!(player.level() instanceof ServerLevel level) || !level.dimension().equals(CAVARYN) || !hordesEnabled(level)) { + if (!(player.level() instanceof ServerLevel level)) { + return; + } + triggerTigersEyeBlockBreak(player, level, brokenState); + if (!level.dimension().equals(CAVARYN) || !hordesEnabled(level)) { return; } if (!isValidHordeTarget(player) || !isHordeBiome(level, pos) || isPlayerInActiveEncounter(level, player)) { @@ -134,6 +145,24 @@ public final class CavarynHordeManager { addAttention(level, player, scaleActionAttention(level, isEggOrNest(brokenState) ? EGG_OR_NEST_BREAK_ATTENTION : BLOCK_BREAK_ATTENTION)); } + private static void triggerTigersEyeBlockBreak(ServerPlayer player, ServerLevel level, BlockState brokenState) { + if (!level.dimension().equals(CAVARYN) + || !hordesEnabled(level) + || !isValidHordeTarget(player) + || !BuiltInRegistries.BLOCK.getKey(brokenState.getBlock()).equals(TIGERS_EYE_BLOCK)) { + return; + } + + HordeData data = get(level); + PlayerAttention attention = data.players.computeIfAbsent(player.getUUID(), ignored -> new PlayerAttention()); + attention.attention = TIGERS_EYE_TRIGGER_LEVEL; + attention.areaKey = areaKey(player.blockPosition()); + attention.areaTicks = 0; + attention.lastSeenGameTime = level.getGameTime(); + data.setDirty(); + HordeIntensitySync.send(player, attention.attention / (float) ATTENTION_THRESHOLD); + } + public static boolean isHordeBiome(ServerLevelAccessor level, BlockPos pos) { return level.getBiome(pos).is(AntarchyTags.Biomes.USES_HORDE_SYSTEM); } @@ -312,6 +341,11 @@ public final class CavarynHordeManager { data.setDirty(); } if (encounter.phase == Phase.HERCULES && herculesCleared(level, encounter, gameTime)) { + if (herculesDefeated(level, encounter)) { + for (ServerPlayer player : targetsFor(level, encounter)) { + AntarchyAdvancementTriggers.hordePhaseChanged(player, "completed"); + } + } encounter.phase = Phase.RECOVERY; encounter.recoveryEndsAt = gameTime + RECOVERY_TICKS; data.setDirty(); @@ -359,6 +393,19 @@ public final class CavarynHordeManager { return true; } + private static boolean herculesDefeated(ServerLevel level, Encounter encounter) { + if (encounter.herculesIds.isEmpty()) { + return false; + } + for (UUID uuid : encounter.herculesIds) { + Entity entity = level.getEntity(uuid); + if (entity instanceof LivingEntity living && living.isAlive() && !living.isRemoved()) { + return false; + } + } + return true; + } + private static void addAttention(ServerLevel level, ServerPlayer player, int amount) { HordeData data = get(level); PlayerAttention attention = data.players.computeIfAbsent(player.getUUID(), ignored -> new PlayerAttention()); @@ -401,6 +448,9 @@ public final class CavarynHordeManager { } data.encounters.add(encounter); data.setDirty(); + for (ServerPlayer player : targetsFor(level, encounter)) { + AntarchyAdvancementTriggers.hordePhaseChanged(player, "awakening"); + } } private static List buildTargetedSpawnList(ServerLevel level, ResourceLocation horde, List targets, int players, boolean highAttention) { @@ -542,6 +592,9 @@ public final class CavarynHordeManager { if (level.getBiome(pos).is(BIOWART_CAVES)) { return new ResourceLocation(horde.getNamespace(), "biowart_caves/" + horde.getPath()); } + if (level.getBiome(pos).is(CAVARYN_MOLEWORM_CAVES)) { + return new ResourceLocation(horde.getNamespace(), "cavaryn_moleworm_caves/" + horde.getPath()); + } return horde; } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/AntarchyRecordItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/AntarchyRecordItem.java new file mode 100644 index 00000000..8ca2a6d1 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/AntarchyRecordItem.java @@ -0,0 +1,51 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.Antarchy; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.util.Mth; +import net.minecraft.world.item.RecordItem; + +public class AntarchyRecordItem extends RecordItem { + public static final int COMPARATOR_OUTPUT = 13; + public static final float UNDERSIDE_SECONDS = 225.0F; + public static final float THE_QUEEN_SECONDS = 180.0F; + public static final float VERDANCE_SECONDS = 135.75F; + public static final float GROTESQUE_SECONDS = 206.86F; + + private final String song; + private final int lengthInTicks; + + public AntarchyRecordItem(String song, int comparatorOutput, SoundEvent sound, Properties properties, float lengthInSeconds) { + super(comparatorOutput, sound, properties, Mth.ceil(lengthInSeconds)); + this.song = song; + this.lengthInTicks = Mth.ceil(lengthInSeconds * 20.0F); + } + + public static AntarchyRecordItem underside(SoundEvent sound, Properties properties) { + return new AntarchyRecordItem("underside", COMPARATOR_OUTPUT, sound, properties, UNDERSIDE_SECONDS); + } + + public static AntarchyRecordItem theQueen(SoundEvent sound, Properties properties) { + return new AntarchyRecordItem("the_queen", COMPARATOR_OUTPUT, sound, properties, THE_QUEEN_SECONDS); + } + + public static AntarchyRecordItem verdance(SoundEvent sound, Properties properties) { + return new AntarchyRecordItem("verdance", COMPARATOR_OUTPUT, sound, properties, VERDANCE_SECONDS); + } + + public static AntarchyRecordItem grotesque(SoundEvent sound, Properties properties) { + return new AntarchyRecordItem("grotesque", COMPARATOR_OUTPUT, sound, properties, GROTESQUE_SECONDS); + } + + @Override + public MutableComponent getDisplayName() { + return Component.translatable("jukebox_song." + Antarchy.MODID + "." + this.song); + } + + @Override + public int getLengthInTicks() { + return this.lengthInTicks; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/AntimetalScaffoldingItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/AntimetalScaffoldingItem.java index 472bfca1..be39ee6c 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/AntimetalScaffoldingItem.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/AntimetalScaffoldingItem.java @@ -1,16 +1,11 @@ package com.craisinlord.antarchy.content.item; import com.craisinlord.antarchy.content.block.AntimetalScaffoldingBlock; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import java.util.List; -import net.minecraft.ChatFormatting; +import com.craisinlord.anthology.gravity.GravityApi; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.network.chat.Component; import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ScaffoldingBlockItem; -import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; @@ -22,12 +17,6 @@ public class AntimetalScaffoldingItem extends ScaffoldingBlockItem { super(block, properties); } -// @Override -// public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { -// tooltipComponents.add(Component.translatable("tooltip.antarchy.antimetal_scaffolding").withStyle(ChatFormatting.DARK_AQUA)); -// super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); -// } - @Nullable @Override public BlockPlaceContext updatePlacementContext(BlockPlaceContext context) { @@ -35,7 +24,7 @@ public class AntimetalScaffoldingItem extends ScaffoldingBlockItem { Level level = context.getLevel(); BlockState clickedState = level.getBlockState(clickedPos); Block block = this.getBlock(); - boolean inverted = context.getPlayer() != null && AntarchyGravityApi.isGravityInverted(context.getPlayer()); + boolean inverted = context.getPlayer() != null && GravityApi.isGravityInverted(context.getPlayer()); if (!clickedState.is(block)) { return AntimetalScaffoldingBlock.getDistance(level, clickedPos, inverted) == 7 ? null : context; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/AttitudeAdjusterSlamManager.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/AttitudeAdjusterSlamManager.java index 8e3d47f3..e8f42664 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/AttitudeAdjusterSlamManager.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/AttitudeAdjusterSlamManager.java @@ -1,10 +1,9 @@ package com.craisinlord.antarchy.content.item; import com.craisinlord.antarchy.config.AntarchySettings; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; -import com.craisinlord.antarchy.content.network.ImpactShakePayload; -import com.craisinlord.antarchy.content.network.ImpactShakeSync; +import com.craisinlord.anthology.gravity.GravityDirection; +import com.craisinlord.anthology.gravity.GravityRotationUtil; +import com.craisinlord.anthology.shake.CameraShakeSync; import java.util.HashMap; import java.util.Iterator; import java.util.Map; @@ -105,10 +104,10 @@ public final class AttitudeAdjusterSlamManager { return false; } PLAYER_SLAMS.put(player.getUUID(), new PlayerSlamState(player.getUUID(), player.serverLevel().dimension().location().toString(), player.serverLevel().getGameTime() + SLAM_TIMEOUT_TICKS, player.fallDistance)); - AntarchyGravityDirection gravityDirection = AntarchyGravityRotationUtil.getGravityDownDirection(player) == Direction.UP ? AntarchyGravityDirection.UP : AntarchyGravityDirection.DOWN; + GravityDirection gravityDirection = GravityRotationUtil.getGravityDownDirection(player) == Direction.UP ? GravityDirection.UP : GravityDirection.DOWN; Vec3 motion = player.getDeltaMovement(); - Vec3 localMotion = AntarchyGravityRotationUtil.vecWorldToPlayer(motion, gravityDirection); - player.setDeltaMovement(AntarchyGravityRotationUtil.vecPlayerToWorld(new Vec3(localMotion.x * 0.25D, PLAYER_SLAM_START_VELOCITY, localMotion.z * 0.25D), gravityDirection)); + Vec3 localMotion = GravityRotationUtil.vecWorldToPlayer(motion, gravityDirection); + player.setDeltaMovement(GravityRotationUtil.vecPlayerToWorld(new Vec3(localMotion.x * 0.25D, PLAYER_SLAM_START_VELOCITY, localMotion.z * 0.25D), gravityDirection)); player.hurtMarked = true; player.fallDistance = 0.0F; player.swing(hand, true); @@ -168,10 +167,10 @@ public final class AttitudeAdjusterSlamManager { if (!player.onGround()) { continue; } - Direction gravityDown = AntarchyGravityRotationUtil.getGravityDownDirection(player); + Direction gravityDown = GravityRotationUtil.getGravityDownDirection(player); Vec3 impactPos = player.position(); BlockPos groundPos = getSlamSurfacePos(player, gravityDown); - double localVerticalSpeed = AntarchyGravityRotationUtil.vecWorldToPlayer(player.getDeltaMovement(), gravityDown == Direction.UP ? AntarchyGravityDirection.UP : AntarchyGravityDirection.DOWN).y; + double localVerticalSpeed = GravityRotationUtil.vecWorldToPlayer(player.getDeltaMovement(), gravityDown == Direction.UP ? GravityDirection.UP : GravityDirection.DOWN).y; double impactStrength = Math.max(Math.abs(Math.min(localVerticalSpeed, PLAYER_SLAM_START_VELOCITY)), Math.max(state.startFallDistance, player.fallDistance) * 0.15D); float damage = (float) Mth.clamp(PLAYER_SLAM_BASE_DAMAGE + impactStrength * PLAYER_SLAM_DAMAGE_SCALE * 10.0D, PLAYER_SLAM_BASE_DAMAGE, PLAYER_SLAM_MAX_DAMAGE); AABB area = new AABB(impactPos.x - PLAYER_SLAM_RADIUS, impactPos.y - 1.5D, impactPos.z - PLAYER_SLAM_RADIUS, impactPos.x + PLAYER_SLAM_RADIUS, impactPos.y + 2.5D, impactPos.z + PLAYER_SLAM_RADIUS); @@ -278,13 +277,7 @@ public final class AttitudeAdjusterSlamManager { } private static void shake(ServerLevel level, Vec3 pos, float intensity, int durationTicks) { - ImpactShakePayload payload = new ImpactShakePayload(pos.x, pos.y, pos.z, intensity, durationTicks, IMPACT_SHAKE_RADIUS); - double radiusSqr = IMPACT_SHAKE_RADIUS * IMPACT_SHAKE_RADIUS; - for (ServerPlayer player : level.players()) { - if (player.distanceToSqr(pos.x, pos.y, pos.z) <= radiusSqr) { - ImpactShakeSync.send(player, payload); - } - } + CameraShakeSync.sendNearby(level, pos, intensity, durationTicks, IMPACT_SHAKE_RADIUS); } private static Vec3 horizontalAway(Vec3 from, Vec3 to, Vec3 fallback) { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BigBerthaItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BigBerthaItem.java index 20480b3e..cc865625 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BigBerthaItem.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BigBerthaItem.java @@ -5,7 +5,7 @@ import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.client.model.ResourceBackedGeoItemModel; import com.craisinlord.antarchy.content.entity.lucid.LucidBoltEntity; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; +import com.craisinlord.anthology.gravity.GravityApi; import com.craisinlord.antarchy.config.AntarchySettings; import java.util.List; import java.util.function.Consumer; @@ -54,6 +54,8 @@ public class BigBerthaItem extends SwordItem implements GeoItem, com.craisinlord private static final ResourceLocation TEXTURE_LOCATION = new ResourceLocation("antarchy", "textures/item/big_bertha/big_bertha.png"); private static final ResourceLocation ANIMATION_LOCATION = new ResourceLocation("antarchy", "animations/static_item.animation.json"); private static final String MODE_TAG = "antarchy.big_bertha_mode"; + public static final int MODE_TREMORSAURUS = 8; + public static final int MODE_FORSAKEN = 9; private static final String SPIN_TICKS_TAG = "antarchy.big_bertha_spin_ticks"; private static final String SPIN_DIRECTION_X_TAG = "antarchy.big_bertha_spin_direction_x"; private static final String SPIN_DIRECTION_Z_TAG = "antarchy.big_bertha_spin_direction_z"; @@ -63,8 +65,8 @@ public class BigBerthaItem extends SwordItem implements GeoItem, com.craisinlord private static final int TORETERROR_COOLDOWN_TICKS = 200; private static final int TORETERROR_SHAKE_TICKS = 25; - /** Client-side only: how many ticks of camera shake remain from a Toreterror landing. */ public static int clientShakeTicks = 0; + private static final ResourceLocation ATTACK_RANGE_MODIFIER_ID = new ResourceLocation("antarchy", "big_bertha_attack_range"); private final Tier tier; private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); @@ -74,6 +76,17 @@ public class BigBerthaItem extends SwordItem implements GeoItem, com.craisinlord GeoItem.registerSyncedAnimatable(this); } + @Override + public com.google.common.collect.Multimap getDefaultAttributeModifiers(net.minecraft.world.entity.EquipmentSlot slot) { + if (slot != net.minecraft.world.entity.EquipmentSlot.MAINHAND) { + return super.getDefaultAttributeModifiers(slot); + } + com.google.common.collect.ImmutableMultimap.Builder builder = + com.craisinlord.antarchy.compat.item.WeaponAttributes.base(this.tier, (int) Math.round(AntarchySettings.bigBerthaAttackDamage()), (float) AntarchySettings.bigBerthaAttackSpeed()); + com.craisinlord.antarchy.compat.entity.EntityReach.addModifier(builder, ATTACK_RANGE_MODIFIER_ID, AntarchySettings.bigBerthaReachBonus()); + return builder.build(); + } + @Override public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); @@ -91,8 +104,7 @@ public class BigBerthaItem extends SwordItem implements GeoItem, com.craisinlord public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { ItemStack stack = player.getItemInHand(hand); if (player.isShiftKeyDown()) { - cycleMode(level, player, stack); - return InteractionResultHolder.sidedSuccess(stack, level.isClientSide); + return InteractionResultHolder.pass(stack); } BossMode mode = getMode(stack); @@ -143,7 +155,7 @@ public class BigBerthaItem extends SwordItem implements GeoItem, com.craisinlord case NIGHTMARE -> applyNightmareHit(player, target, serverLevel); case KRAKEN -> applyKrakenHit(player, target, serverLevel); case HERCULES -> applyHerculesHit(player, target, serverLevel); - case MOLEVORE, TORETERROR -> { + case MOLEVORE, TORETERROR, TREMORSAURUS, FORSAKEN -> { } } @@ -158,7 +170,7 @@ public class BigBerthaItem extends SwordItem implements GeoItem, com.craisinlord } if (isToreterrorJumping(stack) && player.getMainHandItem() == stack) { - player.fallDistance = 0.0F; // prevent fall damage during the crash-down + player.fallDistance = 0.0F; boolean launched = readInt(stack, TORETERROR_LAUNCHED_TAG) == 1; if (!launched && !player.onGround()) { com.craisinlord.antarchy.content.component.AntarchyItemTag.update(stack, tag -> tag.putInt(TORETERROR_LAUNCHED_TAG, 1)); @@ -201,7 +213,7 @@ public class BigBerthaItem extends SwordItem implements GeoItem, com.craisinlord private void applyBasiliskRightClick(Level level, Player player, ItemStack stack) { if (!level.isClientSide) { - double range = 3.0 + AntarchySettings.bigBerthaReachBonus() + 1.0; + double range = com.craisinlord.antarchy.compat.entity.EntityReach.entityInteractionRange(player) + 1.0; Vec3 eyePos = player.getEyePosition(); Vec3 lookDir = player.getLookAngle(); Vec3 endPos = eyePos.add(lookDir.scale(range)); @@ -253,8 +265,10 @@ public class BigBerthaItem extends SwordItem implements GeoItem, com.craisinlord true)); } - level.sendParticles(ParticleTypes.PORTAL, target.getX(), target.getY(0.8D), target.getZ(), 12, 0.25D, 0.25D, 0.25D, 0.08D); - if (!AntarchyGravityApi.isGravityInverted(player)) { + Vec3 impactPos = new Vec3(target.getX(), target.getY(0.8D), target.getZ()); + LucidBoltEntity.spawnImpactParticles(level, impactPos); + level.sendParticles(ParticleTypes.PORTAL, impactPos.x, impactPos.y, impactPos.z, 12, 0.25D, 0.25D, 0.25D, 0.08D); + if (!GravityApi.isGravityInverted(player)) { return; } @@ -333,7 +347,7 @@ public class BigBerthaItem extends SwordItem implements GeoItem, com.craisinlord } private void applyHerculesHit(Player attacker, LivingEntity target, ServerLevel level) { - float bonusDamage = (float) (attacker.getAttributeValue(Attributes.ATTACK_DAMAGE) * 0.5D); + float bonusDamage = (float) (attacker.getAttributeValue(Attributes.ATTACK_DAMAGE) * 0.6D); Vec3 push = target.position().subtract(attacker.position()).multiply(1.0D, 0.0D, 1.0D); if (push.lengthSqr() < 1.0E-4D) { push = attacker.getLookAngle().multiply(1.0D, 0.0D, 1.0D); @@ -369,8 +383,12 @@ public class BigBerthaItem extends SwordItem implements GeoItem, com.craisinlord } } - public boolean tryCycleModeWhileCoolingDown(Level level, Player player, ItemStack stack) { - if (player.getMainHandItem() != stack || !player.isShiftKeyDown() || !player.getCooldowns().isOnCooldown(this)) { + public static int getModeId(ItemStack stack) { + return getMode(stack).id; + } + + public boolean tryCycleModeFromInput(Level level, Player player, ItemStack stack) { + if (player.getMainHandItem() != stack) { return false; } @@ -640,6 +658,8 @@ public class BigBerthaItem extends SwordItem implements GeoItem, com.craisinlord MOLEVORE(3, "tooltip.antarchy.big_bertha.mode.molevore", "message.antarchy.big_bertha.mode.molevore"), LUCID(4, "tooltip.antarchy.big_bertha.mode.lucid", "message.antarchy.big_bertha.mode.lucid"), TORETERROR(5, "tooltip.antarchy.big_bertha.mode.toreterror", "message.antarchy.big_bertha.mode.toreterror"), + TREMORSAURUS(MODE_TREMORSAURUS, "tooltip.antarchy.big_bertha.mode.tremorsaurus", "message.antarchy.big_bertha.mode.tremorsaurus"), + FORSAKEN(MODE_FORSAKEN, "tooltip.antarchy.big_bertha.mode.forsaken", "message.antarchy.big_bertha.mode.forsaken"), HERCULES(6, "tooltip.antarchy.big_bertha.mode.hercules", "message.antarchy.big_bertha.mode.hercules"); private final int id; @@ -661,7 +681,9 @@ public class BigBerthaItem extends SwordItem implements GeoItem, com.craisinlord case KRAKEN -> HERCULES; case HERCULES -> MOLEVORE; case MOLEVORE -> TORETERROR; - case TORETERROR -> NONE; + case TORETERROR -> TREMORSAURUS; + case TREMORSAURUS -> FORSAKEN; + case FORSAKEN -> NONE; }; } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BloodCrystalArmorItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BloodCrystalArmorItem.java index c4f1d9cb..875ac2c3 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BloodCrystalArmorItem.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BloodCrystalArmorItem.java @@ -2,28 +2,31 @@ package com.craisinlord.antarchy.content.item; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.enchantment.AntarchyEnchantments; import com.google.common.collect.ImmutableMultimap; +import com.google.common.collect.Multimap; import java.util.List; import java.util.UUID; -import net.minecraft.world.level.Level; import net.minecraft.ChatFormatting; -import net.minecraft.core.Holder; import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ArmorItem; import net.minecraft.world.item.ArmorMaterial; -import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; +import org.jetbrains.annotations.Nullable; public class BloodCrystalArmorItem extends ArmorItem { private final Type armorType; public BloodCrystalArmorItem(ArmorMaterial material, Type type, Properties properties) { - super(material, type, properties.stacksTo(1).durability(resolveDurability(type))); + super(material, type, properties.durability(resolveDurability(type))); this.armorType = type; } @@ -52,7 +55,7 @@ public class BloodCrystalArmorItem extends ArmorItem { } @Override - public com.google.common.collect.Multimap getDefaultAttributeModifiers(EquipmentSlot slot) { + public Multimap getDefaultAttributeModifiers(EquipmentSlot slot) { if (slot != this.armorType.getSlot()) { return super.getDefaultAttributeModifiers(slot); } @@ -90,11 +93,24 @@ public class BloodCrystalArmorItem extends ArmorItem { } @Override - public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { - tooltipComponents.add(Component.translatable("item.antarchy.blood_crystal_armor.tooltip").withStyle(ChatFormatting.RED)); + public void inventoryTick(ItemStack stack, Level level, Entity entity, int slotId, boolean isSelected) { + super.inventoryTick(stack, level, entity, slotId, isSelected); if (this.armorType == Type.BOOTS) { - tooltipComponents.add(Component.translatable("item.antarchy.blood_crystal_boots.tooltip2").withStyle(ChatFormatting.DARK_RED)); + AntarchyEnchantments.ensure(stack, AntarchyEnchantments.featherRising(), 1); } + } + + @Override + public void onCraftedBy(ItemStack stack, Level level, Player player) { + super.onCraftedBy(stack, level, player); + if (this.armorType == Type.BOOTS) { + AntarchyEnchantments.ensure(stack, AntarchyEnchantments.featherRising(), 1); + } + } + + @Override + public void appendHoverText(ItemStack stack, @Nullable Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + tooltipComponents.add(Component.translatable("item.antarchy.blood_crystal_armor.tooltip").withStyle(ChatFormatting.RED)); super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BloodCrystalKatanaItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BloodCrystalKatanaItem.java index 5db4bcde..87b57103 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BloodCrystalKatanaItem.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BloodCrystalKatanaItem.java @@ -4,28 +4,40 @@ import java.util.List; import java.util.Map; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; -import net.minecraft.world.level.Level; import net.minecraft.ChatFormatting; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.entity.LivingEntity; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.SwordItem; import net.minecraft.world.item.Tier; import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec3; import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.antarchy.content.client.BloodCrystalKatanaTrailClientState; +import org.jetbrains.annotations.Nullable; public class BloodCrystalKatanaItem extends SwordItem { + private static final net.minecraft.resources.ResourceLocation ATTACK_RANGE_MODIFIER_ID = + new net.minecraft.resources.ResourceLocation("antarchy", "blood_crystal_katana_attack_range"); + private static final float FULL_SWING_THRESHOLD = 0.9F; + private static final Map LAST_DASH_TICK = new ConcurrentHashMap<>(); + private static final Map DASH_UNTIL_TICK = new ConcurrentHashMap<>(); + @FunctionalInterface public interface TrailCallback { void trigger(ServerPlayer player, int durationTicks); } private static TrailCallback trailCallback = (player, durationTicks) -> {}; - private static final Map DASH_UNTIL_TICK = new ConcurrentHashMap<>(); private final Tier tier; private final int attackDamage; @@ -38,6 +50,17 @@ public class BloodCrystalKatanaItem extends SwordItem { this.attackSpeed = attackSpeed; } + @Override + public com.google.common.collect.Multimap getDefaultAttributeModifiers(net.minecraft.world.entity.EquipmentSlot slot) { + if (slot != net.minecraft.world.entity.EquipmentSlot.MAINHAND) { + return super.getDefaultAttributeModifiers(slot); + } + com.google.common.collect.ImmutableMultimap.Builder builder = + com.craisinlord.antarchy.compat.item.WeaponAttributes.base(this.tier, this.attackDamage, this.attackSpeed); + com.craisinlord.antarchy.compat.entity.EntityReach.addModifier(builder, ATTACK_RANGE_MODIFIER_ID, AntarchySettings.bloodCrystalKatanaReachBonus()); + return builder.build(); + } + public static void setTrailCallback(TrailCallback callback) { trailCallback = callback == null ? (player, durationTicks) -> {} : callback; } @@ -45,9 +68,20 @@ public class BloodCrystalKatanaItem extends SwordItem { @Override public boolean hurtEnemy(ItemStack stack, LivingEntity target, LivingEntity attacker) { boolean result = super.hurtEnemy(stack, target, attacker); - if (!(attacker instanceof ServerPlayer player)) { - return result; + if (attacker instanceof ServerPlayer player) { + performDash(player, player.getAttackStrengthScale(0.0F) >= FULL_SWING_THRESHOLD); } + return result; + } + + public static void performDash(ServerPlayer player, boolean fullSwing) { + long now = player.level().getGameTime(); + Long last = LAST_DASH_TICK.get(player.getUUID()); + if (last != null && now - last < AntarchySettings.bloodCrystalKatanaDashCooldownTicks()) { + return; + } + LAST_DASH_TICK.put(player.getUUID(), now); + DASH_UNTIL_TICK.put(player.getUUID(), now + AntarchySettings.bloodCrystalKatanaTrailDurationTicks()); Vec3 look = player.getLookAngle(); Vec3 horizontal = new Vec3(look.x, 0.0D, look.z); @@ -60,27 +94,39 @@ public class BloodCrystalKatanaItem extends SwordItem { player.setDeltaMovement(player.getDeltaMovement().add(launch)); player.hasImpulse = true; player.hurtMarked = true; + trailCallback.trigger(player, AntarchySettings.bloodCrystalKatanaTrailDurationTicks()); - long now = player.level().getGameTime(); - DASH_UNTIL_TICK.put(player.getUUID(), now + AntarchySettings.bloodCrystalKatanaTrailDurationTicks()); - return result; + player.level().playSound(null, player.getX(), player.getY(), player.getZ(), + AntarchySoundEvents.BLOOD_CRYSTAL_KATANA_DASH.get(), SoundSource.PLAYERS, 1.0F, 1.0F); + + int invulnTicks = AntarchySettings.bloodCrystalKatanaInvulnTicks(); + if (fullSwing && invulnTicks > 0) { + player.addEffect(new MobEffectInstance(MobEffects.DAMAGE_RESISTANCE, invulnTicks, 4, false, false, false)); + } } public static boolean isDashing(Entity entity) { - if (!(entity instanceof ServerPlayer player)) { + if (!(entity instanceof Player)) { return false; } - Long until = DASH_UNTIL_TICK.get(player.getUUID()); - if (until == null || player.level().getGameTime() >= until) { - DASH_UNTIL_TICK.remove(player.getUUID()); + if (entity.level().isClientSide()) { + return BloodCrystalKatanaTrailClientState.getRemainingTicks(entity.getId()) > 0; + } + Long until = DASH_UNTIL_TICK.get(entity.getUUID()); + if (until == null) { + return false; + } + if (entity.level().getGameTime() >= until) { + DASH_UNTIL_TICK.remove(entity.getUUID()); return false; } return true; } @Override - public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + public void appendHoverText(ItemStack stack, @Nullable Level level, List tooltipComponents, TooltipFlag tooltipFlag) { tooltipComponents.add(Component.translatable("tooltip.antarchy.blood_crystal_katana.launch").withStyle(ChatFormatting.RED)); + tooltipComponents.add(Component.translatable("tooltip.antarchy.blood_crystal_katana.dash").withStyle(ChatFormatting.RED)); tooltipComponents.add(Component.translatable("tooltip.antarchy.blood_crystal_katana.trail").withStyle(ChatFormatting.DARK_RED)); super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BloodCrystalShardItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BloodCrystalShardItem.java index 8ede5110..32d425d4 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BloodCrystalShardItem.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BloodCrystalShardItem.java @@ -1,7 +1,9 @@ package com.craisinlord.antarchy.content.item; +import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.bloodglass.BloodglassAccess; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundSource; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResultHolder; import net.minecraft.world.entity.player.Player; @@ -36,7 +38,6 @@ public class BloodCrystalShardItem extends Item { return InteractionResultHolder.fail(stack); } - // Restore armor shields first, then apple shields if (armorLost > 0) { access.antarchy$setArmorShieldsActive(access.antarchy$getArmorShieldsActive() + 1); access.antarchy$setArmorShieldLostCount(armorLost - 1); @@ -52,6 +53,8 @@ public class BloodCrystalShardItem extends Item { } player.getCooldowns().addCooldown(this, COOLDOWN_TICKS); + level.playSound(null, player.getX(), player.getY(), player.getZ(), + AntarchySoundEvents.BLOODGLASS_WARD_HEART_REGEN.get(), SoundSource.PLAYERS, 1.0F, 1.0F); SYNC_BLOODGLASS.accept((ServerPlayer) player); if (!player.getAbilities().instabuild) { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BloodGodsBladeItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BloodGodsBladeItem.java new file mode 100644 index 00000000..29ca8e2d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BloodGodsBladeItem.java @@ -0,0 +1,88 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import java.util.List; +import net.minecraft.ChatFormatting; +import net.minecraft.core.particles.DustParticleOptions; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.SwordItem; +import net.minecraft.world.item.Tier; +import net.minecraft.world.item.TooltipFlag; +import org.jetbrains.annotations.Nullable; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.AABB; +import org.joml.Vector3f; + +public final class BloodGodsBladeItem extends SwordItem { + private static final int BLEEDING_TICKS = 100; + private static final int BLOOD_MOON_TICKS = 200; + private static final int BLOOD_MOON_MAX_TICKS = 300; + private static final int BLOOD_MOON_COOLDOWN_TICKS = 1200; + private static final double BLOOD_MOON_RADIUS = 12.0D; + private static final DustParticleOptions BLOOD_PARTICLES = new DustParticleOptions(new Vector3f(0.65F, 0.02F, 0.05F), 1.6F); + + private final Tier tier; + private final int attackDamage; + private final float attackSpeed; + + public BloodGodsBladeItem(Tier tier, Item.Properties properties, int attackDamage, float attackSpeed) { + super(tier, attackDamage, attackSpeed, properties); + this.tier = tier; + this.attackDamage = attackDamage; + this.attackSpeed = attackSpeed; + } + + @Override + public boolean hurtEnemy(ItemStack stack, LivingEntity target, LivingEntity attacker) { + boolean result = super.hurtEnemy(stack, target, attacker); + if (!attacker.level().isClientSide()) { + target.addEffect(new MobEffectInstance(AntarchyObjects.BLEEDING_EFFECT.get(), BLEEDING_TICKS, 0, false, true, true)); + if (attacker instanceof Player player && player.hasEffect(AntarchyObjects.BLOOD_MOON_EFFECT.get())) { + player.heal(1.0F); + if (target.isDeadOrDying()) { + MobEffectInstance bloodMoon = player.getEffect(AntarchyObjects.BLOOD_MOON_EFFECT.get()); + if (bloodMoon != null) { + player.addEffect(new MobEffectInstance(AntarchyObjects.BLOOD_MOON_EFFECT.get(), Math.min(BLOOD_MOON_MAX_TICKS, bloodMoon.getDuration() + 20), bloodMoon.getAmplifier(), false, true, true)); + } + } + } + } + return result; + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { + ItemStack stack = player.getItemInHand(hand); + if (player.getCooldowns().isOnCooldown(this)) { + return InteractionResultHolder.fail(stack); + } + if (!level.isClientSide() && level instanceof ServerLevel serverLevel) { + player.getCooldowns().addCooldown(this, BLOOD_MOON_COOLDOWN_TICKS); + player.addEffect(new MobEffectInstance(AntarchyObjects.BLOOD_MOON_EFFECT.get(), BLOOD_MOON_TICKS, 0, false, true, true)); + player.addEffect(new MobEffectInstance(MobEffects.DAMAGE_BOOST, BLOOD_MOON_TICKS, 0, false, false, true)); + for (LivingEntity entity : level.getEntitiesOfClass(LivingEntity.class, player.getBoundingBox().inflate(BLOOD_MOON_RADIUS), entity -> entity != player && entity.isAlive() && !player.isAlliedTo(entity))) { + entity.addEffect(new MobEffectInstance(MobEffects.GLOWING, BLOOD_MOON_TICKS, 0, false, true, true)); + entity.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SLOWDOWN, BLOOD_MOON_TICKS, 0, false, true, true)); + } + serverLevel.sendParticles(BLOOD_PARTICLES, player.getX(), player.getY() + 1.0D, player.getZ(), 160, 2.5D, 1.2D, 2.5D, 0.08D); + serverLevel.sendParticles(BLOOD_PARTICLES, player.getX(), player.getY() + 8.0D, player.getZ(), 80, 5.0D, 0.2D, 5.0D, 0.02D); + } + return InteractionResultHolder.sidedSuccess(stack, level.isClientSide()); + } + + @Override + public void appendHoverText(ItemStack stack, @Nullable Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + tooltipComponents.add(Component.translatable("tooltip.antarchy.blood_gods_blade.bleeding").withStyle(ChatFormatting.DARK_RED)); + tooltipComponents.add(Component.translatable("tooltip.antarchy.blood_gods_blade.blood_moon").withStyle(ChatFormatting.RED)); + super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BrutalflyElytraItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BrutalflyElytraItem.java index 1d254270..3bde6a9a 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BrutalflyElytraItem.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BrutalflyElytraItem.java @@ -1,7 +1,10 @@ package com.craisinlord.antarchy.content.item; +import com.google.common.collect.ImmutableMultimap; +import java.nio.charset.StandardCharsets; import java.util.Optional; import java.util.List; +import java.util.UUID; import java.util.function.Supplier; import net.minecraft.world.level.Level; import net.minecraft.ChatFormatting; @@ -10,14 +13,19 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.network.chat.Component; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.item.ElytraItem; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import org.jetbrains.annotations.Nullable; public final class BrutalflyElytraItem extends ElytraItem { private static final ResourceLocation REPAIR_MATERIAL_ID = new ResourceLocation("antarchy", "brutalfly_wing"); + private static final ResourceLocation ARMOR_MODIFIER_ID = new ResourceLocation("antarchy", "brutalfly_elytra_armor"); + private static final ResourceLocation TOUGHNESS_MODIFIER_ID = new ResourceLocation("antarchy", "brutalfly_elytra_toughness"); - // Set by NeoForge client setup to return the actual bound key name public static Supplier FLAP_KEY_NAME = () -> Component.literal("Shift"); public BrutalflyElytraItem(Properties properties) { @@ -28,6 +36,18 @@ public final class BrutalflyElytraItem extends ElytraItem { return entity != null && entity.getItemBySlot(EquipmentSlot.CHEST).getItem() instanceof BrutalflyElytraItem; } + @Override + public com.google.common.collect.Multimap getDefaultAttributeModifiers(EquipmentSlot slot) { + if (slot != EquipmentSlot.CHEST) { + return super.getDefaultAttributeModifiers(slot); + } + ImmutableMultimap.Builder builder = ImmutableMultimap.builder(); + builder.put(Attributes.ARMOR, + new AttributeModifier(UUID.nameUUIDFromBytes(ARMOR_MODIFIER_ID.toString().getBytes(StandardCharsets.UTF_8)), + ARMOR_MODIFIER_ID.toString(), 3.0D, AttributeModifier.Operation.ADDITION)); + return builder.build(); + } + @Override public boolean isValidRepairItem(ItemStack toRepair, ItemStack repair) { Optional repairMaterial = BuiltInRegistries.ITEM.getOptional(REPAIR_MATERIAL_ID); @@ -45,7 +65,7 @@ public final class BrutalflyElytraItem extends ElytraItem { } @Override - public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, net.minecraft.world.item.TooltipFlag tooltipFlag) { + public void appendHoverText(ItemStack stack, @Nullable Level level, List tooltipComponents, net.minecraft.world.item.TooltipFlag tooltipFlag) { tooltipComponents.add(Component.translatable("tooltip.antarchy.brutalfly_elytra.flap", FLAP_KEY_NAME.get()).withStyle(ChatFormatting.GRAY)); super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BugSprayItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BugSprayItem.java new file mode 100644 index 00000000..58603fe5 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BugSprayItem.java @@ -0,0 +1,67 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.tags.EntityTypeTags; +import net.minecraft.tags.TagKey; +import net.minecraft.resources.ResourceLocation; +import com.craisinlord.antarchy.content.entity.ant.BaseAntEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; + +public final class BugSprayItem extends Item { + private static final TagKey> ANARCHY_ARTHROPODS = TagKey.create( + net.minecraft.core.registries.Registries.ENTITY_TYPE, new ResourceLocation("antarchy", "arthropods")); + + public BugSprayItem(Properties properties) { + super(properties); + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { + ItemStack stack = player.getItemInHand(hand); + if (!level.isClientSide && level instanceof ServerLevel serverLevel) { + Vec3 look = player.getLookAngle().normalize(); + Vec3 origin = player.getEyePosition().add(look.scale(0.6D)); + spray(serverLevel, origin, look, player.position(), SoundSource.PLAYERS, player.blockPosition()); + stack.hurtAndBreak(1, player, entity -> entity.broadcastBreakEvent(hand)); + } + return InteractionResultHolder.sidedSuccess(stack, level.isClientSide); + } + + public static void spray(ServerLevel level, Vec3 origin, Vec3 direction, Vec3 repellerPosition, + SoundSource soundSource, net.minecraft.core.BlockPos soundPosition) { + Vec3 look = direction.normalize(); + var sprayParticle = AntarchyObjects.BUG_SPRAY_PARTICLE.get(); + level.sendParticles(sprayParticle, origin.x, origin.y, origin.z, 18, + look.x * 0.45D, look.y * 0.45D, look.z * 0.45D, 0.06D); + AABB bounds = new AABB(origin, origin.add(look.scale(7.0D))).inflate(2.2D); + for (Entity entity : level.getEntities((Entity) null, bounds, candidate -> candidate instanceof Mob mob + && (mob.getMobType() == net.minecraft.world.entity.MobType.ARTHROPOD + || mob.getType().is(ANARCHY_ARTHROPODS) || mob instanceof BaseAntEntity))) { + if (!(entity instanceof Mob mob)) continue; + Vec3 toward = mob.position().subtract(origin); + double distance = toward.length(); + if (distance > 9.0D || distance < 0.001D || toward.normalize().dot(look) < 0.55D) continue; + Vec3 flee = mob.position().subtract(repellerPosition).normalize(); + mob.getNavigation().moveTo(mob.getX() + flee.x * 6.0D, mob.getY(), mob.getZ() + flee.z * 6.0D, 1.25D); + mob.setTarget(null); + mob.setLastHurtByMob(null); + mob.setDeltaMovement(mob.getDeltaMovement().add(flee.scale(0.55D)).add(0.0D, 0.15D, 0.0D)); + mob.hurtMarked = true; + level.sendParticles(sprayParticle, mob.getX(), mob.getY() + mob.getBbHeight() * 0.5D, mob.getZ(), 5, 0.12D, 0.12D, 0.12D, 0.02D); + } + level.playSound(null, soundPosition, SoundEvents.FIRE_EXTINGUISH, soundSource, 0.7F, 1.2F); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/CloudSharkFinSoupItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/CloudSharkFinSoupItem.java deleted file mode 100644 index fdd46d54..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/CloudSharkFinSoupItem.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.craisinlord.antarchy.content.item; - -import net.minecraft.ChatFormatting; -import net.minecraft.network.chat.Component; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.TooltipFlag; -import net.minecraft.world.level.Level; - -import java.util.List; - -public class CloudSharkFinSoupItem extends Item { - public CloudSharkFinSoupItem(Properties properties) { - super(properties); - } - - @Override - public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { - tooltipComponents.add(Component.translatable("tooltip.antarchy.cloud_shark_fin_soup").withStyle(ChatFormatting.GRAY)); - super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/CritterCageItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/CritterCageItem.java index e2802d58..d88df558 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/CritterCageItem.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/CritterCageItem.java @@ -223,7 +223,7 @@ public class CritterCageItem extends Item { } private boolean releaseAtLookTarget(ServerLevel level, Player player, InteractionHand hand, ItemStack stack) { - HitResult hitResult = player.pick(5.0D, 0.0F, false); + HitResult hitResult = player.pick(com.craisinlord.antarchy.compat.entity.EntityReach.blockInteractionRange(player), 0.0F, false); Vec3 target = hitResult.getType() == HitResult.Type.BLOCK && hitResult instanceof BlockHitResult blockHitResult ? blockHitResult.getLocation().add(Vec3.atLowerCornerOf(blockHitResult.getDirection().getNormal()).scale(0.5D)) : player.getEyePosition().add(player.getLookAngle().scale(2.0D)); diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/EyeOfTheStormItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/EyeOfTheStormItem.java index abed85ae..55c47b2f 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/EyeOfTheStormItem.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/EyeOfTheStormItem.java @@ -5,10 +5,8 @@ import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.client.model.ResourceBackedGeoItemModel; import com.craisinlord.antarchy.content.client.renderer.AnimatedHeldItemRenderer; import com.craisinlord.antarchy.content.entity.vortex.WindVortexEntity; +import com.craisinlord.anthology.gravity.GravityApi; import java.util.List; -import java.util.Map; -import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; import java.util.function.Consumer; import net.minecraft.ChatFormatting; import net.minecraft.core.Direction; @@ -46,7 +44,6 @@ public class EyeOfTheStormItem extends Item implements GeoItem { private static final ResourceLocation ANIMATION_LOCATION = new ResourceLocation("antarchy", "animations/eye_of_the_storm.animation.json"); private static final String IDLE_CONTROLLER = "idle_controller"; private static final String IDLE_ANIMATION = "spinning_idle"; - private static final Map LAST_UPDRAFT_TICK = new ConcurrentHashMap<>(); private static final float SURGE_PROJECTILE_SPEED = 0.65F; private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); @@ -66,12 +63,9 @@ public class EyeOfTheStormItem extends Item implements GeoItem { return InteractionResultHolder.consume(stack); } - long now = level.getGameTime(); - Long last = LAST_UPDRAFT_TICK.get(player.getUUID()); - if (last != null && now - last < AntarchySettings.eyeOfTheStormUpdraftCooldownTicks()) { + if (player.getCooldowns().isOnCooldown(this)) { return InteractionResultHolder.fail(stack); } - LAST_UPDRAFT_TICK.put(player.getUUID(), now); ServerLevel serverLevel = (ServerLevel) level; WindVortexEntity vortex = WindVortexEntity.create( @@ -83,14 +77,18 @@ public class EyeOfTheStormItem extends Item implements GeoItem { false ); vortex.setMode(WindVortexEntity.VortexMode.UPWARD); - vortex.setAxis(Direction.UP); + vortex.setAxis(GravityApi.isGravityInverted(player) ? Direction.DOWN : Direction.UP); vortex.setVortexSize((float) AntarchySettings.eyeOfTheStormUpdraftHeight(), (float) AntarchySettings.eyeOfTheStormUpdraftRadius()); vortex.setVortexDurationTicks(AntarchySettings.eyeOfTheStormUpdraftDurationTicks()); serverLevel.addFreshEntity(vortex); - player.setDeltaMovement(player.getDeltaMovement().add(0.0D, AntarchySettings.eyeOfTheStormUpdraftLaunchStrength(), 0.0D)); + Vec3 gravityUp = Vec3.atLowerCornerOf( + (GravityApi.isGravityInverted(player) ? Direction.DOWN : Direction.UP).getNormal()); + GravityApi.setWorldVelocity(player, + GravityApi.getWorldVelocity(player).add(gravityUp.scale(AntarchySettings.eyeOfTheStormUpdraftLaunchStrength()))); player.hasImpulse = true; player.resetFallDistance(); + player.getCooldowns().addCooldown(this, AntarchySettings.eyeOfTheStormUpdraftCooldownTicks()); if (player instanceof ServerPlayer serverPlayer) { serverPlayer.connection.send(new ClientboundSetEntityMotionPacket(serverPlayer)); } @@ -108,8 +106,13 @@ public class EyeOfTheStormItem extends Item implements GeoItem { return; } + if (player.getCooldowns().isOnCooldown(this)) { + return; + } + Vec3 look = player.getViewVector(1.0F); launchStormVortex(level, player.getEyePosition().add(look), look, player); + player.getCooldowns().addCooldown(this, AntarchySettings.eyeOfTheStormSurgeCooldownTicks()); player.awardStat(Stats.ITEM_USED.get(this)); stack.hurtAndBreak(1, player, p -> p.broadcastBreakEvent(EquipmentSlot.MAINHAND)); @@ -130,7 +133,7 @@ public class EyeOfTheStormItem extends Item implements GeoItem { true ); vortex.setMode(WindVortexEntity.VortexMode.UPWARD); - vortex.setAxis(Direction.UP); + vortex.setAxis(owner != null && GravityApi.isGravityInverted(owner) ? Direction.DOWN : Direction.UP); vortex.setVortexSize((float) AntarchySettings.eyeOfTheStormSurgeHeight(), (float) AntarchySettings.eyeOfTheStormSurgeRadius()); vortex.setVortexDurationTicks(AntarchySettings.eyeOfTheStormSurgeDurationTicks()); vortex.setVortexStrengths(AntarchySettings.eyeOfTheStormSurgePullStrength(), AntarchySettings.eyeOfTheStormSurgeReturnStrength()); diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/FallenKingCrownItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/FallenKingCrownItem.java index d54c72f9..17b1a1f5 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/FallenKingCrownItem.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/FallenKingCrownItem.java @@ -1,5 +1,6 @@ package com.craisinlord.antarchy.content.item; +import com.craisinlord.antarchy.compat.item.ArmorDurability; import com.craisinlord.antarchy.config.AntarchySettings; import com.google.common.collect.ImmutableMultimap; import java.util.List; @@ -21,7 +22,7 @@ import net.minecraft.world.item.TooltipFlag; public final class FallenKingCrownItem extends ArmorItem { public FallenKingCrownItem(ArmorMaterial material, Properties properties) { - super(material, Type.HELMET, properties.stacksTo(1).durability(77)); + super(material, Type.HELMET, properties.durability(ArmorDurability.forType(Type.HELMET, 7))); } @Override diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/FlytrapGooBlockItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/FlytrapGooBlockItem.java new file mode 100644 index 00000000..e4d2218f --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/FlytrapGooBlockItem.java @@ -0,0 +1,23 @@ +package com.craisinlord.antarchy.content.item; + +import java.util.List; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import org.jetbrains.annotations.Nullable; + +public class FlytrapGooBlockItem extends BlockItem { + public FlytrapGooBlockItem(Block block, Properties properties) { + super(block, properties); + } + + @Override + public void appendHoverText(ItemStack stack, @Nullable Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + tooltipComponents.add(Component.translatable("tooltip.antarchy.flytrap_goo_block").withStyle(ChatFormatting.DARK_GREEN)); + super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/GiantFryingPanItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/GiantFryingPanItem.java new file mode 100644 index 00000000..9376d56b --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/GiantFryingPanItem.java @@ -0,0 +1,248 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.client.model.ResourceBackedGeoItemModel; +import com.craisinlord.antarchy.content.client.renderer.AnimatedHeldItemRenderer; +import com.craisinlord.antarchy.content.client.renderer.GiantFryingPanRenderer; +import java.util.function.Consumer; +import java.util.List; +import net.minecraft.ChatFormatting; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.SwordItem; +import net.minecraft.world.item.Tier; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.network.chat.Component; +import net.minecraft.world.SimpleMenuProvider; +import net.minecraft.world.level.Level; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.SlotAccess; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.inventory.ClickAction; +import net.minecraft.world.inventory.Slot; +import com.craisinlord.antarchy.content.menu.GiantFryingPanMenu; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.level.block.state.BlockState; +import software.bernie.geckolib.animatable.GeoItem; +import com.craisinlord.antarchy.content.client.AntarchyGeoItem; +import com.craisinlord.antarchy.content.client.AntarchyGeoItemRenderer; +import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.core.animation.AnimatableManager; +import software.bernie.geckolib.util.GeckoLibUtil; + +public class GiantFryingPanItem extends SwordItem implements GeoItem, AntarchyGeoItem { + private static final ResourceLocation MODEL_LOCATION = new ResourceLocation("antarchy", "geo/giant_frying_pan.geo.json"); + private static final ResourceLocation TEXTURE_LOCATION = new ResourceLocation("antarchy", "textures/item/giant_frying_pan/giant_frying_pan_model.png"); + private static final ResourceLocation ANIMATION_LOCATION = new ResourceLocation("antarchy", "animations/static_item.animation.json"); + private static final ResourceLocation REACH_MODIFIER_ID = new ResourceLocation("antarchy", "giant_frying_pan_reach"); + private static final ResourceLocation KNOCKBACK_MODIFIER_ID = new ResourceLocation("antarchy", "giant_frying_pan_knockback"); + private final Tier tier; + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + public GiantFryingPanItem(Tier tier, Item.Properties properties) { + super(tier, (int) Math.round(AntarchySettings.giantFryingPanAttackDamage()), -3.8F, properties); + this.tier = tier; + GeoItem.registerSyncedAnimatable(this); + } + + @Override + public void appendHoverText(ItemStack stack, @org.jetbrains.annotations.Nullable Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); + tooltipComponents.add(Component.translatable("tooltip.antarchy.giant_frying_pan.insert").withStyle(ChatFormatting.GRAY)); + tooltipComponents.add(Component.translatable("tooltip.antarchy.giant_frying_pan.gui").withStyle(ChatFormatting.GRAY)); + tooltipComponents.add(Component.translatable("tooltip.antarchy.giant_frying_pan.campfire").withStyle(ChatFormatting.DARK_GRAY)); + tooltipComponents.add(Component.translatable("tooltip.antarchy.giant_frying_pan.dig").withStyle(ChatFormatting.GOLD)); + tooltipComponents.add(Component.translatable("tooltip.antarchy.giant_frying_pan.launch").withStyle(ChatFormatting.GOLD)); + } + + @Override + public com.google.common.collect.Multimap getDefaultAttributeModifiers(EquipmentSlot slot) { + if (slot != EquipmentSlot.MAINHAND) { + return super.getDefaultAttributeModifiers(slot); + } + com.google.common.collect.ImmutableMultimap.Builder builder = + com.craisinlord.antarchy.compat.item.WeaponAttributes.base(this.tier, (int) Math.round(AntarchySettings.giantFryingPanAttackDamage()), -3.8F); + com.craisinlord.antarchy.compat.entity.EntityReach.addModifier(builder, REACH_MODIFIER_ID, 6.0D); + com.craisinlord.antarchy.compat.item.WeaponAttributes.add(builder, Attributes.ATTACK_KNOCKBACK, KNOCKBACK_MODIFIER_ID, 2.0D); + return builder.build(); + } + + @Override + public boolean hurtEnemy(ItemStack stack, LivingEntity target, LivingEntity attacker) { + boolean hurt = super.hurtEnemy(stack, target, attacker); + if (!hurt || attacker.level().isClientSide) { + return hurt; + } + + GiantFryingPanToolHelper.launch(target, attacker); + Level level = attacker.level(); + level.playSound(null, target.blockPosition(), SoundEvents.ANVIL_LAND, SoundSource.PLAYERS, 0.8F, 1.25F); + return hurt; + } + + @Override + public float getDestroySpeed(ItemStack stack, BlockState state) { + return GiantFryingPanToolHelper.getDestroySpeed(this.tier, stack, state, super.getDestroySpeed(stack, state)); + } + + @Override + public boolean isCorrectToolForDrops(BlockState state) { + return GiantFryingPanToolHelper.isShovelBlock(state) || super.isCorrectToolForDrops(state); + } + + @Override + public boolean canAttackBlock(BlockState state, Level level, BlockPos pos, Player player) { + return true; + } + + @Override + public boolean mineBlock(ItemStack stack, Level level, BlockState state, BlockPos pos, LivingEntity miningEntity) { + if (!level.isClientSide && state.getDestroySpeed(level, pos) != 0.0F) { + stack.hurtAndBreak(1, miningEntity, e -> e.broadcastBreakEvent(EquipmentSlot.MAINHAND)); + } + GiantFryingPanToolHelper.mineArea(stack, level, state, pos, miningEntity); + return true; + } + + @Override + public void inventoryTick(ItemStack stack, Level level, net.minecraft.world.entity.Entity entity, int slotId, boolean isSelected) { + super.inventoryTick(stack, level, entity, slotId, isSelected); + if (!level.isClientSide) GiantFryingPanToolHelper.ensureEnchantments(stack, level.registryAccess()); + if (entity instanceof Player player) GiantFryingPanStorage.tick(player, stack, level); + } + + @Override + public void onCraftedBy(ItemStack stack, Level level, Player player) { + super.onCraftedBy(stack, level, player); + GiantFryingPanToolHelper.ensureEnchantments(stack, level.registryAccess()); + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { + ItemStack pan = player.getItemInHand(hand); + InteractionHand foodHand = hand == InteractionHand.MAIN_HAND ? InteractionHand.OFF_HAND : InteractionHand.MAIN_HAND; + ItemStack food = player.getItemInHand(foodHand); + if (player.isShiftKeyDown()) { + openMenu(level, player, hand); + return InteractionResultHolder.sidedSuccess(pan, level.isClientSide); + } + if (!GiantFryingPanStorage.isCampfireInput(player, food)) { + return InteractionResultHolder.pass(pan); + } + return insertFromHand(level, player, pan, food) + ? InteractionResultHolder.sidedSuccess(pan, level.isClientSide) + : InteractionResultHolder.fail(pan); + } + + public static InteractionResult handleMainHandUse(Level level, Player player, InteractionHand hand) { + if (hand != InteractionHand.MAIN_HAND) return InteractionResult.PASS; + ItemStack pan = player.getOffhandItem(); + ItemStack held = player.getMainHandItem(); + if (!(pan.getItem() instanceof GiantFryingPanItem) || held.getItem() instanceof GiantFryingPanItem) return InteractionResult.PASS; + if (player.isShiftKeyDown()) { + openMenu(level, player, InteractionHand.OFF_HAND); + return InteractionResult.sidedSuccess(level.isClientSide); + } + if (!GiantFryingPanStorage.isCampfireInput(player, held)) return InteractionResult.PASS; + return insertFromHand(level, player, pan, held) ? InteractionResult.sidedSuccess(level.isClientSide) : InteractionResult.FAIL; + } + + public static void openHeldMenu(Player player) { + if (!player.isShiftKeyDown()) return; + if (player.getMainHandItem().getItem() instanceof GiantFryingPanItem) { + openMenu(player.level(), player, InteractionHand.MAIN_HAND); + } else if (player.getOffhandItem().getItem() instanceof GiantFryingPanItem) { + openMenu(player.level(), player, InteractionHand.OFF_HAND); + } + } + + private static void openMenu(Level level, Player player, InteractionHand hand) { + if (level.isClientSide || player.containerMenu instanceof GiantFryingPanMenu) return; + int panSlot = hand == InteractionHand.MAIN_HAND ? player.getInventory().selected : Inventory.SLOT_OFFHAND; + player.openMenu(new SimpleMenuProvider( + (containerId, inventory, ignored) -> new GiantFryingPanMenu(containerId, inventory, panSlot), + Component.translatable("item.antarchy.giant_frying_pan"))); + } + + private static boolean insertFromHand(Level level, Player player, ItemStack pan, ItemStack food) { + GiantFryingPanStorage storage = new GiantFryingPanStorage(pan, player); + ItemStack single = food.copyWithCount(1); + if (!storage.insertOne(single)) { + return false; + } + if (!player.getAbilities().instabuild) food.shrink(1); + if (!level.isClientSide) { + level.playSound(null, player.blockPosition(), SoundEvents.CAMPFIRE_CRACKLE, SoundSource.PLAYERS, 0.8F, 1.0F); + } + return true; + } + + @Override + public boolean overrideStackedOnOther(ItemStack pan, Slot slot, ClickAction action, Player player) { + if (action != ClickAction.SECONDARY) return false; + ItemStack food = slot.getItem(); + if (!GiantFryingPanStorage.isCampfireInput(player, food) || !slot.mayPickup(player)) return false; + GiantFryingPanStorage storage = new GiantFryingPanStorage(pan, player); + boolean inserted = storage.hasSpace(food) && storage.insertOne(slot.safeTake(1, 1, player)); + if (inserted) player.playSound(SoundEvents.CAMPFIRE_CRACKLE, 0.8F, 1.0F); + return true; + } + + @Override + public boolean overrideOtherStackedOnMe(ItemStack pan, ItemStack other, Slot slot, ClickAction action, Player player, SlotAccess access) { + if (action != ClickAction.SECONDARY || other.isEmpty() || !slot.allowModification(player)) return false; + if (!GiantFryingPanStorage.isCampfireInput(player, other)) return false; + GiantFryingPanStorage storage = new GiantFryingPanStorage(pan, player); + ItemStack single = other.copyWithCount(1); + boolean inserted = storage.insertOne(single); + if (inserted) { + other.shrink(1); + player.playSound(SoundEvents.CAMPFIRE_CRACKLE, 0.8F, 1.0F); + } + return true; + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + public void createRenderer(Consumer consumer) { + consumer.accept(new AntarchyGeoItemRenderer() { + private GiantFryingPanRenderer renderer; + + @Override + public net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer getCustomRenderer() { + if (this.renderer == null) { + this.renderer = new GiantFryingPanRenderer(new ResourceBackedGeoItemModel<>(MODEL_LOCATION, TEXTURE_LOCATION, ANIMATION_LOCATION)); + } + return this.renderer; + } + }); + } + + private final java.util.function.Supplier renderProvider = com.google.common.base.Suppliers.memoize(() -> { + Object[] holder = new Object[1]; + createRenderer(o -> holder[0] = o); + return holder[0]; + }); + + @Override + public java.util.function.Supplier getRenderProvider() { + return this.renderProvider; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/GiantFryingPanStorage.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/GiantFryingPanStorage.java new file mode 100644 index 00000000..f67946d4 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/GiantFryingPanStorage.java @@ -0,0 +1,280 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.config.AntarchySettings; +import java.util.Optional; +import net.minecraft.core.NonNullList; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.Tag; +import net.minecraft.world.Container; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import com.craisinlord.antarchy.content.component.AntarchyItemTag; +import java.util.Objects; +import net.minecraft.world.SimpleContainer; +import net.minecraft.world.item.crafting.CampfireCookingRecipe; +import net.minecraft.world.item.crafting.RecipeType; +import net.minecraft.world.level.Level; + +public final class GiantFryingPanStorage implements Container { + public static final int SLOT_COUNT = 9; + public static final int MAX_STACK = 64; + private static final String SLOTS = "antarchy.giant_frying_pan_slots"; + private static final String SLOT = "Slot"; + private static final String ITEM = "Item"; + private static final String START = "Start"; + private final Player player; + private final int panSlot; + private final ItemStack fixedPan; + private final NonNullList items = NonNullList.withSize(SLOT_COUNT, ItemStack.EMPTY); + private final long[] startTimes = new long[SLOT_COUNT]; + private final ItemStack[] startItems = new ItemStack[SLOT_COUNT]; + private Tag loadedFrom; + private ItemStack loadedPan = ItemStack.EMPTY; + + public GiantFryingPanStorage(ItemStack pan, Player player) { + this.player = player; + this.panSlot = -1; + this.fixedPan = pan; + this.reloadIfChanged(); + } + + public GiantFryingPanStorage(Player player, int panSlot) { + this.player = player; + this.panSlot = panSlot; + this.fixedPan = null; + this.reloadIfChanged(); + } + + public ItemStack pan() { + if (this.fixedPan != null) return this.fixedPan; + if (this.panSlot < 0 || this.panSlot >= this.player.getInventory().getContainerSize()) return ItemStack.EMPTY; + return this.player.getInventory().getItem(this.panSlot); + } + + public int panSlot() { + return this.panSlot; + } + + public boolean hasPan() { + return this.pan().getItem() instanceof GiantFryingPanItem; + } + + public static ItemStack findPan(Player player) { + int slot = findPanSlot(player); + return slot < 0 ? ItemStack.EMPTY : player.getInventory().getItem(slot); + } + + public static int findPanSlot(Player player) { + if (player.getMainHandItem().getItem() instanceof GiantFryingPanItem) return player.getInventory().selected; + if (player.getOffhandItem().getItem() instanceof GiantFryingPanItem) return 40; + for (int i = 0; i < player.getInventory().items.size(); i++) { + if (player.getInventory().items.get(i).getItem() instanceof GiantFryingPanItem) return i; + } + return -1; + } + + public static void tick(Player player, ItemStack pan, Level level) { + if (level.isClientSide || !(pan.getItem() instanceof GiantFryingPanItem)) return; + if (!pan.hasTag()) return; + GiantFryingPanStorage storage = new GiantFryingPanStorage(pan, player); + if (storage.isEmpty()) return; + long now = level.getGameTime(); + boolean changed = false; + for (int slot = 0; slot < SLOT_COUNT; slot++) { + ItemStack input = storage.items.get(slot); + if (input.isEmpty() || now - storage.startTimes[slot] < cookTime()) continue; + Optional recipe = level.getRecipeManager().getRecipeFor( + RecipeType.CAMPFIRE_COOKING, new SimpleContainer(input), level); + if (recipe.isEmpty()) continue; + ItemStack cooked = recipe.get().assemble(new SimpleContainer(input), level.registryAccess()); + input.shrink(1); + storage.startTimes[slot] = now; + changed = true; + if (!cooked.isEmpty()) { + ItemEntity output = new ItemEntity(level, player.getX(), player.getY() + 1.2D, player.getZ(), cooked); + output.setDeltaMovement(player.getLookAngle().scale(0.35D).add(0.0D, 0.2D, 0.0D)); + output.setPickUpDelay(10); + level.addFreshEntity(output); + } + } + if (changed) storage.setChanged(); + } + + public static boolean isCampfireInput(Player player, ItemStack stack) { + if (stack.isEmpty() || stack.getItem() instanceof GiantFryingPanItem) return false; + Level level = player.level(); + return level.getRecipeManager().getRecipeFor(RecipeType.CAMPFIRE_COOKING, new SimpleContainer(stack), level).isPresent(); + } + + public boolean insertOne(ItemStack food) { + if (!isCampfireInput(this.player, food)) return false; + this.reloadIfChanged(); + for (int slot = 0; slot < SLOT_COUNT; slot++) { + ItemStack existing = this.items.get(slot); + if (canMergeInto(existing, food)) { + existing.grow(1); + food.shrink(1); + this.setChanged(); + return true; + } + } + for (int slot = 0; slot < SLOT_COUNT; slot++) { + if (this.items.get(slot).isEmpty()) { + this.setItem(slot, food.split(1)); + return true; + } + } + return false; + } + + public boolean hasSpace(ItemStack food) { + this.reloadIfChanged(); + for (ItemStack stack : this.items) { + if (stack.isEmpty() || canMergeInto(stack, food)) return true; + } + return false; + } + + private static boolean canMergeInto(ItemStack existing, ItemStack food) { + return !existing.isEmpty() && ItemStack.isSameItemSameTags(existing, food) + && existing.getCount() < Math.min(MAX_STACK, existing.getMaxStackSize()); + } + + public static int cookTime() { + return Math.max(1, AntarchySettings.giantFryingPanCookTimeTicks()); + } + + public float cookProgress(int slot) { + this.reloadIfChanged(); + if (this.items.get(slot).isEmpty()) return 0.0F; + long elapsed = this.player.level().getGameTime() - this.startTimes[slot]; + return Math.max(0.0F, Math.min(1.0F, elapsed / (float) cookTime())); + } + + private void reloadIfChanged() { + ItemStack pan = this.pan(); + Tag data = pan.hasTag() ? pan.getTag().get(SLOTS) : null; + if (pan == this.loadedPan && Objects.equals(data, this.loadedFrom)) return; + this.loadedPan = pan; + this.loadedFrom = data == null ? null : data.copy(); + for (int slot = 0; slot < SLOT_COUNT; slot++) { + this.items.set(slot, ItemStack.EMPTY); + this.startTimes[slot] = 0L; + this.startItems[slot] = null; + } + if (data == null) return; + ListTag list = data instanceof ListTag listTag && listTag.getElementType() == Tag.TAG_COMPOUND ? listTag : new ListTag(); + for (int i = 0; i < list.size(); i++) { + CompoundTag tag = list.getCompound(i); + int slot = tag.getInt(SLOT); + if (slot < 0 || slot >= SLOT_COUNT || !tag.contains(ITEM, Tag.TAG_COMPOUND)) continue; + ItemStack stack = ItemStack.of(tag.getCompound(ITEM)); + this.items.set(slot, stack); + this.startTimes[slot] = tag.getLong(START); + this.startItems[slot] = stack; + } + } + + private void refreshStartTimes() { + long now = this.player.level().getGameTime(); + for (int slot = 0; slot < SLOT_COUNT; slot++) { + ItemStack stack = this.items.get(slot); + if (stack.isEmpty()) { + this.startItems[slot] = null; + this.startTimes[slot] = 0L; + } else if (this.startItems[slot] == null || !ItemStack.isSameItemSameTags(this.startItems[slot], stack)) { + this.startItems[slot] = stack; + this.startTimes[slot] = now; + } + } + } + + @Override + public int getContainerSize() { + return SLOT_COUNT; + } + + @Override + public boolean isEmpty() { + this.reloadIfChanged(); + for (ItemStack stack : this.items) { + if (!stack.isEmpty()) return false; + } + return true; + } + + @Override + public ItemStack getItem(int slot) { + this.reloadIfChanged(); + return this.items.get(slot); + } + + @Override + public ItemStack removeItem(int slot, int amount) { + this.reloadIfChanged(); + ItemStack stack = this.items.get(slot); + if (stack.isEmpty() || amount <= 0) return ItemStack.EMPTY; + ItemStack result = stack.split(amount); + this.setChanged(); + return result; + } + + @Override + public ItemStack removeItemNoUpdate(int slot) { + this.reloadIfChanged(); + ItemStack result = this.items.get(slot); + this.items.set(slot, ItemStack.EMPTY); + this.setChanged(); + return result; + } + + @Override + public void setItem(int slot, ItemStack stack) { + this.reloadIfChanged(); + this.items.set(slot, stack); + this.setChanged(); + } + + @Override + public int getMaxStackSize() { + return MAX_STACK; + } + + @Override + public void setChanged() { + ItemStack pan = this.pan(); + if (!(pan.getItem() instanceof GiantFryingPanItem)) return; + this.refreshStartTimes(); + ListTag list = new ListTag(); + for (int slot = 0; slot < SLOT_COUNT; slot++) { + ItemStack stack = this.items.get(slot); + if (stack.isEmpty()) continue; + CompoundTag tag = new CompoundTag(); + tag.putInt(SLOT, slot); + tag.putLong(START, this.startTimes[slot]); + tag.put(ITEM, stack.save(new CompoundTag())); + list.add(tag); + } + AntarchyItemTag.update(pan, root -> { + if (list.isEmpty()) root.remove(SLOTS); + else root.put(SLOTS, list); + }); + this.loadedPan = pan; + Tag saved = pan.hasTag() ? pan.getTag().get(SLOTS) : null; + this.loadedFrom = saved == null ? null : saved.copy(); + } + + @Override + public boolean stillValid(Player player) { + return player.isAlive() && this.hasPan(); + } + + @Override + public void clearContent() { + this.reloadIfChanged(); + for (int slot = 0; slot < SLOT_COUNT; slot++) this.items.set(slot, ItemStack.EMPTY); + this.setChanged(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/GiantFryingPanToolHelper.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/GiantFryingPanToolHelper.java new file mode 100644 index 00000000..178eabc6 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/GiantFryingPanToolHelper.java @@ -0,0 +1,73 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.item.ultimate.UltimateToolHelper; +import net.minecraft.core.BlockPos; +import net.minecraft.core.HolderLookup; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Tier; +import net.minecraft.world.item.enchantment.EnchantmentHelper; +import net.minecraft.world.item.enchantment.Enchantments; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.Vec3; + +public final class GiantFryingPanToolHelper { + public static final int MINING_RADIUS = 2; + public static final int FIRE_ASPECT_LEVEL = 2; + private static final double HORIZONTAL_LAUNCH = 1.8D; + private static final double MAX_HORIZONTAL_SPEED = 2.6D; + private static final double VERTICAL_LAUNCH = 0.75D; + + private GiantFryingPanToolHelper() { + } + + public static float getDestroySpeed(Tier tier, ItemStack stack, BlockState state, float defaultSpeed) { + return UltimateToolHelper.getDestroySpeed(UltimateToolHelper.ToolKind.SHOVEL, tier, stack, state, defaultSpeed); + } + + public static boolean isShovelBlock(BlockState state) { + return UltimateToolHelper.matchesToolKind(UltimateToolHelper.ToolKind.SHOVEL, state); + } + + public static void mineArea(ItemStack stack, Level level, BlockState state, BlockPos pos, LivingEntity miner) { + if (miner instanceof ServerPlayer player) { + UltimateToolHelper.mineArea(UltimateToolHelper.ToolKind.SHOVEL, stack, level, state, pos, player, MINING_RADIUS); + } + } + + public static void launch(LivingEntity target, LivingEntity attacker) { + Vec3 direction = target.position().subtract(attacker.position()).multiply(1.0D, 0.0D, 1.0D); + if (direction.lengthSqr() < 1.0E-4D) { + direction = attacker.getLookAngle().multiply(1.0D, 0.0D, 1.0D); + } + Vec3 motion = target.getDeltaMovement(); + double x = motion.x; + double z = motion.z; + if (direction.lengthSqr() >= 1.0E-4D) { + direction = direction.normalize(); + x = Math.max(-MAX_HORIZONTAL_SPEED, Math.min(MAX_HORIZONTAL_SPEED, x + direction.x * HORIZONTAL_LAUNCH)); + z = Math.max(-MAX_HORIZONTAL_SPEED, Math.min(MAX_HORIZONTAL_SPEED, z + direction.z * HORIZONTAL_LAUNCH)); + } + target.setDeltaMovement(x, Math.max(motion.y, 0.0D) + VERTICAL_LAUNCH, z); + target.hasImpulse = true; + target.hurtMarked = true; + } + + public static ItemStack createStack(Item item, HolderLookup.Provider registries) { + ItemStack stack = new ItemStack(item); + ensureEnchantments(stack, registries); + return stack; + } + + public static void ensureEnchantments(ItemStack stack, HolderLookup.Provider registries) { + if (EnchantmentHelper.getItemEnchantmentLevel(Enchantments.FIRE_ASPECT, stack) >= FIRE_ASPECT_LEVEL) { + return; + } + java.util.Map enchantments = new java.util.LinkedHashMap<>(EnchantmentHelper.getEnchantments(stack)); + enchantments.put(Enchantments.FIRE_ASPECT, FIRE_ASPECT_LEVEL); + EnchantmentHelper.setEnchantments(enchantments, stack); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/GlimmerBottleItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/GlimmerBottleItem.java index 2267fc92..5d7891fb 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/GlimmerBottleItem.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/GlimmerBottleItem.java @@ -2,7 +2,9 @@ package com.craisinlord.antarchy.content.item; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.advancement.AntarchyAdvancements; +import com.craisinlord.antarchy.content.advancement.AntarchyAdvancementTriggers; import com.craisinlord.antarchy.content.client.particle.GlimmerParticles; +import com.craisinlord.antarchy.content.component.AntarchyItemTag; import com.craisinlord.antarchy.content.entity.glimmer.GlimmerCompanionSavedData; import com.craisinlord.antarchy.content.entity.glimmer.GlimmerEntity; import com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant; @@ -24,20 +26,32 @@ import org.jetbrains.annotations.Nullable; public class GlimmerBottleItem extends Item { private static final String ABILITY_COOLDOWN_TAG = "AbilityCooldown"; + private static final String SHEAR_COOLDOWN_TAG = "ShearCooldown"; public GlimmerBottleItem() { super(new Item.Properties().stacksTo(1)); } public static ItemStack create(GlimmerVariant variant) { - return create(variant, 0); + return create(variant, 0, 0); } public static ItemStack create(GlimmerVariant variant, int abilityCooldown) { + return create(variant, abilityCooldown, 0); + } + + public static ItemStack create(GlimmerVariant variant, int abilityCooldown, int shearCooldown) { ItemStack stack = new ItemStack(AntarchyObjects.GLIMMER_BOTTLE.get()); AntarchyObjects.GLIMMER_VARIANT_COMPONENT.set(stack, variant); - if (abilityCooldown > 0) { - com.craisinlord.antarchy.content.component.AntarchyItemTag.update(stack, tag -> tag.putInt(ABILITY_COOLDOWN_TAG, abilityCooldown)); + if (abilityCooldown > 0 || shearCooldown > 0) { + AntarchyItemTag.update(stack, tag -> { + if (abilityCooldown > 0) { + tag.putInt(ABILITY_COOLDOWN_TAG, abilityCooldown); + } + if (shearCooldown > 0) { + tag.putInt(SHEAR_COOLDOWN_TAG, shearCooldown); + } + }); } return stack; } @@ -48,7 +62,11 @@ public class GlimmerBottleItem extends Item { } public static int getStoredAbilityCooldown(ItemStack stack) { - return com.craisinlord.antarchy.content.component.AntarchyItemTag.getOrEmpty(stack).getInt(ABILITY_COOLDOWN_TAG); + return AntarchyItemTag.getOrEmpty(stack).getInt(ABILITY_COOLDOWN_TAG); + } + + public static int getStoredShearCooldown(ItemStack stack) { + return AntarchyItemTag.getOrEmpty(stack).getInt(SHEAR_COOLDOWN_TAG); } @Override @@ -73,6 +91,7 @@ public class GlimmerBottleItem extends Item { glimmer.tame(player); glimmer.setOrderedToSit(false); glimmer.setAbilityCooldown(getStoredAbilityCooldown(stack)); + glimmer.startShearCooldown(getStoredShearCooldown(stack)); level.addFreshEntity(glimmer); GlimmerCompanionSavedData.replaceCompanion(((ServerLevel) level).getServer(), player.getUUID(), glimmer.getUUID()); GlimmerParticles.tickBurst(glimmer); @@ -80,6 +99,7 @@ public class GlimmerBottleItem extends Item { if (player instanceof net.minecraft.server.level.ServerPlayer serverPlayer) { AntarchyAdvancements.award(serverPlayer, variant.tameAdvancementId()); + AntarchyAdvancementTriggers.tamedGlimmer(serverPlayer, variant.name().toLowerCase(java.util.Locale.ROOT)); } ItemStack result = ItemUtils.createFilledResult(stack, player, new ItemStack(Items.GLASS_BOTTLE)); @@ -87,7 +107,7 @@ public class GlimmerBottleItem extends Item { } @Override - public void appendHoverText(ItemStack stack, Level level, List tooltip, TooltipFlag flag) { + public void appendHoverText(ItemStack stack, @Nullable Level level, List tooltip, TooltipFlag flag) { super.appendHoverText(stack, level, tooltip, flag); GlimmerVariant variant = getVariant(stack); if (variant != null) { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/GravityGunItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/GravityGunItem.java index 4b86150f..f50938dd 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/GravityGunItem.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/GravityGunItem.java @@ -4,8 +4,8 @@ import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.client.model.ResourceBackedGeoItemModel; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityRotationUtil; import it.unimi.dsi.fastutil.longs.Long2BooleanMap; import it.unimi.dsi.fastutil.longs.Long2BooleanOpenHashMap; import it.unimi.dsi.fastutil.longs.Long2IntMap; @@ -386,8 +386,6 @@ public class GravityGunItem extends Item implements GeoItem, com.craisinlord.ant Vec2 holdRotation = getHoldRotation(player); heldTarget.setNoGravity(true); - // Snap back only when the held entity has drifted badly; otherwise drive it with - // velocity so the client can interpolate the motion smoothly between server updates. if (movement.lengthSqr() > 16.0D) { heldTarget.moveTo(holdPosition.x, holdPosition.y, holdPosition.z, holdRotation.x, holdRotation.y); heldTarget.setDeltaMovement(Vec3.ZERO); @@ -536,11 +534,11 @@ public class GravityGunItem extends Item implements GeoItem, com.craisinlord.ant private static Vec3 getHoldVector(Player player) { Vec3 look = getRawLookVector(player); - if (!AntarchyGravityApi.isGravityInverted(player)) { + if (!GravityApi.isGravityInverted(player)) { return look; } - return AntarchyGravityRotationUtil.vecWorldToPlayer(look, AntarchyGravityApi.getGravityDirection(player)); + return GravityRotationUtil.vecWorldToPlayer(look, GravityApi.getGravityDirection(player)); } private static Vec3 getRawLookVector(Player player) { @@ -549,14 +547,14 @@ public class GravityGunItem extends Item implements GeoItem, com.craisinlord.ant } private static Vec2 getHoldRotation(Player player) { - if (!AntarchyGravityApi.isGravityInverted(player)) { + if (!GravityApi.isGravityInverted(player)) { return new Vec2(player.getYRot(), player.getXRot()); } - return AntarchyGravityRotationUtil.rotWorldToPlayer( + return GravityRotationUtil.rotWorldToPlayer( player.getYRot(), player.getXRot(), - AntarchyGravityApi.getGravityDirection(player) + GravityApi.getGravityDirection(player) ); } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/HoverboardItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/HoverboardItem.java index 75e1999a..b02c3424 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/HoverboardItem.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/HoverboardItem.java @@ -23,11 +23,15 @@ import org.jetbrains.annotations.Nullable; public class HoverboardItem extends Item { private static final Predicate ENTITY_PREDICATE = EntitySelector.NO_SPECTATORS.and(Entity::isPickable); - private final EntityType entityType; + private final java.util.function.Supplier> entityType; @Nullable private final DyeColor color; public HoverboardItem(EntityType entityType, @Nullable DyeColor color, Properties properties) { + this(() -> entityType, color, properties); + } + + public HoverboardItem(java.util.function.Supplier> entityType, @Nullable DyeColor color, Properties properties) { super(properties); this.entityType = entityType; this.color = color; @@ -52,9 +56,12 @@ public class HoverboardItem extends Item { return InteractionResultHolder.pass(stack); } - HoverboardEntity hoverboard = new HoverboardEntity(this.entityType, level); + HoverboardEntity hoverboard = new HoverboardEntity(this.entityType.get(), level); Vec3 spawnPos = hitResult.getLocation(); - hoverboard.moveTo(spawnPos.x, spawnPos.y, spawnPos.z, player.getYRot(), 0.0F); + boolean invertedPlacement = com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager.isThoraxis(level) + && spawnPos.y < com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager.GRAVITY_FLIP_Y; + double spawnY = invertedPlacement ? spawnPos.y - hoverboard.getBbHeight() : spawnPos.y; + hoverboard.moveTo(spawnPos.x, spawnY, spawnPos.z, player.getYRot(), 0.0F); hoverboard.setColor(this.color); if (!level.noCollision(hoverboard, hoverboard.getBoundingBox())) { return InteractionResultHolder.fail(stack); diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/JerryNucleusItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/JerryNucleusItem.java index e1799721..95a81396 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/JerryNucleusItem.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/JerryNucleusItem.java @@ -1,10 +1,10 @@ package com.craisinlord.antarchy.content.item; import com.craisinlord.antarchy.content.block.BedBugEggBlock; -import com.craisinlord.antarchy.content.block.CreepingHorrorEggBlock; +import com.craisinlord.antarchy.content.block.CrawlingBlightEggBlock; import com.craisinlord.antarchy.content.block.JerryEggBlock; -import com.craisinlord.antarchy.content.block.JumpyBugEggBlock; -import com.craisinlord.antarchy.content.block.LurkingTerrorEggBlock; +import com.craisinlord.antarchy.content.block.SpringbugEggBlock; +import com.craisinlord.antarchy.content.block.SkulkingFrightEggBlock; import com.craisinlord.antarchy.content.block.SpitBugEggBlock; import java.util.List; import net.minecraft.world.level.Level; @@ -35,9 +35,9 @@ public class JerryNucleusItem extends Item { BlockState state = context.getLevel().getBlockState(context.getClickedPos()); Block block = state.getBlock(); boolean handled = block instanceof BedBugEggBlock - || block instanceof CreepingHorrorEggBlock - || block instanceof LurkingTerrorEggBlock - || block instanceof JumpyBugEggBlock + || block instanceof CrawlingBlightEggBlock + || block instanceof SkulkingFrightEggBlock + || block instanceof SpringbugEggBlock || block instanceof SpitBugEggBlock || block instanceof JerryEggBlock || block instanceof TurtleEggBlock; @@ -52,11 +52,11 @@ public class JerryNucleusItem extends Item { BlockPos pos = context.getClickedPos(); if (block instanceof BedBugEggBlock eggBlock) { eggBlock.hatchWithNucleus(serverLevel, pos, state); - } else if (block instanceof CreepingHorrorEggBlock eggBlock) { + } else if (block instanceof CrawlingBlightEggBlock eggBlock) { eggBlock.hatchWithNucleus(serverLevel, pos, state); - } else if (block instanceof LurkingTerrorEggBlock eggBlock) { + } else if (block instanceof SkulkingFrightEggBlock eggBlock) { eggBlock.hatchWithNucleus(serverLevel, pos, state); - } else if (block instanceof JumpyBugEggBlock eggBlock) { + } else if (block instanceof SpringbugEggBlock eggBlock) { eggBlock.hatchWithNucleus(serverLevel, pos); } else if (block instanceof SpitBugEggBlock eggBlock) { eggBlock.hatchWithNucleus(serverLevel, pos); diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/JumpyBootsHelper.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/JumpyBootsHelper.java deleted file mode 100644 index b4143048..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/JumpyBootsHelper.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.craisinlord.antarchy.content.item; - -public final class JumpyBootsHelper { - public static final int CHARGE_TICKS_MAX = 30; - public static final int PRIME_WINDOW_TICKS = 15; - public static final int COOLDOWN_TICKS = 40; - - public static final float MAX_VERTICAL_BOOST = 2.0F; - public static final float SPRINT_FORWARD_BOOST = 0.3F; - public static final long FALL_PROTECTION_TICKS = 120L; - public static final String FALL_PROTECTION_NBT_KEY = "antarchy:springy_boots_protection_until"; - - private JumpyBootsHelper() { - } - - public static float verticalBoostFor(int chargeTicks) { - float ratio = Math.min(chargeTicks / (float) CHARGE_TICKS_MAX, 1.0F); - return ratio * MAX_VERTICAL_BOOST; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/JumpyBootsItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/JumpyBootsItem.java deleted file mode 100644 index 0d4b017d..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/JumpyBootsItem.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.craisinlord.antarchy.content.item; - -import net.minecraft.world.level.Level; -import net.minecraft.ChatFormatting; -import net.minecraft.core.Holder; -import net.minecraft.network.chat.Component; -import net.minecraft.world.item.ArmorItem; -import net.minecraft.world.item.ArmorMaterial; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.TooltipFlag; - -import java.util.List; - -public final class JumpyBootsItem extends ArmorItem { - public JumpyBootsItem(ArmorMaterial material, Properties properties) { - super(material, Type.BOOTS, properties); - } - - public static boolean isWearingJumpyBoots(net.minecraft.world.entity.LivingEntity entity) { - return entity != null && entity.getItemBySlot(net.minecraft.world.entity.EquipmentSlot.FEET).getItem() instanceof JumpyBootsItem; - } - - @Override - public boolean isEnchantable(ItemStack stack) { - return stack.getCount() == 1; - } - - @Override - public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { - tooltipComponents.add(Component.translatable("tooltip.antarchy.springy_boots").withStyle(ChatFormatting.DARK_RED)); - super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ManticoreWingsItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ManticoreWingsItem.java index a3bef983..a71b95c7 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ManticoreWingsItem.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ManticoreWingsItem.java @@ -1,6 +1,8 @@ package com.craisinlord.antarchy.content.item; import com.craisinlord.antarchy.content.entity.ManticoreEntity; +import com.google.common.collect.ImmutableMultimap; +import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Map; import java.util.UUID; @@ -11,15 +13,21 @@ import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ElytraItem; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.level.Level; +import org.jetbrains.annotations.Nullable; public final class ManticoreWingsItem extends ElytraItem { private static final ResourceLocation REPAIR_MATERIAL_ID = new ResourceLocation("antarchy", "manticore_wing"); + private static final ResourceLocation ARMOR_MODIFIER_ID = new ResourceLocation("antarchy", "manticore_wings_armor"); + private static final ResourceLocation TOUGHNESS_MODIFIER_ID = new ResourceLocation("antarchy", "manticore_wings_toughness"); private static final int DAMAGE_COOLDOWN_TICKS = 10; private static final double MIN_COLLISION_SPEED = 0.2D; private static final float COLLISION_DAMAGE_PER_BLOCK_PER_TICK = 8.0F; @@ -63,7 +71,24 @@ public final class ManticoreWingsItem extends ElytraItem { } @Override - public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + public com.google.common.collect.Multimap getDefaultAttributeModifiers(EquipmentSlot slot) { + if (slot != EquipmentSlot.CHEST) { + return super.getDefaultAttributeModifiers(slot); + } + ImmutableMultimap.Builder builder = ImmutableMultimap.builder(); + builder.put(Attributes.ARMOR, + new AttributeModifier(modifierUuid(ARMOR_MODIFIER_ID), ARMOR_MODIFIER_ID.toString(), 5.0D, AttributeModifier.Operation.ADDITION)); + builder.put(Attributes.ARMOR_TOUGHNESS, + new AttributeModifier(modifierUuid(TOUGHNESS_MODIFIER_ID), TOUGHNESS_MODIFIER_ID.toString(), 1.0D, AttributeModifier.Operation.ADDITION)); + return builder.build(); + } + + private static UUID modifierUuid(ResourceLocation id) { + return UUID.nameUUIDFromBytes(id.toString().getBytes(StandardCharsets.UTF_8)); + } + + @Override + public void appendHoverText(ItemStack stack, @Nullable Level level, List tooltipComponents, TooltipFlag tooltipFlag) { tooltipComponents.add(Component.translatable("tooltip.antarchy.manticore_wings").withStyle(ChatFormatting.GRAY)); super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/MantisClawItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/MantisClawItem.java index 0210f038..b17198c2 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/MantisClawItem.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/MantisClawItem.java @@ -1,7 +1,6 @@ package com.craisinlord.antarchy.content.item; import java.util.List; -import net.minecraft.world.level.Level; import net.minecraft.ChatFormatting; import net.minecraft.network.chat.Component; import net.minecraft.world.entity.LivingEntity; @@ -10,6 +9,8 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.SwordItem; import net.minecraft.world.item.Tier; import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; +import org.jetbrains.annotations.Nullable; public class MantisClawItem extends SwordItem { public static final double WALL_CLING_FALL_SPEED = -0.02D; @@ -30,7 +31,7 @@ public class MantisClawItem extends SwordItem { } @Override - public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + public void appendHoverText(ItemStack stack, @Nullable Level level, List tooltipComponents, TooltipFlag tooltipFlag) { tooltipComponents.add(Component.translatable("tooltip.antarchy.mantis_claw.wall_cling").withStyle(ChatFormatting.GRAY)); super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/MogglesCaveDetector.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/MogglesCaveDetector.java index 71ba9d85..43f5f5ee 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/MogglesCaveDetector.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/MogglesCaveDetector.java @@ -11,20 +11,10 @@ import java.util.HashSet; import java.util.Queue; import java.util.Set; -/** - * Client-side cave finder for Moggles. - * - *

Every {@link #SCAN_INTERVAL} ticks, BFS-maps the player's current connected - * air space, then scans outward to find the nearest underground air pocket that - * is NOT part of that space. The result is stored in {@link #caveTarget} and - * read each tick by the particle renderer. - */ public final class MogglesCaveDetector { private static final int SCAN_INTERVAL = 40; - /** How far to flood-fill the player's own air pocket before stopping. */ private static final int PLAYER_SPACE_LIMIT = 8; - /** Minimum number of air neighbors a candidate block must have (filters tiny cracks). */ private static final int MIN_AIR_NEIGHBORS = 2; private static volatile BlockPos caveTarget = null; @@ -36,7 +26,6 @@ public final class MogglesCaveDetector { return caveTarget; } - /** Call once per client tick while Moggles are equipped. */ public static void tick(Player player, Level level) { if (--cooldown > 0) return; cooldown = SCAN_INTERVAL; @@ -51,11 +40,10 @@ public final class MogglesCaveDetector { private static BlockPos scan(Player player, Level level) { BlockPos origin = player.blockPosition(); - // BFS through air from the player's feet to map their current open space. Set playerSpace = new HashSet<>(); Queue queue = new ArrayDeque<>(); - BlockPos eyePos = origin.above(); // also include the eye block + BlockPos eyePos = origin.above(); for (BlockPos seed : new BlockPos[]{origin, eyePos}) { if (level.isLoaded(seed) && level.getBlockState(seed).isAir()) { long key = seed.asLong(); @@ -77,7 +65,6 @@ public final class MogglesCaveDetector { } } - // Scan the wider radius for underground air NOT in the player's space. BlockPos nearest = null; double nearestDistSq = Double.MAX_VALUE; int r = (int) AntarchySettings.mogglesVisionRadius(); @@ -91,7 +78,7 @@ public final class MogglesCaveDetector { if (playerSpace.contains(key)) continue; if (!level.isLoaded(pos)) continue; if (!level.getBlockState(pos).isAir()) continue; - if (level.canSeeSky(pos)) continue; // ignore surface air + if (level.canSeeSky(pos)) continue; int airNeighbors = 0; for (Direction dir : Direction.values()) { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/MucusBlockItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/MucusBlockItem.java index c708049b..c2033984 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/MucusBlockItem.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/MucusBlockItem.java @@ -1,13 +1,6 @@ package com.craisinlord.antarchy.content.item; -import java.util.List; - -import net.minecraft.ChatFormatting; -import net.minecraft.network.chat.Component; import net.minecraft.world.item.BlockItem; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.TooltipFlag; -import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; public class MucusBlockItem extends BlockItem { @@ -15,9 +8,4 @@ public class MucusBlockItem extends BlockItem { super(block, properties); } - @Override - public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { - tooltipComponents.add(Component.translatable("tooltip.antarchy.mucus_slippery").withStyle(ChatFormatting.DARK_AQUA)); - super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); - } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/NightmareArmorItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/NightmareArmorItem.java index b1024962..56bf987e 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/NightmareArmorItem.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/NightmareArmorItem.java @@ -1,5 +1,6 @@ package com.craisinlord.antarchy.content.item; +import com.craisinlord.antarchy.compat.item.ArmorDurability; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyObjects; import com.google.common.collect.ImmutableMultimap; @@ -23,10 +24,11 @@ import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.level.Level; public class NightmareArmorItem extends ArmorItem { + private static final int BASE_DURABILITY_MULTIPLIER = 33; private final Type armorType; public NightmareArmorItem(ArmorMaterial material, Type type, Properties properties) { - super(material, type, properties); + super(material, type, properties.durability(resolveDurability(type))); this.armorType = type; } @@ -151,4 +153,13 @@ public class NightmareArmorItem extends ArmorItem { } return true; } + + private static int resolveDurability(Type armorType) { + return switch (armorType) { + case HELMET -> ArmorDurability.forType(Type.HELMET, BASE_DURABILITY_MULTIPLIER); + case CHESTPLATE -> ArmorDurability.forType(Type.CHESTPLATE, BASE_DURABILITY_MULTIPLIER); + case LEGGINGS -> ArmorDurability.forType(Type.LEGGINGS, BASE_DURABILITY_MULTIPLIER); + case BOOTS -> ArmorDurability.forType(Type.BOOTS, BASE_DURABILITY_MULTIPLIER); + }; + } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/NightmareSwordItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/NightmareSwordItem.java index ad9919d6..40e0b8fa 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/NightmareSwordItem.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/NightmareSwordItem.java @@ -1,17 +1,25 @@ package com.craisinlord.antarchy.content.item; +import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.client.NightmareSwordTooltipHelper; +import com.google.common.collect.ImmutableMultimap; +import com.google.common.collect.Multimap; import java.util.List; -import net.minecraft.world.level.Level; import net.minecraft.ChatFormatting; import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.SwordItem; import net.minecraft.world.item.Tier; import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; +import org.jetbrains.annotations.Nullable; public class NightmareSwordItem extends SwordItem { private final Tier tier; @@ -35,15 +43,43 @@ public class NightmareSwordItem extends SwordItem { return baseDamage + missingFraction * scalingFactor * baseDamage; } + @Override + public Multimap getDefaultAttributeModifiers(EquipmentSlot slot) { + if (slot != EquipmentSlot.MAINHAND) { + return super.getDefaultAttributeModifiers(slot); + } + + ImmutableMultimap.Builder builder = ImmutableMultimap.builder(); + builder.put(Attributes.ATTACK_DAMAGE, new AttributeModifier( + BASE_ATTACK_DAMAGE_UUID, + "Weapon modifier", + (float) (int) Math.round(AntarchySettings.nightmareSwordBaseDamage()) + this.tier.getAttackDamageBonus(), + AttributeModifier.Operation.ADDITION)); + builder.put(Attributes.ATTACK_SPEED, new AttributeModifier( + BASE_ATTACK_SPEED_UUID, + "Weapon modifier", + (float) AntarchySettings.nightmareSwordAttackSpeed(), + AttributeModifier.Operation.ADDITION)); + return builder.build(); + } + @Override public boolean isEnchantable(ItemStack stack) { return stack.getCount() == 1; } + public static Component damageLine(float damage) { + float rounded = Math.round(damage * 10.0F) / 10.0F; + String text = rounded == (int) rounded ? String.valueOf((int) rounded) : String.valueOf(rounded); + return Component.translatable("tooltip.antarchy.nightmare_sword_damage", text).withStyle(ChatFormatting.RED); + } + @Override - public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + public void appendHoverText(ItemStack stack, @Nullable Level level, List tooltipComponents, TooltipFlag tooltipFlag) { tooltipComponents.add(Component.translatable("tooltip.antarchy.nightmare_sword").withStyle(ChatFormatting.DARK_RED)); - tooltipComponents.add(NightmareSwordTooltipHelper.damageLine()); + tooltipComponents.add(Antarchy.physicalClient + ? NightmareSwordTooltipHelper.damageLine() + : damageLine((float) AntarchySettings.nightmareSwordBaseDamage())); super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/PortalGunItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/PortalGunItem.java index 98c6f4d9..0e43fd9c 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/PortalGunItem.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/PortalGunItem.java @@ -3,14 +3,21 @@ package com.craisinlord.antarchy.content.item; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.block.entity.PortalGunPortalBaseBlockEntity; import com.craisinlord.antarchy.content.block.entity.PortalGunPortalMasterBlockEntity; +import com.craisinlord.antarchy.content.block.entity.PortalGunPortalFaceRecord; +import com.craisinlord.antarchy.content.block.entity.PortalGunPortalCellAccess; import com.craisinlord.antarchy.content.client.model.ResourceBackedGeoItemModel; import com.craisinlord.antarchy.content.client.renderer.AnimatedHeldItemRenderer; +import com.craisinlord.anthology.gravity.GravityApi; import com.craisinlord.antarchy.content.network.PortalGunPrimaryPayload; -import com.craisinlord.antarchy.content.portalgun.PortalGunBlackHoleEntity; import com.craisinlord.antarchy.content.portalgun.PortalGunPlacement; +import com.craisinlord.antarchy.content.portalgun.PortalGunMoonMath; import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; import com.craisinlord.antarchy.content.portalgun.PortalGunProjectileEntity; import com.craisinlord.antarchy.content.portalgun.PortalGunSavedData; +import com.craisinlord.antarchy.content.portalgun.PortalGunVariant; +import com.craisinlord.antarchy.content.portalgun.PortalGunResetManager; +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.component.AntarchyItemTag; import java.util.HashSet; import java.util.List; import java.util.Optional; @@ -26,8 +33,6 @@ import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; -import net.minecraft.sounds.SoundEvent; -import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; import net.minecraft.stats.Stats; import net.minecraft.world.InteractionHand; @@ -51,8 +56,9 @@ import net.minecraft.world.level.material.FluidState; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; +import net.minecraft.util.Mth; +import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoItem; -import software.bernie.geckolib.animatable.client.GeoRenderProvider; import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; import software.bernie.geckolib.core.animation.AnimatableManager; import software.bernie.geckolib.core.animation.Animation; @@ -62,122 +68,201 @@ import software.bernie.geckolib.core.animation.RawAnimation; import software.bernie.geckolib.constant.DataTickets; import software.bernie.geckolib.util.GeckoLibUtil; -public class PortalGunItem extends Item implements GeoItem { +public class PortalGunItem extends Item implements GeoItem, com.craisinlord.antarchy.content.client.AntarchyGeoItem { private static final String LED_CONTROLLER = "led_controller"; private static final String FIRE_CONTROLLER = "fire_controller"; private static final String LAST_SIDE_TAG = "antarchy.portal_gun_last_side"; private static final String MOON_SIDE_TAG = "antarchy.portal_gun_moon_side"; public static final String GUN_ID_TAG = "antarchy.portal_gun_id"; + public static final String OWNER_ID_TAG = "antarchy.portal_gun_owner"; + public static final String PORTAL_WIDTH_TAG = "width"; + public static final String PORTAL_HEIGHT_TAG = "height"; + private static final int MAX_PORTAL_WIDTH = 16; + private static final int MAX_PORTAL_HEIGHT = 16; private static final ResourceLocation MODEL_LOCATION = new ResourceLocation(Antarchy.MODID, "geo/portal_gun.geo.json"); - private static final ResourceLocation TEXTURE_LOCATION = new ResourceLocation(Antarchy.MODID, "textures/models/item/portal_gun.png"); private static final ResourceLocation ANIMATION_LOCATION = new ResourceLocation(Antarchy.MODID, "animations/portal_gun.animation.json"); private final Supplier> portalType; - private final Supplier> blackHoleType; private final Supplier> projectileType; private final Supplier portalMasterBlock; private final Supplier portalBaseBlock; + private final PortalGunVariant variant; private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); public PortalGunItem( Item.Properties properties, Supplier> portalType, - Supplier> blackHoleType, Supplier> projectileType, Supplier portalMasterBlock, - Supplier portalBaseBlock + Supplier portalBaseBlock, + PortalGunVariant variant ) { super(properties); + this.variant = variant; this.portalType = portalType; - this.blackHoleType = blackHoleType; this.projectileType = projectileType; this.portalMasterBlock = portalMasterBlock; this.portalBaseBlock = portalBaseBlock; GeoItem.registerSyncedAnimatable(this); } + public PortalGunVariant getVariant() { + return this.variant; + } + @Override public InteractionResultHolder use(Level level, Player player, InteractionHand usedHand) { ItemStack stack = player.getItemInHand(usedHand); if (level.isClientSide) { + if (!player.isShiftKeyDown()) { + com.craisinlord.antarchy.content.portalgun.PortalGunMoonAimSync.reportFromClient(); + } return InteractionResultHolder.consume(stack); } ServerLevel serverLevel = (ServerLevel) level; if (player.isShiftKeyDown()) { - PortalGunSavedData.clearAllPortals(serverLevel.getServer(), player.getUUID()); - this.setLastSide(stack, null); - this.setMoonSide(stack, null); - level.playSound(null, player.getX(), player.getY(), player.getZ(), PortalGunPortalEntity.sound("portal_fizzle", SoundEvents.ENDER_CHEST_CLOSE), SoundSource.PLAYERS, 0.6F, 1.0F); + if (player instanceof ServerPlayer serverPlayer) { + this.resetPortals(serverPlayer, stack); + } return InteractionResultHolder.consume(stack); } - boolean fired = this.firePortal(serverLevel, player, stack, PortalGunPortalEntity.PortalSide.ORANGE); + if (player instanceof ServerPlayer serverPlayer && PortalGunResetManager.handleOrangeReset(serverPlayer, stack)) { + return InteractionResultHolder.consume(stack); + } + boolean fired = this.firePortal(serverLevel, player, stack, PortalGunPortalEntity.PortalSide.ORANGE, usedHand == InteractionHand.OFF_HAND); return fired ? InteractionResultHolder.consume(stack) : InteractionResultHolder.fail(stack); } - public void firePrimary(ServerLevel level, ServerPlayer player, ItemStack stack) { - this.firePortal(level, player, stack, PortalGunPortalEntity.PortalSide.BLUE); + public void firePrimary(ServerLevel level, ServerPlayer player, ItemStack stack, boolean offhand) { + this.firePortal(level, player, stack, PortalGunPortalEntity.PortalSide.BLUE, offhand); } - private boolean firePortal(ServerLevel level, Player player, ItemStack stack, PortalGunPortalEntity.PortalSide side) { + public void resetPortals(ServerPlayer player, ItemStack stack) { + UUID gunId = this.ensureGunId(stack, player.getUUID()); + PortalGunSavedData.clearAllPortals(player.serverLevel(), gunId); + this.setLastSide(stack, null); + this.setMoonSide(stack, null); + player.serverLevel().playSound(null, player.getX(), player.getY(), player.getZ(), PortalGunPortalEntity.sound("portal_fizzle"), SoundSource.PLAYERS, 0.6F, 1.0F); + } + + public void resetPortalSide(ServerPlayer player, ItemStack stack, PortalGunPortalEntity.PortalSide side) { + UUID gunId = this.ensureGunId(stack, player.getUUID()); + PortalGunSavedData.clearPortalSide(player.serverLevel(), gunId, side); + player.serverLevel().playSound(null, player.getX(), player.getY(), player.getZ(), PortalGunPortalEntity.sound("portal_fizzle"), SoundSource.PLAYERS, 0.6F, 1.0F); + } + + private boolean damageGun(ServerLevel level, Player player, ItemStack stack, boolean offhand) { + UUID gunId = getGunId(stack); + EquipmentSlot slot = offhand ? EquipmentSlot.OFFHAND : EquipmentSlot.MAINHAND; + boolean[] broke = {false}; + stack.hurtAndBreak(1, player, brokenBy -> { + broke[0] = true; + brokenBy.broadcastBreakEvent(slot); + PortalGunSavedData.clearAllPortals(level, gunId); + }); + return broke[0]; + } + + public static void clearPortalsOf(ServerLevel level, ItemStack stack) { + if (stack.getItem() instanceof PortalGunItem) { + PortalGunSavedData.clearAllPortals(level, getGunId(stack)); + } + } + + public void fireMobPortal(ServerLevel level, LivingEntity shooter, ItemStack stack, PortalGunPortalEntity.PortalSide side) { + this.ensureGunId(stack, shooter.getUUID()); + String firePath = side == PortalGunPortalEntity.PortalSide.BLUE ? "portal_gun_fire_blue" : "portal_gun_fire_orange"; + level.playSound(null, shooter.getX(), shooter.getY(), shooter.getZ(), PortalGunPortalEntity.sound(firePath), shooter.getSoundSource(), 0.65F, side == PortalGunPortalEntity.PortalSide.BLUE ? 1.15F : 0.88F); + this.spawnProjectile(level, shooter, stack, side); + } + + private boolean firePortal(ServerLevel level, Player player, ItemStack stack, PortalGunPortalEntity.PortalSide side, boolean offhand) { if (this.raycast(level, player).getType() == HitResult.Type.MISS) { - if (this.tryArmMoonShot(level, player, stack, side)) { + if (this.tryArmMoonShot(level, player, stack, side, offhand)) { return true; } - level.playSound(null, player.getX(), player.getY(), player.getZ(), PortalGunPortalEntity.sound("portal_gun_invalid_surface", SoundEvents.DISPENSER_FAIL), SoundSource.PLAYERS, 0.55F, 1.0F); - return false; } this.triggerFireAnimation(level, player, stack); - this.setLastSide(stack, side); - stack.hurtAndBreak(1, player, p -> p.broadcastBreakEvent(EquipmentSlot.MAINHAND)); + this.ensureGunId(stack, player.getUUID()); + if (this.damageGun(level, player, stack, offhand)) { + return true; + } player.awardStat(Stats.ITEM_USED.get(this)); player.getCooldowns().addCooldown(this, 6); String firePath = side == PortalGunPortalEntity.PortalSide.BLUE ? "portal_gun_fire_blue" : "portal_gun_fire_orange"; - level.playSound(null, player.getX(), player.getY(), player.getZ(), PortalGunPortalEntity.sound(firePath, SoundEvents.BEACON_ACTIVATE), SoundSource.PLAYERS, 0.65F, side == PortalGunPortalEntity.PortalSide.BLUE ? 1.15F : 0.88F); + level.playSound(null, player.getX(), player.getY(), player.getZ(), PortalGunPortalEntity.sound(firePath), SoundSource.PLAYERS, 0.65F, side == PortalGunPortalEntity.PortalSide.BLUE ? 1.15F : 0.88F); this.spawnProjectile(level, player, stack, side); return true; } - public void handlePortalImpact(ServerLevel level, Player player, ItemStack stack, PortalGunPortalEntity.PortalSide side, BlockHitResult hitResult, Vec3 impactPos) { - PortalGunPortalEntity existing = this.findPlacedPortal(level, player.getUUID(), side); - PortalGunPlacement placement = this.findPlacement(level, player, side, hitResult, existing); + public void handlePortalImpact(ServerLevel level, LivingEntity shooter, ItemStack stack, UUID gunId, PortalGunPortalEntity.PortalSide side, BlockHitResult hitResult, Vec3 impactPos, int portalWidth, int portalHeight) { + UUID portalOwnerId = getPortalOwnerId(stack, shooter.getUUID()); + PortalGunPortalEntity existing = this.findPlacedPortal(level, gunId, side); + PortalGunPlacement placement = this.findPlacement(level, shooter, gunId, side, hitResult, existing, portalWidth, portalHeight); if (placement == null) { - Antarchy.LOGGER.info("Portal gun placement failed owner={} side={} hitBlock={} hitFace={} hitLocation={}", player.getUUID(), side, hitResult.getBlockPos(), hitResult.getDirection(), hitResult.getLocation()); - level.playSound(null, impactPos.x, impactPos.y, impactPos.z, PortalGunPortalEntity.sound("portal_gun_invalid_surface", SoundEvents.DISPENSER_FAIL), SoundSource.PLAYERS, 0.55F, 1.0F); + Antarchy.LOGGER.debug("Portal gun placement failed owner={} side={} hitBlock={} hitFace={} hitLocation={}", shooter.getUUID(), side, hitResult.getBlockPos(), hitResult.getDirection(), hitResult.getLocation()); + level.playSound(null, impactPos.x, impactPos.y, impactPos.z, PortalGunPortalEntity.sound("portal_gun_invalid_surface"), SoundSource.PLAYERS, 0.55F, 1.0F); + return; + } + if (existing != null && this.isSamePortalPlacement(existing, placement)) { + existing.restartOpeningAnimation(); + if (stack.getItem() == this) { + this.setLastSide(stack, side); + } + level.playSound(null, existing.getX(), existing.getY(), existing.getZ(), PortalGunPortalEntity.sound("portal_fizzle"), SoundSource.PLAYERS, 0.6F, 1.0F); return; } if (existing != null) { - Antarchy.LOGGER.info("Portal gun replacing existing portal owner={} side={} oldPortal={}", player.getUUID(), side, existing.getUUID()); + Antarchy.LOGGER.debug("Portal gun replacing existing portal owner={} side={} oldPortal={}", shooter.getUUID(), side, existing.getUUID()); existing.discard(); } if (this.isMoonSideArmed(stack, side)) { this.setMoonSide(stack, null); } - if (this.isMoonSideArmed(stack, this.otherSide(side))) { - this.spawnBlackHole(level, player, stack, side, placement.center()); - return; + boolean moon = shooter instanceof Player && this.isMoonSideArmed(stack, this.otherSide(side)); + if (moon) { + this.setMoonSide(stack, null); } PortalGunPortalEntity portal = new PortalGunPortalEntity(this.portalType.get(), level); - portal.configure(player.getUUID(), side, placement); + portal.configure(portalOwnerId, gunId, this.variant, side, placement); portal.moveTo(placement.center().x, placement.center().y, placement.center().z, placement.yaw(), 0.0F); - if (!this.placePortalBlocks(level, player.getUUID(), side, portal, placement)) { - Antarchy.LOGGER.info("Portal gun block placement failed owner={} side={} portal={} center={} facing={} up={} master={} base={}", player.getUUID(), side, portal.getUUID(), placement.center(), placement.facing(), placement.upAxis(), placement.masterPos(), placement.basePos()); - level.playSound(null, impactPos.x, impactPos.y, impactPos.z, PortalGunPortalEntity.sound("portal_gun_invalid_surface", SoundEvents.DISPENSER_FAIL), SoundSource.PLAYERS, 0.55F, 1.0F); + if (!this.placePortalBlocks(level, portalOwnerId, gunId, side, portal, placement)) { + Antarchy.LOGGER.debug("Portal gun block placement failed owner={} side={} portal={} center={} facing={} up={} master={} base={}", shooter.getUUID(), side, portal.getUUID(), placement.center(), placement.facing(), placement.upAxis(), placement.masterPos(), placement.basePos()); + level.playSound(null, impactPos.x, impactPos.y, impactPos.z, PortalGunPortalEntity.sound("portal_gun_invalid_surface"), SoundSource.PLAYERS, 0.55F, 1.0F); return; } + if (moon) { + portal.openToMoon(); + } level.addFreshEntity(portal); - PortalGunSavedData.setPortal(level.getServer(), player.getUUID(), side, portal.getUUID()); - Antarchy.LOGGER.info("Portal gun portal placed owner={} side={} portal={} center={} facing={} up={} width={} master={} base={}", player.getUUID(), side, portal.getUUID(), placement.center(), placement.facing(), placement.upAxis(), placement.widthAxis(), placement.masterPos(), placement.basePos()); - PortalGunPortalEntity other = this.findCounterpart(level, player.getUUID(), side); + PortalGunSavedData.setPortal(level, gunId, portalOwnerId, side, portal.getUUID()); + PortalGunPortalEntity other = this.findCounterpart(level, gunId, side); + if (other != null && (moon || other.isMoonPortal())) { + other.discard(); + other = null; + } if (other != null) { portal.linkTo(other); other.linkTo(portal); this.syncPortalBlocks(level, portal); this.syncPortalBlocks(level, other); - Antarchy.LOGGER.info("Portal gun portals linked owner={} placedSide={} placedPortal={} otherPortal={} otherSide={}", player.getUUID(), side, portal.getUUID(), other.getUUID(), other.getPortalSide()); - } else { - Antarchy.LOGGER.info("Portal gun portal waiting for counterpart owner={} side={} portal={}", player.getUUID(), side, portal.getUUID()); + } + if (stack.getItem() == this) { + this.setLastSide(stack, side); } String openPath = side == PortalGunPortalEntity.PortalSide.BLUE ? "portal_open_blue" : "portal_open_orange"; - level.playSound(null, portal.getX(), portal.getY(), portal.getZ(), PortalGunPortalEntity.sound(openPath, SoundEvents.END_PORTAL_SPAWN), SoundSource.PLAYERS, 0.45F, side == PortalGunPortalEntity.PortalSide.BLUE ? 1.05F : 0.92F); + level.playSound(null, portal.getX(), portal.getY(), portal.getZ(), PortalGunPortalEntity.sound(openPath), SoundSource.PLAYERS, 0.45F, side == PortalGunPortalEntity.PortalSide.BLUE ? 1.05F : 0.92F); + } + + private boolean isSamePortalPlacement(PortalGunPortalEntity portal, PortalGunPlacement placement) { + if (portal.getPortalWidth() != placement.width() + || portal.getPortalHeight() != placement.height() + || portal.getFacingDirection() != placement.facing() + || portal.getUpAxis() != placement.upAxis() + || !portal.getMasterPos().equals(placement.masterPos())) { + return false; + } + return new HashSet<>(java.util.Arrays.asList(portal.getPortalSpots())) + .equals(new HashSet<>(java.util.Arrays.asList(placement.portalSpots()))); } public ItemStack findMatchingGunStack(Player player, UUID gunId) { @@ -198,33 +283,43 @@ public class PortalGunItem extends Item implements GeoItem { return ItemStack.EMPTY; } - private boolean tryArmMoonShot(ServerLevel level, Player player, ItemStack stack, PortalGunPortalEntity.PortalSide side) { - if (!level.dimensionType().hasSkyLight() || !level.isNight() || player.getXRot() > -40.0F) { + private boolean tryArmMoonShot(ServerLevel level, Player player, ItemStack stack, PortalGunPortalEntity.PortalSide side, boolean offhand) { + if (!this.isAimingAtMoon(level, player)) { return false; } - PortalGunPortalEntity existing = this.findPlacedPortal(level, player.getUUID(), side); + UUID gunId = this.ensureGunId(stack, player.getUUID()); + PortalGunPortalEntity existing = this.findPlacedPortal(level, gunId, side); if (existing != null) { existing.discard(); } - this.setMoonSide(stack, side); + PortalGunPortalEntity counterpart = this.findPlacedPortal(level, gunId, this.otherSide(side)); + if (counterpart != null && counterpart.isAlive() && !counterpart.isMoonPortal()) { + counterpart.openToMoon(); + this.setMoonSide(stack, null); + } else { + this.setMoonSide(stack, side); + } this.setLastSide(stack, side); this.triggerFireAnimation(level, player, stack); - stack.hurtAndBreak(1, player, p -> p.broadcastBreakEvent(EquipmentSlot.MAINHAND)); + if (this.damageGun(level, player, stack, offhand)) { + return true; + } player.awardStat(Stats.ITEM_USED.get(this)); player.getCooldowns().addCooldown(this, 6); - level.playSound(null, player.getX(), player.getY(), player.getZ(), PortalGunPortalEntity.sound(side == PortalGunPortalEntity.PortalSide.BLUE ? "portal_gun_fire_blue" : "portal_gun_fire_orange", SoundEvents.BEACON_ACTIVATE), SoundSource.PLAYERS, 0.65F, side == PortalGunPortalEntity.PortalSide.BLUE ? 1.15F : 0.88F); - this.spawnShotTrail(level, player, player.getEyePosition().add(player.getLookAngle().scale(64.0D)), side); + level.playSound(null, player.getX(), player.getY(), player.getZ(), PortalGunPortalEntity.sound(side == PortalGunPortalEntity.PortalSide.BLUE ? "portal_gun_fire_blue" : "portal_gun_fire_orange"), SoundSource.PLAYERS, 0.65F, side == PortalGunPortalEntity.PortalSide.BLUE ? 1.15F : 0.88F); + this.spawnShotTrail(level, player, player.getEyePosition().add(this.worldLook(player).scale(64.0D)), side); return true; } - private boolean spawnBlackHole(ServerLevel level, Player player, ItemStack stack, PortalGunPortalEntity.PortalSide side, Vec3 spawnPos) { - this.setMoonSide(stack, null); - PortalGunBlackHoleEntity blackHole = new PortalGunBlackHoleEntity(this.blackHoleType.get(), level); - blackHole.configure(player.getUUID()); - blackHole.moveTo(spawnPos.x, spawnPos.y, spawnPos.z, 0.0F, 0.0F); - level.addFreshEntity(blackHole); - level.playSound(null, spawnPos.x, spawnPos.y, spawnPos.z, PortalGunPortalEntity.sound("portal_gun_black_hole", SoundEvents.WARDEN_SONIC_BOOM), SoundSource.PLAYERS, 0.6F, 0.6F); - return true; + private boolean isAimingAtMoon(ServerLevel level, Player player) { + if (!level.dimensionType().hasSkyLight() || level.dimensionType().hasCeiling()) { + return false; + } + Boolean clientAim = player instanceof ServerPlayer serverPlayer ? com.craisinlord.antarchy.content.portalgun.PortalGunMoonAimSync.clientAim(serverPlayer) : null; + if (clientAim != null) { + return clientAim; + } + return PortalGunMoonMath.isAimedAtMoon(this.worldLook(player), level.getTimeOfDay(1.0F)); } private void spawnShotTrail(ServerLevel level, Player player, Vec3 endPos, PortalGunPortalEntity.PortalSide side) { @@ -240,20 +335,33 @@ public class PortalGunItem extends Item implements GeoItem { } } - private void spawnProjectile(ServerLevel level, Player player, ItemStack stack, PortalGunPortalEntity.PortalSide side) { - UUID gunId = this.ensureGunId(stack); - PortalGunProjectileEntity projectile = new PortalGunProjectileEntity(this.projectileType.get(), player, level); + private void spawnProjectile(ServerLevel level, LivingEntity shooter, ItemStack stack, PortalGunPortalEntity.PortalSide side) { + UUID gunId = this.ensureGunId(stack, shooter.getUUID()); + PortalGunProjectileEntity projectile = new PortalGunProjectileEntity(this.projectileType.get(), shooter, level); projectile.configure(side, gunId, stack); - Vec3 look = player.getLookAngle(); - Vec3 start = player.getEyePosition().add(look.scale(0.4D)); + Vec3 look = this.worldLook(shooter); + Vec3 start = shooter.getEyePosition(); + double launchSpeed = PortalGunProjectileEntity.MIN_LAUNCH_SPEED + level.getRandom().nextDouble() * PortalGunProjectileEntity.LAUNCH_SPEED_VARIANCE; + projectile.setProjectileSpeed(launchSpeed); projectile.setPos(start.x, start.y, start.z); - projectile.setDeltaMovement(look.scale(2.5D)); + projectile.setDeltaMovement(look.scale(projectile.getProjectileSpeed())); + projectile.syncLaunchState(); level.addFreshEntity(projectile); } - private PortalGunPortalEntity findCounterpart(ServerLevel level, UUID owner, PortalGunPortalEntity.PortalSide side) { + public static int getPortalWidth(ItemStack stack) { + net.minecraft.nbt.CompoundTag data = stack.getTag(); + return Mth.clamp(data == null ? 1 : data.getInt(PORTAL_WIDTH_TAG), 1, MAX_PORTAL_WIDTH); + } + + public static int getPortalHeight(ItemStack stack) { + net.minecraft.nbt.CompoundTag data = stack.getTag(); + return Mth.clamp(data == null || !data.contains(PORTAL_HEIGHT_TAG) ? 2 : data.getInt(PORTAL_HEIGHT_TAG), 2, MAX_PORTAL_HEIGHT); + } + + private PortalGunPortalEntity findCounterpart(ServerLevel level, UUID gunId, PortalGunPortalEntity.PortalSide side) { PortalGunPortalEntity.PortalSide otherSide = side == PortalGunPortalEntity.PortalSide.BLUE ? PortalGunPortalEntity.PortalSide.ORANGE : PortalGunPortalEntity.PortalSide.BLUE; - Optional otherId = PortalGunSavedData.getPortalId(level.getServer(), owner, otherSide); + Optional otherId = PortalGunSavedData.getPortalId(level.getServer(), gunId, otherSide, level.dimension().location()); if (otherId.isEmpty()) { return null; } @@ -261,8 +369,8 @@ public class PortalGunItem extends Item implements GeoItem { return entity instanceof PortalGunPortalEntity portal ? portal : null; } - private PortalGunPortalEntity findPlacedPortal(ServerLevel level, UUID owner, PortalGunPortalEntity.PortalSide side) { - Optional portalId = PortalGunSavedData.getPortalId(level.getServer(), owner, side); + private PortalGunPortalEntity findPlacedPortal(ServerLevel level, UUID gunId, PortalGunPortalEntity.PortalSide side) { + Optional portalId = PortalGunSavedData.getPortalId(level.getServer(), gunId, side, level.dimension().location()); if (portalId.isEmpty()) { return null; } @@ -276,155 +384,271 @@ public class PortalGunItem extends Item implements GeoItem { private BlockHitResult raycast(Level level, Player player) { Vec3 start = player.getEyePosition(); - Vec3 end = start.add(player.getLookAngle().scale(64.0D)); + Vec3 end = start.add(this.worldLook(player).scale(64.0D)); return level.clip(new ClipContext(start, end, ClipContext.Block.COLLIDER, ClipContext.Fluid.NONE, player)); } - private PortalGunPlacement findPlacement(Level level, Player player, PortalGunPortalEntity.PortalSide side, BlockHitResult hitResult, PortalGunPortalEntity replacingPortal) { + private Vec3 worldLook(LivingEntity entity) { + Vec3 look = entity.getLookAngle(); + return GravityApi.isGravityInverted(entity) + ? com.craisinlord.anthology.gravity.GravityRotationUtil.vecPlayerToWorld( + look, GravityApi.getGravityDirection(entity)) + : look; + } + + private PortalGunPlacement findPlacement(Level level, LivingEntity shooter, UUID gunId, PortalGunPortalEntity.PortalSide side, BlockHitResult hitResult, PortalGunPortalEntity replacingPortal, int requestedWidth, int requestedHeight) { + int maxWidth = Mth.clamp(requestedWidth, 1, 16); + int maxHeight = Mth.clamp(requestedHeight, 2, 16); + boolean canResize = AntarchySettings.portalGunCanPortalsResizeWhenCreated(); + for (int height = maxHeight; height >= 2; height--) { + for (int width = maxWidth; width >= 1; width--) { + if (!canResize && (width != maxWidth || height != maxHeight)) { + continue; + } + PortalGunPlacement placement = this.findPlacementForSize(level, shooter, gunId, side, hitResult, replacingPortal, width, height); + if (placement != null) { + return placement; + } + } + } + return null; + } + + private PortalGunPlacement findPlacementForSize(Level level, LivingEntity shooter, UUID gunId, PortalGunPortalEntity.PortalSide side, BlockHitResult hitResult, PortalGunPortalEntity replacingPortal, int width, int height) { Direction facing = hitResult.getDirection(); - Direction heightAxis = this.resolveUpAxis(player, facing); + Direction heightAxis = this.resolveUpAxis(shooter, facing); Direction widthAxis = PortalGunPlacement.widthAxis(facing, heightAxis); float yaw = PortalGunPlacement.yawFor(facing, heightAxis); BlockPos hitPos = hitResult.getBlockPos(); - Vec3 hitLocation = hitResult.getLocation(); - UUID replacingPortalId = replacingPortal == null ? null : replacingPortal.getUUID(); - PortalGunPlacement bestPlacement = null; - double bestScore = Double.MAX_VALUE; - for (int widthOffset = -3; widthOffset <= 3; widthOffset++) { - for (int heightOffset = -4; heightOffset <= 3; heightOffset++) { - BlockPos supportOrigin = hitPos.relative(widthAxis, widthOffset).relative(heightAxis, heightOffset); - if (!this.canPlaceAt(level, player.getUUID(), side, supportOrigin, facing, heightAxis, replacingPortalId)) { - continue; - } - BlockPos masterPos = supportOrigin.relative(facing); - BlockPos basePos = masterPos.relative(heightAxis); - BlockPos[] portalSpots = new BlockPos[] {masterPos, basePos}; - Vec3 firstCellCenter = masterPos.getCenter(); - Vec3 center = firstCellCenter - .add(Vec3.atLowerCornerOf(heightAxis.getNormal()).scale(0.5D)) - .subtract(Vec3.atLowerCornerOf(facing.getNormal()).scale(0.5D)); - Vec3 local = hitLocation.subtract(center); - double widthLocal = local.dot(Vec3.atLowerCornerOf(widthAxis.getNormal())); - double heightLocal = local.dot(Vec3.atLowerCornerOf(heightAxis.getNormal())); - double depthLocal = local.dot(Vec3.atLowerCornerOf(facing.getNormal())); - double widthDistance = Math.max(0.0D, Math.abs(widthLocal) - 0.5D); - double heightDistance = Math.max(0.0D, Math.abs(heightLocal) - 1.0D); - double score = widthDistance * widthDistance - + heightDistance * heightDistance - + Math.abs(depthLocal) * 0.25D - + supportOrigin.distSqr(hitPos) * 0.12D - + Math.abs(widthOffset) * 0.04D - + Math.abs(heightOffset) * 0.025D - + (widthOffset != 0 || heightOffset != 0 ? 0.02D : 0.0D); - if (score < bestScore) { - bestScore = score; - Set compensatedSpots = new HashSet<>(); - if (widthOffset != 0 || heightOffset != 0) { - compensatedSpots.add(hitPos.relative(facing)); - compensatedSpots.add(masterPos); - compensatedSpots.add(basePos); - compensatedSpots.add(supportOrigin); - compensatedSpots.add(basePos.relative(facing.getOpposite())); + int maxRadius = Math.max(width, height); + List radiusOrder = new java.util.ArrayList<>(maxRadius); + for (int radius = 0; radius < maxRadius; radius++) { + radiusOrder.add(radius); + } + int preferredRadius = maxRadius / 2; + radiusOrder.remove(Integer.valueOf(preferredRadius)); + radiusOrder.add(0, preferredRadius); + for (int radius : radiusOrder) { + for (int horizontalOffset = radius; horizontalOffset >= 0; horizontalOffset--) { + for (int verticalOffset = radius; verticalOffset >= 0; verticalOffset--) { + List supports = new java.util.ArrayList<>(width * height); + for (int widthCell = 1 - width; widthCell <= 0; widthCell++) { + for (int heightCell = 1 - height; heightCell <= 0; heightCell++) { + supports.add(this.referenceSupportPosition(hitPos, facing, heightAxis, horizontalOffset, verticalOffset, widthCell, heightCell)); + } } - bestPlacement = new PortalGunPlacement(center, facing, heightAxis, widthAxis, yaw, supportOrigin, masterPos, basePos, portalSpots, compensatedSpots); + if (!supports.contains(hitPos)) { + continue; + } + BlockPos[] portalSpots = new BlockPos[supports.size()]; + boolean valid = true; + int spotIndex = 0; + for (BlockPos supportPos : supports) { + BlockPos portalPos = supportPos.relative(facing); + BlockState supportState = level.getBlockState(supportPos); + BlockState portalState = level.getBlockState(portalPos); + if (!supportState.isFaceSturdy(level, supportPos, facing) + || !this.isPortalSpaceAvailable(level, portalPos, portalState, gunId, side, facing)) { + valid = false; + break; + } + portalSpots[spotIndex++] = portalPos; + } + if (!valid) { + continue; + } + BlockPos masterPos = null; + for (BlockPos portalSpot : portalSpots) { + BlockState state = level.getBlockState(portalSpot); + boolean belongsToReplacingPortal = replacingPortal != null && replacingPortal.containsPortalSpot(portalSpot); + boolean existingPortalCell = level.getBlockEntity(portalSpot) instanceof PortalGunPortalCellAccess; + if ((state.canBeReplaced() || belongsToReplacingPortal || existingPortalCell) && level.getFluidState(portalSpot).isEmpty()) { + masterPos = portalSpot; + break; + } + } + if (masterPos == null) { + return null; + } + BlockPos[] orderedPortalSpots = new BlockPos[portalSpots.length]; + orderedPortalSpots[0] = masterPos; + int orderedSpotIndex = 1; + for (BlockPos portalSpot : portalSpots) { + if (!portalSpot.equals(masterPos)) { + orderedPortalSpots[orderedSpotIndex++] = portalSpot; + } + } + portalSpots = orderedPortalSpots; + Vec3 center = Vec3.ZERO; + Set compensatedSpots = new HashSet<>(); + for (BlockPos portalSpot : portalSpots) { + center = center.add(portalSpot.getCenter()); + if (horizontalOffset != 0 || verticalOffset != 0) { + compensatedSpots.add(portalSpot); + compensatedSpots.add(portalSpot.relative(facing.getOpposite())); + } + } + center = center.scale(1.0D / portalSpots.length) + .subtract(Vec3.atLowerCornerOf(facing.getNormal()).scale(0.5D)); + BlockPos supportOrigin = masterPos.relative(facing.getOpposite()); + BlockPos basePos = portalSpots.length > 1 ? portalSpots[1] : portalSpots[0]; + return new PortalGunPlacement(center, facing, heightAxis, widthAxis, yaw, supportOrigin, masterPos, basePos, portalSpots, compensatedSpots, width, height); } } } - return bestPlacement; + return null; } - private Direction resolveUpAxis(Player player, Direction facing) { + private BlockPos referenceSupportPosition(BlockPos origin, Direction facing, Direction upAxis, int horizontalOffset, int verticalOffset, int widthCell, int heightCell) { + int x; + int y; + int z; + if (facing.getAxis() != Direction.Axis.Y) { + if (facing.getAxis() == Direction.Axis.Z) { + x = horizontalOffset + widthCell; + z = 0; + } else { + x = 0; + z = horizontalOffset + widthCell; + } + y = -verticalOffset - heightCell; + } else if (upAxis == Direction.NORTH) { + x = horizontalOffset + widthCell; + y = 0; + z = verticalOffset + heightCell; + } else if (upAxis == Direction.SOUTH) { + x = horizontalOffset + widthCell; + y = 0; + z = -verticalOffset - heightCell; + } else if (upAxis == Direction.WEST) { + x = -verticalOffset - heightCell; + y = 0; + z = horizontalOffset + widthCell; + } else { + x = verticalOffset + heightCell; + y = 0; + z = horizontalOffset + widthCell; + } + return origin.offset(x, y, z); + } + + private Direction resolveUpAxis(LivingEntity shooter, Direction facing) { if (facing.getAxis() != Direction.Axis.Y) { return Direction.UP; } - Direction horizontal = player.getDirection(); + Direction horizontal = shooter.getDirection(); if (horizontal.getAxis() == Direction.Axis.Y) { return Direction.NORTH; } - return horizontal.getOpposite(); + return horizontal; } - private boolean canPlaceAt(Level level, UUID ownerId, PortalGunPortalEntity.PortalSide side, BlockPos supportOrigin, Direction facing, Direction heightAxis, UUID replacingPortalId) { - for (int h = 0; h < 2; h++) { - BlockPos supportPos = supportOrigin.relative(heightAxis, h); - BlockPos airPos = supportPos.relative(facing); - BlockState supportState = level.getBlockState(supportPos); - BlockState airState = level.getBlockState(airPos); - FluidState fluidState = level.getFluidState(airPos); - if (!supportState.isFaceSturdy(level, supportPos, facing)) { - return false; - } - if (!this.isPortalSpaceAvailable(level, airPos, airState, ownerId, side, replacingPortalId)) { - return false; - } - if (!fluidState.isEmpty()) { - return false; - } - } - return true; - } - - private boolean isPortalSpaceAvailable(Level level, BlockPos pos, BlockState state, UUID ownerId, PortalGunPortalEntity.PortalSide side, UUID replacingPortalId) { - if (state.isAir() || state.canBeReplaced()) { - return true; - } + private boolean isPortalSpaceAvailable(Level level, BlockPos pos, BlockState state, UUID gunId, PortalGunPortalEntity.PortalSide side, Direction face) { BlockEntity blockEntity = level.getBlockEntity(pos); - if (blockEntity instanceof PortalGunPortalMasterBlockEntity master) { - return ownerId != null - && ownerId.equals(master.getOwnerId()) - && master.getSide() == side - && (replacingPortalId == null || replacingPortalId.equals(master.getPortalId())); + if (blockEntity instanceof PortalGunPortalCellAccess portalCell) { + PortalGunPortalFaceRecord record = portalCell.portalGun$getFaceRecord(face); + if (record == null) { + if (blockEntity instanceof PortalGunPortalMasterBlockEntity master && master.getPortalId() != null && master.getFacing() == face) { + return gunId != null && gunId.equals(master.getGunId()) && master.getSide() == side; + } + if (blockEntity instanceof PortalGunPortalBaseBlockEntity base && base.getPortalId() != null) { + BlockEntity masterEntity = level.getBlockEntity(base.getMasterPos()); + if (!(masterEntity instanceof PortalGunPortalMasterBlockEntity master)) { + return false; + } + return master.getFacing() != face + || (gunId != null + && gunId.equals(master.getGunId()) + && base.getSide() == side + && master.getSide() == side); + } + return true; + } + return gunId != null + && gunId.equals(record.gunId()) + && record.side() == side; } - if (blockEntity instanceof PortalGunPortalBaseBlockEntity base) { - return ownerId != null - && ownerId.equals(base.getOwnerId()) - && base.getSide() == side - && (replacingPortalId == null || replacingPortalId.equals(base.getPortalId())); - } - return false; + return state.getCollisionShape(level, pos).isEmpty(); } - private boolean placePortalBlocks(ServerLevel level, UUID ownerId, PortalGunPortalEntity.PortalSide side, PortalGunPortalEntity portal, PortalGunPlacement placement) { - if (!level.setBlock(placement.masterPos(), this.portalMasterBlock.get().defaultBlockState(), 3)) { - return false; + private boolean placePortalBlocks(ServerLevel level, UUID ownerId, UUID gunId, PortalGunPortalEntity.PortalSide side, PortalGunPortalEntity portal, PortalGunPlacement placement) { + int pairTime = level.getServer().getTickCount(); + for (int i = 0; i < placement.portalSpots().length; i++) { + BlockPos spot = placement.portalSpots()[i]; + BlockEntity existing = level.getBlockEntity(spot); + boolean masterRole = i == 0; + if (!(existing instanceof PortalGunPortalCellAccess)) { + BlockState block = masterRole ? this.portalMasterBlock.get().defaultBlockState() : this.portalBaseBlock.get().defaultBlockState(); + if (!level.setBlock(spot, block, 3)) { + for (BlockPos placed : placement.portalSpots()) { + BlockEntity cell = level.getBlockEntity(placed); + if (cell instanceof PortalGunPortalCellAccess portalCell) { + portalCell.portalGun$removeFaceRecord(placement.facing(), portal.getUUID()); + } + } + return false; + } + existing = level.getBlockEntity(spot); + } + if (!(existing instanceof PortalGunPortalCellAccess cell) + || !cell.portalGun$putFaceRecord(new PortalGunPortalFaceRecord( + ownerId, + gunId, + this.variant, + portal.getUUID(), + portal.getLinkedPortalId(), + side, + placement.facing(), + placement.upAxis(), + placement.masterPos(), + placement.basePos(), + java.util.Arrays.asList(placement.portalSpots()), + placement.compensatedSpots(), + pairTime, + placement.width(), + placement.height(), + masterRole + ))) { + return false; + } + if (masterRole && existing instanceof PortalGunPortalMasterBlockEntity master + && (master.getPortalId() == null || master.getPortalId().equals(portal.getUUID()))) { + master.configure(ownerId, gunId, this.variant, portal.getUUID(), side, placement.facing(), placement.upAxis(), placement.basePos(), placement.portalSpots(), placement.compensatedSpots(), pairTime, placement.width(), placement.height()); + } else if (!masterRole && existing instanceof PortalGunPortalBaseBlockEntity base + && (base.getPortalId() == null || base.getPortalId().equals(portal.getUUID()))) { + base.configure(ownerId, portal.getUUID(), side, placement.masterPos()); + } } - if (!level.setBlock(placement.basePos(), this.portalBaseBlock.get().defaultBlockState(), 3)) { - level.setBlock(placement.masterPos(), Blocks.AIR.defaultBlockState(), 3); - return false; - } - if (!(level.getBlockEntity(placement.masterPos()) instanceof PortalGunPortalMasterBlockEntity master) || !(level.getBlockEntity(placement.basePos()) instanceof PortalGunPortalBaseBlockEntity base)) { - level.setBlock(placement.masterPos(), Blocks.AIR.defaultBlockState(), 3); - level.setBlock(placement.basePos(), Blocks.AIR.defaultBlockState(), 3); - return false; - } - master.configure(ownerId, portal.getUUID(), side, placement.facing(), placement.upAxis(), placement.basePos(), placement.portalSpots(), placement.compensatedSpots(), level.getServer().getTickCount()); - base.configure(ownerId, portal.getUUID(), side, placement.masterPos()); return true; } private void syncPortalBlocks(ServerLevel level, PortalGunPortalEntity portal) { - if (level.getBlockEntity(portal.getMasterPos()) instanceof PortalGunPortalMasterBlockEntity master) { - master.updatePair(portal.getLinkedPortalId(), portal.getPairTime()); - } - if (level.getBlockEntity(portal.getBasePos()) instanceof PortalGunPortalBaseBlockEntity base) { - base.updatePair(portal.getLinkedPortalId(), portal.getPairTime()); + for (BlockPos portalSpot : portal.getPortalSpots()) { + if (level.getBlockEntity(portalSpot) instanceof PortalGunPortalCellAccess cell) { + cell.portalGun$updateFacePair(portal.getUUID(), portal.getLinkedPortalId(), portal.getPairTime()); + } + if (portalSpot.equals(portal.getMasterPos()) && level.getBlockEntity(portalSpot) instanceof PortalGunPortalMasterBlockEntity master && portal.getUUID().equals(master.getPortalId())) { + master.updatePair(portal.getLinkedPortalId(), portal.getPairTime()); + } else if (!portalSpot.equals(portal.getMasterPos()) && level.getBlockEntity(portalSpot) instanceof PortalGunPortalBaseBlockEntity base && portal.getUUID().equals(base.getPortalId())) { + base.updatePair(portal.getLinkedPortalId(), portal.getPairTime()); + } } } private void setLastSide(ItemStack stack, PortalGunPortalEntity.PortalSide side) { if (side == null) { - stack.getOrCreateTag().remove(LAST_SIDE_TAG); + AntarchyItemTag.update(stack, tag -> tag.remove(LAST_SIDE_TAG)); return; } - stack.getOrCreateTag().putString(LAST_SIDE_TAG, side.name()); + AntarchyItemTag.update(stack, tag -> tag.putString(LAST_SIDE_TAG, side.name())); } private void setMoonSide(ItemStack stack, PortalGunPortalEntity.PortalSide side) { if (side == null) { - stack.getOrCreateTag().remove(MOON_SIDE_TAG); + AntarchyItemTag.update(stack, tag -> tag.remove(MOON_SIDE_TAG)); return; } - stack.getOrCreateTag().putString(MOON_SIDE_TAG, side.name()); + AntarchyItemTag.update(stack, tag -> tag.putString(MOON_SIDE_TAG, side.name())); } private PortalGunPortalEntity.PortalSide getLastSide(ItemStack stack) { @@ -443,24 +667,85 @@ public class PortalGunItem extends Item implements GeoItem { } private boolean isMoonSideArmed(ItemStack stack, PortalGunPortalEntity.PortalSide side) { + return side == getMoonSide(stack); + } + + public static PortalGunPortalEntity.PortalSide getMoonSide(ItemStack stack) { net.minecraft.nbt.CompoundTag customData = stack.getTag(); if (customData == null) { - return false; + return null; } String sideName = customData.getString(MOON_SIDE_TAG); - return side.name().equals(sideName); + for (PortalGunPortalEntity.PortalSide side : PortalGunPortalEntity.PortalSide.values()) { + if (side.name().equals(sideName)) { + return side; + } + } + return null; + } + + public static UUID getGunId(ItemStack stack) { + net.minecraft.nbt.CompoundTag customData = stack.getTag(); + if (customData == null || !customData.hasUUID(GUN_ID_TAG)) { + return null; + } + return customData.getUUID(GUN_ID_TAG); } private UUID ensureGunId(ItemStack stack) { net.minecraft.nbt.CompoundTag customData = stack.getTag(); + UUID gunId; if (customData != null && customData.hasUUID(GUN_ID_TAG)) { - return customData.getUUID(GUN_ID_TAG); + gunId = customData.getUUID(GUN_ID_TAG); + } else { + gunId = UUID.randomUUID(); } - UUID gunId = UUID.randomUUID(); - stack.getOrCreateTag().putUUID(GUN_ID_TAG, gunId); + AntarchyItemTag.update(stack, tag -> { + tag.putUUID(GUN_ID_TAG, gunId); + if (!tag.contains(LAST_SIDE_TAG)) { + tag.putString(LAST_SIDE_TAG, PortalGunPortalEntity.PortalSide.BLUE.name()); + } + }); return gunId; } + private UUID ensureGunId(ItemStack stack, UUID ownerId) { + UUID gunId = this.ensureGunId(stack); + AntarchyItemTag.update(stack, tag -> { + if (!tag.contains(OWNER_ID_TAG)) { + tag.putString(OWNER_ID_TAG, ownerId.toString()); + } + }); + return gunId; + } + + public static UUID ensureGunIdentity(ItemStack stack) { + if (stack.isEmpty() || !(stack.getItem() instanceof PortalGunItem item)) { + return null; + } + return item.ensureGunId(stack); + } + + public static UUID ensureGunIdentity(ItemStack stack, Player owner) { + if (stack.isEmpty() || !(stack.getItem() instanceof PortalGunItem item)) { + return null; + } + return item.ensureGunId(stack, owner.getUUID()); + } + + public static UUID getPortalOwnerId(ItemStack stack, UUID fallback) { + net.minecraft.nbt.CompoundTag customData = stack.getTag(); + if (customData == null) { + return fallback; + } + String owner = customData.getString(OWNER_ID_TAG); + try { + return owner.isEmpty() ? fallback : UUID.fromString(owner); + } catch (IllegalArgumentException ignored) { + return fallback; + } + } + private boolean matchesGunId(ItemStack stack, UUID gunId) { if (stack.isEmpty() || stack.getItem() != this) { return false; @@ -479,10 +764,15 @@ public class PortalGunItem extends Item implements GeoItem { return UseAnim.NONE; } + private Component portalColorName(PortalGunPortalEntity.PortalSide side) { + return Component.translatable(this.variant.colorTranslationKey(side)) + .withStyle(style -> style.withColor(net.minecraft.network.chat.TextColor.fromRgb(this.variant.color(side)))); + } + @Override - public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { - tooltipComponents.add(Component.translatable("tooltip.antarchy.portal_gun.primary").withStyle(ChatFormatting.GRAY)); - tooltipComponents.add(Component.translatable("tooltip.antarchy.portal_gun.secondary").withStyle(ChatFormatting.GRAY)); + public void appendHoverText(ItemStack stack, @Nullable Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + tooltipComponents.add(Component.translatable("tooltip.antarchy.portal_gun.primary", this.portalColorName(PortalGunPortalEntity.PortalSide.BLUE)).withStyle(ChatFormatting.GRAY)); + tooltipComponents.add(Component.translatable("tooltip.antarchy.portal_gun.secondary", this.portalColorName(PortalGunPortalEntity.PortalSide.ORANGE)).withStyle(ChatFormatting.GRAY)); tooltipComponents.add(Component.translatable("tooltip.antarchy.portal_gun.reset").withStyle(ChatFormatting.DARK_GRAY)); } @@ -503,25 +793,28 @@ public class PortalGunItem extends Item implements GeoItem { return this.geoCache; } - public void createGeoRenderer(Consumer consumer) { - consumer.accept(new GeoRenderProvider() { + public void createRenderer(Consumer consumer) { + consumer.accept(new com.craisinlord.antarchy.content.client.AntarchyGeoItemRenderer() { private AnimatedHeldItemRenderer renderer; @Override - public net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer getGeoItemRenderer() { + public net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer getCustomRenderer() { if (this.renderer == null) { - this.renderer = new AnimatedHeldItemRenderer<>(new ResourceBackedGeoItemModel<>(MODEL_LOCATION, TEXTURE_LOCATION, ANIMATION_LOCATION)); + this.renderer = new AnimatedHeldItemRenderer<>(new ResourceBackedGeoItemModel<>(MODEL_LOCATION, PortalGunItem.this.variant.modelTexture(), ANIMATION_LOCATION)); } return this.renderer; } }); } - public void createRenderer(Consumer consumer) { - createGeoRenderer(provider -> consumer.accept(provider.getGeoItemRenderer())); - } + private final java.util.function.Supplier renderProvider = com.google.common.base.Suppliers.memoize(() -> { + Object[] holder = new Object[1]; + createRenderer(o -> holder[0] = o); + return holder[0]; + }); + @Override public java.util.function.Supplier getRenderProvider() { - return () -> { final Object[] value = new Object[1]; createGeoRenderer(provider -> value[0] = provider.getGeoItemRenderer()); return value[0]; }; + return this.renderProvider; } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/PrimordialArmorItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/PrimordialArmorItem.java index 607085ea..2377701a 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/PrimordialArmorItem.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/PrimordialArmorItem.java @@ -4,9 +4,9 @@ import com.google.common.collect.ImmutableMultimap; import java.util.List; import java.util.Locale; import java.util.UUID; +import com.craisinlord.antarchy.compat.item.ArmorDurability; import com.craisinlord.antarchy.config.AntarchySettings; import net.minecraft.ChatFormatting; -import net.minecraft.core.Holder; import net.minecraft.network.chat.Component; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffects; @@ -22,12 +22,14 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.level.Level; +import org.jetbrains.annotations.Nullable; public class PrimordialArmorItem extends ArmorItem { + private static final int BASE_DURABILITY_MULTIPLIER = 33; private final Type armorType; public PrimordialArmorItem(ArmorMaterial material, Type type, Properties properties) { - super(material, type, properties.stacksTo(1).durability(resolveDurability(type))); + super(material, type, properties.durability(resolveDurability(type))); this.armorType = type; } @@ -110,7 +112,7 @@ public class PrimordialArmorItem extends ArmorItem { } @Override - public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + public void appendHoverText(ItemStack stack, @Nullable Level level, List tooltipComponents, TooltipFlag tooltipFlag) { if (this.armorType == Type.HELMET) { tooltipComponents.add(Component.translatable("tooltip.antarchy.primordial_helmet_water_breathing").withStyle(ChatFormatting.AQUA)); } @@ -148,10 +150,10 @@ public class PrimordialArmorItem extends ArmorItem { private static int resolveDurability(Type armorType) { return switch (armorType) { - case HELMET -> 407; - case CHESTPLATE -> 592; - case LEGGINGS -> 555; - case BOOTS -> 481; + case HELMET -> ArmorDurability.forType(Type.HELMET, BASE_DURABILITY_MULTIPLIER); + case CHESTPLATE -> ArmorDurability.forType(Type.CHESTPLATE, BASE_DURABILITY_MULTIPLIER); + case LEGGINGS -> ArmorDurability.forType(Type.LEGGINGS, BASE_DURABILITY_MULTIPLIER); + case BOOTS -> ArmorDurability.forType(Type.BOOTS, BASE_DURABILITY_MULTIPLIER); }; } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RainbowSugarItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RainbowSugarItem.java index 3d896651..794159a1 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RainbowSugarItem.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RainbowSugarItem.java @@ -33,9 +33,14 @@ public class RainbowSugarItem extends Item { if (!level.isClientSide && livingEntity instanceof ServerPlayer serverPlayer && isInInfinityDimension(serverPlayer.serverLevel())) { ServerLevel returnLevel = AntTeleportHelper.resolveReturnDestinationLevel(serverPlayer); - var returnPos = AntTeleportHelper.getDestinationPosition(serverPlayer, returnLevel); - serverPlayer.teleportTo(returnLevel, returnPos.x, returnPos.y, returnPos.z, serverPlayer.getYRot(), serverPlayer.getXRot()); - serverPlayer.playSound(SoundEvents.ENDERMAN_TELEPORT, 1.0F, 1.0F); + AntTeleportHelper.prepareArrival(serverPlayer, returnLevel, returnPos -> { + if (returnPos == null) { + serverPlayer.displayClientMessage(Component.translatable("message.antarchy.teleport_arrival_failed"), true); + } else { + serverPlayer.teleportTo(returnLevel, returnPos.x, returnPos.y, returnPos.z, serverPlayer.getYRot(), serverPlayer.getXRot()); + serverPlayer.playSound(SoundEvents.ENDERMAN_TELEPORT, 1.0F, 1.0F); + } + }); } return result; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalAssailantArmorItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalAssailantArmorItem.java index feb5cdf6..812225b4 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalAssailantArmorItem.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalAssailantArmorItem.java @@ -1,33 +1,36 @@ package com.craisinlord.antarchy.content.item; -import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.compat.item.ArmorDurability; import com.craisinlord.antarchy.content.item.royal.RoyalGearHelper; +import com.google.common.collect.ImmutableMultimap; +import com.google.common.collect.Multimap; import java.util.List; +import java.util.UUID; import net.minecraft.ChatFormatting; -import net.minecraft.core.Holder; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ArmorItem; import net.minecraft.world.item.ArmorMaterial; -import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.level.Level; +import org.jetbrains.annotations.Nullable; public class RoyalAssailantArmorItem extends ArmorItem { private final Type armorType; public RoyalAssailantArmorItem(ArmorMaterial material, Type type, Properties properties) { - super(material, type, properties.stacksTo(1)); + super(material, type, properties.durability(ArmorDurability.forType(type, AntarchySettings.royalArmorDurabilityMultiplier()))); this.armorType = type; } @@ -60,8 +63,29 @@ public class RoyalAssailantArmorItem extends ArmorItem { } @Override - public com.google.common.collect.Multimap getDefaultAttributeModifiers(EquipmentSlot slot) { - return super.getDefaultAttributeModifiers(slot); + public Multimap getDefaultAttributeModifiers(EquipmentSlot slot) { + if (slot != this.armorType.getSlot()) { + return super.getDefaultAttributeModifiers(slot); + } + String prefix = "royal_assailant_" + this.armorType.getName(); + ImmutableMultimap.Builder builder = ImmutableMultimap.builder(); + builder.put(Attributes.ARMOR, + new AttributeModifier(UUID.nameUUIDFromBytes((prefix + "_armor").getBytes()), prefix + "_armor", getDefense(), AttributeModifier.Operation.ADDITION)); + builder.put(Attributes.ARMOR_TOUGHNESS, + new AttributeModifier(UUID.nameUUIDFromBytes((prefix + "_armor_toughness").getBytes()), prefix + "_armor_toughness", getToughness(), AttributeModifier.Operation.ADDITION)); + + float knockbackResistance = (float) AntarchySettings.royalAssailantArmorKnockbackResistance(); + if (knockbackResistance > 0.0F) { + builder.put(Attributes.KNOCKBACK_RESISTANCE, + new AttributeModifier(UUID.nameUUIDFromBytes((prefix + "_knockback_resistance").getBytes()), prefix + "_knockback_resistance", knockbackResistance, AttributeModifier.Operation.ADDITION)); + } + + double doubleDamageChance = getDoubleDamageChance(); + if (doubleDamageChance > 0.0) { + builder.put(AntarchyObjects.DOUBLE_DAMAGE_CHANCE.get().value(), + new AttributeModifier(UUID.nameUUIDFromBytes((prefix + "_double_damage_chance").getBytes()), prefix + "_double_damage_chance", doubleDamageChance, AttributeModifier.Operation.ADDITION)); + } + return builder.build(); } @Override @@ -94,15 +118,12 @@ public class RoyalAssailantArmorItem extends ArmorItem { } @Override - public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + public void appendHoverText(ItemStack stack, @Nullable Level level, List tooltipComponents, TooltipFlag tooltipFlag) { int pct = (int) Math.round(getDoubleDamageChance() * 100); tooltipComponents.add(Component.translatable("tooltip.antarchy.nightmare_armor_double_damage", pct).withStyle(ChatFormatting.LIGHT_PURPLE)); if (this.armorType == Type.CHESTPLATE) { tooltipComponents.add(Component.translatable("tooltip.antarchy.royal_assailant_chestplate.invert").withStyle(ChatFormatting.AQUA)); } - if (this.armorType == Type.BOOTS) { - tooltipComponents.add(Component.translatable("tooltip.antarchy.royal_assailant_boots.fall").withStyle(ChatFormatting.AQUA)); - } super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); } @@ -117,18 +138,8 @@ public class RoyalAssailantArmorItem extends ArmorItem { } MobEffectInstance existing = player.getEffect(AntarchyObjects.INVERTED_EFFECT.get()); if (existing != null && existing.isInfiniteDuration()) { - Antarchy.LOGGER.info( - "[antarchy-gravity] royal chestplate toggling inversion off player={} uuid={} pos=({}, {}, {}) dim={} existingDuration={} gameTime={}", - player.getGameProfile().getName(), player.getUUID(), player.getX(), player.getY(), player.getZ(), - player.level().dimension().location(), existing.getDuration(), player.level().getGameTime() - ); player.removeEffect(AntarchyObjects.INVERTED_EFFECT.get()); } else { - Antarchy.LOGGER.info( - "[antarchy-gravity] royal chestplate toggling inversion on player={} uuid={} pos=({}, {}, {}) dim={} existingDuration={} gameTime={}", - player.getGameProfile().getName(), player.getUUID(), player.getX(), player.getY(), player.getZ(), - player.level().dimension().location(), existing != null ? existing.getDuration() : -1, player.level().getGameTime() - ); player.addEffect(new MobEffectInstance(AntarchyObjects.INVERTED_EFFECT.get(), -1, 0, false, false, true)); } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalAssailantBattleAxeItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalAssailantBattleAxeItem.java index 1f899596..00dc0787 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalAssailantBattleAxeItem.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalAssailantBattleAxeItem.java @@ -24,6 +24,8 @@ import net.minecraft.world.level.Level; public class RoyalAssailantBattleAxeItem extends AxeItem { private static final int BLACK_HOLE_COOLDOWN_TICKS = 20 * 20; private static final int DILATED_DURATION_TICKS = 100; + private static final net.minecraft.resources.ResourceLocation REACH_MODIFIER_ID = new net.minecraft.resources.ResourceLocation("antarchy", "royal_assailant_battleaxe_reach"); + private static final net.minecraft.resources.ResourceLocation KNOCKBACK_MODIFIER_ID = new net.minecraft.resources.ResourceLocation("antarchy", "royal_assailant_battleaxe_knockback"); private final Tier tier; public RoyalAssailantBattleAxeItem(Tier tier, Item.Properties properties) { @@ -31,6 +33,18 @@ public class RoyalAssailantBattleAxeItem extends AxeItem { this.tier = tier; } + @Override + public com.google.common.collect.Multimap getDefaultAttributeModifiers(net.minecraft.world.entity.EquipmentSlot slot) { + if (slot != net.minecraft.world.entity.EquipmentSlot.MAINHAND) { + return super.getDefaultAttributeModifiers(slot); + } + com.google.common.collect.ImmutableMultimap.Builder builder = + com.craisinlord.antarchy.compat.item.WeaponAttributes.base(this.tier, (float) AntarchySettings.royalAssailantBattleAxeAttackDamage(), (float) AntarchySettings.royalAssailantBattleAxeAttackSpeed()); + com.craisinlord.antarchy.compat.entity.EntityReach.addModifier(builder, REACH_MODIFIER_ID, AntarchySettings.royalWeaponAttackReachBonus()); + com.craisinlord.antarchy.compat.item.WeaponAttributes.add(builder, net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_KNOCKBACK, KNOCKBACK_MODIFIER_ID, AntarchySettings.royalWeaponAttackKnockbackBonus() + 1.0D); + return builder.build(); + } + @Override public boolean isEnchantable(ItemStack stack) { return stack.getCount() == 1; @@ -62,7 +76,7 @@ public class RoyalAssailantBattleAxeItem extends AxeItem { if (level instanceof ServerLevel serverLevel) { RoyalAssailantBlackHoleEntity blackHole = RoyalAssailantBlackHoleEntity.create( serverLevel, - player.position().add(player.getLookAngle().normalize().scale(2.0D)), + player.position().add(player.getLookAngle().normalize().scale(2.0D)).add(0.0D, 2.0D, 0.0D), player.getUUID()); serverLevel.addFreshEntity(blackHole); player.getCooldowns().addCooldown(this, BLACK_HOLE_COOLDOWN_TICKS); diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalBoatOnlyItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalBoatOnlyItem.java index 2ad9ae00..7ab8cf87 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalBoatOnlyItem.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalBoatOnlyItem.java @@ -10,9 +10,13 @@ import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; public class RoyalBoatOnlyItem extends OuranwoodBoatItem { - private final EntityType entityType; + private final java.util.function.Supplier> entityType; public RoyalBoatOnlyItem(EntityType entityType, Properties properties) { + this(() -> entityType, properties); + } + + public RoyalBoatOnlyItem(java.util.function.Supplier> entityType, Properties properties) { super(properties); this.entityType = entityType; } @@ -20,7 +24,7 @@ public class RoyalBoatOnlyItem extends OuranwoodBoatItem { @Override protected Boat createBoat(Level level, HitResult hitResult, ItemStack stack, Player player) { Vec3 pos = hitResult.getLocation(); - RoyalBoatEntity boat = new RoyalBoatEntity(this.entityType, level); + RoyalBoatEntity boat = new RoyalBoatEntity(this.entityType.get(), level); boat.setPos(pos.x, pos.y, pos.z); boat.xo = pos.x; boat.yo = pos.y; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalChestBoatItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalChestBoatItem.java index e22aac82..0d3c7a37 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalChestBoatItem.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalChestBoatItem.java @@ -10,9 +10,13 @@ import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; public class RoyalChestBoatItem extends OuranwoodBoatItem { - private final EntityType entityType; + private final java.util.function.Supplier> entityType; public RoyalChestBoatItem(EntityType entityType, Properties properties) { + this(() -> entityType, properties); + } + + public RoyalChestBoatItem(java.util.function.Supplier> entityType, Properties properties) { super(properties); this.entityType = entityType; } @@ -20,7 +24,7 @@ public class RoyalChestBoatItem extends OuranwoodBoatItem { @Override protected Boat createBoat(Level level, HitResult hitResult, ItemStack stack, Player player) { Vec3 pos = hitResult.getLocation(); - RoyalChestBoatEntity boat = new RoyalChestBoatEntity(this.entityType, level); + RoyalChestBoatEntity boat = new RoyalChestBoatEntity(this.entityType.get(), level); boat.setPos(pos.x, pos.y, pos.z); boat.xo = pos.x; boat.yo = pos.y; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalGuardianArmorItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalGuardianArmorItem.java index 58ad0afa..98b6714a 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalGuardianArmorItem.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalGuardianArmorItem.java @@ -1,22 +1,32 @@ package com.craisinlord.antarchy.content.item; import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.compat.item.ArmorDurability; import com.craisinlord.antarchy.content.item.royal.RoyalGearHelper; -import net.minecraft.world.entity.EquipmentSlot; +import com.google.common.collect.ImmutableMultimap; +import com.google.common.collect.Multimap; +import java.util.List; +import java.util.UUID; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ArmorItem; import net.minecraft.world.item.ArmorMaterial; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.level.Level; +import org.jetbrains.annotations.Nullable; public class RoyalGuardianArmorItem extends ArmorItem { private final Type armorType; public RoyalGuardianArmorItem(ArmorMaterial material, Type type, Properties properties) { - super(material, type, properties.stacksTo(1)); + super(material, type, properties.durability(ArmorDurability.forType(type, AntarchySettings.royalArmorDurabilityMultiplier()))); this.armorType = type; } @@ -39,9 +49,59 @@ public class RoyalGuardianArmorItem extends ArmorItem { return (float) AntarchySettings.royalGuardianArmorToughness(); } + public static double judgmentDamageMultiplier(Player player) { + double bonus = 0.0D; + if (player.getItemBySlot(EquipmentSlot.HEAD).getItem() instanceof RoyalGuardianArmorItem) bonus += AntarchySettings.royalGuardianHelmetJudgmentBonus(); + if (player.getItemBySlot(EquipmentSlot.CHEST).getItem() instanceof RoyalGuardianArmorItem) bonus += AntarchySettings.royalGuardianChestplateJudgmentBonus(); + if (player.getItemBySlot(EquipmentSlot.LEGS).getItem() instanceof RoyalGuardianArmorItem) bonus += AntarchySettings.royalGuardianLeggingsJudgmentBonus(); + if (player.getItemBySlot(EquipmentSlot.FEET).getItem() instanceof RoyalGuardianArmorItem) bonus += AntarchySettings.royalGuardianBootsJudgmentBonus(); + return 1.0D + bonus; + } + + private double judgmentBonus() { + return switch (this.armorType) { + case HELMET -> AntarchySettings.royalGuardianHelmetJudgmentBonus(); + case CHESTPLATE -> AntarchySettings.royalGuardianChestplateJudgmentBonus(); + case LEGGINGS -> AntarchySettings.royalGuardianLeggingsJudgmentBonus(); + case BOOTS -> AntarchySettings.royalGuardianBootsJudgmentBonus(); + }; + } + @Override - public com.google.common.collect.Multimap getDefaultAttributeModifiers(EquipmentSlot slot) { - return super.getDefaultAttributeModifiers(slot); + public void appendHoverText(ItemStack stack, @Nullable Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + String slotName = switch (this.armorType) { + case HELMET -> "helmet"; + case CHESTPLATE -> "chestplate"; + case LEGGINGS -> "leggings"; + case BOOTS -> "boots"; + }; + tooltipComponents.add(Component.translatable("tooltip.antarchy.royal_guardian_" + slotName + ".judgment", + Math.round(judgmentBonus() * 100.0D)).withStyle(ChatFormatting.LIGHT_PURPLE)); + if (this.armorType == Type.CHESTPLATE) { + tooltipComponents.add(Component.translatable("tooltip.antarchy.royal_guardian_chestplate.boundary") + .withStyle(ChatFormatting.AQUA)); + } + super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); + } + + @Override + public Multimap getDefaultAttributeModifiers(EquipmentSlot slot) { + if (slot != this.armorType.getSlot()) { + return super.getDefaultAttributeModifiers(slot); + } + String prefix = "royal_guardian_" + this.armorType.getName(); + ImmutableMultimap.Builder builder = ImmutableMultimap.builder(); + builder.put(Attributes.ARMOR, + new AttributeModifier(UUID.nameUUIDFromBytes((prefix + "_armor").getBytes()), prefix + "_armor", getDefense(), AttributeModifier.Operation.ADDITION)); + builder.put(Attributes.ARMOR_TOUGHNESS, + new AttributeModifier(UUID.nameUUIDFromBytes((prefix + "_armor_toughness").getBytes()), prefix + "_armor_toughness", getToughness(), AttributeModifier.Operation.ADDITION)); + + float knockbackResistance = (float) AntarchySettings.royalGuardianArmorKnockbackResistance(); + if (knockbackResistance > 0.0F) { + builder.put(Attributes.KNOCKBACK_RESISTANCE, + new AttributeModifier(UUID.nameUUIDFromBytes((prefix + "_knockback_resistance").getBytes()), prefix + "_knockback_resistance", knockbackResistance, AttributeModifier.Operation.ADDITION)); + } + return builder.build(); } @Override diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalGuardianShieldItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalGuardianShieldItem.java index 20bc8a00..ef429975 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalGuardianShieldItem.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalGuardianShieldItem.java @@ -2,16 +2,25 @@ package com.craisinlord.antarchy.content.item; import com.craisinlord.antarchy.content.effect.RoyalEffectEligibility; import com.craisinlord.antarchy.content.effect.RoyalEffectHooks; +import com.craisinlord.antarchy.content.effect.CommandedEntityAccess; +import com.craisinlord.antarchy.content.effect.CommandedBehavior; import com.craisinlord.antarchy.config.AntarchySettings; import java.util.List; +import java.util.Set; +import java.util.HashSet; import java.util.Comparator; +import java.util.UUID; +import java.util.stream.StreamSupport; import java.util.function.Supplier; -import net.minecraft.core.Holder; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResultHolder; import net.minecraft.world.effect.MobEffect; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.entity.Mob; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.core.particles.ParticleTypes; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; @@ -22,11 +31,9 @@ import net.minecraft.ChatFormatting; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.level.Level; import net.minecraft.world.phys.AABB; +import org.jetbrains.annotations.Nullable; public class RoyalGuardianShieldItem extends ShieldItem { - private static final int COMMAND_COOLDOWN_TICKS = 20 * 15; - private static final int COMMAND_DURATION_TICKS = 20 * 30; - private static final double COMMAND_RANGE = 16.0D; private final Supplier repairIngredient; public RoyalGuardianShieldItem(Item.Properties properties, Supplier repairIngredient) { @@ -45,15 +52,18 @@ public class RoyalGuardianShieldItem extends ShieldItem { } @Override - public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + public void appendHoverText(ItemStack stack, @Nullable Level level, List tooltipComponents, TooltipFlag tooltipFlag) { tooltipComponents.add(Component.translatable("tooltip.antarchy.royal_guardian_shield.command") - .withStyle(ChatFormatting.GOLD)); + .withStyle(ChatFormatting.AQUA)); super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); } @Override public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { ItemStack stack = player.getItemInHand(hand); + if (!player.isShiftKeyDown()) { + return super.use(level, player, hand); + } if (player.getCooldowns().isOnCooldown(this)) { return InteractionResultHolder.fail(stack); } @@ -64,16 +74,54 @@ public class RoyalGuardianShieldItem extends ShieldItem { if (commanded == null) { return InteractionResultHolder.fail(stack); } - Mob target = level.getEntitiesOfClass(Mob.class, - new AABB(player.blockPosition()).inflate(COMMAND_RANGE), - mob -> RoyalEffectEligibility.canApplyCommanded(mob)) - .stream() - .min(Comparator.comparingDouble((Mob mob) -> player.distanceToSqr(mob)).thenComparingInt(Mob::getId)) - .orElse(null); - if (target == null || !target.addEffect(new MobEffectInstance(commanded, COMMAND_DURATION_TICKS), player)) { + if (!(level instanceof ServerLevel serverLevel)) { return InteractionResultHolder.fail(stack); } - player.getCooldowns().addCooldown(this, COMMAND_COOLDOWN_TICKS); + int rosterSize = Math.max(0, AntarchySettings.royalGuardianMusterMobCap()); + int duration = Math.max(1, AntarchySettings.royalGuardianMusterDurationTicks()); + if (rosterSize == 0) return InteractionResultHolder.fail(stack); + + Set rosterIds = new HashSet<>(); + List existingRoster = StreamSupport.stream(serverLevel.getAllEntities().spliterator(), false) + .filter(Mob.class::isInstance).map(Mob.class::cast) + .filter(mob -> mob.hasEffect(commanded) && mob instanceof CommandedEntityAccess access + && access.antarchy$isRoyalInvested() && player.getUUID().equals(access.antarchy$getCommanderUuid())) + .sorted(Comparator.comparingDouble((Mob mob) -> player.distanceToSqr(mob)).thenComparingInt(Mob::getId)) + .limit(rosterSize).toList(); + for (Mob mob : existingRoster) { + rosterIds.add(mob.getUUID()); + mob.addEffect(new MobEffectInstance(commanded, duration), player); + } + + int slotsRemaining = rosterSize - existingRoster.size(); + int recruited = 0; + List candidates = level.getEntitiesOfClass(Mob.class, + new AABB(player.blockPosition()).inflate(Math.max(0.0D, AntarchySettings.royalGuardianMusterRange())), + mob -> !rosterIds.contains(mob.getUUID()) && RoyalEffectEligibility.canApplyCommanded(mob)) + .stream() + .sorted(Comparator.comparing((Mob mob) -> !isInCommandLookCone(player, mob)) + .thenComparingDouble(player::distanceToSqr).thenComparingInt(Mob::getId)) + .toList(); + for (Mob target : candidates) { + if (recruited >= slotsRemaining) break; + if (!target.addEffect(new MobEffectInstance(commanded, duration), player)) continue; + CommandedEntityAccess access = (CommandedEntityAccess) target; + access.antarchy$setRoyalInvested(true); + CommandedBehavior.syncInvestiture(target, true); + rosterIds.add(target.getUUID()); + recruited++; + } + if (existingRoster.isEmpty() && recruited == 0) { + return InteractionResultHolder.fail(stack); + } + player.getCooldowns().addCooldown(this, Math.max(0, AntarchySettings.royalGuardianMusterCooldownTicks())); + serverLevel.playSound(null, player.blockPosition(), SoundEvents.ILLUSIONER_CAST_SPELL, SoundSource.PLAYERS, 1.0F, 0.75F); + serverLevel.sendParticles(ParticleTypes.ENCHANT, player.getX(), player.getY() + 1.0D, player.getZ(), 32, 1.0D, 0.7D, 1.0D, 0.2D); return InteractionResultHolder.success(stack); } + + private static boolean isInCommandLookCone(Player player, Mob mob) { + var direction = mob.getBoundingBox().getCenter().subtract(player.getEyePosition()).normalize(); + return player.getViewVector(1.0F).dot(direction) >= 0.9063078D; + } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalGuardianSwordAbilities.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalGuardianSwordAbilities.java new file mode 100644 index 00000000..3da656fe --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalGuardianSwordAbilities.java @@ -0,0 +1,224 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.anthology.shake.CameraShakeSync; +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.effect.CommandedEntityAccess; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.antarchy.content.entity.royal.RoyalIceSpikeEntity; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; +import net.minecraft.core.BlockPos; +import net.minecraft.core.particles.DustParticleOptions; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.MobCategory; +import net.minecraft.world.entity.OwnableEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.entity.LightningBolt; +import net.minecraft.world.level.GameRules; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import org.joml.Vector3f; + +public final class RoyalGuardianSwordAbilities { + private static final ThreadLocal SECONDARY_DAMAGE_DEPTH = ThreadLocal.withInitial(() -> 0); + private static final ThreadLocal MELEE_ATTACK = new ThreadLocal<>(); + private static final DustParticleOptions FIRE_GOLD = new DustParticleOptions(new Vector3f(1.0F, 0.55F, 0.08F), 1.6F); + private static final float FIRE_SHAKE_INTENSITY = 0.3F; + private static final int FIRE_SHAKE_DURATION = 7; + private static final float FIRE_SHAKE_RADIUS = 14.0F; + private static final DustParticleOptions STORM_GOLD = new DustParticleOptions(new Vector3f(1.0F, 0.86F, 0.25F), 1.25F); + + private RoyalGuardianSwordAbilities() { + } + + public static boolean isApplyingSecondaryDamage() { + return SECONDARY_DAMAGE_DEPTH.get() > 0; + } + + public static void beginMeleeAttack(Player player, Entity target) { + boolean charged = player.getMainHandItem().getItem() instanceof RoyalGuardianSwordItem + && player.getAttackStrengthScale(0.5F) >= 0.9F; + MELEE_ATTACK.set(new MeleeAttackContext(player.getUUID(), target.getUUID(), charged)); + } + + public static boolean isChargedMeleeAttack(Player player, LivingEntity target) { + MeleeAttackContext context = MELEE_ATTACK.get(); + return context != null && context.charged && context.playerId.equals(player.getUUID()) + && context.targetId.equals(target.getUUID()); + } + + public static void endMeleeAttack(Player player) { + MeleeAttackContext context = MELEE_ATTACK.get(); + if (context != null && context.playerId.equals(player.getUUID())) MELEE_ATTACK.remove(); + } + + public static boolean applySecondaryDamage(Player owner, LivingEntity target, float amount) { + if (amount <= 0.0F || !canDamageTarget(owner, target, false)) return false; + int depth = SECONDARY_DAMAGE_DEPTH.get(); + SECONDARY_DAMAGE_DEPTH.set(depth + 1); + try { + return target.hurt(owner.damageSources().playerAttack(owner), amount); + } finally { + if (depth == 0) SECONDARY_DAMAGE_DEPTH.remove(); + else SECONDARY_DAMAGE_DEPTH.set(depth); + } + } + + public static void discharge(Player owner, LivingEntity primary, ItemStack swordStack) { + if (!(owner.level() instanceof ServerLevel level) || !canDamageTarget(owner, primary, true) + || !(swordStack.getItem() instanceof RoyalGuardianSwordItem) + || !RoyalGuardianSwordItem.isDischargeReady(swordStack, level.getGameTime())) return; + + RoyalGuardianSwordItem.Mode mode = RoyalGuardianSwordItem.getMode(swordStack); + if (mode == RoyalGuardianSwordItem.Mode.NONE) return; + + switch (mode) { + case FIRE -> fireImpact(level, owner, primary); + case FROST -> frostFan(level, owner, primary); + case STORM -> chainLightning(level, owner, primary); + case NONE -> { + } + } + RoyalGuardianSwordItem.startDischargeCooldown(swordStack, level.getGameTime()); + } + + private static void fireImpact(ServerLevel level, Player owner, LivingEntity primary) { + Vec3 center = primary.position().add(0.0D, primary.getBbHeight() * 0.5D, 0.0D); + applySecondaryDamage(owner, primary, (float) AntarchySettings.royalGuardianSwordFirePrimaryDamage()); + if (primary.isAlive()) primary.setRemainingFireTicks(Math.max(primary.getRemainingFireTicks(), 100)); + for (LivingEntity target : level.getEntitiesOfClass(LivingEntity.class, new AABB(center, center).inflate(4.0D), + candidate -> candidate != primary && canDamageTarget(owner, candidate, false))) { + double distance = Math.sqrt(target.distanceToSqr(center)); + float falloff = (float) Math.max(0.25D, 1.0D - distance / 5.0D); + applySecondaryDamage(owner, target, (float) AntarchySettings.royalGuardianSwordFireSplashDamage() * falloff); + target.setRemainingFireTicks(Math.max(target.getRemainingFireTicks(), 80)); + } + if (level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) placeBoundedFire(level, center, 6); + level.sendParticles(ParticleTypes.FLAME, center.x, center.y, center.z, 55, 1.4D, 1.0D, 1.4D, 0.1D); + level.sendParticles(FIRE_GOLD, center.x, center.y, center.z, 28, 1.1D, 0.8D, 1.1D, 0.04D); + level.sendParticles(ParticleTypes.EXPLOSION, center.x, center.y, center.z, 3, 0.8D, 0.6D, 0.8D, 0.0D); + level.playSound(null, BlockPos.containing(center), SoundEvents.GENERIC_EXPLODE, SoundSource.PLAYERS, 1.0F, 1.05F); + CameraShakeSync.sendNearby(level, center, FIRE_SHAKE_INTENSITY, FIRE_SHAKE_DURATION, FIRE_SHAKE_RADIUS); + } + + private static void placeBoundedFire(ServerLevel level, Vec3 center, int cap) { + int placed = 0; + BlockPos base = BlockPos.containing(center); + for (BlockPos pos : BlockPos.betweenClosed(base.offset(-2, -1, -2), base.offset(2, 2, 2))) { + if (placed >= cap) return; + if (pos.distToCenterSqr(center.x, center.y, center.z) > 7.0D || !level.isEmptyBlock(pos)) continue; + BlockPos below = pos.below(); + if (!level.getBlockState(below).isFaceSturdy(level, below, net.minecraft.core.Direction.UP)) continue; + BlockState fire = Blocks.FIRE.defaultBlockState(); + if (fire.canSurvive(level, pos) && level.setBlockAndUpdate(pos, fire)) placed++; + } + } + + private static void frostFan(ServerLevel level, Player owner, LivingEntity primary) { + if (primary.isAlive()) { + primary.setTicksFrozen(Math.min(primary.getTicksRequiredToFreeze(), primary.getTicksFrozen() + 50)); + primary.addEffect(new net.minecraft.world.effect.MobEffectInstance(net.minecraft.world.effect.MobEffects.MOVEMENT_SLOWDOWN, 60, 1), owner); + } + Vec3 forward = primary.position().subtract(owner.position()).multiply(1.0D, 0.0D, 1.0D); + if (forward.lengthSqr() < 1.0E-5D) forward = owner.getLookAngle().multiply(1.0D, 0.0D, 1.0D); + if (forward.lengthSqr() < 1.0E-5D) forward = new Vec3(0.0D, 0.0D, 1.0D); + forward = forward.normalize(); + Vec3 side = new Vec3(-forward.z, 0.0D, forward.x); + for (int distanceStep = 1; distanceStep <= 5; distanceStep++) { + double distance = distanceStep * 4.0D; + for (int lane = -1; lane <= 1; lane++) { + Vec3 point = owner.position().add(forward.scale(distance)) + .add(side.scale(lane * (distanceStep % 2 == 0 ? 2.0D : 0.0D))); + int groundY = level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, + net.minecraft.util.Mth.floor(point.x), net.minecraft.util.Mth.floor(point.z)); + Vec3 spawn = new Vec3(point.x, groundY + 0.1D, point.z); + RoyalIceSpikeEntity spike = RoyalIceSpikeEntity.create(level, spawn, owner, + (float) AntarchySettings.royalGuardianSwordFrostSpikeDamage(), 2.2D, 100, 0, 0); + level.addFreshEntity(spike); + } + } + Vec3 center = primary.position().add(0.0D, 0.8D, 0.0D); + level.sendParticles(ParticleTypes.SNOWFLAKE, center.x, center.y, center.z, 70, 1.3D, 1.1D, 1.3D, 0.1D); + level.sendParticles(ParticleTypes.SNOWFLAKE, owner.getX(), owner.getY() + 1.0D, owner.getZ(), 18, 0.7D, 0.5D, 0.7D, 0.04D); + level.playSound(null, primary.blockPosition(), AntarchySoundEvents.KING_ICE_SPIKES.get(), SoundSource.PLAYERS, 0.8F, 0.95F); + } + + private static void chainLightning(ServerLevel level, Player owner, LivingEntity primary) { + Set struck = new HashSet<>(); + struck.add(primary.getUUID()); + strikeVisual(level, primary.position().add(0.0D, primary.getBbHeight() * 0.5D, 0.0D)); + applySecondaryDamage(owner, primary, (float) AntarchySettings.royalGuardianSwordStormPrimaryDamage()); + LivingEntity previous = primary; + float damage = (float) AntarchySettings.royalGuardianSwordStormJumpDamage(); + double jumpRange = Math.max(0.0D, AntarchySettings.royalGuardianSwordStormJumpRange()); + for (int jump = 0; jump < Math.max(0, AntarchySettings.royalGuardianSwordStormMaxJumps()); jump++) { + Vec3 origin = previous.position().add(0.0D, previous.getBbHeight() * 0.5D, 0.0D); + LivingEntity next = level.getEntitiesOfClass(LivingEntity.class, new AABB(origin, origin).inflate(jumpRange), + candidate -> !struck.contains(candidate.getUUID()) && canDamageTarget(owner, candidate, false) + && candidate.distanceToSqr(origin) <= jumpRange * jumpRange) + .stream().min(java.util.Comparator.comparingDouble((LivingEntity candidate) -> candidate.distanceToSqr(origin)) + .thenComparingInt(LivingEntity::getId)).orElse(null); + if (next == null) break; + struck.add(next.getUUID()); + Vec3 end = next.position().add(0.0D, next.getBbHeight() * 0.5D, 0.0D); + drawLightning(level, origin, end); + applySecondaryDamage(owner, next, damage); + next.setRemainingFireTicks(Math.max(next.getRemainingFireTicks(), 20)); + previous = next; + damage *= 0.76F; + } + level.playSound(null, primary.blockPosition(), SoundEvents.LIGHTNING_BOLT_THUNDER, SoundSource.PLAYERS, 0.8F, 1.45F); + } + + private static void strikeVisual(ServerLevel level, Vec3 at) { + LightningBolt bolt = new LightningBolt(EntityType.LIGHTNING_BOLT, level); + bolt.moveTo(at.x, at.y, at.z); + bolt.setVisualOnly(true); + level.addFreshEntity(bolt); + level.sendParticles(STORM_GOLD, at.x, at.y, at.z, 20, 0.45D, 0.7D, 0.45D, 0.1D); + } + + private static void drawLightning(ServerLevel level, Vec3 start, Vec3 end) { + LightningBolt bolt = new LightningBolt(EntityType.LIGHTNING_BOLT, level); + bolt.moveTo(end.x, end.y, end.z); + bolt.setVisualOnly(true); + level.addFreshEntity(bolt); + Vec3 direction = end.subtract(start); + double length = direction.length(); + if (length > 0.001D) { + Vec3 step = direction.scale(1.0D / length); + for (double d = 0.0D; d < length; d += 0.35D) { + Vec3 point = start.add(step.scale(d)); + level.sendParticles(ParticleTypes.ELECTRIC_SPARK, point.x, point.y, point.z, 1, 0.025D, 0.025D, 0.025D, 0.0D); + level.sendParticles(STORM_GOLD, point.x, point.y, point.z, 1, 0.025D, 0.025D, 0.025D, 0.0D); + } + } + level.sendParticles(ParticleTypes.ELECTRIC_SPARK, end.x, end.y, end.z, 18, 0.25D, 0.4D, 0.25D, 0.08D); + } + + public static boolean canDamageTarget(Player owner, LivingEntity target, boolean primary) { + if (target == null || target == owner || (!primary && !target.isAlive())) return false; + if (target.isAlliedTo(owner) || owner.isAlliedTo(target)) return false; + if (target instanceof OwnableEntity ownable && owner.getUUID().equals(ownable.getOwnerUUID())) return false; + if (target instanceof CommandedEntityAccess access && owner.getUUID().equals(access.antarchy$getCommanderUuid())) return false; + if (target instanceof Player other) return owner.canHarmPlayer(other); + if (primary) return true; + return target instanceof Mob mob && (mob.getType().getCategory() == MobCategory.MONSTER + || mob.getTarget() == owner || mob.getLastHurtByMob() == owner); + } + + private record MeleeAttackContext(UUID playerId, UUID targetId, boolean charged) { + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalGuardianSwordItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalGuardianSwordItem.java index 0589360b..caa5c4cf 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalGuardianSwordItem.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalGuardianSwordItem.java @@ -1,37 +1,68 @@ package com.craisinlord.antarchy.content.item; import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.client.AntarchyGeoItem; +import com.craisinlord.antarchy.content.client.AntarchyGeoItemRenderer; import com.craisinlord.antarchy.content.client.model.ResourceBackedGeoItemModel; import com.craisinlord.antarchy.content.client.renderer.AnimatedHeldItemRenderer; +import com.craisinlord.antarchy.content.component.AntarchyItemTag; +import com.google.common.collect.ImmutableMultimap; +import com.google.common.collect.Multimap; +import java.util.List; +import java.util.UUID; import java.util.function.Consumer; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.item.SwordItem; import net.minecraft.world.item.Tier; +import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoItem; -import software.bernie.geckolib.animatable.client.GeoRenderProvider; import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; import software.bernie.geckolib.core.animation.AnimatableManager; import software.bernie.geckolib.util.GeckoLibUtil; -public class RoyalGuardianSwordItem extends SwordItem implements GeoItem { +public class RoyalGuardianSwordItem extends SwordItem implements GeoItem, AntarchyGeoItem { private static final ResourceLocation MODEL_LOCATION = new ResourceLocation("antarchy", "geo/royal_guardian_sword.geo.json"); private static final ResourceLocation TEXTURE_LOCATION = new ResourceLocation("antarchy", "textures/item/royal_guardian/royal_guardian_sword.png"); private static final ResourceLocation ANIMATION_LOCATION = new ResourceLocation("antarchy", "animations/static_item.animation.json"); private static final ResourceLocation REACH_MODIFIER_ID = new ResourceLocation("antarchy", "royal_guardian_sword_reach"); private static final ResourceLocation KNOCKBACK_MODIFIER_ID = new ResourceLocation("antarchy", "royal_guardian_sword_knockback"); + private static final String MODE_TAG = "antarchy.royal_guardian_sword.mode"; + private static final String DISCHARGE_READY_AT_TAG = "antarchy.royal_guardian_sword.discharge_ready_at"; private final Tier tier; private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); public RoyalGuardianSwordItem(Tier tier, Item.Properties properties) { - super(tier, 3, -2.4F, properties); + super(tier, (int) Math.round(AntarchySettings.royalGuardianSwordAttackDamage()), (float) AntarchySettings.royalGuardianSwordAttackSpeed(), properties); this.tier = tier; GeoItem.registerSyncedAnimatable(this); } + @Override + public com.google.common.collect.Multimap getDefaultAttributeModifiers(net.minecraft.world.entity.EquipmentSlot slot) { + if (slot != net.minecraft.world.entity.EquipmentSlot.MAINHAND) { + return super.getDefaultAttributeModifiers(slot); + } + com.google.common.collect.ImmutableMultimap.Builder builder = + com.craisinlord.antarchy.compat.item.WeaponAttributes.base(this.tier, (int) Math.round(AntarchySettings.royalGuardianSwordAttackDamage()), (float) AntarchySettings.royalGuardianSwordAttackSpeed()); + com.craisinlord.antarchy.compat.entity.EntityReach.addModifier(builder, REACH_MODIFIER_ID, AntarchySettings.royalWeaponAttackReachBonus()); + com.craisinlord.antarchy.compat.item.WeaponAttributes.add(builder, net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_KNOCKBACK, KNOCKBACK_MODIFIER_ID, AntarchySettings.royalWeaponAttackKnockbackBonus()); + return builder.build(); + } + @Override public boolean isEnchantable(ItemStack stack) { return stack.getCount() == 1; @@ -42,6 +73,96 @@ public class RoyalGuardianSwordItem extends SwordItem implements GeoItem { return AntarchySettings.royalWeaponEnchantability(); } + @Override + public InteractionResultHolder use(net.minecraft.world.level.Level level, Player player, InteractionHand hand) { + ItemStack stack = player.getItemInHand(hand); + if (!player.isShiftKeyDown()) return InteractionResultHolder.pass(stack); + return InteractionResultHolder.pass(stack); + } + + public boolean tryCycleModeFromInput(net.minecraft.world.level.Level level, Player player, ItemStack stack) { + if (player.getMainHandItem() != stack) return false; + Mode next = getMode(stack).next(); + setMode(stack, next); + if (!level.isClientSide) { + player.displayClientMessage(Component.translatable("message.antarchy.royal_guardian_sword.mode", + Component.translatable(next.translationKey)), true); + level.playSound(null, player.blockPosition(), SoundEvents.AMETHYST_BLOCK_CHIME, SoundSource.PLAYERS, 0.8F, 0.8F + next.ordinal() * 0.2F); + } + return true; + } + + private static void setMode(ItemStack stack, Mode mode) { + AntarchyItemTag.update(stack, tag -> { + if (mode == Mode.NONE) tag.remove(MODE_TAG); + else tag.putInt(MODE_TAG, mode.id); + }); + } + + public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged) { + return slotChanged || !ItemStack.isSameItem(oldStack, newStack); + } + + @Override + public void appendHoverText(ItemStack stack, @Nullable net.minecraft.world.level.Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + Mode mode = getMode(stack); + tooltipComponents.add(Component.translatable("tooltip.antarchy.royal_guardian_sword.mode", + Component.translatable(mode.translationKey)).withStyle(ChatFormatting.GOLD)); + tooltipComponents.add(Component.translatable(mode.tooltipKey).withStyle(ChatFormatting.LIGHT_PURPLE)); + tooltipComponents.add(Component.translatable("tooltip.antarchy.royal_guardian_sword.controls", + AntarchySettings.royalGuardianSwordElementalCooldownTicks() / 20.0D).withStyle(ChatFormatting.DARK_GRAY)); + super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); + } + + public static Mode getMode(ItemStack stack) { + net.minecraft.nbt.CompoundTag tag = AntarchyItemTag.getOrEmpty(stack); + return tag.contains(MODE_TAG) ? Mode.fromId(tag.getInt(MODE_TAG)) : Mode.NONE; + } + + public static boolean isDischargeReady(ItemStack stack, long gameTime) { + return AntarchyItemTag.getOrEmpty(stack).getLong(DISCHARGE_READY_AT_TAG) <= gameTime; + } + + public static void startDischargeCooldown(ItemStack stack, long gameTime) { + AntarchyItemTag.update(stack, tag -> tag.putLong(DISCHARGE_READY_AT_TAG, + gameTime + Math.max(0, AntarchySettings.royalGuardianSwordElementalCooldownTicks()))); + } + + public enum Mode { + NONE(-1, "tooltip.antarchy.royal_guardian_sword.mode.none", "tooltip.antarchy.royal_guardian_sword.none"), + FIRE(0, "tooltip.antarchy.royal_guardian_sword.mode.fire", "tooltip.antarchy.royal_guardian_sword.fire"), + FROST(1, "tooltip.antarchy.royal_guardian_sword.mode.frost", "tooltip.antarchy.royal_guardian_sword.frost"), + STORM(2, "tooltip.antarchy.royal_guardian_sword.mode.storm", "tooltip.antarchy.royal_guardian_sword.storm"); + + private final int id; + private final String translationKey; + private final String tooltipKey; + + Mode(int id, String translationKey, String tooltipKey) { + this.id = id; + this.translationKey = translationKey; + this.tooltipKey = tooltipKey; + } + + public Mode next() { + return switch (this) { + case NONE -> FIRE; + case FIRE -> FROST; + case FROST -> STORM; + case STORM -> NONE; + }; + } + + private static Mode fromId(int id) { + for (Mode mode : values()) { + if (mode.id == id) { + return mode; + } + } + return NONE; + } + } + @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { } @@ -51,12 +172,12 @@ public class RoyalGuardianSwordItem extends SwordItem implements GeoItem { return this.geoCache; } - public void createGeoRenderer(Consumer consumer) { - consumer.accept(new GeoRenderProvider() { + public void createRenderer(Consumer consumer) { + consumer.accept(new AntarchyGeoItemRenderer() { private AnimatedHeldItemRenderer renderer; @Override - public net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer getGeoItemRenderer() { + public net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer getCustomRenderer() { if (this.renderer == null) { this.renderer = new AnimatedHeldItemRenderer<>(new ResourceBackedGeoItemModel<>(MODEL_LOCATION, TEXTURE_LOCATION, ANIMATION_LOCATION)); } @@ -66,11 +187,14 @@ public class RoyalGuardianSwordItem extends SwordItem implements GeoItem { }); } - public void createRenderer(Consumer consumer) { - createGeoRenderer(provider -> consumer.accept(provider.getGeoItemRenderer())); - } + private final java.util.function.Supplier renderProvider = com.google.common.base.Suppliers.memoize(() -> { + Object[] holder = new Object[1]; + createRenderer(o -> holder[0] = o); + return holder[0]; + }); + @Override public java.util.function.Supplier getRenderProvider() { - return () -> { final Object[] value = new Object[1]; createGeoRenderer(provider -> value[0] = provider.getGeoItemRenderer()); return value[0]; }; + return this.renderProvider; } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RpoLauncherItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RpoLauncherItem.java index 739c0016..dd027f59 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RpoLauncherItem.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RpoLauncherItem.java @@ -6,6 +6,9 @@ import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.client.model.ResourceBackedGeoItemModel; import com.craisinlord.antarchy.content.client.renderer.AnimatedHeldItemRenderer; import com.craisinlord.antarchy.content.entity.OctopusBombEntity; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; +import com.craisinlord.anthology.gravity.GravityRotationUtil; import java.util.function.Consumer; import java.util.function.Predicate; import net.minecraft.core.particles.ParticleTypes; @@ -164,15 +167,12 @@ public class RpoLauncherItem extends ProjectileWeaponItem implements GeoItem, co } float yaw = player.getYRot() + yawOffset; - Vec3 direction = Vec3.directionFromRotation(new Vec2(player.getXRot(), yaw)); - projectileBomb.moveTo( - player.getX(), - player.getEyeY() + 0.15D, - player.getZ(), - yaw, - player.getXRot() - ); - projectileBomb.launchAsExplosiveProjectile(player, direction.scale(AntarchySettings.rpoLauncherLaunchVelocity()).add(player.getDeltaMovement())); + Vec3 localDirection = Vec3.directionFromRotation(new Vec2(player.getXRot(), yaw)); + GravityDirection gravity = GravityApi.getGravityDirection(player); + Vec3 direction = GravityRotationUtil.vecPlayerToWorld(localDirection, gravity).normalize(); + Vec3 spawn = player.getEyePosition().add(direction.scale(0.55D)); + projectileBomb.moveTo(spawn.x, spawn.y, spawn.z, yaw, player.getXRot()); + projectileBomb.launchAsExplosiveProjectile(player, direction.scale(AntarchySettings.rpoLauncherLaunchVelocity()).add(GravityApi.deltaMovement(player))); level.addFreshEntity(projectileBomb); } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ScorpionWhipItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ScorpionWhipItem.java index c39395ed..79e8efdd 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ScorpionWhipItem.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ScorpionWhipItem.java @@ -31,6 +31,17 @@ public final class ScorpionWhipItem extends SwordItem { this.tier = tier; } + @Override + public com.google.common.collect.Multimap getDefaultAttributeModifiers(net.minecraft.world.entity.EquipmentSlot slot) { + if (slot != net.minecraft.world.entity.EquipmentSlot.MAINHAND) { + return super.getDefaultAttributeModifiers(slot); + } + com.google.common.collect.ImmutableMultimap.Builder builder = + com.craisinlord.antarchy.compat.item.WeaponAttributes.base(this.tier, (int) Math.round(AntarchySettings.scorpionWhipBaseDamage()), -2.6F); + com.craisinlord.antarchy.compat.entity.EntityReach.addModifier(builder, ATTACK_RANGE_MODIFIER_ID, AntarchySettings.scorpionWhipReachBonus()); + return builder.build(); + } + @Override public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { ItemStack stack = player.getItemInHand(hand); diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/SizeRayItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/SizeRayItem.java index 94e55cd7..7e61489c 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/SizeRayItem.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/SizeRayItem.java @@ -44,8 +44,7 @@ import java.util.function.Consumer; public class SizeRayItem extends ProjectileWeaponItem implements GeoItem, com.craisinlord.antarchy.content.client.AntarchyGeoItem { private static final String FIRE_CONTROLLER = "fire_controller"; private static final int CHARGE_TICKS_PER_LEVEL = 5; - public static final int LOOP_SOUND_START_TICKS = CHARGE_TICKS_PER_LEVEL * 3; - private static final int CHARGE_SOUND_INTERVAL_TICKS = 12; + public static final int LOOP_SOUND_START_TICKS = 140; private static final int MAX_USE_DURATION = 72000; private static final Predicate NO_PROJECTILES = stack -> false; private final Supplier> projectileType; @@ -115,10 +114,10 @@ public class SizeRayItem extends ProjectileWeaponItem implements GeoItem, com.cr player.getX(), player.getY(), player.getZ(), - this.getFireSound(), + getFireSound(chargeLevel), SoundSource.PLAYERS, 1.0F, - 0.95F + 0.12F * (chargeLevel - 1) + 1.0F / (level.getRandom().nextFloat() * 0.4F + 1.2F) + 0.96F + 0.04F * (chargeLevel - 1) + level.getRandom().nextFloat() * 0.08F ); player.awardStat(Stats.ITEM_USED.get(this)); double cooldownSeconds = AntarchySettings.sizeRayCooldownSeconds(); @@ -128,28 +127,6 @@ public class SizeRayItem extends ProjectileWeaponItem implements GeoItem, com.cr } } - @Override - public void onUseTick(Level level, LivingEntity livingEntity, ItemStack stack, int remainingUseDuration) { - super.onUseTick(level, livingEntity, stack, remainingUseDuration); - if (level.isClientSide() || !AntarchySettings.sizeChangingRaysEnabled()) { - return; - } - - int useTicks = this.getUseDuration(stack) - remainingUseDuration; - if (useTicks == 1 || useTicks % CHARGE_SOUND_INTERVAL_TICKS == 0) { - level.playSound( - null, - livingEntity.getX(), - livingEntity.getY(), - livingEntity.getZ(), - AntarchySoundEvents.SIZE_RAY_CHARGE.get(), - SoundSource.PLAYERS, - 0.15F, - 0.95F + level.getRandom().nextFloat() * 0.08F - ); - } - } - @Override public UseAnim getUseAnimation(ItemStack stack) { return UseAnim.NONE; @@ -244,20 +221,28 @@ public class SizeRayItem extends ProjectileWeaponItem implements GeoItem, com.cr } public SoundEvent getChargeSound() { - return AntarchySoundEvents.SIZE_RAY_CHARGE.get(); + return this.rayType == SizeRayProjectileEntity.SizeRayType.SHRINK + ? AntarchySoundEvents.SHRINK_RAY_CHARGE.get() + : AntarchySoundEvents.GROWTH_RAY_CHARGE.get(); } public SoundEvent getLoopSound() { - return AntarchySoundEvents.SIZE_RAY_CHARGE.get(); - } - - private SoundEvent getFireSound() { return this.rayType == SizeRayProjectileEntity.SizeRayType.SHRINK - ? AntarchySoundEvents.SHRINK_RAY_SOUND.get() - : AntarchySoundEvents.GROWTH_RAY_SOUND.get(); + ? AntarchySoundEvents.SHRINK_RAY_LOOP.get() + : AntarchySoundEvents.GROWTH_RAY_LOOP.get(); } - private static int getChargeLevel(int useTicks) { + public static int getChargeLevel(int useTicks) { return Math.max(1, 1 + useTicks / CHARGE_TICKS_PER_LEVEL); } + + private static SoundEvent getFireSound(int chargeLevel) { + if (chargeLevel >= 3) { + return AntarchySoundEvents.SIZE_RAY_CRITSHOT.get(); + } + if (chargeLevel == 2) { + return AntarchySoundEvents.SIZE_RAY_MEDIUMSHOT.get(); + } + return AntarchySoundEvents.SIZE_RAY_WEAKSHOT.get(); + } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/SpiritAppleItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/SpiritAppleItem.java index 2ff08835..15d9d54b 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/SpiritAppleItem.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/SpiritAppleItem.java @@ -5,6 +5,7 @@ import net.minecraft.world.level.Level; import net.minecraft.ChatFormatting; import net.minecraft.network.chat.Component; import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; @@ -24,6 +25,8 @@ public class SpiritAppleItem extends Item { ItemStack result = super.finishUsingItem(stack, level, livingEntity); if (!level.isClientSide()) { livingEntity.addEffect(new MobEffectInstance(AntarchyObjects.GLIMMERING_EFFECT.get(), GLIMMERING_DURATION_TICKS, 0, false, false, true)); + livingEntity.addEffect(new MobEffectInstance(MobEffects.SLOW_FALLING, GLIMMERING_DURATION_TICKS, 0, false, false, true)); + livingEntity.addEffect(new MobEffectInstance(MobEffects.JUMP, GLIMMERING_DURATION_TICKS, 0, false, false, true)); } return result; } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/SpringyBootsHelper.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/SpringyBootsHelper.java new file mode 100644 index 00000000..73c87734 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/SpringyBootsHelper.java @@ -0,0 +1,20 @@ +package com.craisinlord.antarchy.content.item; + +public final class SpringyBootsHelper { + public static final int CHARGE_TICKS_MAX = 30; + public static final int PRIME_WINDOW_TICKS = 15; + public static final int COOLDOWN_TICKS = 40; + + public static final float MAX_VERTICAL_BOOST = 2.0F; + public static final float SPRINT_FORWARD_BOOST = 0.3F; + public static final long FALL_PROTECTION_TICKS = 120L; + public static final String FALL_PROTECTION_NBT_KEY = "antarchy:springy_boots_protection_until"; + + private SpringyBootsHelper() { + } + + public static float verticalBoostFor(int chargeTicks) { + float ratio = Math.min(chargeTicks / (float) CHARGE_TICKS_MAX, 1.0F); + return ratio * MAX_VERTICAL_BOOST; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/SpringyBootsItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/SpringyBootsItem.java new file mode 100644 index 00000000..b473eb36 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/SpringyBootsItem.java @@ -0,0 +1,33 @@ +package com.craisinlord.antarchy.content.item; + +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +public final class SpringyBootsItem extends ArmorItem { + public SpringyBootsItem(ArmorMaterial material, Properties properties) { + super(material, Type.BOOTS, properties); + } + + public static boolean isWearingSpringyBoots(net.minecraft.world.entity.LivingEntity entity) { + return entity != null && entity.getItemBySlot(net.minecraft.world.entity.EquipmentSlot.FEET).getItem() instanceof SpringyBootsItem; + } + + @Override + public boolean isEnchantable(ItemStack stack) { + return stack.getCount() == 1; + } + + @Override + public void appendHoverText(ItemStack stack, @Nullable Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + tooltipComponents.add(Component.translatable("tooltip.antarchy.springy_boots").withStyle(ChatFormatting.DARK_RED)); + super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/SquidzookaItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/SquidzookaItem.java index 3402f079..38db905f 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/SquidzookaItem.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/SquidzookaItem.java @@ -5,6 +5,9 @@ import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.client.model.ResourceBackedGeoItemModel; import com.craisinlord.antarchy.content.entity.MissileSquidEntity; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; +import com.craisinlord.anthology.gravity.GravityRotationUtil; import java.util.function.Consumer; import java.util.function.Predicate; import net.minecraft.core.particles.ParticleTypes; @@ -165,15 +168,12 @@ public class SquidzookaItem extends ProjectileWeaponItem implements GeoItem, com } float yaw = player.getYRot() + yawOffset; - Vec3 direction = Vec3.directionFromRotation(new Vec2(player.getXRot(), yaw)); - projectileSquid.moveTo( - player.getX(), - player.getEyeY() - 0.2D, - player.getZ(), - yaw, - player.getXRot() - ); - projectileSquid.launchAsProjectile(player, direction.scale(AntarchySettings.squidzookaLaunchVelocity()).add(player.getDeltaMovement())); + Vec3 localDirection = Vec3.directionFromRotation(new Vec2(player.getXRot(), yaw)); + GravityDirection gravity = GravityApi.getGravityDirection(player); + Vec3 direction = GravityRotationUtil.vecPlayerToWorld(localDirection, gravity).normalize(); + Vec3 spawn = player.getEyePosition().add(direction.scale(0.45D)); + projectileSquid.moveTo(spawn.x, spawn.y, spawn.z, yaw, player.getXRot()); + projectileSquid.launchAsProjectile(player, direction.scale(AntarchySettings.squidzookaLaunchVelocity()).add(GravityApi.deltaMovement(player))); level.addFreshEntity(projectileSquid); } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/StratosharkFinSoupItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/StratosharkFinSoupItem.java new file mode 100644 index 00000000..2b15661f --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/StratosharkFinSoupItem.java @@ -0,0 +1,23 @@ +package com.craisinlord.antarchy.content.item; + +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +public class StratosharkFinSoupItem extends Item { + public StratosharkFinSoupItem(Properties properties) { + super(properties); + } + + @Override + public void appendHoverText(ItemStack stack, @Nullable Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + tooltipComponents.add(Component.translatable("tooltip.antarchy.stratoshark_fin_soup").withStyle(ChatFormatting.GRAY)); + super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/TemporalTunerAccess.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/TemporalTunerAccess.java new file mode 100644 index 00000000..39c283fb --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/TemporalTunerAccess.java @@ -0,0 +1,7 @@ +package com.craisinlord.antarchy.content.item; + +public interface TemporalTunerAccess { + double antarchy$getTemporalTunerRate(); + + void antarchy$setTemporalTunerRate(double rate); +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/TemporalTunerItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/TemporalTunerItem.java new file mode 100644 index 00000000..9c095b19 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/TemporalTunerItem.java @@ -0,0 +1,97 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.config.AntarchySettings; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import com.craisinlord.antarchy.content.component.AntarchyItemTag; +import net.minecraft.world.level.Level; +import org.jetbrains.annotations.Nullable; +import net.minecraft.sounds.SoundEvents; + +import java.util.List; + +public final class TemporalTunerItem extends Item { + public static final double STEP = 0.1D; + private static final String RATE_TAG = "TemporalTunerRate"; + + public TemporalTunerItem(Properties properties) { + super(properties.stacksTo(1)); + } + + public static boolean isAvailable(Player player) { + return hasTunerAnywhere(player) + && (player.getMainHandItem().getItem() instanceof TemporalTunerItem + || player.getOffhandItem().getItem() instanceof TemporalTunerItem + || hasHotbarTuner(player)); + } + + private static boolean hasTunerAnywhere(Player player) { + for (java.util.List compartment : java.util.List.of(player.getInventory().items, player.getInventory().armor, player.getInventory().offhand)) { + for (ItemStack stack : compartment) { + if (!stack.isEmpty() && stack.getItem() instanceof TemporalTunerItem) { + return true; + } + } + } + return false; + } + + private static boolean hasHotbarTuner(Player player) { + for (int slot = 0; slot < 9; slot++) { + if (player.getInventory().getItem(slot).getItem() instanceof TemporalTunerItem) { + return true; + } + } + return false; + } + + public static double clampRate(double rate) { + return Math.max(AntarchySettings.temporalTunerMinRate(), Math.min(AntarchySettings.temporalTunerMaxRate(), rate)); + } + + public static void adjust(Player player, double delta) { + if (!(player instanceof TemporalTunerAccess access) || !isAvailable(player)) { + return; + } + double previousRate = getRate(player); + double updatedRate = clampRate(previousRate + delta); + access.antarchy$setTemporalTunerRate(updatedRate); + if (Math.abs(updatedRate - previousRate) >= 0.001D) { + player.playSound(SoundEvents.NOTE_BLOCK_HAT.value(), 0.6F, 1.0F); + } + syncTooltipRate(player, getRate(player)); + } + + public static double getRate(Player player) { + return player instanceof TemporalTunerAccess access ? clampRate(access.antarchy$getTemporalTunerRate()) : 1.0D; + } + + public static void syncTooltipRate(Player player, double rate) { + for (int slot = 0; slot < 9; slot++) { + updateStackRate(player.getInventory().getItem(slot), rate); + } + updateStackRate(player.getOffhandItem(), rate); + } + + private static void updateStackRate(ItemStack stack, double rate) { + if (stack.getItem() instanceof TemporalTunerItem) { + AntarchyItemTag.update(stack, tag -> tag.putDouble(RATE_TAG, rate)); + } + } + + @Override + public void appendHoverText(ItemStack stack, @Nullable Level level, List tooltip, TooltipFlag flag) { + tooltip.add(Component.translatable("tooltip.antarchy.temporal_tuner.description").withStyle(ChatFormatting.RED)); + double rate = AntarchyItemTag.getOrEmpty(stack).getDouble(RATE_TAG); + if (rate <= 0.0D) { + rate = 1.0D; + } + tooltip.add(Component.translatable("tooltip.antarchy.temporal_tuner.speed", (int) Math.round(rate * 100.0D)).withStyle(ChatFormatting.GRAY)); + tooltip.add(Component.translatable("tooltip.antarchy.temporal_tuner.controls", (int) (AntarchySettings.temporalTunerMinRate() * 100), (int) (AntarchySettings.temporalTunerMaxRate() * 100)).withStyle(ChatFormatting.GRAY)); + tooltip.add(Component.translatable("tooltip.antarchy.temporal_tuner.availability").withStyle(ChatFormatting.RED)); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/TigerEyeArmorItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/TigerEyeArmorItem.java index 5e397006..f93bfaf9 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/TigerEyeArmorItem.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/TigerEyeArmorItem.java @@ -14,7 +14,7 @@ public final class TigerEyeArmorItem extends ArmorItem { private static final int BASE_DURABILITY_MULTIPLIER = 33; public TigerEyeArmorItem(ArmorMaterial material, Type type, Properties properties) { - super(material, type, properties.stacksTo(1).durability(resolveDurability(type))); + super(material, type, properties.durability(resolveDurability(type))); } @Override diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/TriffidGooBlockItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/TriffidGooBlockItem.java deleted file mode 100644 index e486fd53..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/TriffidGooBlockItem.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.craisinlord.antarchy.content.item; - -import java.util.List; -import net.minecraft.world.level.Level; -import net.minecraft.ChatFormatting; -import net.minecraft.network.chat.Component; -import net.minecraft.world.item.BlockItem; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.TooltipFlag; -import net.minecraft.world.level.block.Block; - -public class TriffidGooBlockItem extends BlockItem { - public TriffidGooBlockItem(Block block, Properties properties) { - super(block, properties); - } - - @Override - public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { - tooltipComponents.add(Component.translatable("tooltip.antarchy.triffid_goo_block").withStyle(ChatFormatting.DARK_GREEN)); - super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/TruffaloBoatOnlyItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/TruffaloBoatOnlyItem.java index 985a1b1b..12e681f8 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/TruffaloBoatOnlyItem.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/TruffaloBoatOnlyItem.java @@ -10,9 +10,13 @@ import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; public class TruffaloBoatOnlyItem extends OuranwoodBoatItem { - private final EntityType entityType; + private final java.util.function.Supplier> entityType; public TruffaloBoatOnlyItem(EntityType entityType, Properties properties) { + this(() -> entityType, properties); + } + + public TruffaloBoatOnlyItem(java.util.function.Supplier> entityType, Properties properties) { super(properties); this.entityType = entityType; } @@ -20,7 +24,7 @@ public class TruffaloBoatOnlyItem extends OuranwoodBoatItem { @Override protected Boat createBoat(Level level, HitResult hitResult, ItemStack stack, Player player) { Vec3 pos = hitResult.getLocation(); - TruffaloBoatEntity boat = new TruffaloBoatEntity(this.entityType, level); + TruffaloBoatEntity boat = new TruffaloBoatEntity(this.entityType.get(), level); boat.setPos(pos.x, pos.y, pos.z); boat.xo = pos.x; boat.yo = pos.y; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/TruffaloChestBoatItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/TruffaloChestBoatItem.java index 6ddce3c4..b6ff201f 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/TruffaloChestBoatItem.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/TruffaloChestBoatItem.java @@ -10,9 +10,13 @@ import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; public class TruffaloChestBoatItem extends OuranwoodBoatItem { - private final EntityType entityType; + private final java.util.function.Supplier> entityType; public TruffaloChestBoatItem(EntityType entityType, Properties properties) { + this(() -> entityType, properties); + } + + public TruffaloChestBoatItem(java.util.function.Supplier> entityType, Properties properties) { super(properties); this.entityType = entityType; } @@ -20,7 +24,7 @@ public class TruffaloChestBoatItem extends OuranwoodBoatItem { @Override protected Boat createBoat(Level level, HitResult hitResult, ItemStack stack, Player player) { Vec3 pos = hitResult.getLocation(); - TruffaloChestBoatEntity boat = new TruffaloChestBoatEntity(this.entityType, level); + TruffaloChestBoatEntity boat = new TruffaloChestBoatEntity(this.entityType.get(), level); boat.setPos(pos.x, pos.y, pos.z); boat.xo = pos.x; boat.yo = pos.y; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/WormHookTetherManager.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/WormHookTetherManager.java index 45c499a4..f80887ec 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/WormHookTetherManager.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/WormHookTetherManager.java @@ -2,8 +2,8 @@ package com.craisinlord.antarchy.content.item; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.entity.WormHookProjectileEntity; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityRotationUtil; import com.craisinlord.antarchy.content.util.WormHookRope; import java.util.Map; import java.util.UUID; @@ -15,15 +15,6 @@ import net.minecraft.util.Mth; import net.minecraft.world.entity.Entity; import net.minecraft.world.phys.Vec3; -/** - * Server-authoritative swing physics for the worm hook: pulls the holding player taut against - * a rope anchored to a stuck {@link WormHookProjectileEntity}, wrapping the rope around block - * corners via {@link WormHookRope} so the swing radius shortens realistically when the player - * swings around an obstacle. - * - * A tether entry is created the moment the hook is thrown (so the rope can be rendered following - * the flying projectile) and only gains real swing physics once the hook sticks into a block. - */ public final class WormHookTetherManager { private static final double MIN_LEN = 2.0D; private static final double REEL_SPEED = 0.12D; @@ -53,14 +44,12 @@ public final class WormHookTetherManager { return hook instanceof WormHookProjectileEntity wormHook ? wormHook : null; } - /** Registers the hook the moment it's thrown, purely so the rope can be rendered following it. */ public static void launch(ServerPlayer player, WormHookProjectileEntity hook) { clear(player); TETHERS.put(player.getUUID(), new TetherState(hook.getId())); WormHookTetherSync.send(player, hook.getId()); } - /** Called once the hook sticks into a block; turns the cosmetic tether into real swing physics. */ public static boolean attach(ServerPlayer player, WormHookProjectileEntity hook) { TetherState state = TETHERS.get(player.getUUID()); if (state == null || state.hookEntityId != hook.getId()) { @@ -110,7 +99,6 @@ public final class WormHookTetherManager { } if (state.rope == null) { - // Hook is still flying; nothing to simulate yet, just tracking it for the render sync. return; } @@ -137,8 +125,6 @@ public final class WormHookTetherManager { Vec3 towardPivot = toPlayer.scale(1.0D / dist); - // Sneaking actively winds the player in toward the anchor, not just shortening - // the max length (which alone has no effect until the rope goes taut). if (reeling && dist > MIN_LEN) { Vec3 pull = towardPivot.scale(-REEL_PULL_STRENGTH); Vec3 reelMotion = getWorldMotion(player).add(pull); @@ -175,11 +161,11 @@ public final class WormHookTetherManager { } private static Vec3 getWorldMotion(ServerPlayer player) { - return AntarchyGravityRotationUtil.vecPlayerToWorld(player.getDeltaMovement(), AntarchyGravityApi.getGravityDirection(player)); + return GravityRotationUtil.vecPlayerToWorld(player.getDeltaMovement(), GravityApi.getGravityDirection(player)); } private static void setWorldMotion(ServerPlayer player, Vec3 worldMotion) { - player.setDeltaMovement(AntarchyGravityRotationUtil.vecWorldToPlayer(worldMotion, AntarchyGravityApi.getGravityDirection(player))); + player.setDeltaMovement(GravityRotationUtil.vecWorldToPlayer(worldMotion, GravityApi.getGravityDirection(player))); } private static void tickFlyingSound(ServerPlayer player, TetherState state) { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/royal/RoyalGearHelper.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/royal/RoyalGearHelper.java index a294e2f9..569332cd 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/royal/RoyalGearHelper.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/royal/RoyalGearHelper.java @@ -1,9 +1,9 @@ package com.craisinlord.antarchy.content.item.royal; import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.enchantment.AntarchyEnchantments; import com.craisinlord.antarchy.content.item.RoyalAssailantArmorItem; -import net.minecraft.world.entity.EquipmentSlot; -import net.minecraft.world.entity.LivingEntity; +import net.minecraft.core.HolderLookup; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.enchantment.Enchantment; import net.minecraft.world.item.enchantment.EnchantmentHelper; @@ -13,13 +13,17 @@ public final class RoyalGearHelper { private RoyalGearHelper() { } - public static ItemStack createRoyalArmorStack(net.minecraft.world.item.Item item, net.minecraft.core.RegistryAccess registries) { + public static ItemStack createRoyalArmorStack(net.minecraft.world.item.Item item, HolderLookup.Provider registries) { ItemStack stack = new ItemStack(item); ensureRoyalArmorEnchantments(stack, registries); return stack; } - public static void ensureRoyalArmorEnchantments(ItemStack stack, net.minecraft.core.RegistryAccess registries) { + public static void ensureRoyalArmorEnchantments(ItemStack stack, HolderLookup.Provider registries) { + if (stack.getItem() instanceof RoyalAssailantArmorItem armor + && armor.getArmorType() == net.minecraft.world.item.ArmorItem.Type.BOOTS) { + AntarchyEnchantments.ensure(stack, AntarchyEnchantments.featherRising(), 1); + } if (!AntarchySettings.royalArmorComesEnchanted()) { return; } @@ -38,8 +42,4 @@ public final class RoyalGearHelper { } } - public static boolean hasUpwardFallImmunityBoots(LivingEntity entity) { - return entity.getItemBySlot(EquipmentSlot.FEET).getItem() instanceof RoyalAssailantArmorItem armor - && armor.getArmorType() == net.minecraft.world.item.ArmorItem.Type.BOOTS; - } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UltimateCrossbowItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UltimateCrossbowItem.java index 561d2aa0..6bfd4848 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UltimateCrossbowItem.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UltimateCrossbowItem.java @@ -2,36 +2,48 @@ package com.craisinlord.antarchy.content.item.ultimate; import com.craisinlord.antarchy.config.AntarchySettings; import net.minecraft.ChatFormatting; +import net.minecraft.advancements.CriteriaTriggers; import net.minecraft.network.chat.Component; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import net.minecraft.nbt.Tag; import net.minecraft.sounds.SoundEvents; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundSource; +import net.minecraft.stats.Stats; import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResultHolder; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.projectile.AbstractArrow; +import net.minecraft.world.entity.projectile.FireworkRocketEntity; +import net.minecraft.world.entity.projectile.Projectile; import net.minecraft.world.item.ArrowItem; import net.minecraft.world.item.CrossbowItem; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraft.world.item.enchantment.Enchantments; import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.Nullable; +import org.joml.Quaternionf; +import org.joml.Vector3f; import java.util.ArrayList; import java.util.List; public class UltimateCrossbowItem extends CrossbowItem { private static final int MAX_ARROWS = 16; - private static final int FIRE_COOLDOWN_TICKS = 5; // 4 shots/sec + private static final int FIRE_COOLDOWN_TICKS = 5; private static final float SHOOTING_POWER = 3.15F; private static final double VANILLA_CROSSBOW_ARROW_DAMAGE = 7.0D; - private static final String LOADED_PROJECTILES_TAG = "UltimateCrossbowProjectiles"; + private static final String RESERVE_PROJECTILES_TAG = "UltimateCrossbowProjectiles"; + private static final String CHARGED_PROJECTILES_TAG = "ChargedProjectiles"; private static final String PROJECTILE_ITEM_TAG = "Item"; public UltimateCrossbowItem(Item.Properties properties) { @@ -44,7 +56,7 @@ public class UltimateCrossbowItem extends CrossbowItem { if (CrossbowItem.isCharged(stack)) { if (!level.isClientSide) { - fireOneShot(level, player, stack); + fireOneShot(level, player, hand, stack); } player.getCooldowns().addCooldown(this, FIRE_COOLDOWN_TICKS); return InteractionResultHolder.consume(stack); @@ -75,67 +87,108 @@ public class UltimateCrossbowItem extends CrossbowItem { ItemStack ammoType = player.getProjectile(stack); if (ammoType.isEmpty()) return; - int available = player.getAbilities().instabuild ? MAX_ARROWS : countMatchingArrows(player, ammoType); + int available = player.isCreative() ? MAX_ARROWS : countMatchingArrows(player, ammoType); int toLoad = Math.min(arrowsToLoad, available); if (toLoad == 0) return; - if (!player.getAbilities().instabuild) { + if (!player.isCreative()) { consumeArrows(player, ammoType, toLoad); } - List projectiles = getLoadedProjectiles(stack); - for (int i = 0; i < toLoad && projectiles.size() < MAX_ARROWS; i++) { + List projectiles = new ArrayList<>(toLoad); + for (int i = 0; i < toLoad; i++) { projectiles.add(ammoType.copyWithCount(1)); } saveLoadedProjectiles(stack, projectiles); - CrossbowItem.setCharged(stack, true); level.playSound(null, player.getX(), player.getY(), player.getZ(), SoundEvents.CROSSBOW_LOADING_END, SoundSource.PLAYERS, 1.0F, 1.0F); } - private void fireOneShot(Level level, Player player, ItemStack stack) { - List loaded = getLoadedProjectiles(stack); - if (loaded.isEmpty()) { - CrossbowItem.setCharged(stack, false); - return; - } + private void fireOneShot(Level level, Player player, InteractionHand hand, ItemStack stack) { + List all = getLoadedProjectiles(stack); + if (all.isEmpty()) return; - ItemStack arrowStack = loaded.remove(0); + ItemStack arrow = all.remove(0); List toFire = new ArrayList<>(); if (hasMultishot(stack)) { - toFire.add(arrowStack); - toFire.add(arrowStack.copy()); - toFire.add(arrowStack.copy()); + toFire.add(arrow); + toFire.add(arrow.copy()); + toFire.add(arrow.copy()); } else { - toFire.add(arrowStack); + toFire.add(arrow); } - float[] angles = toFire.size() == 3 ? new float[]{-10.0F, 0.0F, 10.0F} : new float[]{0.0F}; - for (int i = 0; i < toFire.size(); i++) { - shootArrow(level, player, toFire.get(i), angles[i], i > 0); - } + saveLoadedProjectiles(stack, List.of()); + this.performShooting(level, player, hand, stack, toFire, SHOOTING_POWER, 1.0F); - level.playSound(null, player.getX(), player.getY(), player.getZ(), - SoundEvents.CROSSBOW_SHOOT, SoundSource.PLAYERS, 1.0F, 1.0F); - - saveLoadedProjectiles(stack, loaded); - CrossbowItem.setCharged(stack, !loaded.isEmpty()); + saveLoadedProjectiles(stack, all); } - private void shootArrow(Level level, Player player, ItemStack arrowStack, float angleOffset, boolean disallowPickup) { - if (!(arrowStack.getItem() instanceof ArrowItem arrowItem)) { - return; + private void performShooting(Level level, Player player, InteractionHand hand, ItemStack weapon, + List projectiles, float velocity, float inaccuracy) { + float spread = projectiles.size() == 1 ? 0.0F : 20.0F / (float) (projectiles.size() - 1); + float baseAngle = (float) ((projectiles.size() - 1) % 2) * spread / 2.0F; + float direction = 1.0F; + for (int i = 0; i < projectiles.size(); i++) { + ItemStack ammo = projectiles.get(i); + if (ammo.isEmpty()) { + continue; + } + float angle = baseAngle + direction * (float) ((i + 1) / 2) * spread; + direction = -direction; + Projectile projectile = createProjectile(level, player, weapon, ammo); + shootProjectile(player, projectile, i, velocity, inaccuracy, angle); + weapon.hurtAndBreak(ammo.is(Items.FIREWORK_ROCKET) ? 3 : 1, player, entity -> entity.broadcastBreakEvent(hand)); + level.addFreshEntity(projectile); + float pitch = i == 0 ? 1.0F : getRandomShotPitch((i & 1) == 1, player.getRandom()); + level.playSound(null, player.getX(), player.getY(), player.getZ(), + SoundEvents.CROSSBOW_SHOOT, player.getSoundSource(), 1.0F, pitch); + if (weapon.isEmpty()) { + break; + } } - AbstractArrow arrow = arrowItem.createArrow(level, arrowStack, player); - arrow.shootFromRotation(player, player.getXRot(), player.getYRot() + angleOffset, 0.0F, SHOOTING_POWER, 1.0F); - scaleArrowDamage(arrow); - if (disallowPickup) { - arrow.pickup = AbstractArrow.Pickup.DISALLOWED; + if (player instanceof ServerPlayer serverPlayer) { + CriteriaTriggers.SHOT_CROSSBOW.trigger(serverPlayer, weapon); + serverPlayer.awardStat(Stats.ITEM_USED.get(weapon.getItem())); } - UltimateGearHelper.tagUltimateCrossbowProjectile(arrow); - level.addFreshEntity(arrow); + } + + private static Projectile createProjectile(Level level, Player shooter, ItemStack weapon, ItemStack ammo) { + if (ammo.is(Items.FIREWORK_ROCKET)) { + return new FireworkRocketEntity(level, ammo, shooter, shooter.getX(), shooter.getEyeY() - 0.15F, shooter.getZ(), true); + } + ArrowItem arrowItem = (ArrowItem) (ammo.getItem() instanceof ArrowItem ? ammo.getItem() : Items.ARROW); + AbstractArrow arrow = arrowItem.createArrow(level, ammo, shooter); + arrow.setCritArrow(true); + arrow.setSoundEvent(SoundEvents.CROSSBOW_HIT); + arrow.setShotFromCrossbow(true); + int piercing = EnchantmentHelper.getItemEnchantmentLevel(Enchantments.PIERCING, weapon); + if (piercing > 0) { + arrow.setPierceLevel((byte) piercing); + } + return arrow; + } + + private void shootProjectile(LivingEntity shooter, Projectile projectile, int projectileIndex, + float velocity, float inaccuracy, float angle) { + Vec3 upVector = shooter.getUpVector(1.0F); + Quaternionf rotation = new Quaternionf().setAngleAxis(angle * ((float) Math.PI / 180.0F), upVector.x, upVector.y, upVector.z); + Vector3f direction = shooter.getViewVector(1.0F).toVector3f().rotate(rotation); + projectile.shoot(direction.x(), direction.y(), direction.z(), velocity, inaccuracy); + if (projectile instanceof AbstractArrow arrow) { + scaleArrowDamage(arrow); + if (projectileIndex > 0) { + arrow.pickup = AbstractArrow.Pickup.DISALLOWED; + } + UltimateGearHelper.tagUltimateCrossbowProjectile(arrow); + } + } + + private static float getRandomShotPitch(boolean highPitch, RandomSource random) { + float base = highPitch ? 0.63F : 0.43F; + return 1.0F / (random.nextFloat() * 0.5F + 1.8F) + base; } private static void scaleArrowDamage(AbstractArrow arrow) { @@ -149,7 +202,7 @@ public class UltimateCrossbowItem extends CrossbowItem { } @Override - public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + public void appendHoverText(ItemStack stack, @Nullable Level level, List tooltipComponents, TooltipFlag tooltipFlag) { List loadedProjectiles = getLoadedProjectiles(stack); if (!loadedProjectiles.isEmpty()) { int count = loadedProjectiles.size(); @@ -226,10 +279,21 @@ public class UltimateCrossbowItem extends CrossbowItem { private static List getLoadedProjectiles(ItemStack crossbow) { List projectiles = new ArrayList<>(); - CompoundTag tag = crossbow.hasTag() ? crossbow.getTag() : new CompoundTag(); - ListTag loaded = tag.getList(LOADED_PROJECTILES_TAG, Tag.TAG_COMPOUND); - for (int i = 0; i < loaded.size() && projectiles.size() < MAX_ARROWS; i++) { - ItemStack projectile = ItemStack.of(loaded.getCompound(i).getCompound(PROJECTILE_ITEM_TAG)); + CompoundTag tag = crossbow.getTag(); + if (tag == null) { + return projectiles; + } + ListTag charged = tag.getList(CHARGED_PROJECTILES_TAG, Tag.TAG_COMPOUND); + for (int i = 0; i < charged.size(); i++) { + ItemStack projectile = ItemStack.of(charged.getCompound(i)); + if (!projectile.isEmpty() && projectiles.size() < MAX_ARROWS) { + projectiles.add(projectile.copyWithCount(1)); + } + } + + ListTag reserve = tag.getList(RESERVE_PROJECTILES_TAG, Tag.TAG_COMPOUND); + for (int i = 0; i < reserve.size() && projectiles.size() < MAX_ARROWS; i++) { + ItemStack projectile = ItemStack.of(reserve.getCompound(i).getCompound(PROJECTILE_ITEM_TAG)); if (!projectile.isEmpty()) { projectiles.add(projectile.copyWithCount(1)); } @@ -245,19 +309,37 @@ public class UltimateCrossbowItem extends CrossbowItem { .toList(); if (sanitizedProjectiles.isEmpty()) { - if (crossbow.hasTag()) { - crossbow.getTag().remove(LOADED_PROJECTILES_TAG); + CompoundTag tag = crossbow.getTag(); + if (tag != null) { + tag.remove(CHARGED_PROJECTILES_TAG); } + CrossbowItem.setCharged(crossbow, false); + clearReserveProjectiles(crossbow); return; } - ListTag loaded = new ListTag(); - for (ItemStack projectile : sanitizedProjectiles) { + ListTag charged = new ListTag(); + charged.add(sanitizedProjectiles.get(0).save(new CompoundTag())); + crossbow.getOrCreateTag().put(CHARGED_PROJECTILES_TAG, charged); + CrossbowItem.setCharged(crossbow, true); + ListTag reserve = new ListTag(); + for (int i = 1; i < sanitizedProjectiles.size(); i++) { CompoundTag entry = new CompoundTag(); - entry.put(PROJECTILE_ITEM_TAG, projectile.save(new CompoundTag())); - loaded.add(entry); + entry.put(PROJECTILE_ITEM_TAG, sanitizedProjectiles.get(i).save(new CompoundTag())); + reserve.add(entry); } - crossbow.getOrCreateTag().put(LOADED_PROJECTILES_TAG, loaded); + if (reserve.isEmpty()) { + crossbow.getOrCreateTag().remove(RESERVE_PROJECTILES_TAG); + } else { + crossbow.getOrCreateTag().put(RESERVE_PROJECTILES_TAG, reserve); + } + } + + private static void clearReserveProjectiles(ItemStack crossbow) { + CompoundTag tag = crossbow.getTag(); + if (tag != null) { + tag.remove(RESERVE_PROJECTILES_TAG); + } } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UltimateToolHelper.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UltimateToolHelper.java index 663c0671..c72b4775 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UltimateToolHelper.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UltimateToolHelper.java @@ -1,6 +1,8 @@ package com.craisinlord.antarchy.content.item.ultimate; import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.item.GiantFryingPanItem; +import com.craisinlord.antarchy.content.item.GiantFryingPanToolHelper; import java.util.ArrayList; import java.util.List; import java.util.function.Function; @@ -88,14 +90,18 @@ public final class UltimateToolHelper { return; } - if (!canBreak(toolKind, player, stack, level, origin, originState)) { + mineArea(toolKind, stack, level, originState, origin, player, 1); + } + + public static void mineArea(ToolKind toolKind, ItemStack stack, Level level, BlockState originState, BlockPos origin, ServerPlayer player, int radius) { + if (level.isClientSide || BREAKING_EXTRA_BLOCKS.get() || !canBreak(toolKind, player, stack, level, origin, originState)) { return; } Direction face = resolveMiningFace(player, origin); BREAKING_EXTRA_BLOCKS.set(true); try { - for (BlockPos targetPos : getMiningPlane(origin, face)) { + for (BlockPos targetPos : getPlane(origin, face, radius)) { if (!canBreak(toolKind, player, stack, level, targetPos, level.getBlockState(targetPos))) { continue; } @@ -115,11 +121,16 @@ public final class UltimateToolHelper { public static void broadcastAreaMiningProgress(ServerPlayer player, ServerLevel level, BlockPos origin, int stage) { + ItemStack stack = player.getMainHandItem(); + if (stack.getItem() instanceof GiantFryingPanItem) { + broadcastPlaneProgress(ToolKind.SHOVEL, player, level, origin, stage, GiantFryingPanToolHelper.MINING_RADIUS); + return; + } + if (!AntarchySettings.ultimateToolsThreeByThreeEnabled()) { return; } - ItemStack stack = player.getMainHandItem(); if (stack.isEmpty() || !isThreeByThreeEnabled(stack)) { return; } @@ -129,13 +140,17 @@ public final class UltimateToolHelper { return; } + broadcastPlaneProgress(kind, player, level, origin, stage, 1); + } + + private static void broadcastPlaneProgress(ToolKind kind, ServerPlayer player, ServerLevel level, BlockPos origin, int stage, int radius) { BlockState originState = level.getBlockState(origin); if (!matchesToolKind(kind, originState)) { return; } Direction face = resolveMiningFace(player, origin); - for (BlockPos targetPos : getPlane(origin, face)) { + for (BlockPos targetPos : getPlane(origin, face, radius)) { BlockState state = level.getBlockState(targetPos); if (state.isAir() || state.hasBlockEntity() || state.getDestroySpeed(level, targetPos) < 0.0F) { continue; @@ -172,7 +187,7 @@ public final class UltimateToolHelper { return; } - for (BlockPos targetPos : getPlane(context.getClickedPos(), context.getClickedFace())) { + for (BlockPos targetPos : getPlane(context.getClickedPos(), context.getClickedFace(), 1)) { if (!canModify(player, context.getLevel(), targetPos, context.getClickedFace(), context.getItemInHand())) { continue; } @@ -281,16 +296,13 @@ public final class UltimateToolHelper { return best; } - private static List getMiningPlane(BlockPos center, Direction face) { - return getPlane(center, face); - } - - private static List getPlane(BlockPos center, Direction face) { - List positions = new ArrayList<>(8); + private static List getPlane(BlockPos center, Direction face, int radius) { + int size = radius * 2 + 1; + List positions = new ArrayList<>(size * size - 1); switch (face.getAxis()) { case Y -> { - for (int x = -1; x <= 1; x++) { - for (int z = -1; z <= 1; z++) { + for (int x = -radius; x <= radius; x++) { + for (int z = -radius; z <= radius; z++) { if (x == 0 && z == 0) { continue; } @@ -300,8 +312,8 @@ public final class UltimateToolHelper { } } case X -> { - for (int y = -1; y <= 1; y++) { - for (int z = -1; z <= 1; z++) { + for (int y = -radius; y <= radius; y++) { + for (int z = -radius; z <= radius; z++) { if (y == 0 && z == 0) { continue; } @@ -311,8 +323,8 @@ public final class UltimateToolHelper { } } case Z -> { - for (int x = -1; x <= 1; x++) { - for (int y = -1; y <= 1; y++) { + for (int x = -radius; x <= radius; x++) { + for (int y = -radius; y <= radius; y++) { if (x == 0 && y == 0) { continue; } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/menu/GiantFryingPanMenu.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/menu/GiantFryingPanMenu.java new file mode 100644 index 00000000..646f76f4 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/menu/GiantFryingPanMenu.java @@ -0,0 +1,92 @@ +package com.craisinlord.antarchy.content.menu; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.item.GiantFryingPanStorage; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.ClickType; +import net.minecraft.world.inventory.Slot; +import net.minecraft.world.item.ItemStack; + +public final class GiantFryingPanMenu extends AbstractContainerMenu { + public static final int PAN_ROW_Y = 18; + public static final int INVENTORY_Y = 49; + public static final int HOTBAR_Y = 107; + private final GiantFryingPanStorage panStorage; + private final int panSlot; + + public GiantFryingPanMenu(int containerId, Inventory inventory) { + this(containerId, inventory, GiantFryingPanStorage.findPanSlot(inventory.player)); + } + + public GiantFryingPanMenu(int containerId, Inventory inventory, int panSlot) { + super(AntarchyObjects.GIANT_FRYING_PAN_MENU.get(), containerId); + Player player = inventory.player; + this.panSlot = panSlot; + this.panStorage = new GiantFryingPanStorage(player, panSlot); + for (int slot = 0; slot < GiantFryingPanStorage.SLOT_COUNT; slot++) { + this.addSlot(new Slot(this.panStorage, slot, 8 + slot * 18, PAN_ROW_Y) { + @Override + public boolean mayPlace(ItemStack stack) { + return GiantFryingPanStorage.isCampfireInput(player, stack); + } + }); + } + for (int row = 0; row < 3; row++) { + for (int col = 0; col < 9; col++) { + this.addSlot(this.inventorySlot(inventory, col + row * 9 + 9, 8 + col * 18, INVENTORY_Y + row * 18)); + } + } + for (int col = 0; col < 9; col++) { + this.addSlot(this.inventorySlot(inventory, col, 8 + col * 18, HOTBAR_Y)); + } + } + + private Slot inventorySlot(Inventory inventory, int index, int x, int y) { + return new Slot(inventory, index, x, y) { + @Override + public boolean mayPickup(Player player) { + return index != GiantFryingPanMenu.this.panSlot && super.mayPickup(player); + } + + @Override + public boolean mayPlace(ItemStack stack) { + return index != GiantFryingPanMenu.this.panSlot && super.mayPlace(stack); + } + }; + } + + public GiantFryingPanStorage storage() { + return this.panStorage; + } + + @Override + public void clicked(int slotId, int button, ClickType clickType, Player player) { + if (clickType == ClickType.SWAP && button == this.panSlot) return; + super.clicked(slotId, button, clickType, player); + } + + @Override + public boolean stillValid(Player player) { + return this.panStorage.stillValid(player); + } + + @Override + public ItemStack quickMoveStack(Player player, int index) { + if (index < 0 || index >= this.slots.size()) return ItemStack.EMPTY; + Slot slot = this.slots.get(index); + if (!slot.hasItem() || !slot.mayPickup(player)) return ItemStack.EMPTY; + ItemStack current = slot.getItem(); + ItemStack original = current.copy(); + if (index < GiantFryingPanStorage.SLOT_COUNT) { + if (!this.moveItemStackTo(current, GiantFryingPanStorage.SLOT_COUNT, this.slots.size(), true)) return ItemStack.EMPTY; + } else if (!GiantFryingPanStorage.isCampfireInput(player, current) + || !this.moveItemStackTo(current, 0, GiantFryingPanStorage.SLOT_COUNT, false)) { + return ItemStack.EMPTY; + } + if (current.isEmpty()) slot.setByPlayer(ItemStack.EMPTY); + else slot.setChanged(); + return original; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/minecart/AntimetalMinecartPhysics.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/minecart/AntimetalMinecartPhysics.java index 51dc3cdd..3267c556 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/minecart/AntimetalMinecartPhysics.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/minecart/AntimetalMinecartPhysics.java @@ -17,17 +17,6 @@ import net.minecraft.world.level.block.state.properties.RailShape; import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.Nullable; -/** - * A direct mirror of {@code AbstractMinecart.moveAlongTrack}/{@code getPos}/{@code getPosOffs}, - * adapted for ceiling-mounted track. The world-Y meaning of "ascending"/"descending" does not - * need to be sign-flipped anywhere here — lower world Y is lower world Y whether a rail rests on - * a floor or hangs from a ceiling. What actually differs from vanilla is: the rail sits near the - * top of its cell instead of near the bottom (see {@link AntimetalRailHelper#attachY}), support - * is required above instead of below, and the "which cell owns this position" disambiguation - * checks the cell above instead of the cell below. Everything else — the exit-projection math, - * the slope acceleration constant, the player-push nudge, using real collision-checked - * {@code Entity.move} rather than a hand-rolled collision test — is a straight port. - */ public final class AntimetalMinecartPhysics { private static final double SLOPE_ACCEL = 0.0078125D; private static final double MAX_RAIL_SPEED = 0.4D; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/movement/DreamSandLowGravityAccess.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/movement/DreamSandLowGravityAccess.java deleted file mode 100644 index d4bc5187..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/movement/DreamSandLowGravityAccess.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.craisinlord.antarchy.content.movement; - -public interface DreamSandLowGravityAccess { - boolean antarchy$isDreamSandLowGravityActive(); - - void antarchy$setDreamSandLowGravityActive(boolean active); - - int antarchy$getDreamSandLowGravityTicksRemaining(); - - void antarchy$setDreamSandLowGravityTicksRemaining(int ticks); - - int antarchy$getDreamSandLandingGraceTicks(); - - void antarchy$setDreamSandLandingGraceTicks(int ticks); - - default void antarchy$clearDreamSandLowGravity() { - antarchy$setDreamSandLowGravityActive(false); - antarchy$setDreamSandLowGravityTicksRemaining(0); - antarchy$setDreamSandLandingGraceTicks(0); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/ActivateRoyalBoundaryPayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/ActivateRoyalBoundaryPayload.java new file mode 100644 index 00000000..3bc160a7 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/ActivateRoyalBoundaryPayload.java @@ -0,0 +1,18 @@ +package com.craisinlord.antarchy.content.network; + +import com.craisinlord.antarchy.Antarchy; +import io.netty.buffer.ByteBuf; +import com.craisinlord.anthology.network.StreamCodec; +import com.craisinlord.anthology.network.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; + +public record ActivateRoyalBoundaryPayload() implements CustomPacketPayload { + public static final Type TYPE = new Type<>( + new ResourceLocation(Antarchy.MODID, "activate_royal_boundary")); + public static final StreamCodec STREAM_CODEC = StreamCodec.unit(new ActivateRoyalBoundaryPayload()); + + @Override + public Type type() { + return TYPE; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/AntarchyGameNetworkHandler.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/AntarchyGameNetworkHandler.java new file mode 100644 index 00000000..e4a76e3e --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/AntarchyGameNetworkHandler.java @@ -0,0 +1,71 @@ +package com.craisinlord.antarchy.content.network; + +import com.craisinlord.antarchy.content.computer.AntarchyGameSavedData; +import java.util.function.BiConsumer; +import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.level.Level; + +public final class AntarchyGameNetworkHandler { + private static BiConsumer resultSender = (player, result) -> { }; + + private AntarchyGameNetworkHandler() { } + + public static void setResultSender(BiConsumer sender) { + resultSender = sender; + } + + public static void handle(ServerPlayer player, AntarchyGamePayload payload) { + BlockPos pos = payload.pos(); + if (payload.value().length() > 65536 || player.level().isClientSide || !player.serverLevel().hasChunkAt(pos) + || player.distanceToSqr(pos.getX() + 0.5D, pos.getY() + 0.5D, pos.getZ() + 0.5D) > 64.0D) return; + + var blockEntity = player.serverLevel().getBlockEntity(pos); + if (!(blockEntity instanceof com.craisinlord.antos.content.block.entity.ComputerBlockEntity computer) + || !computer.canUseFileSystem(player)) { + send(player, payload, false, "", "unauthorized"); + return; + } + String key = AntarchyGameSavedData.key(player.serverLevel().dimension().location(), pos); + AntarchyGameSavedData.GameState state = AntarchyGameSavedData.get(player.server, key); + switch (payload.action()) { + case AntarchyGamePayload.BASILISK_STATE -> basilisk(player, payload, state); + case AntarchyGamePayload.ANTMAN_STATE -> antman(player, payload, state); + default -> send(player, payload, false, "", "invalid"); + } + } + + private static void basilisk(ServerPlayer player, AntarchyGamePayload payload, AntarchyGameSavedData.GameState state) { + if (!payload.value().isBlank()) { + Integer score = parseScore(payload.value()); + if (score == null) { send(player, payload, false, "", "invalid_score"); return; } + state.basiliskScore = score; + state.basiliskHighScore = Math.max(state.basiliskHighScore, score); + AntarchyGameSavedData.changed(player.server); + } + send(player, payload, true, state.basiliskScore + "\0" + state.basiliskHighScore, ""); + } + + private static void antman(ServerPlayer player, AntarchyGamePayload payload, AntarchyGameSavedData.GameState state) { + if (!payload.value().isBlank()) { + Integer score = parseScore(payload.value()); + if (score == null) { send(player, payload, false, "", "invalid_score"); return; } + state.antmanScore = score; + state.antmanHighScore = Math.max(state.antmanHighScore, score); + AntarchyGameSavedData.changed(player.server); + } + send(player, payload, true, state.antmanScore + "\0" + state.antmanHighScore, ""); + } + + private static Integer parseScore(String value) { + try { return Math.min(1_000_000, Math.max(0, Integer.parseInt(value))); } + catch (NumberFormatException ignored) { return null; } + } + + private static void send(ServerPlayer player, AntarchyGamePayload payload, boolean success, String data, String error) { + resultSender.accept(player, new AntarchyGameResultPayload(payload.pos(), success, + payload.action() + "\0" + error + "\0" + data)); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/AntarchyGameNetworking.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/AntarchyGameNetworking.java new file mode 100644 index 00000000..97a750ac --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/AntarchyGameNetworking.java @@ -0,0 +1,17 @@ +package com.craisinlord.antarchy.content.network; + +import net.minecraft.core.BlockPos; +import java.util.function.Consumer; + +public final class AntarchyGameNetworking { + private static Consumer sender = payload -> { }; + private AntarchyGameNetworking() { } + + public static void setSender(Consumer sender) { AntarchyGameNetworking.sender = sender; } + public static void requestBasiliskState(BlockPos pos) { send(pos, AntarchyGamePayload.BASILISK_STATE, ""); } + public static void saveBasiliskScore(BlockPos pos, int score) { send(pos, AntarchyGamePayload.BASILISK_STATE, Integer.toString(Math.max(0, score))); } + public static void requestAntmanState(BlockPos pos) { send(pos, AntarchyGamePayload.ANTMAN_STATE, ""); } + public static void saveAntmanScore(BlockPos pos, int score) { send(pos, AntarchyGamePayload.ANTMAN_STATE, Integer.toString(Math.max(0, score))); } + + private static void send(BlockPos pos, int action, String value) { sender.accept(new AntarchyGamePayload(pos, action, value)); } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/AntarchyGamePayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/AntarchyGamePayload.java new file mode 100644 index 00000000..2e96826c --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/AntarchyGamePayload.java @@ -0,0 +1,30 @@ +package com.craisinlord.antarchy.content.network; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.anthology.network.ByteBufCodecs; +import com.craisinlord.anthology.network.CustomPacketPayload; +import com.craisinlord.anthology.network.StreamCodec; +import io.netty.buffer.ByteBuf; +import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; + +public record AntarchyGamePayload(BlockPos pos, int action, String value) implements CustomPacketPayload { + public static final int BASILISK_STATE = 16; + public static final int ANTMAN_STATE = 17; + public static final Type TYPE = new Type<>(new ResourceLocation(Antarchy.MODID, "antarchy_game")); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.VAR_LONG, payload -> payload.pos().asLong(), + ByteBufCodecs.VAR_INT, AntarchyGamePayload::action, + ByteBufCodecs.STRING_UTF8, AntarchyGamePayload::value, + (pos, action, value) -> new AntarchyGamePayload(BlockPos.of(pos), action, value) + ); + + public AntarchyGamePayload(BlockPos pos, int action) { + this(pos, action, ""); + } + + @Override + public Type type() { + return TYPE; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/AntarchyGameResultPayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/AntarchyGameResultPayload.java new file mode 100644 index 00000000..0a89040d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/AntarchyGameResultPayload.java @@ -0,0 +1,24 @@ +package com.craisinlord.antarchy.content.network; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.anthology.network.ByteBufCodecs; +import com.craisinlord.anthology.network.CustomPacketPayload; +import com.craisinlord.anthology.network.StreamCodec; +import io.netty.buffer.ByteBuf; +import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; + +public record AntarchyGameResultPayload(BlockPos pos, boolean success, String data) implements CustomPacketPayload { + public static final Type TYPE = new Type<>(new ResourceLocation(Antarchy.MODID, "antarchy_game_result")); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.VAR_LONG, payload -> payload.pos().asLong(), + ByteBufCodecs.BOOL, AntarchyGameResultPayload::success, + ByteBufCodecs.STRING_UTF8, AntarchyGameResultPayload::data, + (pos, success, data) -> new AntarchyGameResultPayload(BlockPos.of(pos), success, data) + ); + + @Override + public Type type() { + return TYPE; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/BigBerthaModeCyclePayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/BigBerthaModeCyclePayload.java index 26bd4786..07b252ad 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/BigBerthaModeCyclePayload.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/BigBerthaModeCyclePayload.java @@ -2,8 +2,8 @@ package com.craisinlord.antarchy.content.network; import com.craisinlord.antarchy.Antarchy; import io.netty.buffer.ByteBuf; -import com.craisinlord.antarchy.compat.network.StreamCodec; -import com.craisinlord.antarchy.compat.network.CustomPacketPayload; +import com.craisinlord.anthology.network.StreamCodec; +import com.craisinlord.anthology.network.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; public record BigBerthaModeCyclePayload() implements CustomPacketPayload { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/BloodCrystalKatanaTrailPayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/BloodCrystalKatanaTrailPayload.java index ff6df3e9..f7b10fb1 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/BloodCrystalKatanaTrailPayload.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/BloodCrystalKatanaTrailPayload.java @@ -2,9 +2,9 @@ package com.craisinlord.antarchy.content.network; import com.craisinlord.antarchy.Antarchy; import io.netty.buffer.ByteBuf; -import com.craisinlord.antarchy.compat.network.ByteBufCodecs; -import com.craisinlord.antarchy.compat.network.StreamCodec; -import com.craisinlord.antarchy.compat.network.CustomPacketPayload; +import com.craisinlord.anthology.network.ByteBufCodecs; +import com.craisinlord.anthology.network.StreamCodec; +import com.craisinlord.anthology.network.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; public record BloodCrystalKatanaTrailPayload(int entityId, int durationTicks) implements CustomPacketPayload { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/BloodglassStatePayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/BloodglassStatePayload.java index aa189059..215f371f 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/BloodglassStatePayload.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/BloodglassStatePayload.java @@ -2,9 +2,9 @@ package com.craisinlord.antarchy.content.network; import com.craisinlord.antarchy.Antarchy; import io.netty.buffer.ByteBuf; -import com.craisinlord.antarchy.compat.network.ByteBufCodecs; -import com.craisinlord.antarchy.compat.network.StreamCodec; -import com.craisinlord.antarchy.compat.network.CustomPacketPayload; +import com.craisinlord.anthology.network.ByteBufCodecs; +import com.craisinlord.anthology.network.StreamCodec; +import com.craisinlord.anthology.network.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; public record BloodglassStatePayload(int shieldsActive, int shieldsMax) implements CustomPacketPayload { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/BrutalflyElytraAnimationPayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/BrutalflyElytraAnimationPayload.java index 7203a34a..627389e9 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/BrutalflyElytraAnimationPayload.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/BrutalflyElytraAnimationPayload.java @@ -2,9 +2,9 @@ package com.craisinlord.antarchy.content.network; import com.craisinlord.antarchy.Antarchy; import io.netty.buffer.ByteBuf; -import com.craisinlord.antarchy.compat.network.ByteBufCodecs; -import com.craisinlord.antarchy.compat.network.StreamCodec; -import com.craisinlord.antarchy.compat.network.CustomPacketPayload; +import com.craisinlord.anthology.network.ByteBufCodecs; +import com.craisinlord.anthology.network.StreamCodec; +import com.craisinlord.anthology.network.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; public record BrutalflyElytraAnimationPayload(int entityId, int durationTicks, float strength) implements CustomPacketPayload { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/BrutalflyElytraFlapPayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/BrutalflyElytraFlapPayload.java index a4ee29a3..dd5db7b1 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/BrutalflyElytraFlapPayload.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/BrutalflyElytraFlapPayload.java @@ -2,9 +2,9 @@ package com.craisinlord.antarchy.content.network; import com.craisinlord.antarchy.Antarchy; import io.netty.buffer.ByteBuf; -import com.craisinlord.antarchy.compat.network.ByteBufCodecs; -import com.craisinlord.antarchy.compat.network.StreamCodec; -import com.craisinlord.antarchy.compat.network.CustomPacketPayload; +import com.craisinlord.anthology.network.ByteBufCodecs; +import com.craisinlord.anthology.network.StreamCodec; +import com.craisinlord.anthology.network.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; public record BrutalflyElytraFlapPayload(int chargeTicks) implements CustomPacketPayload { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/DiamondMinecartInputPayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/DiamondMinecartInputPayload.java index 084da944..a9a0f542 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/DiamondMinecartInputPayload.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/DiamondMinecartInputPayload.java @@ -2,9 +2,9 @@ package com.craisinlord.antarchy.content.network; import com.craisinlord.antarchy.Antarchy; import io.netty.buffer.ByteBuf; -import com.craisinlord.antarchy.compat.network.ByteBufCodecs; -import com.craisinlord.antarchy.compat.network.StreamCodec; -import com.craisinlord.antarchy.compat.network.CustomPacketPayload; +import com.craisinlord.anthology.network.ByteBufCodecs; +import com.craisinlord.anthology.network.StreamCodec; +import com.craisinlord.anthology.network.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; public record DiamondMinecartInputPayload(byte inputFlags) implements CustomPacketPayload { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/DorrieChargeJumpPayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/DorrieChargeJumpPayload.java index e6b67505..35efaa03 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/DorrieChargeJumpPayload.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/DorrieChargeJumpPayload.java @@ -2,9 +2,9 @@ package com.craisinlord.antarchy.content.network; import com.craisinlord.antarchy.Antarchy; import io.netty.buffer.ByteBuf; -import com.craisinlord.antarchy.compat.network.ByteBufCodecs; -import com.craisinlord.antarchy.compat.network.StreamCodec; -import com.craisinlord.antarchy.compat.network.CustomPacketPayload; +import com.craisinlord.anthology.network.ByteBufCodecs; +import com.craisinlord.anthology.network.StreamCodec; +import com.craisinlord.anthology.network.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; public record DorrieChargeJumpPayload(boolean pressing) implements CustomPacketPayload { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/DorrieJumpInputPayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/DorrieJumpInputPayload.java index 684c1a87..95430f94 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/DorrieJumpInputPayload.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/DorrieJumpInputPayload.java @@ -2,9 +2,9 @@ package com.craisinlord.antarchy.content.network; import com.craisinlord.antarchy.Antarchy; import io.netty.buffer.ByteBuf; -import com.craisinlord.antarchy.compat.network.ByteBufCodecs; -import com.craisinlord.antarchy.compat.network.StreamCodec; -import com.craisinlord.antarchy.compat.network.CustomPacketPayload; +import com.craisinlord.anthology.network.ByteBufCodecs; +import com.craisinlord.anthology.network.StreamCodec; +import com.craisinlord.anthology.network.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; public record DorrieJumpInputPayload(boolean pressing) implements CustomPacketPayload { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/EyeOfStormPrimaryPayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/EyeOfStormPrimaryPayload.java index f2390e8d..203fd1f2 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/EyeOfStormPrimaryPayload.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/EyeOfStormPrimaryPayload.java @@ -2,8 +2,8 @@ package com.craisinlord.antarchy.content.network; import com.craisinlord.antarchy.Antarchy; import io.netty.buffer.ByteBuf; -import com.craisinlord.antarchy.compat.network.StreamCodec; -import com.craisinlord.antarchy.compat.network.CustomPacketPayload; +import com.craisinlord.anthology.network.StreamCodec; +import com.craisinlord.anthology.network.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; public record EyeOfStormPrimaryPayload() implements CustomPacketPayload { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/GravityGunPrimaryPayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/GravityGunPrimaryPayload.java index 7703e401..41950952 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/GravityGunPrimaryPayload.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/GravityGunPrimaryPayload.java @@ -2,8 +2,8 @@ package com.craisinlord.antarchy.content.network; import com.craisinlord.antarchy.Antarchy; import io.netty.buffer.ByteBuf; -import com.craisinlord.antarchy.compat.network.StreamCodec; -import com.craisinlord.antarchy.compat.network.CustomPacketPayload; +import com.craisinlord.anthology.network.StreamCodec; +import com.craisinlord.anthology.network.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; public record GravityGunPrimaryPayload() implements CustomPacketPayload { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/GravityGunScrollPayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/GravityGunScrollPayload.java index 86065337..9b49ba76 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/GravityGunScrollPayload.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/GravityGunScrollPayload.java @@ -2,9 +2,9 @@ package com.craisinlord.antarchy.content.network; import com.craisinlord.antarchy.Antarchy; import io.netty.buffer.ByteBuf; -import com.craisinlord.antarchy.compat.network.ByteBufCodecs; -import com.craisinlord.antarchy.compat.network.StreamCodec; -import com.craisinlord.antarchy.compat.network.CustomPacketPayload; +import com.craisinlord.anthology.network.ByteBufCodecs; +import com.craisinlord.anthology.network.StreamCodec; +import com.craisinlord.anthology.network.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; public record GravityGunScrollPayload(double distanceDelta) implements CustomPacketPayload { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/GravityStatePayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/GravityStatePayload.java deleted file mode 100644 index eadc349a..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/GravityStatePayload.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.craisinlord.antarchy.content.network; - -import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import io.netty.buffer.ByteBuf; -import com.craisinlord.antarchy.compat.network.ByteBufCodecs; -import com.craisinlord.antarchy.compat.network.StreamCodec; -import com.craisinlord.antarchy.compat.network.CustomPacketPayload; -import net.minecraft.resources.ResourceLocation; - -public record GravityStatePayload( - int entityId, - int directionId, - int previousDirectionId, - boolean forced, - int transitionDuration, - int transitionRemaining -) implements CustomPacketPayload { - public static final Type TYPE = new Type<>(new ResourceLocation(Antarchy.MODID, "gravity_state")); - public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - ByteBufCodecs.VAR_INT, - GravityStatePayload::entityId, - ByteBufCodecs.VAR_INT, - GravityStatePayload::directionId, - ByteBufCodecs.VAR_INT, - GravityStatePayload::previousDirectionId, - ByteBufCodecs.BOOL, - GravityStatePayload::forced, - ByteBufCodecs.VAR_INT, - GravityStatePayload::transitionDuration, - ByteBufCodecs.VAR_INT, - GravityStatePayload::transitionRemaining, - GravityStatePayload::new - ); - - public GravityStatePayload(int entityId, AntarchyGravityDirection direction, AntarchyGravityDirection previousDirection, boolean forced, int transitionDuration, int transitionRemaining) { - this(entityId, direction.getId(), previousDirection.getId(), forced, transitionDuration, transitionRemaining); - } - - public AntarchyGravityDirection direction() { - return AntarchyGravityDirection.byId(this.directionId); - } - - public AntarchyGravityDirection previousDirection() { - return AntarchyGravityDirection.byId(this.previousDirectionId); - } - - @Override - public Type type() { - return TYPE; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleFlightTogglePayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleFlightTogglePayload.java index 1af45606..7b54d92e 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleFlightTogglePayload.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleFlightTogglePayload.java @@ -2,8 +2,8 @@ package com.craisinlord.antarchy.content.network; import com.craisinlord.antarchy.Antarchy; import io.netty.buffer.ByteBuf; -import com.craisinlord.antarchy.compat.network.StreamCodec; -import com.craisinlord.antarchy.compat.network.CustomPacketPayload; +import com.craisinlord.anthology.network.StreamCodec; +import com.craisinlord.anthology.network.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; public record HerculesBeetleFlightTogglePayload() implements CustomPacketPayload { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleImpactShakePayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleImpactShakePayload.java index 96c8510b..a9508c79 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleImpactShakePayload.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleImpactShakePayload.java @@ -2,9 +2,9 @@ package com.craisinlord.antarchy.content.network; import com.craisinlord.antarchy.Antarchy; import io.netty.buffer.ByteBuf; -import com.craisinlord.antarchy.compat.network.ByteBufCodecs; -import com.craisinlord.antarchy.compat.network.StreamCodec; -import com.craisinlord.antarchy.compat.network.CustomPacketPayload; +import com.craisinlord.anthology.network.ByteBufCodecs; +import com.craisinlord.anthology.network.StreamCodec; +import com.craisinlord.anthology.network.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; public record HerculesBeetleImpactShakePayload(int durationTicks) implements CustomPacketPayload { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleJumpInputPayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleJumpInputPayload.java index 6386b63d..ab2943d3 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleJumpInputPayload.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleJumpInputPayload.java @@ -2,9 +2,9 @@ package com.craisinlord.antarchy.content.network; import com.craisinlord.antarchy.Antarchy; import io.netty.buffer.ByteBuf; -import com.craisinlord.antarchy.compat.network.ByteBufCodecs; -import com.craisinlord.antarchy.compat.network.StreamCodec; -import com.craisinlord.antarchy.compat.network.CustomPacketPayload; +import com.craisinlord.anthology.network.ByteBufCodecs; +import com.craisinlord.anthology.network.StreamCodec; +import com.craisinlord.anthology.network.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; public record HerculesBeetleJumpInputPayload(boolean pressing) implements CustomPacketPayload { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleMountedAttackPayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleMountedAttackPayload.java index 5dd66235..f1bc726c 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleMountedAttackPayload.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleMountedAttackPayload.java @@ -2,8 +2,8 @@ package com.craisinlord.antarchy.content.network; import com.craisinlord.antarchy.Antarchy; import io.netty.buffer.ByteBuf; -import com.craisinlord.antarchy.compat.network.StreamCodec; -import com.craisinlord.antarchy.compat.network.CustomPacketPayload; +import com.craisinlord.anthology.network.StreamCodec; +import com.craisinlord.anthology.network.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; public record HerculesBeetleMountedAttackPayload() implements CustomPacketPayload { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleMountedChargePayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleMountedChargePayload.java index 318f7cbb..6c1fa2bd 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleMountedChargePayload.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleMountedChargePayload.java @@ -2,9 +2,9 @@ package com.craisinlord.antarchy.content.network; import com.craisinlord.antarchy.Antarchy; import io.netty.buffer.ByteBuf; -import com.craisinlord.antarchy.compat.network.ByteBufCodecs; -import com.craisinlord.antarchy.compat.network.StreamCodec; -import com.craisinlord.antarchy.compat.network.CustomPacketPayload; +import com.craisinlord.anthology.network.ByteBufCodecs; +import com.craisinlord.anthology.network.StreamCodec; +import com.craisinlord.anthology.network.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; public record HerculesBeetleMountedChargePayload(boolean pressing) implements CustomPacketPayload { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/HordeIntensityPayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/HordeIntensityPayload.java index 1b2a2001..735618d4 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/HordeIntensityPayload.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/HordeIntensityPayload.java @@ -2,9 +2,9 @@ package com.craisinlord.antarchy.content.network; import com.craisinlord.antarchy.Antarchy; import io.netty.buffer.ByteBuf; -import com.craisinlord.antarchy.compat.network.ByteBufCodecs; -import com.craisinlord.antarchy.compat.network.StreamCodec; -import com.craisinlord.antarchy.compat.network.CustomPacketPayload; +import com.craisinlord.anthology.network.ByteBufCodecs; +import com.craisinlord.anthology.network.StreamCodec; +import com.craisinlord.anthology.network.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; public record HordeIntensityPayload(float intensity) implements CustomPacketPayload { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/ImpactShakePayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/ImpactShakePayload.java deleted file mode 100644 index 90599131..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/ImpactShakePayload.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.craisinlord.antarchy.content.network; - -import com.craisinlord.antarchy.Antarchy; -import io.netty.buffer.ByteBuf; -import com.craisinlord.antarchy.compat.network.ByteBufCodecs; -import com.craisinlord.antarchy.compat.network.StreamCodec; -import com.craisinlord.antarchy.compat.network.CustomPacketPayload; -import net.minecraft.resources.ResourceLocation; - -public record ImpactShakePayload(double x, double y, double z, float intensity, int durationTicks, float radius) implements CustomPacketPayload { - public static final Type TYPE = - new Type<>(new ResourceLocation(Antarchy.MODID, "impact_shake")); - public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - ByteBufCodecs.DOUBLE, - ImpactShakePayload::x, - ByteBufCodecs.DOUBLE, - ImpactShakePayload::y, - ByteBufCodecs.DOUBLE, - ImpactShakePayload::z, - ByteBufCodecs.FLOAT, - ImpactShakePayload::intensity, - ByteBufCodecs.VAR_INT, - ImpactShakePayload::durationTicks, - ByteBufCodecs.FLOAT, - ImpactShakePayload::radius, - ImpactShakePayload::new - ); - - @Override - public Type type() { - return TYPE; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/ImpactShakeSync.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/ImpactShakeSync.java deleted file mode 100644 index dbd437b9..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/ImpactShakeSync.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.craisinlord.antarchy.content.network; - -import java.util.function.BiConsumer; -import net.minecraft.server.level.ServerPlayer; - -public final class ImpactShakeSync { - private static final BiConsumer NOOP = (player, payload) -> { - }; - private static volatile BiConsumer sink = NOOP; - - private ImpactShakeSync() { - } - - public static void setSink(BiConsumer sink) { - ImpactShakeSync.sink = sink == null ? NOOP : sink; - } - - public static void send(ServerPlayer player, ImpactShakePayload payload) { - sink.accept(player, payload); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/JumpyBootsLaunchPayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/JumpyBootsLaunchPayload.java deleted file mode 100644 index 3c00a0e9..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/JumpyBootsLaunchPayload.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.craisinlord.antarchy.content.network; - -import com.craisinlord.antarchy.Antarchy; -import io.netty.buffer.ByteBuf; -import com.craisinlord.antarchy.compat.network.ByteBufCodecs; -import com.craisinlord.antarchy.compat.network.StreamCodec; -import com.craisinlord.antarchy.compat.network.CustomPacketPayload; -import net.minecraft.resources.ResourceLocation; - -public record JumpyBootsLaunchPayload(int chargeTicks, boolean sprinting) implements CustomPacketPayload { - public static final Type TYPE = - new Type<>(new ResourceLocation(Antarchy.MODID, "springy_boots_launch")); - public static final StreamCodec STREAM_CODEC = - StreamCodec.composite( - ByteBufCodecs.VAR_INT, JumpyBootsLaunchPayload::chargeTicks, - ByteBufCodecs.BOOL, JumpyBootsLaunchPayload::sprinting, - JumpyBootsLaunchPayload::new - ); - - @Override - public Type type() { - return TYPE; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/KingJudgmentFlashPayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/KingJudgmentFlashPayload.java new file mode 100644 index 00000000..fc607071 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/KingJudgmentFlashPayload.java @@ -0,0 +1,20 @@ +package com.craisinlord.antarchy.content.network; + +import com.craisinlord.antarchy.Antarchy; +import io.netty.buffer.ByteBuf; +import com.craisinlord.anthology.network.ByteBufCodecs; +import com.craisinlord.anthology.network.StreamCodec; +import com.craisinlord.anthology.network.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; + +public record KingJudgmentFlashPayload(int durationTicks) implements CustomPacketPayload { + public static final Type TYPE = + new Type<>(new ResourceLocation(Antarchy.MODID, "king_judgment_flash")); + public static final StreamCodec STREAM_CODEC = + ByteBufCodecs.VAR_INT.map(KingJudgmentFlashPayload::new, KingJudgmentFlashPayload::durationTicks); + + @Override + public Type type() { + return TYPE; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/KingJudgmentFlashSync.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/KingJudgmentFlashSync.java new file mode 100644 index 00000000..3eaea965 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/KingJudgmentFlashSync.java @@ -0,0 +1,22 @@ +package com.craisinlord.antarchy.content.network; + +import java.util.function.BiConsumer; +import net.minecraft.server.level.ServerPlayer; + +public final class KingJudgmentFlashSync { + private static final BiConsumer NOOP = (player, ticks) -> { + }; + + private static volatile BiConsumer sink = NOOP; + + private KingJudgmentFlashSync() { + } + + public static void setSink(BiConsumer sink) { + KingJudgmentFlashSync.sink = sink == null ? NOOP : sink; + } + + public static void send(ServerPlayer player, int ticks) { + sink.accept(player, ticks); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/OpenGiantFryingPanPayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/OpenGiantFryingPanPayload.java new file mode 100644 index 00000000..8616b8c3 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/OpenGiantFryingPanPayload.java @@ -0,0 +1,19 @@ +package com.craisinlord.antarchy.content.network; + +import com.craisinlord.antarchy.Antarchy; +import io.netty.buffer.ByteBuf; +import com.craisinlord.anthology.network.StreamCodec; +import com.craisinlord.anthology.network.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; + +public record OpenGiantFryingPanPayload() implements CustomPacketPayload { + public static final OpenGiantFryingPanPayload INSTANCE = new OpenGiantFryingPanPayload(); + public static final Type TYPE = + new Type<>(new ResourceLocation(Antarchy.MODID, "open_giant_frying_pan")); + public static final StreamCodec STREAM_CODEC = StreamCodec.unit(INSTANCE); + + @Override + public Type type() { + return TYPE; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/PortalGunIndicatorPayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/PortalGunIndicatorPayload.java new file mode 100644 index 00000000..415c5126 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/PortalGunIndicatorPayload.java @@ -0,0 +1,26 @@ +package com.craisinlord.antarchy.content.network; + +import com.craisinlord.antarchy.Antarchy; +import io.netty.buffer.ByteBuf; +import java.util.UUID; +import com.craisinlord.anthology.network.StreamCodec; +import com.craisinlord.anthology.network.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; + +public record PortalGunIndicatorPayload(UUID gunId, boolean blueAvailable, boolean orangeAvailable) implements CustomPacketPayload { + public static final Type TYPE = new Type<>(new ResourceLocation(Antarchy.MODID, "portal_gun_indicator")); + public static final StreamCodec STREAM_CODEC = StreamCodec.of( + (buffer, payload) -> { + buffer.writeLong(payload.gunId().getMostSignificantBits()); + buffer.writeLong(payload.gunId().getLeastSignificantBits()); + buffer.writeBoolean(payload.blueAvailable()); + buffer.writeBoolean(payload.orangeAvailable()); + }, + buffer -> new PortalGunIndicatorPayload(new UUID(buffer.readLong(), buffer.readLong()), buffer.readBoolean(), buffer.readBoolean()) + ); + + @Override + public Type type() { + return TYPE; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/PortalGunIndicatorRequestPayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/PortalGunIndicatorRequestPayload.java new file mode 100644 index 00000000..5b66e876 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/PortalGunIndicatorRequestPayload.java @@ -0,0 +1,24 @@ +package com.craisinlord.antarchy.content.network; + +import com.craisinlord.antarchy.Antarchy; +import io.netty.buffer.ByteBuf; +import java.util.UUID; +import com.craisinlord.anthology.network.StreamCodec; +import com.craisinlord.anthology.network.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; + +public record PortalGunIndicatorRequestPayload(UUID gunId) implements CustomPacketPayload { + public static final Type TYPE = new Type<>(new ResourceLocation(Antarchy.MODID, "portal_gun_indicator_request")); + public static final StreamCodec STREAM_CODEC = StreamCodec.of( + (buffer, payload) -> { + buffer.writeLong(payload.gunId().getMostSignificantBits()); + buffer.writeLong(payload.gunId().getLeastSignificantBits()); + }, + buffer -> new PortalGunIndicatorRequestPayload(new UUID(buffer.readLong(), buffer.readLong())) + ); + + @Override + public Type type() { + return TYPE; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/PortalGunMoonAimPayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/PortalGunMoonAimPayload.java new file mode 100644 index 00000000..699c1243 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/PortalGunMoonAimPayload.java @@ -0,0 +1,22 @@ +package com.craisinlord.antarchy.content.network; + +import com.craisinlord.antarchy.Antarchy; +import io.netty.buffer.ByteBuf; +import com.craisinlord.anthology.network.ByteBufCodecs; +import com.craisinlord.anthology.network.StreamCodec; +import com.craisinlord.anthology.network.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; + +public record PortalGunMoonAimPayload(boolean tracked, boolean aiming) implements CustomPacketPayload { + public static final Type TYPE = new Type<>(new ResourceLocation(Antarchy.MODID, "portal_gun_moon_aim")); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.BOOL, PortalGunMoonAimPayload::tracked, + ByteBufCodecs.BOOL, PortalGunMoonAimPayload::aiming, + PortalGunMoonAimPayload::new + ); + + @Override + public Type type() { + return TYPE; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/PortalGunPrimaryPayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/PortalGunPrimaryPayload.java index 9df55eb5..a16d3103 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/PortalGunPrimaryPayload.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/PortalGunPrimaryPayload.java @@ -1,14 +1,18 @@ package com.craisinlord.antarchy.content.network; import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.anthology.network.ByteBufCodecs; +import com.craisinlord.anthology.network.CustomPacketPayload; +import com.craisinlord.anthology.network.StreamCodec; import io.netty.buffer.ByteBuf; -import com.craisinlord.antarchy.compat.network.StreamCodec; -import com.craisinlord.antarchy.compat.network.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; -public record PortalGunPrimaryPayload() implements CustomPacketPayload { +public record PortalGunPrimaryPayload(boolean offhand) implements CustomPacketPayload { public static final Type TYPE = new Type<>(new ResourceLocation(Antarchy.MODID, "portal_gun_primary")); - public static final StreamCodec STREAM_CODEC = StreamCodec.unit(new PortalGunPrimaryPayload()); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.BOOL, PortalGunPrimaryPayload::offhand, + PortalGunPrimaryPayload::new + ); @Override public Type type() { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/PortalGunResetPayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/PortalGunResetPayload.java new file mode 100644 index 00000000..8fcf53b5 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/PortalGunResetPayload.java @@ -0,0 +1,20 @@ +package com.craisinlord.antarchy.content.network; + +import com.craisinlord.antarchy.Antarchy; +import io.netty.buffer.ByteBuf; +import com.craisinlord.anthology.network.ByteBufCodecs; +import com.craisinlord.anthology.network.StreamCodec; +import com.craisinlord.anthology.network.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; + +public record PortalGunResetPayload(int action) implements CustomPacketPayload { + public static final Type TYPE = new Type<>(new ResourceLocation(Antarchy.MODID, "portal_gun_reset")); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.VAR_INT, PortalGunResetPayload::action, PortalGunResetPayload::new + ); + + @Override + public Type type() { + return TYPE; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/RoyalGuardianSwordModeCyclePayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/RoyalGuardianSwordModeCyclePayload.java new file mode 100644 index 00000000..d17a3455 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/RoyalGuardianSwordModeCyclePayload.java @@ -0,0 +1,19 @@ +package com.craisinlord.antarchy.content.network; + +import com.craisinlord.antarchy.Antarchy; +import io.netty.buffer.ByteBuf; +import com.craisinlord.anthology.network.StreamCodec; +import com.craisinlord.anthology.network.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; + +public record RoyalGuardianSwordModeCyclePayload() implements CustomPacketPayload { + public static final Type TYPE = new Type<>( + new ResourceLocation(Antarchy.MODID, "royal_guardian_sword_mode_cycle")); + public static final StreamCodec STREAM_CODEC = + StreamCodec.unit(new RoyalGuardianSwordModeCyclePayload()); + + @Override + public Type type() { + return TYPE; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/RoyalMountActionPayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/RoyalMountActionPayload.java index 6e6f3829..78324b44 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/RoyalMountActionPayload.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/RoyalMountActionPayload.java @@ -2,15 +2,16 @@ package com.craisinlord.antarchy.content.network; import com.craisinlord.antarchy.Antarchy; import io.netty.buffer.ByteBuf; -import com.craisinlord.antarchy.compat.network.ByteBufCodecs; -import com.craisinlord.antarchy.compat.network.StreamCodec; -import com.craisinlord.antarchy.compat.network.CustomPacketPayload; +import com.craisinlord.anthology.network.ByteBufCodecs; +import com.craisinlord.anthology.network.StreamCodec; +import com.craisinlord.anthology.network.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; public record RoyalMountActionPayload(int action) implements CustomPacketPayload { public static final int FLIGHT_TOGGLE = 0; public static final int BITE = 1; public static final int SPIT = 2; + public static final int MOUNT = 3; public static final Type TYPE = new Type<>(new ResourceLocation(Antarchy.MODID, "royal_mount_action")); diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/RoyalMountVerticalPayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/RoyalMountVerticalPayload.java index 780ff2d9..c71bf29c 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/RoyalMountVerticalPayload.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/RoyalMountVerticalPayload.java @@ -2,9 +2,9 @@ package com.craisinlord.antarchy.content.network; import com.craisinlord.antarchy.Antarchy; import io.netty.buffer.ByteBuf; -import com.craisinlord.antarchy.compat.network.ByteBufCodecs; -import com.craisinlord.antarchy.compat.network.StreamCodec; -import com.craisinlord.antarchy.compat.network.CustomPacketPayload; +import com.craisinlord.anthology.network.ByteBufCodecs; +import com.craisinlord.anthology.network.StreamCodec; +import com.craisinlord.anthology.network.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; public record RoyalMountVerticalPayload(boolean ascend, boolean descend) implements CustomPacketPayload { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/ScorpionWhipTetherPayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/ScorpionWhipTetherPayload.java index 651bb5ec..bab6251f 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/ScorpionWhipTetherPayload.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/ScorpionWhipTetherPayload.java @@ -2,9 +2,9 @@ package com.craisinlord.antarchy.content.network; import com.craisinlord.antarchy.Antarchy; import io.netty.buffer.ByteBuf; -import com.craisinlord.antarchy.compat.network.ByteBufCodecs; -import com.craisinlord.antarchy.compat.network.StreamCodec; -import com.craisinlord.antarchy.compat.network.CustomPacketPayload; +import com.craisinlord.anthology.network.ByteBufCodecs; +import com.craisinlord.anthology.network.StreamCodec; +import com.craisinlord.anthology.network.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; public record ScorpionWhipTetherPayload(int playerId, int targetId) implements CustomPacketPayload { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/SpringyBootsLaunchPayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/SpringyBootsLaunchPayload.java new file mode 100644 index 00000000..7ee5f0db --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/SpringyBootsLaunchPayload.java @@ -0,0 +1,24 @@ +package com.craisinlord.antarchy.content.network; + +import com.craisinlord.antarchy.Antarchy; +import io.netty.buffer.ByteBuf; +import com.craisinlord.anthology.network.ByteBufCodecs; +import com.craisinlord.anthology.network.StreamCodec; +import com.craisinlord.anthology.network.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; + +public record SpringyBootsLaunchPayload(int chargeTicks, boolean sprinting) implements CustomPacketPayload { + public static final Type TYPE = + new Type<>(new ResourceLocation(Antarchy.MODID, "springy_boots_launch")); + public static final StreamCodec STREAM_CODEC = + StreamCodec.composite( + ByteBufCodecs.VAR_INT, SpringyBootsLaunchPayload::chargeTicks, + ByteBufCodecs.BOOL, SpringyBootsLaunchPayload::sprinting, + SpringyBootsLaunchPayload::new + ); + + @Override + public Type type() { + return TYPE; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/TemporalTunerScrollPayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/TemporalTunerScrollPayload.java new file mode 100644 index 00000000..e840a748 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/TemporalTunerScrollPayload.java @@ -0,0 +1,19 @@ +package com.craisinlord.antarchy.content.network; + +import com.craisinlord.antarchy.Antarchy; +import io.netty.buffer.ByteBuf; +import com.craisinlord.anthology.network.ByteBufCodecs; +import com.craisinlord.anthology.network.StreamCodec; +import com.craisinlord.anthology.network.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; + +public record TemporalTunerScrollPayload(double delta) implements CustomPacketPayload { + public static final Type TYPE = new Type<>(new ResourceLocation(Antarchy.MODID, "temporal_tuner_scroll")); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.DOUBLE, TemporalTunerScrollPayload::delta, TemporalTunerScrollPayload::new); + + @Override + public Type type() { + return TYPE; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/ThoraxisWeatherPayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/ThoraxisWeatherPayload.java deleted file mode 100644 index 17330663..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/ThoraxisWeatherPayload.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.craisinlord.antarchy.content.network; - -import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.weather.ThoraxisWeatherKind; -import io.netty.buffer.ByteBuf; -import com.craisinlord.antarchy.compat.network.ByteBufCodecs; -import com.craisinlord.antarchy.compat.network.StreamCodec; -import com.craisinlord.antarchy.compat.network.CustomPacketPayload; -import net.minecraft.resources.ResourceLocation; - -public record ThoraxisWeatherPayload( - String dimensionId, - String weatherId, - long expiresAt, - int anchorX, - int anchorY, - int anchorZ -) implements CustomPacketPayload { - public static final Type TYPE = - new Type<>(new ResourceLocation(Antarchy.MODID, "thoraxis_weather")); - - public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - ByteBufCodecs.STRING_UTF8, - ThoraxisWeatherPayload::dimensionId, - ByteBufCodecs.STRING_UTF8, - ThoraxisWeatherPayload::weatherId, - ByteBufCodecs.VAR_LONG, - ThoraxisWeatherPayload::expiresAt, - ByteBufCodecs.VAR_INT, - ThoraxisWeatherPayload::anchorX, - ByteBufCodecs.VAR_INT, - ThoraxisWeatherPayload::anchorY, - ByteBufCodecs.VAR_INT, - ThoraxisWeatherPayload::anchorZ, - ThoraxisWeatherPayload::new - ); - - public ThoraxisWeatherPayload(ResourceLocation dimensionId, ThoraxisWeatherKind kind, long expiresAt, int anchorX, int anchorY, int anchorZ) { - this(dimensionId.toString(), kind.id(), expiresAt, anchorX, anchorY, anchorZ); - } - - @Override - public Type type() { - return TYPE; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/TigerEyeCamouflageStatePayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/TigerEyeCamouflageStatePayload.java index ebcedf80..b2499668 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/TigerEyeCamouflageStatePayload.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/TigerEyeCamouflageStatePayload.java @@ -2,9 +2,9 @@ package com.craisinlord.antarchy.content.network; import com.craisinlord.antarchy.Antarchy; import io.netty.buffer.ByteBuf; -import com.craisinlord.antarchy.compat.network.ByteBufCodecs; -import com.craisinlord.antarchy.compat.network.StreamCodec; -import com.craisinlord.antarchy.compat.network.CustomPacketPayload; +import com.craisinlord.anthology.network.ByteBufCodecs; +import com.craisinlord.anthology.network.StreamCodec; +import com.craisinlord.anthology.network.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; public record TigerEyeCamouflageStatePayload(int entityId, boolean active, int blockStateId) implements CustomPacketPayload { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/TimeDilationFieldsPayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/TimeDilationFieldsPayload.java deleted file mode 100644 index 519e076f..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/TimeDilationFieldsPayload.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.craisinlord.antarchy.content.network; - -import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.compat.network.CustomPacketPayload; -import com.craisinlord.antarchy.compat.network.StreamCodec; -import com.craisinlord.antarchy.content.time.TimeDilationFieldSnapshot; -import java.util.ArrayList; -import java.util.List; -import io.netty.buffer.ByteBuf; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.resources.ResourceLocation; - -public record TimeDilationFieldsPayload(List fields) implements CustomPacketPayload { - public static final Type TYPE = new Type<>(new ResourceLocation(Antarchy.MODID, "time_dilation_fields")); - public static final StreamCodec STREAM_CODEC = new StreamCodec<>() { - @Override public TimeDilationFieldsPayload decode(ByteBuf buf) { - int count = Math.min(buf.readInt(), 128); - List fields = new ArrayList<>(count); - for (int i = 0; i < count; i++) fields.add(new TimeDilationFieldSnapshot(buf.readDouble(), buf.readDouble(), buf.readDouble(), buf.readDouble(), buf.readDouble(), buf.readInt(), buf.readInt())); - return new TimeDilationFieldsPayload(fields); - } - @Override public void encode(ByteBuf buf, TimeDilationFieldsPayload value) { - int count = Math.min(value.fields().size(), 128); - buf.writeInt(count); - for (int i = 0; i < count; i++) { TimeDilationFieldSnapshot f = value.fields().get(i); buf.writeDouble(f.x()); buf.writeDouble(f.y()); buf.writeDouble(f.z()); buf.writeDouble(f.radius()); buf.writeDouble(f.rate()); buf.writeInt(f.age()); buf.writeInt(f.durationTicks()); } - } - }; - public TimeDilationFieldsPayload { fields = List.copyOf(fields); } - @Override public Type type() { return TYPE; } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/TimeDilationRatePayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/TimeDilationRatePayload.java deleted file mode 100644 index b1b51c92..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/TimeDilationRatePayload.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.craisinlord.antarchy.content.network; - -import com.craisinlord.antarchy.Antarchy; -import io.netty.buffer.ByteBuf; -import java.util.UUID; -import com.craisinlord.antarchy.compat.network.ByteBufCodecs; -import com.craisinlord.antarchy.compat.network.StreamCodec; -import com.craisinlord.antarchy.compat.network.CustomPacketPayload; -import net.minecraft.resources.ResourceLocation; - -public record TimeDilationRatePayload(UUID entityUuid, double rate) implements CustomPacketPayload { - public static final Type TYPE = - new Type<>(new ResourceLocation(Antarchy.MODID, "time_dilation_rate")); - private static final StreamCodec UUID_CODEC = new StreamCodec<>() { - @Override - public UUID decode(ByteBuf buf) { - return new UUID(buf.readLong(), buf.readLong()); - } - - @Override - public void encode(ByteBuf buf, UUID uuid) { - buf.writeLong(uuid.getMostSignificantBits()); - buf.writeLong(uuid.getLeastSignificantBits()); - } - }; - public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - UUID_CODEC, TimeDilationRatePayload::entityUuid, - ByteBufCodecs.DOUBLE, TimeDilationRatePayload::rate, - TimeDilationRatePayload::new - ); - - @Override - public Type type() { - return TYPE; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/ToggleRoyalInversionPayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/ToggleRoyalInversionPayload.java index 3296c1fd..e489f529 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/ToggleRoyalInversionPayload.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/ToggleRoyalInversionPayload.java @@ -2,8 +2,8 @@ package com.craisinlord.antarchy.content.network; import com.craisinlord.antarchy.Antarchy; import io.netty.buffer.ByteBuf; -import com.craisinlord.antarchy.compat.network.StreamCodec; -import com.craisinlord.antarchy.compat.network.CustomPacketPayload; +import com.craisinlord.anthology.network.StreamCodec; +import com.craisinlord.anthology.network.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; public record ToggleRoyalInversionPayload() implements CustomPacketPayload { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/ToggleTigerEyeCamouflagePayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/ToggleTigerEyeCamouflagePayload.java index 6d3cae80..71229435 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/ToggleTigerEyeCamouflagePayload.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/ToggleTigerEyeCamouflagePayload.java @@ -2,8 +2,8 @@ package com.craisinlord.antarchy.content.network; import com.craisinlord.antarchy.Antarchy; import io.netty.buffer.ByteBuf; -import com.craisinlord.antarchy.compat.network.StreamCodec; -import com.craisinlord.antarchy.compat.network.CustomPacketPayload; +import com.craisinlord.anthology.network.StreamCodec; +import com.craisinlord.anthology.network.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; public record ToggleTigerEyeCamouflagePayload() implements CustomPacketPayload { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/WormHookTetherPayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/WormHookTetherPayload.java index 41fee91b..7e1802b9 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/WormHookTetherPayload.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/WormHookTetherPayload.java @@ -2,9 +2,9 @@ package com.craisinlord.antarchy.content.network; import com.craisinlord.antarchy.Antarchy; import io.netty.buffer.ByteBuf; -import com.craisinlord.antarchy.compat.network.ByteBufCodecs; -import com.craisinlord.antarchy.compat.network.StreamCodec; -import com.craisinlord.antarchy.compat.network.CustomPacketPayload; +import com.craisinlord.anthology.network.ByteBufCodecs; +import com.craisinlord.anthology.network.StreamCodec; +import com.craisinlord.anthology.network.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; public record WormHookTetherPayload(int playerId, int hookId) implements CustomPacketPayload { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalManager.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalManager.java index 9fc76074..d1296bc6 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalManager.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalManager.java @@ -1,15 +1,11 @@ package com.craisinlord.antarchy.content.portal; -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; -import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.level.Level; import net.minecraft.world.phys.AABB; @@ -17,9 +13,7 @@ import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.Nullable; public final class PermanentPortalManager { - private static final int TELEPORT_DELAY_TICKS = 20; private static final int ACTIVATION_SEARCH_RADIUS = 2; - private static final Map WARMUPS = new HashMap<>(); private PermanentPortalManager() { } @@ -50,37 +44,6 @@ public final class PermanentPortalManager { return true; } - public static void handleEntityInsidePortal(Entity entity, PermanentPortalType type) { - if (!(entity.level() instanceof ServerLevel serverLevel) || !type.isEnabled() || entity.isPassenger() || entity.isVehicle()) { - return; - } - if (entity.isOnPortalCooldown()) { - WARMUPS.remove(entity.getUUID()); - return; - } - - long gameTime = serverLevel.getGameTime(); - PortalWarmup warmup = WARMUPS.computeIfAbsent(entity.getUUID(), ignored -> new PortalWarmup()); - if (warmup.type != type || warmup.lastSeenTick < gameTime - 1) { - warmup.ticks = 0; - } - warmup.type = type; - if (warmup.lastSeenTick != gameTime) { - warmup.ticks++; - warmup.lastSeenTick = gameTime; - } - - if (warmup.ticks < TELEPORT_DELAY_TICKS) { - return; - } - - WARMUPS.remove(entity.getUUID()); - PermanentPortalTeleporter.teleport(entity, type); - if (entity.level() instanceof ServerLevel currentLevel) { - currentLevel.playSound(null, entity.getX(), entity.getY(), entity.getZ(), SoundEvents.PORTAL_TRAVEL, SoundSource.PLAYERS, 0.8F, 1.0F); - } - } - public static boolean isPortalStillValid(ServerLevel level, BlockPos pos, PermanentPortalType type, Direction.Axis axis) { PermanentPortalShape shape = PermanentPortalShape.findActive(level, pos, type, axis); return shape != null && shape.contains(pos); @@ -137,10 +100,4 @@ public final class PermanentPortalManager { level.playSound(null, center.x, center.y, center.z, sound, SoundSource.BLOCKS, volume, pitch); spawnActivationParticles(level, type, center); } - - private static final class PortalWarmup { - private PermanentPortalType type; - private long lastSeenTick; - private int ticks; - } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalShape.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalShape.java index 244643da..e4b353d5 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalShape.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalShape.java @@ -19,7 +19,6 @@ public final class PermanentPortalShape { public static final int MIN_WIDTH = 2; public static final int MIN_HEIGHT = 3; public static final int MAX_SIZE = 21; - public static final int ACTIVE_SEARCH_RADIUS = 24; private final TagKey frameTag; private final Block portalBlock; @@ -78,26 +77,6 @@ public final class PermanentPortalShape { return find(level, interiorPos, type.frameTag(), portalBlock, axis, state -> state.is(portalBlock)); } - @Nullable - public static PermanentPortalShape findActiveNear(BlockGetter level, BlockPos center, PermanentPortalType type) { - for (int x = center.getX() - ACTIVE_SEARCH_RADIUS; x <= center.getX() + ACTIVE_SEARCH_RADIUS; x++) { - for (int y = center.getY() - ACTIVE_SEARCH_RADIUS; y <= center.getY() + ACTIVE_SEARCH_RADIUS; y++) { - for (int z = center.getZ() - ACTIVE_SEARCH_RADIUS; z <= center.getZ() + ACTIVE_SEARCH_RADIUS; z++) { - BlockPos candidate = new BlockPos(x, y, z); - PermanentPortalShape xShape = findActive(level, candidate, type, Direction.Axis.X); - if (xShape != null) { - return xShape; - } - PermanentPortalShape zShape = findActive(level, candidate, type, Direction.Axis.Z); - if (zShape != null) { - return zShape; - } - } - } - } - return null; - } - @Nullable private static PermanentPortalShape find( BlockGetter level, @@ -227,10 +206,6 @@ public final class PermanentPortalShape { for (int y = -1; y <= 3; y++) { for (int x = -1; x <= 2; x++) { BlockPos pos = bottomLeft.relative(widthDirection, x).above(y); - boolean cornerSpot = (x == -1 || x == 2) && (y == -1 || y == 3); - if (cornerSpot) { - continue; - } if (x == -1 || x == 2 || y == -1 || y == 3) { level.setBlock(pos, frameState, Block.UPDATE_ALL); } else { @@ -250,10 +225,6 @@ public final class PermanentPortalShape { BlockPos pos = bottomLeft.relative(widthDirection, x).above(y); BlockState state = level.getBlockState(pos); boolean frameSpot = x == -1 || x == 2 || y == -1 || y == 3; - boolean cornerSpot = (x == -1 || x == 2) && (y == -1 || y == 3); - if (cornerSpot) { - continue; - } if (frameSpot) { if (y != -1 && !state.isAir() && !state.is(frameBlock) && !state.canBeReplaced()) { return false; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalTeleporter.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalTeleporter.java index 2b943769..78123f91 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalTeleporter.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalTeleporter.java @@ -1,19 +1,28 @@ package com.craisinlord.antarchy.content.portal; import com.craisinlord.antarchy.config.AntarchySettings; +import java.util.Comparator; import java.util.LinkedHashSet; +import java.util.List; import java.util.Set; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.network.protocol.game.ClientboundLevelEventPacket; +import net.minecraft.tags.BlockTags; import net.minecraft.resources.ResourceKey; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.util.Mth; import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.ai.village.poi.PoiManager; +import net.minecraft.world.entity.ai.village.poi.PoiRecord; import net.minecraft.world.entity.vehicle.DismountHelper; +import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.LevelEvent; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.Nullable; @@ -21,12 +30,15 @@ import org.jetbrains.annotations.Nullable; public final class PermanentPortalTeleporter { private static final int SEARCH_RADIUS = 24; private static final int VERTICAL_SEARCH = 24; - private static final int EXISTING_PORTAL_SEARCH_RADIUS = 48; + private static final int EXISTING_PORTAL_SEARCH_RADIUS = 128; private PermanentPortalTeleporter() { } - public record Transition(ServerLevel newLevel, Vec3 pos, float yRot, float xRot) { + public record Transition(ServerLevel newLevel, Vec3 pos, float yRot, float xRot, boolean playPortalSound) { + private static Transition doNothing(ServerLevel level) { + return new Transition(level, Vec3.atBottomCenterOf(level.getSharedSpawnPos()), 0.0F, 0.0F, false); + } } public static void teleport(Entity entity, PermanentPortalType type) { @@ -34,21 +46,31 @@ public final class PermanentPortalTeleporter { return; } + entity.setPortalCooldown(); Transition transition = createTransition(sourceLevel, entity, entity.blockPosition(), type); Entity movedEntity = moveEntity(entity, transition); if (movedEntity != null) { movedEntity.setPortalCooldown(); + if (transition.playPortalSound() && movedEntity instanceof ServerPlayer player) { + player.connection.send(new ClientboundLevelEventPacket(LevelEvent.SOUND_PORTAL_TRAVEL, BlockPos.ZERO, 0, false)); + } } } public static Transition createTransition(ServerLevel sourceLevel, Entity entity, BlockPos portalPos, PermanentPortalType type) { ServerLevel destination = resolveDestination(sourceLevel, type); if (destination == null) { - return new Transition(sourceLevel, entity.position(), entity.getYRot(), entity.getXRot()); + return Transition.doNothing(sourceLevel); } - Vec3 arrival = findArrivalPosition(entity, destination, portalPos, type); - return new Transition(destination, arrival, entity.getYRot(), entity.getXRot()); + Vec3 arrival = findArrivalPosition(sourceLevel, entity, destination, portalPos, type); + if (arrival == null) { + if (entity instanceof ServerPlayer player) { + player.displayClientMessage(net.minecraft.network.chat.Component.translatable("message.antarchy.teleport_arrival_failed"), true); + } + return Transition.doNothing(sourceLevel); + } + return new Transition(destination, arrival, entity.getYRot(), entity.getXRot(), true); } @Nullable @@ -59,19 +81,18 @@ public final class PermanentPortalTeleporter { return sourceLevel.getServer().getLevel(type.primaryDimension()); } - private static Vec3 findArrivalPosition(Entity entity, ServerLevel destination, BlockPos preferredPos, PermanentPortalType type) { - PermanentPortalShape active = PermanentPortalShape.findActiveNear(destination, preferredPos, type); - if (active != null) { - return active.center(); + @Nullable + private static Vec3 findArrivalPosition(ServerLevel source, Entity entity, ServerLevel destination, BlockPos preferredPos, PermanentPortalType type) { + double scale = DimensionType.getTeleportationScale(source.dimensionType(), destination.dimensionType()); + preferredPos = BlockPos.containing(preferredPos.getX() * scale, preferredPos.getY(), preferredPos.getZ() * scale); + PermanentPortalShape existing = findExistingPortal(destination, preferredPos, type); + if (existing != null) { + Vec3 safePortalPosition = tryFindSafePosition(entity, destination, BlockPos.containing(existing.center())); + return safePortalPosition != null ? safePortalPosition : existing.center(); } - Vec3 safe = findSafeArrivalPosition(entity, destination, preferredPos); + Vec3 safe = findSafeArrivalPosition(entity, destination, preferredPos, type); if (safe != null) { - PermanentPortalShape nearbyActive = findActiveNearby(destination, BlockPos.containing(safe), type); - if (nearbyActive != null) { - return nearbyActive.center(); - } - PermanentPortalShape created = createReturnPortal(destination, safe, type); if (created != null) { return created.center(); @@ -79,45 +100,52 @@ public final class PermanentPortalTeleporter { return createFallbackPortal(destination, BlockPos.containing(safe), type); } - return createFallbackPortal(destination, preferredPos, type); - } - - @Nullable - private static PermanentPortalShape findActiveNearby(ServerLevel level, BlockPos center, PermanentPortalType type) { - for (int radius = 0; radius <= EXISTING_PORTAL_SEARCH_RADIUS; radius++) { - for (int xOff = -radius; xOff <= radius; xOff++) { - for (int yOff = -radius; yOff <= radius; yOff++) { - for (int zOff = -radius; zOff <= radius; zOff++) { - if (radius > 0 && Math.abs(xOff) != radius && Math.abs(yOff) != radius && Math.abs(zOff) != radius) { - continue; - } - - BlockPos candidate = center.offset(xOff, yOff, zOff); - PermanentPortalShape xShape = PermanentPortalShape.findActive(level, candidate, type, Direction.Axis.X); - if (xShape != null) { - return xShape; - } - PermanentPortalShape zShape = PermanentPortalShape.findActive(level, candidate, type, Direction.Axis.Z); - if (zShape != null) { - return zShape; - } - } - } - } - } - return null; } @Nullable - private static Vec3 findSafeArrivalPosition(Entity entity, ServerLevel destination, BlockPos preferredPos) { - int[] yRange = getDimensionYRange(destination); + private static PermanentPortalShape findExistingPortal(ServerLevel level, BlockPos center, PermanentPortalType type) { + PoiManager poiManager = level.getPoiManager(); + poiManager.ensureLoadedAndValid(level, center, EXISTING_PORTAL_SEARCH_RADIUS); + Block portalBlock = type.portalBlock(); + List candidates = poiManager.getInSquare( + holder -> holder.is(type.poiKey()), center, EXISTING_PORTAL_SEARCH_RADIUS, PoiManager.Occupancy.ANY) + .map(PoiRecord::getPos) + .filter(level.getWorldBorder()::isWithinBounds) + .sorted(Comparator.comparingDouble(pos -> horizontalDistanceSqr(pos, center)) + .thenComparingInt(pos -> Math.abs(pos.getY() - center.getY()))) + .toList(); + for (BlockPos pos : candidates) { + BlockState state = level.getBlockState(pos); + if (!state.is(portalBlock) || !state.hasProperty(BlockStateProperties.HORIZONTAL_AXIS)) { + continue; + } + PermanentPortalShape shape = PermanentPortalShape.findActive(level, pos, type, state.getValue(BlockStateProperties.HORIZONTAL_AXIS)); + if (shape != null) { + return shape; + } + } + return null; + } + + private static double horizontalDistanceSqr(BlockPos a, BlockPos b) { + double dx = a.getX() - b.getX(); + double dz = a.getZ() - b.getZ(); + return dx * dx + dz * dz; + } + + @Nullable + private static Vec3 findSafeArrivalPosition(Entity entity, ServerLevel destination, BlockPos preferredPos, PermanentPortalType type) { + int[] yRange = getDimensionYRange(destination, type); if (yRange != null) { return findSafeArrivalPositionInYRange(entity, destination, preferredPos, yRange[0], yRange[1]); } Set candidates = new LinkedHashSet<>(); - addCandidate(candidates, preferredPos); + boolean elythia = destination.dimension() == PermanentPortalType.ELYTHIA.primaryDimension(); + if (!elythia) { + addCandidate(candidates, preferredPos); + } for (int radius = 0; radius <= SEARCH_RADIUS; radius++) { for (int xOff = -radius; xOff <= radius; xOff++) { @@ -128,19 +156,31 @@ public final class PermanentPortalTeleporter { BlockPos horizontalPos = preferredPos.offset(xOff, 0, zOff); if (destination.hasChunkAt(horizontalPos)) { - addCandidate(candidates, destination.getHeightmapPos(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, horizontalPos)); - addCandidate(candidates, destination.getHeightmapPos(Heightmap.Types.WORLD_SURFACE, horizontalPos)); + BlockPos surface = destination.getHeightmapPos(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, horizontalPos); + if (elythia) { + candidates.add(surface); + candidates.add(surface.above()); + } else { + addCandidate(candidates, surface); + addCandidate(candidates, destination.getHeightmapPos(Heightmap.Types.WORLD_SURFACE, horizontalPos)); + } } - for (int yOff = 0; yOff <= VERTICAL_SEARCH; yOff++) { - addCandidate(candidates, horizontalPos.above(yOff)); - if (yOff > 0) { - addCandidate(candidates, horizontalPos.below(yOff)); + if (!elythia) { + for (int yOff = 0; yOff <= VERTICAL_SEARCH; yOff++) { + addCandidate(candidates, horizontalPos.above(yOff)); + if (yOff > 0) { + addCandidate(candidates, horizontalPos.below(yOff)); + } } } } } } + if (elythia) { + addCandidate(candidates, preferredPos); + } + for (BlockPos candidate : candidates) { Vec3 safe = tryFindSafePosition(entity, destination, candidate); if (safe != null) { @@ -279,12 +319,12 @@ public final class PermanentPortalTeleporter { } @Nullable - private static int[] getDimensionYRange(ServerLevel destination) { + private static int[] getDimensionYRange(ServerLevel destination, PermanentPortalType type) { ResourceKey dim = destination.dimension(); if (dim == AntarchySettings.termiteDestinationDimension()) { return new int[]{100, 200}; } - if (dim == AntarchySettings.brownAntDestinationDimension()) { + if (type != PermanentPortalType.ELYTHIA && dim == AntarchySettings.brownAntDestinationDimension()) { return new int[]{75, 120}; } return null; @@ -292,6 +332,36 @@ public final class PermanentPortalTeleporter { private static boolean isValidArrivalPosition(ServerLevel destination, Vec3 safePos) { BlockPos standPos = BlockPos.containing(safePos); + if (destination.dimension() == PermanentPortalType.ELYTHIA.primaryDimension()) { + BlockPos supportPos = standPos.below(); + if (!destination.hasChunkAt(standPos) || !destination.hasChunkAt(supportPos)) { + return false; + } + BlockState support = destination.getBlockState(supportPos); + if (!support.isFaceSturdy(destination, supportPos, Direction.UP) + || support.is(BlockTags.LEAVES) + || !support.getFluidState().isEmpty()) { + return false; + } + int nearbySupports = 0; + for (Direction direction : Direction.Plane.HORIZONTAL) { + BlockPos neighbor = supportPos.relative(direction); + if (!destination.hasChunkAt(neighbor)) { + continue; + } + for (int yOff = -2; yOff <= 2; yOff++) { + BlockPos nearby = neighbor.offset(0, yOff, 0); + BlockState nearbyState = destination.getBlockState(nearby); + if (nearbyState.isFaceSturdy(destination, nearby, Direction.UP) + && !nearbyState.is(BlockTags.LEAVES) + && nearbyState.getFluidState().isEmpty()) { + nearbySupports++; + break; + } + } + } + return nearbySupports >= 2; + } if (destination.dimension() == AntarchySettings.termiteDestinationDimension() || destination.dimension() == AntarchySettings.redAntDestinationDimension()) { if (!destination.hasChunkAt(standPos) || !destination.hasChunkAt(standPos.below())) { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalType.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalType.java index 3737126f..3016cdb6 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalType.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalType.java @@ -5,13 +5,22 @@ import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.entity.ant.BrownAntEntity; import com.craisinlord.antarchy.content.entity.ant.RedAntEntity; import com.craisinlord.antarchy.content.entity.ant.TermiteEntity; +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.mixins.PoiTypesAccessor; +import java.util.Map; import java.util.Objects; import java.util.function.Supplier; +import net.minecraft.core.Holder; +import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.TagKey; import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.village.poi.PoiType; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.Nullable; public enum PermanentPortalType { @@ -95,6 +104,21 @@ public enum PermanentPortalType { return this.primaryDimensionSupplier.get(); } + public ResourceKey poiKey() { + return ResourceKey.create(Registries.POINT_OF_INTEREST_TYPE, new ResourceLocation(Antarchy.MODID, this.id + "_portal")); + } + + public static void registerPoiStates(Registry registry) { + Map> stateMap = PoiTypesAccessor.antarchy$getTypeByState(); + for (PermanentPortalType type : values()) { + registry.getHolder(type.poiKey()).ifPresent(poi -> { + for (BlockState state : type.portalBlock().getStateDefinition().getPossibleStates()) { + stateMap.putIfAbsent(state, poi); + } + }); + } + } + public TagKey frameTag() { return this.frameTag; } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portal/RainbowPortalIgniter.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portal/RainbowPortalIgniter.java index ff83f8d7..bcb831a7 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portal/RainbowPortalIgniter.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portal/RainbowPortalIgniter.java @@ -13,12 +13,6 @@ import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.Nullable; -/** - * Converts an unlit obsidian frame near a killed rainbow ant into a real, permanent Infinite Dimensions - * portal to that ant's assigned dimension. Lights the frame as a normal vanilla Nether portal first, then - * hands it to Infinity's own portal-creation pipeline (the same one used when a book is thrown into a lit - * portal), so the result behaves exactly like any other physical Infinity portal from then on. - */ public final class RainbowPortalIgniter { private static final int SEARCH_RADIUS = 2; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunBlackHoleEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunBlackHoleEntity.java deleted file mode 100644 index 291b1805..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunBlackHoleEntity.java +++ /dev/null @@ -1,197 +0,0 @@ -package com.craisinlord.antarchy.content.portalgun; - -import java.util.List; -import java.util.UUID; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.sounds.SoundEvents; -import net.minecraft.sounds.SoundSource; -import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.item.ItemEntity; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.Level; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec3; -import software.bernie.geckolib.animatable.GeoEntity; -import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; -import software.bernie.geckolib.core.animation.AnimatableManager; -import software.bernie.geckolib.core.animation.AnimationController; -import software.bernie.geckolib.core.animation.AnimationState; -import software.bernie.geckolib.core.object.PlayState; -import software.bernie.geckolib.core.animation.RawAnimation; -import software.bernie.geckolib.util.GeckoLibUtil; - -public class PortalGunBlackHoleEntity extends Entity implements GeoEntity { - private static final RawAnimation OPEN_ANIM = RawAnimation.begin().thenPlay("open"); - private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); - private static final RawAnimation CLOSE_ANIM = RawAnimation.begin().thenPlay("close"); - private static final int OPEN_TICKS = 10; - private static final int CLOSE_TICKS = 12; - private static final int LIFETIME_TICKS = 20 * 12; - private static final double PULL_RADIUS = 6.0D; - private static final double CONSUME_RADIUS = 0.6D; - private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); - private UUID ownerId; - private int ageTicks; - private boolean closing; - - public PortalGunBlackHoleEntity(EntityType entityType, Level level) { - super(entityType, level); - this.setInvulnerable(true); - this.noPhysics = true; - this.noCulling = true; - } - - @Override - protected void defineSynchedData() { - } - - public void configure(UUID ownerId) { - this.ownerId = ownerId; - } - - @Override - public void tick() { - super.tick(); - this.ageTicks++; - this.setYRot(this.getYRot() + 6.0F); - if (this.level().isClientSide) { - return; - } - if (!(this.level() instanceof ServerLevel serverLevel)) { - return; - } - if (this.ageTicks >= LIFETIME_TICKS - CLOSE_TICKS) { - this.closing = true; - } - if (this.ageTicks >= LIFETIME_TICKS) { - this.discard(); - return; - } - this.pullNearby(serverLevel); - if (this.ageTicks % 10 == 0) { - serverLevel.playSound(null, this.blockPosition(), SoundEvents.PORTAL_AMBIENT, SoundSource.HOSTILE, 0.5F, 0.6F); - } - } - - private void pullNearby(ServerLevel level) { - AABB pullBox = this.getBoundingBox().inflate(PULL_RADIUS); - List nearby = level.getEntities(this, pullBox, this::canAffect); - for (Entity entity : nearby) { - Vec3 toCenter = this.position().subtract(entity.position()); - double distance = toCenter.length(); - if (distance < 1.0E-4D) { - continue; - } - if (distance <= CONSUME_RADIUS) { - this.consume(entity); - continue; - } - double strength = 0.09D * (1.0D - Math.min(distance / PULL_RADIUS, 1.0D)) + 0.02D; - Vec3 pull = toCenter.normalize().scale(strength); - entity.setDeltaMovement(entity.getDeltaMovement().add(pull)); - entity.hasImpulse = true; - entity.fallDistance = 0.0F; - } - } - - private boolean canAffect(Entity entity) { - if (!entity.isAlive() || entity instanceof PortalGunPortalEntity || entity instanceof PortalGunBlackHoleEntity) { - return false; - } - if (entity instanceof Player player && player.isCreative()) { - return false; - } - return entity instanceof ItemEntity || entity instanceof LivingEntity; - } - - private void consume(Entity entity) { - if (entity instanceof ItemEntity itemEntity) { - itemEntity.discard(); - } else if (entity instanceof Player) { - entity.teleportTo(this.getX(), this.getY(), this.getZ()); - entity.setDeltaMovement(Vec3.ZERO); - } else if (entity instanceof LivingEntity living) { - living.hurt(this.damageSources().magic(), 4.0F); - entity.setDeltaMovement(entity.getDeltaMovement().scale(0.1D)); - } - } - - @Override - public AABB getBoundingBoxForCulling() { - return this.getBoundingBox().inflate(2.0D); - } - - @Override - protected AABB makeBoundingBox() { - return new AABB(this.getX() - 0.6D, this.getY() - 0.6D, this.getZ() - 0.6D, this.getX() + 0.6D, this.getY() + 0.6D, this.getZ() + 0.6D); - } - - @Override - public void addAdditionalSaveData(CompoundTag tag) { - if (this.ownerId != null) { - tag.putUUID("OwnerId", this.ownerId); - } - tag.putInt("AgeTicks", this.ageTicks); - } - - @Override - public void readAdditionalSaveData(CompoundTag tag) { - if (tag.hasUUID("OwnerId")) { - this.ownerId = tag.getUUID("OwnerId"); - } - this.ageTicks = tag.getInt("AgeTicks"); - } - - @Override - public boolean isInvulnerableTo(DamageSource damageSource) { - return true; - } - - @Override - public boolean fireImmune() { - return true; - } - - @Override - public void lavaHurt() { - } - - @Override - public boolean isPushable() { - return false; - } - - @Override - public boolean canBeCollidedWith() { - return false; - } - - @Override - public boolean isPickable() { - return false; - } - - @Override - public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "black_hole_controller", 0, this::blackHoleController)); - } - - private PlayState blackHoleController(AnimationState state) { - if (this.closing) { - return state.setAndContinue(CLOSE_ANIM); - } - if (this.ageTicks < OPEN_TICKS) { - return state.setAndContinue(OPEN_ANIM); - } - return state.setAndContinue(IDLE_ANIM); - } - - @Override - public AnimatableInstanceCache getAnimatableInstanceCache() { - return this.geoCache; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunCollisionHelper.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunCollisionHelper.java deleted file mode 100644 index e659d73b..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunCollisionHelper.java +++ /dev/null @@ -1,203 +0,0 @@ -package com.craisinlord.antarchy.content.portalgun; - -import java.util.List; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec3; -import net.minecraft.world.phys.shapes.Shapes; -import net.minecraft.world.phys.shapes.VoxelShape; - -public final class PortalGunCollisionHelper { - private static final double SEARCH_PADDING = 1.5D; - private static final double PLANE_TOLERANCE = 0.06D; - private static final double EDGE_PADDING = 0.2D; - private static final double DEPTH_PADDING = 0.45D; - private static final double BORDER_TOLERANCE = 0.02D; - private static final double BORDER_THICKNESS = 0.0125D; - - private PortalGunCollisionHelper() { - } - - public static Vec3 resolveCollision(Entity entity, AABB startBox, Vec3 movement, Vec3 collided) { - if (movement.lengthSqr() <= 1.0E-7D) { - return collided; - } - AABB pathBox = startBox.expandTowards(movement).inflate(SEARCH_PADDING); - List nearby = entity.level().getEntities(entity, pathBox, candidate -> candidate instanceof PortalGunPortalEntity && candidate.isAlive()); - if (nearby.isEmpty()) { - return collided; - } - Vec3 adjusted = collided; - for (Entity candidate : nearby) { - PortalGunPortalEntity portal = (PortalGunPortalEntity) candidate; - Vec3 candidateAdjusted = resolveCollisionAgainstPortal(entity, startBox, movement, adjusted, portal); - if (candidateAdjusted.distanceToSqr(movement) < adjusted.distanceToSqr(movement)) { - adjusted = candidateAdjusted; - } - } - return adjusted; - } - - private static Vec3 resolveCollisionAgainstPortal(Entity entity, AABB startBox, Vec3 movement, Vec3 collided, PortalGunPortalEntity portal) { - PortalGunWorldPortalShape shape = portal.getWorldPortalShape(); - Vec3 normal = portal.getNormalVec().normalize(); - double desiredNormal = movement.dot(normal); - double collidedNormal = collided.dot(normal); - if (desiredNormal >= -1.0E-5D || desiredNormal >= collidedNormal - 1.0E-5D) { - return collided; - } - if (!canUsePortalPassThrough(entity, startBox, movement, portal, shape)) { - return collided; - } - double restoreAmount = desiredNormal - collidedNormal; - Vec3 adjusted = collided.add(normal.scale(restoreAmount)); - return applyBorderCollision(entity, startBox, adjusted, portal); - } - - private static boolean canUsePortalPassThrough(Entity entity, AABB startBox, Vec3 movement, PortalGunPortalEntity portal, PortalGunWorldPortalShape shape) { - AABB endBox = startBox.move(movement); - if (!portal.getPortalInsides(entity).intersects(startBox) - && !portal.getPortalInsides(entity).intersects(endBox) - && !intersectsPortalWindow(startBox, shape) - && !intersectsPortalWindow(endBox, shape) - && !segmentIntersectsPortalWindow(shape, startBox, endBox)) { - return false; - } - if (crossesPortal(shape, entity, startBox, movement)) { - return true; - } - Vec3 startCenter = startBox.getCenter(); - Vec3 endCenter = endBox.getCenter(); - PortalGunWorldPortalShape.PortalLocalCoords startCoords = shape.localCoords(startCenter); - PortalGunWorldPortalShape.PortalLocalCoords endCoords = shape.localCoords(endCenter); - return startCoords.depth() > 0.0D - && endCoords.depth() >= -PLANE_TOLERANCE - && Math.abs(endCoords.horizontal()) <= shape.halfWidth() + EDGE_PADDING - && Math.abs(endCoords.vertical()) <= shape.halfHeight() + EDGE_PADDING - && projectedWindowOverlap(shape, startBox, endBox); - } - - private static boolean intersectsPortalWindow(AABB box, PortalGunWorldPortalShape shape) { - for (Vec3 corner : corners(box)) { - PortalGunWorldPortalShape.PortalLocalCoords coords = shape.localCoords(corner); - if (Math.abs(coords.horizontal()) <= shape.halfWidth() + EDGE_PADDING - && Math.abs(coords.vertical()) <= shape.halfHeight() + EDGE_PADDING - && coords.depth() <= DEPTH_PADDING - && coords.depth() >= -PLANE_TOLERANCE) { - return true; - } - } - return false; - } - - private static boolean segmentIntersectsPortalWindow(PortalGunWorldPortalShape shape, AABB startBox, AABB endBox) { - for (Vec3 startCorner : corners(startBox)) { - Vec3 endCorner = matchSample(startCorner, startBox, endBox); - if (shape.crosses(startCorner, endCorner)) { - return true; - } - } - return false; - } - - private static boolean projectedWindowOverlap(PortalGunWorldPortalShape shape, AABB startBox, AABB endBox) { - double minHorizontal = Double.POSITIVE_INFINITY; - double maxHorizontal = Double.NEGATIVE_INFINITY; - double minVertical = Double.POSITIVE_INFINITY; - double maxVertical = Double.NEGATIVE_INFINITY; - for (Vec3 corner : corners(startBox)) { - PortalGunWorldPortalShape.PortalLocalCoords coords = shape.localCoords(corner); - minHorizontal = Math.min(minHorizontal, coords.horizontal()); - maxHorizontal = Math.max(maxHorizontal, coords.horizontal()); - minVertical = Math.min(minVertical, coords.vertical()); - maxVertical = Math.max(maxVertical, coords.vertical()); - } - for (Vec3 corner : corners(endBox)) { - PortalGunWorldPortalShape.PortalLocalCoords coords = shape.localCoords(corner); - minHorizontal = Math.min(minHorizontal, coords.horizontal()); - maxHorizontal = Math.max(maxHorizontal, coords.horizontal()); - minVertical = Math.min(minVertical, coords.vertical()); - maxVertical = Math.max(maxVertical, coords.vertical()); - } - return maxHorizontal >= -shape.halfWidth() - BORDER_TOLERANCE - && minHorizontal <= shape.halfWidth() + BORDER_TOLERANCE - && maxVertical >= -shape.halfHeight() - BORDER_TOLERANCE - && minVertical <= shape.halfHeight() + BORDER_TOLERANCE; - } - - private static Vec3 applyBorderCollision(Entity entity, AABB startBox, Vec3 movement, PortalGunPortalEntity portal) { - if (movement.lengthSqr() <= 1.0E-7D) { - return movement; - } - AABB endBox = startBox.move(movement); - if (!portal.getPortalInsides(entity).intersects(startBox) - && !portal.getPortalInsides(entity).intersects(endBox) - && !intersectsPortalWindow(startBox, portal.getWorldPortalShape()) - && !intersectsPortalWindow(endBox, portal.getWorldPortalShape())) { - return movement; - } - List shapes = portal.getWorldPortalShape().getCollisionBoundaries(BORDER_THICKNESS).stream() - .map(Shapes::create) - .toList(); - Vec3 collided = Entity.collideBoundingBox(entity, movement, startBox, entity.level(), shapes); - return collided.distanceToSqr(movement) < 1.0E-7D ? movement : collided; - } - - private static boolean crossesPortal(PortalGunWorldPortalShape shape, Entity entity, AABB startBox, Vec3 movement) { - AABB endBox = startBox.move(movement); - for (Vec3 startSample : portalSamples(entity, startBox, true)) { - Vec3 endSample = matchSample(startSample, startBox, endBox); - if (shape.crosses(startSample, endSample)) { - return true; - } - } - return false; - } - - private static List portalSamples(Entity entity, AABB box, boolean includeEye) { - Vec3 center = new Vec3((box.minX + box.maxX) * 0.5D, (box.minY + box.maxY) * 0.5D, (box.minZ + box.maxZ) * 0.5D); - Vec3 topCenter = new Vec3(center.x, box.maxY, center.z); - Vec3 bottomCenter = new Vec3(center.x, box.minY, center.z); - if (includeEye) { - Vec3 eye = new Vec3(entity.getX(), entity.getY() + entity.getEyeHeight(), entity.getZ()); - return List.of(center, eye, topCenter, bottomCenter); - } - return List.of(center, topCenter, bottomCenter); - } - - private static Vec3 matchSample(Vec3 startSample, AABB startBox, AABB endBox) { - double xLerp = axisRatio(startSample.x, startBox.minX, startBox.maxX); - double yLerp = axisRatio(startSample.y, startBox.minY, startBox.maxY); - double zLerp = axisRatio(startSample.z, startBox.minZ, startBox.maxZ); - return new Vec3( - lerp(endBox.minX, endBox.maxX, xLerp), - lerp(endBox.minY, endBox.maxY, yLerp), - lerp(endBox.minZ, endBox.maxZ, zLerp) - ); - } - - private static double axisRatio(double value, double min, double max) { - double size = max - min; - if (Math.abs(size) < 1.0E-6D) { - return 0.5D; - } - return (value - min) / size; - } - - private static double lerp(double min, double max, double delta) { - return min + (max - min) * delta; - } - - private static Vec3[] corners(AABB box) { - return new Vec3[] { - new Vec3(box.minX, box.minY, box.minZ), - new Vec3(box.minX, box.minY, box.maxZ), - new Vec3(box.minX, box.maxY, box.minZ), - new Vec3(box.minX, box.maxY, box.maxZ), - new Vec3(box.maxX, box.minY, box.minZ), - new Vec3(box.maxX, box.minY, box.maxZ), - new Vec3(box.maxX, box.maxY, box.minZ), - new Vec3(box.maxX, box.maxY, box.maxZ) - }; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunIndicatorSync.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunIndicatorSync.java new file mode 100644 index 00000000..5d4fcafd --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunIndicatorSync.java @@ -0,0 +1,54 @@ +package com.craisinlord.antarchy.content.portalgun; + +import com.craisinlord.antarchy.content.item.PortalGunItem; +import com.craisinlord.antarchy.content.network.PortalGunIndicatorPayload; +import com.craisinlord.antarchy.content.network.PortalGunIndicatorRequestPayload; +import java.util.Optional; +import java.util.UUID; +import java.util.function.BiConsumer; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.item.ItemStack; + +public final class PortalGunIndicatorSync { + private static BiConsumer sender = (player, payload) -> {}; + + private PortalGunIndicatorSync() { + } + + public static void setSender(BiConsumer payloadSender) { + sender = payloadSender; + } + + public static void handleRequest(ServerPlayer player, PortalGunIndicatorRequestPayload request) { + ItemStack main = player.getMainHandItem(); + ItemStack off = player.getOffhandItem(); + ItemStack stack = main.getItem() instanceof PortalGunItem && request.gunId().equals(PortalGunItem.getGunId(main)) + ? main + : off.getItem() instanceof PortalGunItem && request.gunId().equals(PortalGunItem.getGunId(off)) ? off : ItemStack.EMPTY; + if (stack.isEmpty()) { + return; + } + ServerLevel level = player.serverLevel(); + Optional blueId = portalId(level, request.gunId(), PortalGunPortalEntity.PortalSide.BLUE); + Optional orangeId = portalId(level, request.gunId(), PortalGunPortalEntity.PortalSide.ORANGE); + PortalGunPortalEntity.PortalSide moonSide = PortalGunItem.getMoonSide(stack); + boolean blue = blueId.isPresent() + || moonSide == PortalGunPortalEntity.PortalSide.BLUE + || isMoonPortal(level, orangeId); + boolean orange = orangeId.isPresent() + || moonSide == PortalGunPortalEntity.PortalSide.ORANGE + || isMoonPortal(level, blueId); + sender.accept(player, new PortalGunIndicatorPayload(request.gunId(), blue, orange)); + } + + private static Optional portalId(ServerLevel level, UUID gunId, PortalGunPortalEntity.PortalSide side) { + return PortalGunSavedData.getPortalId(level.getServer(), gunId, side, level.dimension().location()); + } + + private static boolean isMoonPortal(ServerLevel level, Optional portalId) { + return portalId.isPresent() + && level.getEntity(portalId.get()) instanceof PortalGunPortalEntity portal + && portal.isMoonPortal(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunMoonAimSync.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunMoonAimSync.java new file mode 100644 index 00000000..1b34687b --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunMoonAimSync.java @@ -0,0 +1,48 @@ +package com.craisinlord.antarchy.content.portalgun; + +import com.craisinlord.antarchy.content.network.PortalGunMoonAimPayload; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; +import net.minecraft.server.level.ServerPlayer; + +public final class PortalGunMoonAimSync { + private static final long MAX_REPORT_AGE_TICKS = 10L; + private static final Map REPORTS = new ConcurrentHashMap<>(); + private static Runnable clientReporter = () -> {}; + + private PortalGunMoonAimSync() { + } + + public static void setClientReporter(Runnable reporter) { + clientReporter = reporter; + } + + public static void reportFromClient() { + clientReporter.run(); + } + + public static void handle(ServerPlayer player, PortalGunMoonAimPayload payload) { + REPORTS.put(player.getUUID(), new Report(payload.tracked(), payload.aiming(), player.serverLevel().getGameTime())); + } + + public static Boolean clientAim(ServerPlayer player) { + Report report = REPORTS.get(player.getUUID()); + if (report == null || !report.tracked()) { + return null; + } + long age = player.serverLevel().getGameTime() - report.gameTime(); + return age < 0L || age > MAX_REPORT_AGE_TICKS ? null : report.aiming(); + } + + public static void forget(UUID playerId) { + REPORTS.remove(playerId); + } + + public static void clear() { + REPORTS.clear(); + } + + private record Report(boolean tracked, boolean aiming, long gameTime) { + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunMoonMath.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunMoonMath.java new file mode 100644 index 00000000..a961dc97 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunMoonMath.java @@ -0,0 +1,22 @@ +package com.craisinlord.antarchy.content.portalgun; + +import net.minecraft.world.phys.Vec3; + +public final class PortalGunMoonMath { + public static final double AIM_TOLERANCE_DEGREES = 12.0D; + private static final double AIM_COSINE = Math.cos(Math.toRadians(AIM_TOLERANCE_DEGREES)); + private static final double MIN_MOON_HEIGHT = 0.05D; + + private PortalGunMoonMath() { + } + + public static Vec3 moonDirection(double timeOfDay) { + double angle = timeOfDay * Math.PI * 2.0D; + return new Vec3(Math.sin(angle), -Math.cos(angle), 0.0D); + } + + public static boolean isAimedAtMoon(Vec3 look, double timeOfDay) { + Vec3 moon = moonDirection(timeOfDay); + return moon.y > MIN_MOON_HEIGHT && look.normalize().dot(moon) >= AIM_COSINE; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunPlacement.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunPlacement.java index 944f4291..36ace529 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunPlacement.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunPlacement.java @@ -1,6 +1,7 @@ package com.craisinlord.antarchy.content.portalgun; import java.util.Set; +import java.util.HashSet; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.phys.Vec3; @@ -15,13 +16,18 @@ public record PortalGunPlacement( BlockPos masterPos, BlockPos basePos, BlockPos[] portalSpots, - Set compensatedSpots + Set compensatedSpots, + int width, + int height ) { - public static PortalGunPlacement fromStored(Direction facing, Direction upAxis, BlockPos masterPos, BlockPos basePos, Set compensatedSpots) { + public static PortalGunPlacement fromStored(Direction facing, Direction upAxis, BlockPos masterPos, BlockPos basePos, BlockPos[] portalSpots, Set compensatedSpots, int width, int height) { Direction widthAxis = widthAxis(facing, upAxis); BlockPos supportOrigin = masterPos.relative(facing.getOpposite()); - Vec3 center = masterPos.getCenter() - .add(Vec3.atLowerCornerOf(upAxis.getNormal()).scale(0.5D)) + Vec3 center = Vec3.ZERO; + for (BlockPos portalSpot : portalSpots) { + center = center.add(portalSpot.getCenter()); + } + center = center.scale(1.0D / portalSpots.length) .subtract(Vec3.atLowerCornerOf(facing.getNormal()).scale(0.5D)); return new PortalGunPlacement( center, @@ -32,8 +38,10 @@ public record PortalGunPlacement( supportOrigin, masterPos, basePos, - new BlockPos[] {masterPos, basePos}, - compensatedSpots + portalSpots, + compensatedSpots, + width, + height ); } @@ -47,4 +55,47 @@ public record PortalGunPlacement( public static float yawFor(Direction facing, Direction upAxis) { return facing.getAxis() == Direction.Axis.Y ? upAxis.toYRot() : facing.toYRot(); } + + public static boolean isRectangularFootprint(BlockPos[] portalSpots, Direction facing, Direction upAxis, int width, int height) { + if (portalSpots == null || portalSpots.length != width * height || portalSpots.length == 0) { + return false; + } + Direction widthAxis = widthAxis(facing, upAxis); + BlockPos origin = portalSpots[0]; + Set cells = new HashSet<>(portalSpots.length); + int minWidth = Integer.MAX_VALUE; + int maxWidth = Integer.MIN_VALUE; + int minHeight = Integer.MAX_VALUE; + int maxHeight = Integer.MIN_VALUE; + for (BlockPos spot : portalSpots) { + if (spot == null) { + return false; + } + int dx = spot.getX() - origin.getX(); + int dy = spot.getY() - origin.getY(); + int dz = spot.getZ() - origin.getZ(); + int depth = dx * facing.getStepX() + dy * facing.getStepY() + dz * facing.getStepZ(); + int widthCell = dx * widthAxis.getStepX() + dy * widthAxis.getStepY() + dz * widthAxis.getStepZ(); + int heightCell = dx * upAxis.getStepX() + dy * upAxis.getStepY() + dz * upAxis.getStepZ(); + if (depth != 0 || !cells.add(((long) widthCell << 32) ^ (heightCell & 0xffffffffL))) { + return false; + } + minWidth = Math.min(minWidth, widthCell); + maxWidth = Math.max(maxWidth, widthCell); + minHeight = Math.min(minHeight, heightCell); + maxHeight = Math.max(maxHeight, heightCell); + } + if (maxWidth - minWidth != width - 1 || maxHeight - minHeight != height - 1 + || (minWidth != 0 && maxWidth != 0) || (minHeight != 0 && maxHeight != 0)) { + return false; + } + for (int widthCell = minWidth; widthCell <= maxWidth; widthCell++) { + for (int heightCell = minHeight; heightCell <= maxHeight; heightCell++) { + if (!cells.contains(((long) widthCell << 32) ^ (heightCell & 0xffffffffL))) { + return false; + } + } + } + return true; + } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunPortalEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunPortalEntity.java index 4313589d..edfd5a70 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunPortalEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunPortalEntity.java @@ -1,87 +1,101 @@ package com.craisinlord.antarchy.content.portalgun; import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.block.entity.PortalGunPortalBaseBlockEntity; +import com.craisinlord.antarchy.content.block.entity.PortalGunPortalCellAccess; +import com.craisinlord.antarchy.content.block.entity.PortalGunPortalFaceRecord; import com.craisinlord.antarchy.content.block.entity.PortalGunPortalMasterBlockEntity; -import com.craisinlord.antarchy.mixins.AbstractArrowAccessor; +import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; +import com.craisinlord.antarchy.content.entity.BlockSuction; +import com.craisinlord.anthology.portal.PortalAppearance; +import com.craisinlord.anthology.portal.PortalEntity; +import com.craisinlord.anthology.portal.PortalShape; +import com.craisinlord.anthology.portal.PortalSounds; +import com.craisinlord.anthology.portal.PortalTransitMath; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; -import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; import java.util.UUID; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.core.SectionPos; +import net.minecraft.core.particles.ParticleTypes; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.NbtUtils; import net.minecraft.nbt.Tag; -import net.minecraft.network.protocol.game.ClientboundSetEntityMotionPacket; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; -import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.ExperienceOrb; import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.item.FallingBlockEntity; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.item.PrimedTnt; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.entity.projectile.AbstractArrow; +import net.minecraft.world.entity.projectile.Projectile; +import net.minecraft.world.entity.vehicle.AbstractMinecart; +import net.minecraft.world.entity.vehicle.Boat; import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; -import software.bernie.geckolib.animatable.GeoEntity; -import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; -import software.bernie.geckolib.core.animation.AnimatableManager; -import software.bernie.geckolib.core.animation.AnimationController; -import software.bernie.geckolib.core.animation.AnimationState; -import software.bernie.geckolib.core.object.PlayState; -import software.bernie.geckolib.core.animation.RawAnimation; -import software.bernie.geckolib.util.GeckoLibUtil; -public class PortalGunPortalEntity extends Entity implements GeoEntity { +public class PortalGunPortalEntity extends PortalEntity { public enum PortalSide { BLUE, ORANGE } private static final EntityDataAccessor SIDE = SynchedEntityData.defineId(PortalGunPortalEntity.class, EntityDataSerializers.INT); - private static final EntityDataAccessor FACING = SynchedEntityData.defineId(PortalGunPortalEntity.class, EntityDataSerializers.INT); - private static final EntityDataAccessor UP_AXIS = SynchedEntityData.defineId(PortalGunPortalEntity.class, EntityDataSerializers.INT); - private static final EntityDataAccessor CLOSING = SynchedEntityData.defineId(PortalGunPortalEntity.class, EntityDataSerializers.BOOLEAN); - private static final EntityDataAccessor> LINKED_PORTAL = SynchedEntityData.defineId(PortalGunPortalEntity.class, EntityDataSerializers.OPTIONAL_UUID); - private static final EntityDataAccessor CHANNEL_RED = SynchedEntityData.defineId(PortalGunPortalEntity.class, EntityDataSerializers.INT); - private static final EntityDataAccessor CHANNEL_GREEN = SynchedEntityData.defineId(PortalGunPortalEntity.class, EntityDataSerializers.INT); - private static final EntityDataAccessor CHANNEL_BLUE = SynchedEntityData.defineId(PortalGunPortalEntity.class, EntityDataSerializers.INT); - private static final RawAnimation OPEN_ANIM = RawAnimation.begin().thenPlay("open"); - private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); - private static final RawAnimation CLOSE_ANIM = RawAnimation.begin().thenPlay("close"); - private static final int OPEN_TICKS = 10; - private static final int CLOSE_TICKS = 10; - private static final int MAX_LIFETIME_TICKS = 20 * 60 * 20; - private static final int TELEPORT_COOLDOWN_TICKS = 40; - private static final double PLAYER_PORTAL_INSIDE_SHIFT = 0.05D; - private static final double HALF_WIDTH = 0.5D; - private static final double HALF_HEIGHT = 1.0D; - private static final double HALF_DEPTH = 0.35D; - private static final double MIN_EXIT_MOMENTUM = 0.42D; - private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); - private final Map teleportCooldowns = new HashMap<>(); - private final Map portalEntityDepths = new HashMap<>(); - private Set lastScanEntities = new HashSet<>(); + private static final EntityDataAccessor> OWNER_ID = SynchedEntityData.defineId(PortalGunPortalEntity.class, EntityDataSerializers.OPTIONAL_UUID); + private static final EntityDataAccessor> GUN_ID = SynchedEntityData.defineId(PortalGunPortalEntity.class, EntityDataSerializers.OPTIONAL_UUID); + private static final EntityDataAccessor VARIANT = SynchedEntityData.defineId(PortalGunPortalEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor MOON = SynchedEntityData.defineId(PortalGunPortalEntity.class, EntityDataSerializers.BOOLEAN); + private static final ResourceLocation BLUE_RIM_TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/vfx/portal_gun_portal_blue.png"); + private static final ResourceLocation ORANGE_RIM_TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/vfx/portal_gun_portal_orange.png"); + private static final PortalSounds SOUNDS = new PortalSounds( + () -> sound("portal_enter"), + () -> sound("portal_exit"), + () -> sound("portal_ambient"), + 80, + 0.18F + ); + private static final double MOON_RANGE = 14.0D; + private static final double MOON_RAY_MIN_OUTWARD = -0.2D; + private static final double MOON_PULL_STRENGTH = 0.15D; + private static final double MOON_MAX_SPEED = 1.8D; + private static final double MOON_MOUTH_DEPTH = 0.9D; + private static final double MOON_HOLD_DEPTH = 0.65D; + private static final int MOON_BLOCK_INTERVAL = 1; + private static final int MOON_BLOCKS_PER_PULL = 4; + private static final int MOON_BLOCK_RAYS = 16; + private static final double MOON_RAY_STEP = 0.4D; + private static final double MOON_BLOCK_SPEED = 0.6D; + private static final int MOON_VACUUM_INTERVAL = 10; + private static final float MOON_VACUUM_DAMAGE = 2.0F; + private static final int MOON_WIND_INTERVAL = 40; + private static final int MOON_BLOCK_MAX_FLIGHT_TICKS = 80; + private static final double MOON_BLOCK_SWALLOW_RADIUS = 2.0D; + private final PortalAppearance appearance = new GunAppearance(); private UUID ownerId; - private UUID linkedPortalId; - private int ageTicks; - private int pairTime; + private UUID gunId; + private int moonTicks; + private int moonSuckedBlocks; + private final Map moonLiftedBlocks = new HashMap<>(); private BlockPos supportOrigin = BlockPos.ZERO; private BlockPos masterPos = BlockPos.ZERO; private BlockPos basePos = BlockPos.ZERO; @@ -90,49 +104,42 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { public PortalGunPortalEntity(EntityType entityType, Level level) { super(entityType, level); - this.setInvulnerable(true); - this.noPhysics = true; - this.noCulling = true; } @Override protected void defineSynchedData() { + super.defineSynchedData(); this.entityData.define(SIDE, PortalSide.BLUE.ordinal()); - this.entityData.define(FACING, Direction.NORTH.get3DDataValue()); - this.entityData.define(UP_AXIS, Direction.UP.get3DDataValue()); - this.entityData.define(CLOSING, false); - this.entityData.define(LINKED_PORTAL, Optional.empty()); - this.entityData.define(CHANNEL_RED, 58); - this.entityData.define(CHANNEL_GREEN, 166); - this.entityData.define(CHANNEL_BLUE, 255); + this.entityData.define(OWNER_ID, Optional.empty()); + this.entityData.define(GUN_ID, Optional.empty()); + this.entityData.define(VARIANT, PortalGunVariant.DEFAULT.id()); + this.entityData.define(MOON, false); } - public void configure(UUID ownerId, PortalSide side, PortalGunPlacement placement) { + public void configure(UUID ownerId, UUID gunId, PortalGunVariant variant, PortalSide side, PortalGunPlacement placement) { this.ownerId = ownerId; + this.gunId = gunId; + this.entityData.set(OWNER_ID, Optional.ofNullable(ownerId)); + this.entityData.set(GUN_ID, Optional.ofNullable(gunId)); + this.entityData.set(VARIANT, (variant == null ? PortalGunVariant.DEFAULT : variant).id()); this.entityData.set(SIDE, side.ordinal()); - this.entityData.set(FACING, placement.facing().get3DDataValue()); - this.entityData.set(UP_AXIS, placement.upAxis().get3DDataValue()); - int[] channelColor = generateChannelColor(ownerId, side); - this.entityData.set(CHANNEL_RED, channelColor[0]); - this.entityData.set(CHANNEL_GREEN, channelColor[1]); - this.entityData.set(CHANNEL_BLUE, channelColor[2]); + this.setGeometry(placement.facing(), placement.upAxis(), placement.width(), placement.height()); this.supportOrigin = placement.supportOrigin().immutable(); this.masterPos = placement.masterPos().immutable(); this.basePos = placement.basePos().immutable(); - this.portalSpots = new BlockPos[] {placement.portalSpots()[0].immutable(), placement.portalSpots()[1].immutable()}; + this.portalSpots = java.util.Arrays.stream(placement.portalSpots()).map(BlockPos::immutable).toArray(BlockPos[]::new); this.compensatedSpots = Set.copyOf(placement.compensatedSpots()); } - public void linkTo(PortalGunPortalEntity other) { - this.linkedPortalId = other.getUUID(); - this.entityData.set(LINKED_PORTAL, Optional.of(other.getUUID())); - this.pairTime = (int) this.level().getGameTime(); + public void openToMoon() { + this.clearLink(); + this.entityData.set(MOON, true); + this.moonTicks = 0; + this.moonSuckedBlocks = 0; } - public void restorePair(UUID linkedPortalId, int pairTime) { - this.linkedPortalId = linkedPortalId; - this.entityData.set(LINKED_PORTAL, Optional.ofNullable(linkedPortalId)); - this.pairTime = pairTime; + public boolean isMoonPortal() { + return this.entityData.get(MOON); } public PortalSide getPortalSide() { @@ -140,36 +147,28 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { return ordinal == PortalSide.ORANGE.ordinal() ? PortalSide.ORANGE : PortalSide.BLUE; } - public Direction getFacingDirection() { - return Direction.from3DDataValue(this.entityData.get(FACING)); - } - - public Direction getUpAxis() { - return Direction.from3DDataValue(this.entityData.get(UP_AXIS)); - } - - public UUID getLinkedPortalId() { - return this.entityData.get(LINKED_PORTAL).orElse(this.linkedPortalId); - } - public BlockPos getMasterPos() { return this.masterPos; } public UUID getOwnerId() { - return this.ownerId; + return this.entityData.get(OWNER_ID).orElse(this.ownerId); } - public int getChannelRed() { - return this.entityData.get(CHANNEL_RED); + public UUID getGunId() { + return this.entityData.get(GUN_ID).orElse(this.gunId); } - public int getChannelGreen() { - return this.entityData.get(CHANNEL_GREEN); + public PortalGunVariant getVariant() { + return PortalGunVariant.byId(this.entityData.get(VARIANT)); } - public int getChannelBlue() { - return this.entityData.get(CHANNEL_BLUE); + public int getPortalColor() { + return this.getVariant().color(this.getPortalSide()); + } + + public ResourceLocation getRimTexture() { + return this.getPortalSide() == PortalSide.BLUE ? BLUE_RIM_TEXTURE : ORANGE_RIM_TEXTURE; } public BlockPos getBasePos() { @@ -177,198 +176,290 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { } public BlockPos[] getPortalSpots() { - return new BlockPos[] {this.portalSpots[0], this.portalSpots[1]}; + return this.portalSpots.clone(); + } + + public boolean containsPortalSpot(BlockPos pos) { + for (BlockPos portalSpot : this.portalSpots) { + if (portalSpot.equals(pos)) { + return true; + } + } + return false; } public Set getCompensatedSpots() { return Set.copyOf(this.compensatedSpots); } - public int getPairTime() { - return this.pairTime; - } - - public PortalGunPortalEntity getLinkedPortal() { - UUID linkedId = this.getLinkedPortalId(); - if (linkedId == null) { - return null; - } - List entities = this.level().getEntities(this, new AABB(-3.0E7D, -3.0E7D, -3.0E7D, 3.0E7D, 3.0E7D, 3.0E7D), entity -> linkedId.equals(entity.getUUID())); - if (entities.isEmpty()) { - return null; - } - Entity entity = entities.get(0); - return entity instanceof PortalGunPortalEntity portal ? portal : null; - } - - public Vec3 getNormalVec() { - return Vec3.atLowerCornerOf(this.getFacingDirection().getNormal()); - } - - public Vec3 getUpVec() { - return Vec3.atLowerCornerOf(this.getUpAxis().getNormal()); - } - - public Vec3 getWidthVec() { - return this.getNormalVec().cross(this.getUpVec()).normalize(); - } - - public PortalGunWorldPortalShape getWorldPortalShape() { - return new PortalGunWorldPortalShape(this.position(), this.getNormalVec().normalize(), this.getUpVec().normalize(), this.getWidthVec().normalize(), HALF_WIDTH, HALF_HEIGHT, HALF_DEPTH); - } - - public AABB getPlane() { - return this.getWorldPortalShape().getPlane(); - } - - public AABB getFlatPlane() { - return this.getWorldPortalShape().getFlatPlane(); - } - - public AABB getScanRange() { - return this.getWorldPortalShape().getScanRange(); - } - - public AABB getPortalInsides() { - return this.getWorldPortalShape().getPortalInsides(); - } - - public AABB getPortalInsides(Entity entity) { - if (!(entity instanceof Player)) { - return this.getPortalInsides(); - } - double shiftAmount = Math.min(PLAYER_PORTAL_INSIDE_SHIFT, Math.abs(this.getWorldPortalShape().localCoords(entity.position()).depth())); - return this.getPortalInsides().move(this.getNormalVec().normalize().scale(shiftAmount)); - } - - public AABB getTeleportPlane(double offset) { - return this.getWorldPortalShape().getTeleportPlane(offset); - } - - public AABB getCollisionRemovalAabbForEntity(Entity entity) { - double speed = entity.getDeltaMovement().length(); - double extent = Math.max(1.0D, Math.max(entity.getBbWidth(), entity.getBbHeight()) + speed); - return this.getFlatPlane().expandTowards(this.getNormalVec().normalize().scale(extent)); - } - - public Vec3 teleportProbePosition(Entity entity) { - if (entity instanceof Player player) { - return player.getEyePosition(); - } - if (entity instanceof LivingEntity living) { - return entity.position().add(0.0D, living.getBbHeight() * 0.5D, 0.0D); - } - return entity.position(); - } - - public Vec3 previousTeleportProbePosition(Entity entity) { - double prevX = entity.xo; - double prevY = entity.yo; - double prevZ = entity.zo; - if (entity instanceof Player player) { - return new Vec3(prevX, prevY + player.getEyeHeight(player.getPose()), prevZ); - } - if (entity instanceof LivingEntity living) { - return new Vec3(prevX, prevY + living.getBbHeight() * 0.5D, prevZ); - } - return new Vec3(prevX, prevY, prevZ); - } - - public Vec3 resolveCrossingProbe(Entity entity) { - AABB currentBox = entity.getBoundingBox(); - AABB previousBox = currentBox.move(entity.xo - entity.getX(), entity.yo - entity.getY(), entity.zo - entity.getZ()); - for (Vec3 currentSample : portalSamples(entity, currentBox, false)) { - Vec3 previousSample = matchPreviousSample(currentSample, currentBox, previousBox); - if (this.crossesPortal(previousSample, currentSample)) { - return currentSample; - } - } - Vec3 previousProbe = this.previousTeleportProbePosition(entity); - Vec3 currentProbe = this.teleportProbePosition(entity); - if (this.crossesPortal(previousProbe, currentProbe)) { - return currentProbe; - } - return this.overlapsPortalVolume(entity) ? this.portalVolumeProbe(entity) : null; - } - - public boolean containsPoint(Vec3 position) { - return this.getWorldPortalShape().contains(position, 0.0D); - } - - public boolean intersectsEntityBounds(Entity entity) { - AABB bounds = entity.getBoundingBox(); - for (Vec3 corner : new Vec3[] { - new Vec3(bounds.minX, bounds.minY, bounds.minZ), - new Vec3(bounds.minX, bounds.minY, bounds.maxZ), - new Vec3(bounds.minX, bounds.maxY, bounds.minZ), - new Vec3(bounds.minX, bounds.maxY, bounds.maxZ), - new Vec3(bounds.maxX, bounds.minY, bounds.minZ), - new Vec3(bounds.maxX, bounds.minY, bounds.maxZ), - new Vec3(bounds.maxX, bounds.maxY, bounds.minZ), - new Vec3(bounds.maxX, bounds.maxY, bounds.maxZ) - }) { - if (this.getWorldPortalShape().contains(corner, 0.08D)) { - return true; - } - } - return this.getPortalInsides(entity).intersects(bounds); - } - - public boolean crossesPortal(Vec3 previousProbePosition, Vec3 currentProbePosition) { - return this.getWorldPortalShape().crosses(previousProbePosition, currentProbePosition); - } - - public boolean shouldRenderFront(Vec3 cameraPos) { - return this.getWorldPortalShape().shouldRenderFront(cameraPos); + @Override + public PortalAppearance appearance() { + return this.appearance; } @Override - public void tick() { - super.tick(); - this.ageTicks++; - this.yRotO = this.getYRot(); - this.xRotO = this.getXRot(); - if (this.level().isClientSide) { - return; + public boolean hasCustomView() { + return this.isMoonPortal(); + } + + @Override + protected PortalSounds sounds() { + return SOUNDS; + } + + @Override + protected float ambientPitch() { + return this.getPortalSide() == PortalSide.BLUE ? 1.05F : 0.92F; + } + + @Override + protected void clientTick() { + if (this.isMoonPortal()) { + this.spawnMoonParticles(); } - if (!(this.level() instanceof ServerLevel serverLevel)) { - return; + } + + @Override + protected boolean isStillValid(ServerLevel level) { + return this.gunId != null && this.isStillRegistered(level) && this.hasValidSurface(); + } + + @Override + protected boolean tickBeforeTransit(ServerLevel level) { + if (this.isMoonPortal()) { + this.tickMoon(level); + return true; } - this.tickTeleportCooldowns(); - if (this.ownerId == null || !this.isStillRegistered(serverLevel)) { + return false; + } + + private void tickMoon(ServerLevel level) { + this.moonTicks++; + if (this.moonTicks >= AntarchySettings.portalGunMoonPortalSeconds() * 20) { + level.playSound(null, this.getX(), this.getY(), this.getZ(), sound("portal_fizzle"), SoundSource.BLOCKS, 1.0F, 0.6F); this.discard(); return; } - if (!this.hasValidSurface()) { - this.discard(); - return; + if (this.moonTicks % MOON_WIND_INTERVAL == 1) { + level.playSound(null, this.getX(), this.getY(), this.getZ(), SoundEvents.ELYTRA_FLYING, SoundSource.BLOCKS, 1.4F, 0.55F); } - if (this.ageTicks >= MAX_LIFETIME_TICKS - CLOSE_TICKS) { - this.entityData.set(CLOSING, true); + PortalShape shape = this.getWorldPortalShape(); + Player owner = this.getOwnerId() == null ? null : level.getPlayerByUUID(this.getOwnerId()); + this.pullMoonEntities(level, shape, owner); + this.tickMoonLiftedBlocks(level, shape); + if (AntarchySettings.portalGunMoonPullsBlocks() && this.moonTicks % MOON_BLOCK_INTERVAL == 0) { + this.pullMoonBlocks(level, shape, owner); } - if (this.ageTicks >= MAX_LIFETIME_TICKS) { - this.discard(); - return; - } - PortalGunPortalEntity linked = this.findLinkedPortal(serverLevel); - if (linked == null || !linked.isAlive()) { - if (this.ageTicks % 100 == 0) { - Antarchy.LOGGER.info("Portal gun portal has no loaded linked portal portal={} owner={} side={} linked={}", this.getUUID(), this.ownerId, this.getPortalSide(), this.linkedPortalId); + } + + private void pullMoonEntities(ServerLevel level, PortalShape shape, Player owner) { + Vec3 center = shape.center(); + AABB area = new AABB(center, center).inflate(MOON_RANGE); + Vec3 target = center.add(shape.normal().scale(0.3D)); + boolean vacuumTick = this.moonTicks % MOON_VACUUM_INTERVAL == 0; + for (Entity entity : level.getEntities(this, area, this::canMoonAffect)) { + Vec3 position = entity.getBoundingBox().getCenter(); + PortalShape.PortalLocalCoords local = shape.localCoords(position); + double depth = local.depth(); + double distance = position.distanceTo(center); + if (depth < -0.5D || distance > MOON_RANGE) { + continue; } - return; + boolean atMouth = depth <= MOON_MOUTH_DEPTH + entity.getBbWidth() * 0.5D + && Math.abs(local.horizontal()) <= shape.halfWidth() + 0.25D + && Math.abs(local.vertical()) <= shape.halfHeight() + 0.25D; + if (atMouth) { + if (!this.swallowIntoSpace(level, entity, owner)) { + this.holdInVacuum(level, entity, shape, owner, vacuumTick); + } + continue; + } + double falloff = 1.0D - distance / MOON_RANGE; + double strength = MOON_PULL_STRENGTH * (0.35D + falloff * falloff * 1.6D); + Vec3 worldMotion = PortalTransitMath.entityVelocityToWorld(entity, entity.getDeltaMovement()) + .scale(0.92D) + .add(target.subtract(position).normalize().scale(strength)); + if (worldMotion.length() > MOON_MAX_SPEED) { + worldMotion = worldMotion.normalize().scale(MOON_MAX_SPEED); + } + applyMoonMotion(entity, worldMotion); } - if (this.ageTicks % 80 == 0) { - this.level().playSound(null, this.blockPosition(), sound("portal_ambient", SoundEvents.PORTAL_AMBIENT), SoundSource.BLOCKS, 0.18F, this.getPortalSide() == PortalSide.BLUE ? 1.05F : 0.92F); + } + + private boolean canMoonAffect(Entity entity) { + if (!entity.isAlive() || entity.isPassenger() || entity.isSpectator() + || entity instanceof PortalEntity || entity instanceof PortalGunProjectileEntity) { + return false; + } + if (entity instanceof Player player && player.isCreative()) { + return false; + } + return entity instanceof LivingEntity || entity instanceof ItemEntity || entity instanceof ExperienceOrb + || entity instanceof FallingBlockEntity || entity instanceof Projectile + || entity instanceof AbstractMinecart || entity instanceof Boat || entity instanceof PrimedTnt; + } + + private boolean swallowIntoSpace(ServerLevel level, Entity entity, Player owner) { + if (entity instanceof Player || entity instanceof AbstractMinecart || entity instanceof Boat) { + return false; + } + if (entity instanceof LivingEntity living) { + living.hurt(AntarchyDamageSources.moonVacuum(level, owner), Float.MAX_VALUE); + return !living.isAlive(); + } + entity.discard(); + return true; + } + + private void holdInVacuum(ServerLevel level, Entity entity, PortalShape shape, Player owner, boolean vacuumTick) { + Vec3 hold = shape.center().add(shape.normal().scale(MOON_HOLD_DEPTH + entity.getBbWidth() * 0.5D)); + applyMoonMotion(entity, hold.subtract(entity.getBoundingBox().getCenter()).scale(0.45D)); + if (vacuumTick && entity instanceof LivingEntity living) { + living.hurt(AntarchyDamageSources.moonVacuum(level, owner == entity ? null : owner), MOON_VACUUM_DAMAGE); + } + } + + private static void applyMoonMotion(Entity entity, Vec3 worldMotion) { + entity.setDeltaMovement(PortalTransitMath.entityVelocityFromWorld(entity, worldMotion)); + entity.hasImpulse = true; + entity.fallDistance = 0.0F; + if (entity instanceof LivingEntity) { + entity.hurtMarked = true; + } + } + + private void pullMoonBlocks(ServerLevel level, PortalShape shape, Player owner) { + int cap = AntarchySettings.portalGunMoonBlockCap(); + int pulled = 0; + for (int ray = 0; ray < MOON_BLOCK_RAYS && pulled < MOON_BLOCKS_PER_PULL && this.moonSuckedBlocks < cap; ray++) { + Vec3 direction = new Vec3(this.random.nextGaussian(), this.random.nextGaussian(), this.random.nextGaussian()); + if (direction.lengthSqr() < 1.0E-6D) { + continue; + } + direction = direction.normalize(); + double outward = direction.dot(shape.normal()); + if (outward < MOON_RAY_MIN_OUTWARD) { + direction = direction.subtract(shape.normal().scale(outward - MOON_RAY_MIN_OUTWARD - this.random.nextDouble() * 0.3D)).normalize(); + } + Vec3 start = shape.center() + .add(shape.right().scale((this.random.nextDouble() * 2.0D - 1.0D) * shape.halfWidth())) + .add(shape.up().scale((this.random.nextDouble() * 2.0D - 1.0D) * shape.halfHeight())) + .add(shape.normal().scale(0.3D)); + Vec3 end = start.add(direction.scale(MOON_RANGE)); + BlockPos hit = this.firstBlockAlong(level, shape, start, end); + if (hit == null) { + continue; + } + BlockState state = loadedState(level, hit); + if (state == null || !BlockSuction.canLift(level, hit, state, true) + || owner != null && !level.mayInteract(owner, hit)) { + continue; + } + FallingBlockEntity falling = BlockSuction.lift(level, hit, state, shape.center().add(shape.normal().scale(1.2D)), MOON_BLOCK_SPEED); + if (falling == null) { + continue; + } + falling.setNoGravity(true); + this.moonLiftedBlocks.put(falling.getUUID(), this.moonTicks); + pulled++; + this.moonSuckedBlocks++; + } + } + + private void tickMoonLiftedBlocks(ServerLevel level, PortalShape shape) { + Iterator> iterator = this.moonLiftedBlocks.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + if (!(level.getEntity(entry.getKey()) instanceof FallingBlockEntity falling) || !falling.isAlive()) { + iterator.remove(); + continue; + } + if (this.moonTicks - entry.getValue() > MOON_BLOCK_MAX_FLIGHT_TICKS + || falling.getBoundingBox().getCenter().distanceTo(shape.center()) <= MOON_BLOCK_SWALLOW_RADIUS) { + falling.discard(); + iterator.remove(); + } + } + } + + private void releaseMoonLiftedBlocks(ServerLevel level) { + for (UUID id : this.moonLiftedBlocks.keySet()) { + if (level.getEntity(id) instanceof FallingBlockEntity falling && falling.isAlive()) { + falling.setNoGravity(false); + falling.setDeltaMovement(falling.getDeltaMovement().scale(0.2D)); + falling.hurtMarked = true; + } + } + this.moonLiftedBlocks.clear(); + } + + private BlockPos firstBlockAlong(ServerLevel level, PortalShape shape, Vec3 start, Vec3 end) { + Vec3 delta = end.subtract(start); + int steps = Math.max(1, (int) Math.ceil(delta.length() / MOON_RAY_STEP)); + BlockPos previous = null; + for (int step = 0; step <= steps; step++) { + BlockPos pos = BlockPos.containing(start.add(delta.scale((double) step / steps))); + if (pos.equals(previous)) { + continue; + } + previous = pos; + if (!level.isInWorldBounds(pos) || !level.getWorldBorder().isWithinBounds(pos)) { + return null; + } + BlockState state = loadedState(level, pos); + if (state == null) { + return null; + } + if (state.isAir() || this.containsPortalSpot(pos)) { + continue; + } + PortalShape.PortalLocalCoords local = shape.localCoords(Vec3.atCenterOf(pos)); + if (local.depth() < -1.0D) { + return null; + } + if (local.depth() < 0.5D + && Math.abs(local.horizontal()) <= shape.halfWidth() + 1.0D + && Math.abs(local.vertical()) <= shape.halfHeight() + 1.0D) { + return null; + } + return pos; + } + return null; + } + + private static BlockState loadedState(ServerLevel level, BlockPos pos) { + net.minecraft.world.level.chunk.LevelChunk chunk = level.getChunkSource() + .getChunkNow(SectionPos.blockToSectionCoord(pos.getX()), SectionPos.blockToSectionCoord(pos.getZ())); + return chunk == null ? null : chunk.getBlockState(pos); + } + + private void spawnMoonParticles() { + PortalShape shape = this.getWorldPortalShape(); + Vec3 center = shape.center(); + for (int i = 0; i < 6; i++) { + Vec3 direction = new Vec3(this.random.nextGaussian(), this.random.nextGaussian(), this.random.nextGaussian()); + if (direction.lengthSqr() < 1.0E-6D) { + continue; + } + direction = direction.normalize(); + if (direction.dot(shape.normal()) < 0.1D) { + direction = direction.add(shape.normal().scale(0.1D - direction.dot(shape.normal()))).normalize(); + } + Vec3 start = center.add(direction.scale(1.5D + this.random.nextDouble() * MOON_RANGE * 0.6D)); + Vec3 velocity = center.subtract(start).normalize().scale(0.35D + this.random.nextDouble() * 0.3D); + this.level().addParticle(ParticleTypes.CLOUD, start.x, start.y, start.z, velocity.x, velocity.y, velocity.z); } - this.tickTeleport(linked); } private boolean isStillRegistered(ServerLevel level) { - return this.ownerId != null && PortalGunSavedData.isRegistered(level.getServer(), this.ownerId, this.getPortalSide(), this.getUUID()); + return PortalGunSavedData.isRegistered(level, this.gunId, this.getPortalSide(), this.getUUID()); } private boolean hasValidSurface() { Direction facing = this.getFacingDirection(); + if (!PortalGunPlacement.isRectangularFootprint(this.portalSpots, this.getFacingDirection(), this.getUpAxis(), this.getPortalWidth(), this.getPortalHeight())) { + return false; + } for (int i = 0; i < this.portalSpots.length; i++) { BlockPos portalSpot = this.portalSpots[i]; BlockPos supportPos = portalSpot.relative(facing.getOpposite()); @@ -377,327 +468,45 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { return false; } BlockEntity blockEntity = this.level().getBlockEntity(portalSpot); - if (i == 0) { - if (!(blockEntity instanceof PortalGunPortalMasterBlockEntity master) || !master.matches(this.ownerId, this.getUUID(), this.getPortalSide())) { - return false; - } - } else { - if (!(blockEntity instanceof PortalGunPortalBaseBlockEntity base) || !base.matches(this.ownerId, this.getUUID(), this.getPortalSide())) { - return false; - } - } + if (!(blockEntity instanceof PortalGunPortalCellAccess cell)) { + return false; + } + PortalGunPortalFaceRecord record = cell.portalGun$getFaceRecord(facing, this.getUUID()); + if (record != null) { + if ((this.ownerId == null || !this.ownerId.equals(record.ownerId())) || record.side() != this.getPortalSide() || record.master() != (i == 0)) { + return false; + } + } else if (i == 0) { + if (!(blockEntity instanceof PortalGunPortalMasterBlockEntity master) || !master.matches(this.ownerId, this.getUUID(), this.getPortalSide())) { + return false; + } + } else if (!(blockEntity instanceof PortalGunPortalBaseBlockEntity base) || !base.matches(this.ownerId, this.getUUID(), this.getPortalSide())) { + return false; + } } return true; } - private void tickTeleport(PortalGunPortalEntity linked) { - List entities = this.level().getEntities(this, this.getScanRange(), this::canTeleportEntity); - this.updatePortalEntityScan(linked, entities); - if (!entities.isEmpty() && this.ageTicks % 20 == 0) { - Antarchy.LOGGER.info("Portal gun teleport scan portal={} side={} linked={} count={} scan={}", this.getUUID(), this.getPortalSide(), linked.getUUID(), entities.size(), this.getScanRange()); - } - for (Entity entity : entities) { - Vec3 crossingProbe = this.resolveCrossingProbe(entity); - if (crossingProbe == null) { - if (this.ageTicks % 40 == 0) { - PortalGunWorldPortalShape.PortalLocalCoords coords = this.getWorldPortalShape().localCoords(this.teleportProbePosition(entity)); - PortalBounds bounds = this.portalBounds(entity.getBoundingBox()); - Antarchy.LOGGER.info("Portal gun entity in scan did not cross portal={} entity={} entityType={} depth={} horizontal={} vertical={} boxDepthMin={} boxDepthMax={} boxHorizontalMin={} boxHorizontalMax={} boxVerticalMin={} boxVerticalMax={} movement={}", this.getUUID(), entity.getUUID(), EntityType.getKey(entity.getType()), coords.depth(), coords.horizontal(), coords.vertical(), bounds.minDepth(), bounds.maxDepth(), bounds.minHorizontal(), bounds.maxHorizontal(), bounds.minVertical(), bounds.maxVertical(), entity.getDeltaMovement()); - } - continue; - } - Antarchy.LOGGER.info("Portal gun teleport crossing portal={} side={} linked={} entity={} entityType={} probe={}", this.getUUID(), this.getPortalSide(), linked.getUUID(), entity.getUUID(), EntityType.getKey(entity.getType()), crossingProbe); - this.teleportEntity(entity, linked, crossingProbe); - } - } - - private void updatePortalEntityScan(PortalGunPortalEntity linked, List entities) { - Set currentScan = new HashSet<>(); - for (Entity entity : entities) { - UUID entityId = entity.getUUID(); - currentScan.add(entityId); - PortalBounds bounds = this.portalBounds(entity.getBoundingBox()); - int depthBucket = (int) Math.round(bounds.minDepth() * 1000.0D); - this.portalEntityDepths.put(entityId, depthBucket); - if (!this.lastScanEntities.contains(entityId)) { - Antarchy.LOGGER.info("Portal gun entity entered scan portal={} linked={} entity={} entityType={} minDepth={} maxDepth={} minHorizontal={} maxHorizontal={} minVertical={} maxVertical={} motion={}", this.getUUID(), linked.getUUID(), entityId, EntityType.getKey(entity.getType()), bounds.minDepth(), bounds.maxDepth(), bounds.minHorizontal(), bounds.maxHorizontal(), bounds.minVertical(), bounds.maxVertical(), entity.getDeltaMovement()); - } - } - for (UUID previous : this.lastScanEntities) { - if (!currentScan.contains(previous)) { - Integer depth = this.portalEntityDepths.remove(previous); - Antarchy.LOGGER.info("Portal gun entity left scan portal={} linked={} entity={} lastDepth={}", this.getUUID(), linked.getUUID(), previous, depth); - } - } - this.lastScanEntities = currentScan; - } - - private boolean canTeleportEntity(Entity entity) { - if (!entity.isAlive() || entity instanceof PortalGunPortalEntity || entity.isPassenger() || entity.isVehicle()) { - return false; - } - return !this.teleportCooldowns.containsKey(entity.getUUID()); - } - - private boolean isInsidePortal(Vec3 position) { - return this.getWorldPortalShape().contains(position, 0.0D); - } - - private PortalLocalCoords localCoords(Vec3 position) { - PortalGunWorldPortalShape.PortalLocalCoords coords = this.getWorldPortalShape().localCoords(position); - return new PortalLocalCoords(coords.horizontal(), coords.vertical(), coords.depth()); - } - - private boolean overlapsPortalVolume(Entity entity) { - PortalBounds bounds = this.portalBounds(entity.getBoundingBox()); - double edgePadding = entity instanceof Player ? 0.22D : 0.14D; - double frontDepth = entity instanceof Player ? 0.5D : 0.36D; - double backDepth = entity instanceof Player ? 0.28D : 0.22D; - double normalVelocity = entity.getDeltaMovement().dot(this.getNormalVec().normalize()); - boolean movingIntoPortal = normalVelocity < -0.01D; - boolean straddlingPlane = bounds.minDepth() <= 0.03D && bounds.maxDepth() >= -0.03D; - boolean inFrame = bounds.maxHorizontal() >= -HALF_WIDTH - edgePadding - && bounds.minHorizontal() <= HALF_WIDTH + edgePadding - && bounds.maxVertical() >= -HALF_HEIGHT - edgePadding - && bounds.minVertical() <= HALF_HEIGHT + edgePadding - && bounds.maxDepth() >= -backDepth - && bounds.minDepth() <= frontDepth; - return inFrame && (movingIntoPortal || straddlingPlane); - } - - private Vec3 portalVolumeProbe(Entity entity) { - Vec3 probe = this.teleportProbePosition(entity); - PortalGunWorldPortalShape shape = this.getWorldPortalShape(); - PortalGunWorldPortalShape.PortalLocalCoords coords = shape.localCoords(probe); - double horizontal = clamp(coords.horizontal(), -HALF_WIDTH + 0.05D, HALF_WIDTH - 0.05D); - double vertical = clamp(coords.vertical(), -HALF_HEIGHT + 0.05D, HALF_HEIGHT - 0.05D); - return shape.center() - .add(shape.right().scale(horizontal)) - .add(shape.up().scale(vertical)) - .subtract(shape.normal().scale(0.01D)); - } - - private PortalBounds portalBounds(AABB bounds) { - PortalGunWorldPortalShape shape = this.getWorldPortalShape(); - double minHorizontal = Double.POSITIVE_INFINITY; - double maxHorizontal = Double.NEGATIVE_INFINITY; - double minVertical = Double.POSITIVE_INFINITY; - double maxVertical = Double.NEGATIVE_INFINITY; - double minDepth = Double.POSITIVE_INFINITY; - double maxDepth = Double.NEGATIVE_INFINITY; - for (Vec3 corner : boxCorners(bounds)) { - PortalGunWorldPortalShape.PortalLocalCoords coords = shape.localCoords(corner); - minHorizontal = Math.min(minHorizontal, coords.horizontal()); - maxHorizontal = Math.max(maxHorizontal, coords.horizontal()); - minVertical = Math.min(minVertical, coords.vertical()); - maxVertical = Math.max(maxVertical, coords.vertical()); - minDepth = Math.min(minDepth, coords.depth()); - maxDepth = Math.max(maxDepth, coords.depth()); - } - return new PortalBounds(minHorizontal, maxHorizontal, minVertical, maxVertical, minDepth, maxDepth); - } - - private static Vec3[] boxCorners(AABB bounds) { - return new Vec3[] { - new Vec3(bounds.minX, bounds.minY, bounds.minZ), - new Vec3(bounds.minX, bounds.minY, bounds.maxZ), - new Vec3(bounds.minX, bounds.maxY, bounds.minZ), - new Vec3(bounds.minX, bounds.maxY, bounds.maxZ), - new Vec3(bounds.maxX, bounds.minY, bounds.minZ), - new Vec3(bounds.maxX, bounds.minY, bounds.maxZ), - new Vec3(bounds.maxX, bounds.maxY, bounds.minZ), - new Vec3(bounds.maxX, bounds.maxY, bounds.maxZ) - }; - } - - private static double clamp(double value, double min, double max) { - return Math.max(min, Math.min(max, value)); - } - - private List portalSamples(Entity entity, AABB box, boolean previous) { - Vec3 center = new Vec3((box.minX + box.maxX) * 0.5D, (box.minY + box.maxY) * 0.5D, (box.minZ + box.maxZ) * 0.5D); - Vec3 topCenter = new Vec3(center.x, box.maxY, center.z); - Vec3 bottomCenter = new Vec3(center.x, box.minY, center.z); - if (entity instanceof Player player) { - Vec3 eye = previous ? this.previousTeleportProbePosition(player) : this.teleportProbePosition(player); - return List.of(center, eye, topCenter, bottomCenter); - } - if (entity instanceof LivingEntity) { - return List.of(center, topCenter, bottomCenter); - } - return List.of(center); - } - - private Vec3 matchPreviousSample(Vec3 currentSample, AABB currentBox, AABB previousBox) { - double xLerp = axisRatio(currentSample.x, currentBox.minX, currentBox.maxX); - double yLerp = axisRatio(currentSample.y, currentBox.minY, currentBox.maxY); - double zLerp = axisRatio(currentSample.z, currentBox.minZ, currentBox.maxZ); - return new Vec3( - lerp(previousBox.minX, previousBox.maxX, xLerp), - lerp(previousBox.minY, previousBox.maxY, yLerp), - lerp(previousBox.minZ, previousBox.maxZ, zLerp) - ); - } - - private static double axisRatio(double value, double min, double max) { - double size = max - min; - if (Math.abs(size) < 1.0E-6D) { - return 0.5D; - } - return (value - min) / size; - } - - private static double lerp(double min, double max, double delta) { - return min + (max - min) * delta; - } - - private void teleportEntity(Entity entity, PortalGunPortalEntity destination, Vec3 currentProbe) { - Vec3 relativeProbe = currentProbe.subtract(this.position()); - Vec3 transformedProbe = PortalGunTransformUtil.transformPosition(this, destination, relativeProbe); - Vec3 entityOffsetFromProbe = entity.position().subtract(currentProbe); - Vec3 transformedEntityOffset = PortalGunTransformUtil.transformVector(this, destination, entityOffsetFromProbe); - Vec3 transformedLook = PortalGunTransformUtil.transformVector(this, destination, entity.getLookAngle()).normalize(); - Vec3 entryMotion = this.portalEntryMomentum(entity, currentProbe); - Vec3 transformedMotion = this.exitMomentum(entity, destination, PortalGunTransformUtil.transformVector(this, destination, entryMotion)); - double exitClearance = Math.max(0.35D, entity.getBbWidth() * 0.5D + 0.16D); - Vec3 exitProbe = destination.position().add(transformedProbe).add(destination.getNormalVec().normalize().scale(exitClearance - transformedProbe.dot(destination.getNormalVec().normalize()))); - Vec3 requestedExitPos = exitProbe.add(transformedEntityOffset); - Vec3 exitPos = this.resolveSafeExitPosition(entity, destination, requestedExitPos); - float yaw = PortalGunTransformUtil.yawFromLook(transformedLook); - float pitch = PortalGunTransformUtil.pitchFromLook(transformedLook); - this.applyTeleportCooldown(entity, destination); - this.level().playSound(null, this.getX(), this.getY(), this.getZ(), sound("portal_enter", SoundEvents.PORTAL_TRAVEL), SoundSource.PLAYERS, 0.7F, 0.96F + this.random.nextFloat() * 0.08F); - if (entity instanceof ServerPlayer player && destination.level() instanceof ServerLevel destinationLevel) { - player.teleportTo(destinationLevel, exitPos.x, exitPos.y, exitPos.z, yaw, pitch); - } else { - entity.teleportTo(exitPos.x, exitPos.y, exitPos.z); - entity.setYRot(yaw); - entity.setXRot(pitch); - entity.setYHeadRot(yaw); - entity.setYBodyRot(yaw); - } - entity.setDeltaMovement(transformedMotion); - entity.hasImpulse = true; - entity.hurtMarked = true; - if (entity instanceof ServerPlayer player) { - player.connection.send(new ClientboundSetEntityMotionPacket(player)); - } - entity.fallDistance = 0.0F; - destination.level().playSound(null, exitPos.x, exitPos.y, exitPos.z, sound("portal_exit", SoundEvents.PORTAL_TRAVEL), SoundSource.PLAYERS, 0.7F, 0.96F + this.random.nextFloat() * 0.08F); - this.handleSpecialEntityPostTeleport(entity); - Antarchy.LOGGER.info("Portal gun teleported entity source={} destination={} entity={} entityType={} requestedExit={} exit={} inputVelocity={} outputVelocity={} yaw={} pitch={} sourceFacing={} sourceUp={} destinationFacing={} destinationUp={}", this.getUUID(), destination.getUUID(), entity.getUUID(), EntityType.getKey(entity.getType()), requestedExitPos, exitPos, entryMotion, transformedMotion, yaw, pitch, this.getFacingDirection(), this.getUpAxis(), destination.getFacingDirection(), destination.getUpAxis()); - } - - private Vec3 portalEntryMomentum(Entity entity, Vec3 currentProbe) { - Vec3 velocity = entity.getDeltaMovement(); - Vec3 probeVelocity = currentProbe.subtract(this.previousTeleportProbePosition(entity)); - Vec3 positionVelocity = entity.position().subtract(entity.xo, entity.yo, entity.zo); - Vec3 selected = velocity; - if (probeVelocity.lengthSqr() > selected.lengthSqr()) { - selected = probeVelocity; - } - if (positionVelocity.lengthSqr() > selected.lengthSqr()) { - selected = positionVelocity; - } - return selected; - } - - private Vec3 exitMomentum(Entity entity, PortalGunPortalEntity destination, Vec3 transformedMotion) { - Vec3 normal = destination.getNormalVec().normalize(); - double outward = transformedMotion.dot(normal); - if (outward >= MIN_EXIT_MOMENTUM) { - return transformedMotion; - } - if (entity.getDeltaMovement().lengthSqr() <= 1.0E-5D && transformedMotion.lengthSqr() <= 1.0E-5D) { - return normal.scale(MIN_EXIT_MOMENTUM); - } - return transformedMotion.add(normal.scale(MIN_EXIT_MOMENTUM - outward)); - } - - private Vec3 resolveSafeExitPosition(Entity entity, PortalGunPortalEntity destination, Vec3 requestedExitPos) { - Vec3 normal = destination.getNormalVec().normalize(); - if (this.canPlaceEntityAt(entity, requestedExitPos)) { - return requestedExitPos; - } - for (int i = 1; i <= 24; i++) { - Vec3 candidate = requestedExitPos.add(normal.scale(i * 0.125D)); - if (this.canPlaceEntityAt(entity, candidate)) { - Antarchy.LOGGER.info("Portal gun adjusted blocked exit entity={} destination={} requested={} adjusted={} distance={}", entity.getUUID(), destination.getUUID(), requestedExitPos, candidate, i * 0.125D); - return candidate; - } - } - Vec3 fallback = destination.position().add(normal.scale(Math.max(1.0D, entity.getBbWidth() + 0.5D))); - Antarchy.LOGGER.info("Portal gun could not find clear exit entity={} destination={} requested={} fallback={}", entity.getUUID(), destination.getUUID(), requestedExitPos, fallback); - return fallback; - } - - private boolean canPlaceEntityAt(Entity entity, Vec3 position) { - AABB movedBounds = entity.getBoundingBox().move(position.x - entity.getX(), position.y - entity.getY(), position.z - entity.getZ()); - return this.level().noCollision(entity, movedBounds); - } - - private void tickTeleportCooldowns() { - Iterator> iterator = this.teleportCooldowns.entrySet().iterator(); - while (iterator.hasNext()) { - Map.Entry entry = iterator.next(); - int cooldown = entry.getValue() - 1; - if (cooldown < 0) { - iterator.remove(); - } else { - entry.setValue(cooldown); - } - } - } - - private void applyTeleportCooldown(Entity entity, PortalGunPortalEntity destination) { - UUID entityId = entity.getUUID(); - this.teleportCooldowns.put(entityId, TELEPORT_COOLDOWN_TICKS); - destination.teleportCooldowns.put(entityId, TELEPORT_COOLDOWN_TICKS); - } - - private void handleSpecialEntityPostTeleport(Entity entity) { - if (entity instanceof AbstractArrow arrow) { - ((AbstractArrowAccessor) arrow).antarchy$setInGround(false); - ((AbstractArrowAccessor) arrow).antarchy$setInGroundTime(0); - ((AbstractArrowAccessor) arrow).antarchy$setShakeTime(0); - arrow.setNoPhysics(false); - } - } - - private PortalGunPortalEntity findLinkedPortal(ServerLevel level) { - if (this.linkedPortalId == null) { - return null; - } - Entity entity = level.getEntity(this.linkedPortalId); - return entity instanceof PortalGunPortalEntity portal ? portal : null; - } - @Override - public AABB getBoundingBoxForCulling() { - return this.getWorldPortalShape().getBoundsForCulling(); - } - - @Override - protected AABB makeBoundingBox() { - return this.getPortalInsides(); - } - - @Override - public void addAdditionalSaveData(CompoundTag tag) { + protected void saveExtra(CompoundTag tag) { if (this.ownerId != null) { tag.putUUID("OwnerId", this.ownerId); } - if (this.linkedPortalId != null) { - tag.putUUID("LinkedPortalId", this.linkedPortalId); + if (this.gunId != null) { + tag.putUUID("GunId", this.gunId); + } + if (this.isMoonPortal()) { + tag.putBoolean("Moon", true); + tag.putInt("MoonTicks", this.moonTicks); + tag.putInt("MoonSuckedBlocks", this.moonSuckedBlocks); + ListTag lifted = new ListTag(); + for (UUID id : this.moonLiftedBlocks.keySet()) { + lifted.add(NbtUtils.createUUID(id)); + } + tag.put("MoonLiftedBlocks", lifted); } - tag.putInt("AgeTicks", this.ageTicks); - tag.putInt("PairTime", this.pairTime); tag.putInt("Side", this.getPortalSide().ordinal()); - tag.putInt("Facing", this.getFacingDirection().get3DDataValue()); - tag.putInt("UpAxis", this.getUpAxis().get3DDataValue()); - tag.putInt("ChannelRed", this.getChannelRed()); - tag.putInt("ChannelGreen", this.getChannelGreen()); - tag.putInt("ChannelBlue", this.getChannelBlue()); + tag.putInt("Variant", this.getVariant().id()); tag.putInt("SupportX", this.supportOrigin.getX()); tag.putInt("SupportY", this.supportOrigin.getY()); tag.putInt("SupportZ", this.supportOrigin.getZ()); @@ -707,158 +516,115 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { tag.putInt("BaseX", this.basePos.getX()); tag.putInt("BaseY", this.basePos.getY()); tag.putInt("BaseZ", this.basePos.getZ()); - ListTag spots = new ListTag(); - for (BlockPos portalSpot : this.portalSpots) { - CompoundTag spot = new CompoundTag(); - spot.putInt("X", portalSpot.getX()); - spot.putInt("Y", portalSpot.getY()); - spot.putInt("Z", portalSpot.getZ()); - spots.add(spot); - } - tag.put("PortalSpots", spots); - ListTag compensated = new ListTag(); - for (BlockPos compensatedSpot : this.compensatedSpots) { - CompoundTag spot = new CompoundTag(); - spot.putInt("X", compensatedSpot.getX()); - spot.putInt("Y", compensatedSpot.getY()); - spot.putInt("Z", compensatedSpot.getZ()); - compensated.add(spot); - } - tag.put("CompensatedSpots", compensated); + tag.put("PortalSpots", writeSpots(java.util.Arrays.asList(this.portalSpots))); + tag.put("CompensatedSpots", writeSpots(this.compensatedSpots)); } @Override - public void readAdditionalSaveData(CompoundTag tag) { + protected void loadExtra(CompoundTag tag) { if (tag.hasUUID("OwnerId")) { this.ownerId = tag.getUUID("OwnerId"); } - if (tag.hasUUID("LinkedPortalId")) { - this.linkedPortalId = tag.getUUID("LinkedPortalId"); - this.entityData.set(LINKED_PORTAL, Optional.of(this.linkedPortalId)); + this.gunId = tag.hasUUID("GunId") ? tag.getUUID("GunId") : null; + this.entityData.set(OWNER_ID, Optional.ofNullable(this.ownerId)); + this.entityData.set(GUN_ID, Optional.ofNullable(this.gunId)); + this.entityData.set(MOON, tag.getBoolean("Moon")); + this.moonTicks = tag.getInt("MoonTicks"); + this.moonSuckedBlocks = tag.getInt("MoonSuckedBlocks"); + this.moonLiftedBlocks.clear(); + for (Tag lifted : tag.getList("MoonLiftedBlocks", Tag.TAG_INT_ARRAY)) { + this.moonLiftedBlocks.put(NbtUtils.loadUUID(lifted), this.moonTicks); } - this.ageTicks = tag.getInt("AgeTicks"); - this.pairTime = tag.getInt("PairTime"); this.entityData.set(SIDE, tag.getInt("Side")); - this.entityData.set(FACING, tag.getInt("Facing")); - this.entityData.set(UP_AXIS, tag.getInt("UpAxis")); - if (tag.contains("ChannelRed")) { - this.entityData.set(CHANNEL_RED, tag.getInt("ChannelRed")); - this.entityData.set(CHANNEL_GREEN, tag.getInt("ChannelGreen")); - this.entityData.set(CHANNEL_BLUE, tag.getInt("ChannelBlue")); - } else if (this.ownerId != null) { - int[] channelColor = generateChannelColor(this.ownerId, this.getPortalSide()); - this.entityData.set(CHANNEL_RED, channelColor[0]); - this.entityData.set(CHANNEL_GREEN, channelColor[1]); - this.entityData.set(CHANNEL_BLUE, channelColor[2]); - } + this.entityData.set(VARIANT, PortalGunVariant.byId(tag.getInt("Variant")).id()); this.supportOrigin = new BlockPos(tag.getInt("SupportX"), tag.getInt("SupportY"), tag.getInt("SupportZ")); this.masterPos = new BlockPos(tag.getInt("MasterX"), tag.getInt("MasterY"), tag.getInt("MasterZ")); this.basePos = new BlockPos(tag.getInt("BaseX"), tag.getInt("BaseY"), tag.getInt("BaseZ")); - ListTag spots = tag.getList("PortalSpots", Tag.TAG_COMPOUND); - for (int i = 0; i < Math.min(2, spots.size()); i++) { - CompoundTag spot = spots.getCompound(i); - this.portalSpots[i] = new BlockPos(spot.getInt("X"), spot.getInt("Y"), spot.getInt("Z")); + BlockPos[] spots = readSpotList(tag.getList("PortalSpots", Tag.TAG_COMPOUND)); + if (spots.length > 0) { + this.portalSpots = spots; } - ListTag compensated = tag.getList("CompensatedSpots", Tag.TAG_COMPOUND); - Set compensatedSpots = new HashSet<>(); - for (int i = 0; i < compensated.size(); i++) { - CompoundTag spot = compensated.getCompound(i); - compensatedSpots.add(new BlockPos(spot.getInt("X"), spot.getInt("Y"), spot.getInt("Z"))); + this.compensatedSpots = new HashSet<>(java.util.Arrays.asList(readSpotList(tag.getList("CompensatedSpots", Tag.TAG_COMPOUND)))); + } + + private static ListTag writeSpots(Iterable positions) { + ListTag list = new ListTag(); + for (BlockPos position : positions) { + CompoundTag spot = new CompoundTag(); + spot.putInt("X", position.getX()); + spot.putInt("Y", position.getY()); + spot.putInt("Z", position.getZ()); + list.add(spot); } - this.compensatedSpots = compensatedSpots; + return list; + } + + private static BlockPos[] readSpotList(ListTag list) { + BlockPos[] positions = new BlockPos[list.size()]; + for (int i = 0; i < list.size(); i++) { + CompoundTag spot = list.getCompound(i); + positions[i] = new BlockPos(spot.getInt("X"), spot.getInt("Y"), spot.getInt("Z")); + } + return positions; } @Override public void remove(Entity.RemovalReason reason) { + if (this.isMoonPortal() && this.level() instanceof ServerLevel moonLevel) { + this.releaseMoonLiftedBlocks(moonLevel); + } Level level = this.level(); UUID ownerId = this.ownerId; + boolean destroyPortal = reason.shouldDestroy(); + if (destroyPortal && !level.isClientSide && ownerId != null && level instanceof ServerLevel serverLevel) { + PortalGunSavedData.clearPortal(serverLevel.getServer(), this.gunId, this.getPortalSide(), this.getUUID(), serverLevel.dimension().location()); + } super.remove(reason); - if (!level.isClientSide && ownerId != null && level instanceof ServerLevel serverLevel) { - PortalGunSavedData.clearPortal(serverLevel.getServer(), ownerId, this.getPortalSide(), this.getUUID()); + if (destroyPortal && !level.isClientSide && ownerId != null && level instanceof ServerLevel serverLevel) { this.clearPortalBlocks(serverLevel); } } private void clearPortalBlocks(ServerLevel level) { for (BlockPos portalSpot : this.portalSpots) { - if (level.getBlockEntity(portalSpot) instanceof PortalGunPortalMasterBlockEntity master && this.getUUID().equals(master.getPortalId())) { - level.removeBlock(portalSpot, false); - continue; - } - if (level.getBlockEntity(portalSpot) instanceof PortalGunPortalBaseBlockEntity base && this.getUUID().equals(base.getPortalId())) { - level.removeBlock(portalSpot, false); + if (level.getBlockEntity(portalSpot) instanceof PortalGunPortalCellAccess cell) { + PortalGunPortalFaceRecord removed = cell.portalGun$removeFaceRecord(this.getFacingDirection(), this.getUUID()); + if (!cell.portalGun$getFaceRecords().isEmpty()) { + continue; + } + if (cell instanceof PortalGunPortalMasterBlockEntity master && this.getUUID().equals(master.getPortalId())) { + level.removeBlock(portalSpot, false); + } else if (cell instanceof PortalGunPortalBaseBlockEntity base && this.getUUID().equals(base.getPortalId())) { + level.removeBlock(portalSpot, false); + } else if (removed != null) { + level.removeBlock(portalSpot, false); + } } } } - @Override - public boolean isInvulnerableTo(DamageSource damageSource) { - return true; + public static SoundEvent sound(String path) { + ResourceLocation soundId = new ResourceLocation(Antarchy.MODID, path); + return BuiltInRegistries.SOUND_EVENT.getOptional(soundId) + .orElseThrow(() -> new IllegalStateException("Missing portal gun sound event: " + soundId)); } - @Override - public boolean fireImmune() { - return true; - } - - @Override - public void lavaHurt() { - } - - @Override - public boolean isPushable() { - return false; - } - - @Override - public boolean canBeCollidedWith() { - return false; - } - - @Override - public boolean isPickable() { - return false; - } - - @Override - public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "portal_controller", 0, this::portalController)); - } - - private PlayState portalController(AnimationState state) { - state.getController().setAnimationSpeed(this.entityData.get(CLOSING) || this.ageTicks < OPEN_TICKS ? 4.0D : 1.0D); - if (this.entityData.get(CLOSING)) { - return state.setAndContinue(CLOSE_ANIM); + private final class GunAppearance implements PortalAppearance { + @Override + public int color() { + return PortalGunPortalEntity.this.getPortalColor(); } - if (this.ageTicks < OPEN_TICKS) { - return state.setAndContinue(OPEN_ANIM); + + @Override + public ResourceLocation rimTexture() { + return PortalGunPortalEntity.this.getRimTexture(); } - return state.setAndContinue(IDLE_ANIM); - } - @Override - public AnimatableInstanceCache getAnimatableInstanceCache() { - return this.geoCache; - } - - public static SoundEvent sound(String path, SoundEvent fallback) { - return BuiltInRegistries.SOUND_EVENT.getOptional(new ResourceLocation(Antarchy.MODID, path)).orElse(fallback); - } - - private static int[] generateChannelColor(UUID ownerId, PortalSide side) { - int seed = ownerId == null ? side.ordinal() : ownerId.hashCode() ^ side.ordinal() * 0x45d9f3b; - int wobbleA = Math.floorMod(seed, 54); - int wobbleB = Math.floorMod(seed >> 8, 46); - int wobbleC = Math.floorMod(seed >> 16, 38); - if (side == PortalSide.BLUE) { - return new int[] {42 + wobbleC, 128 + wobbleB, 218 + wobbleA / 3}; + @Override + public ResourceLocation surfaceTexture(boolean fancy) { + return fancy + ? PortalGunPortalEntity.this.getVariant().vortexTexture(PortalGunPortalEntity.this.getPortalSide()) + : PortalGunPortalEntity.this.getRimTexture(); } - return new int[] {230 + wobbleA / 5, 108 + wobbleB, 28 + wobbleC}; - } - - private record PortalLocalCoords(double horizontal, double vertical, double depth) { - } - - private record PortalBounds(double minHorizontal, double maxHorizontal, double minVertical, double maxVertical, double minDepth, double maxDepth) { } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunProjectileEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunProjectileEntity.java index 6d9569c6..eb76151f 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunProjectileEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunProjectileEntity.java @@ -1,39 +1,89 @@ package com.craisinlord.antarchy.content.portalgun; import com.craisinlord.antarchy.content.item.PortalGunItem; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; +import com.craisinlord.anthology.gravity.GravityTransition; +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.component.AntarchyItemTag; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; import java.util.UUID; +import java.util.concurrent.CompletableFuture; import net.minecraft.core.BlockPos; +import net.minecraft.core.SectionPos; +import net.minecraft.core.registries.Registries; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.TicketType; +import net.minecraft.tags.TagKey; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.EntityDimensions; import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Pose; import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.projectile.ThrowableItemProjectile; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; +import net.minecraft.world.level.ClipContext; +import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.chunk.ChunkStatus; +import net.minecraft.world.level.block.StainedGlassBlock; +import net.minecraft.world.level.block.StainedGlassPaneBlock; +import net.minecraft.world.level.block.TintedGlassBlock; +import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.EntityHitResult; +import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; public class PortalGunProjectileEntity extends ThrowableItemProjectile { + private static final TagKey GLASS_BLOCKS = TagKey.create(Registries.BLOCK, new ResourceLocation("c", "glass_blocks")); + private static final TagKey GLASS_PANES = TagKey.create(Registries.BLOCK, new ResourceLocation("c", "glass_panes")); + private static final int MAX_TICKETED_PROJECTILES = 20; + private static final int PROJECTILE_TICKET_LEVEL = 31; + private static final int MAX_CHUNK_WAIT_TICKS = 200; + private static final int GENERATED_CHECK_RADIUS = 3; + private static final TicketType PROJECTILE_TICKET = TicketType.create("antarchy_portal_projectile", Comparator.comparing(UUID::toString)); + private static final LinkedHashMap PROJECTILE_TICKETS = new LinkedHashMap<>(); private static final EntityDataAccessor SIDE = SynchedEntityData.defineId(PortalGunProjectileEntity.class, EntityDataSerializers.INT); private static final EntityDataAccessor SHOOTER_ID = SynchedEntityData.defineId(PortalGunProjectileEntity.class, EntityDataSerializers.INT); private static final EntityDataAccessor DISTANCE = SynchedEntityData.defineId(PortalGunProjectileEntity.class, EntityDataSerializers.INT); - private static final EntityDataAccessor SPAWN_X = SynchedEntityData.defineId(PortalGunProjectileEntity.class, EntityDataSerializers.INT); - private static final EntityDataAccessor SPAWN_Y = SynchedEntityData.defineId(PortalGunProjectileEntity.class, EntityDataSerializers.INT); - private static final EntityDataAccessor SPAWN_Z = SynchedEntityData.defineId(PortalGunProjectileEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor SPAWN_X = SynchedEntityData.defineId(PortalGunProjectileEntity.class, EntityDataSerializers.LONG); + private static final EntityDataAccessor SPAWN_Y = SynchedEntityData.defineId(PortalGunProjectileEntity.class, EntityDataSerializers.LONG); + private static final EntityDataAccessor SPAWN_Z = SynchedEntityData.defineId(PortalGunProjectileEntity.class, EntityDataSerializers.LONG); + private static final EntityDataAccessor MAX_TRAVEL_DISTANCE_DATA = SynchedEntityData.defineId(PortalGunProjectileEntity.class, EntityDataSerializers.INT); private static final EntityDataAccessor VELOCITY_X = SynchedEntityData.defineId(PortalGunProjectileEntity.class, EntityDataSerializers.FLOAT); private static final EntityDataAccessor VELOCITY_Y = SynchedEntityData.defineId(PortalGunProjectileEntity.class, EntityDataSerializers.FLOAT); private static final EntityDataAccessor VELOCITY_Z = SynchedEntityData.defineId(PortalGunProjectileEntity.class, EntityDataSerializers.FLOAT); - private static final int MAX_FLIGHT_TICKS = 80; + private static final EntityDataAccessor PROJECTILE_SPEED = SynchedEntityData.defineId(PortalGunProjectileEntity.class, EntityDataSerializers.FLOAT); + private static final EntityDataAccessor PASS_THROUGH_GLASS = SynchedEntityData.defineId(PortalGunProjectileEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor PASS_THROUGH_LIQUID = SynchedEntityData.defineId(PortalGunProjectileEntity.class, EntityDataSerializers.BOOLEAN); + private static final int TRAIL_PARTICLES_PER_TICK = 4; + private static final float TRAIL_DUST_SCALE = 0.45F; + private static final float IMPACT_DUST_SCALE = 0.8F; + private static final int IMPACT_PARTICLES = 14; + public static final double MIN_LAUNCH_SPEED = 4.98D; + public static final double LAUNCH_SPEED_VARIANCE = 0.02D; + public static final double MAX_TRAVEL_DISTANCE = 10000.0D; private UUID gunId; private boolean spawnSynced; + private boolean ticketRegistered; + private int chunkWaitTicks; + private final Map> generatedChecks = new HashMap<>(); public int portalWidth = 1; public int portalHeight = 2; @@ -52,30 +102,60 @@ public class PortalGunProjectileEntity extends ThrowableItemProjectile { this.noCulling = true; } + @Override + public EntityDimensions getDimensions(Pose pose) { + return EntityDimensions.fixed(0.3F, 0.3F); + } + @Override protected void defineSynchedData() { super.defineSynchedData(); this.entityData.define(SIDE, PortalGunPortalEntity.PortalSide.BLUE.ordinal()); this.entityData.define(SHOOTER_ID, -1); this.entityData.define(DISTANCE, 0); - this.entityData.define(SPAWN_X, 0); - this.entityData.define(SPAWN_Y, 0); - this.entityData.define(SPAWN_Z, 0); + this.entityData.define(SPAWN_X, Double.doubleToRawLongBits(0.0D)); + this.entityData.define(SPAWN_Y, Double.doubleToRawLongBits(0.0D)); + this.entityData.define(SPAWN_Z, Double.doubleToRawLongBits(0.0D)); + this.entityData.define(MAX_TRAVEL_DISTANCE_DATA, (int) MAX_TRAVEL_DISTANCE); this.entityData.define(VELOCITY_X, 0.0F); this.entityData.define(VELOCITY_Y, 0.0F); this.entityData.define(VELOCITY_Z, 0.0F); + this.entityData.define(PROJECTILE_SPEED, 4.99F); + this.entityData.define(PASS_THROUGH_GLASS, false); + this.entityData.define(PASS_THROUGH_LIQUID, false); } public void configure(PortalGunPortalEntity.PortalSide side, UUID gunId, ItemStack gunStack) { + GravityApi.setAirborneGravityDirection(this, GravityDirection.DOWN, false, GravityTransition.INSTANT); this.entityData.set(SIDE, side.ordinal()); this.gunId = gunId; this.setItem(gunStack.copyWithCount(1)); + this.portalWidth = PortalGunItem.getPortalWidth(gunStack); + this.portalHeight = PortalGunItem.getPortalHeight(gunStack); + this.entityData.set(MAX_TRAVEL_DISTANCE_DATA, AntarchySettings.portalGunMaxShootDistance()); + this.entityData.set(PASS_THROUGH_GLASS, AntarchySettings.portalGunCanFireThroughGlass()); + this.entityData.set(PASS_THROUGH_LIQUID, AntarchySettings.portalGunCanFireThroughLiquid()); Entity owner = this.getOwner(); this.entityData.set(SHOOTER_ID, owner == null ? -1 : owner.getId()); - this.syncSpawnPosition(this.blockPosition()); + } + + public void syncLaunchState() { + this.syncSpawnPosition(this.position()); this.syncVelocity(); } + public void setProjectileSpeed(double speed) { + this.entityData.set(PROJECTILE_SPEED, (float) speed); + } + + public double getProjectileSpeed() { + return this.entityData.get(PROJECTILE_SPEED); + } + + public PortalGunVariant getVariant() { + return this.getItem().getItem() instanceof PortalGunItem portalGun ? portalGun.getVariant() : PortalGunVariant.DEFAULT; + } + public PortalGunPortalEntity.PortalSide getPortalSide() { return this.entityData.get(SIDE) == PortalGunPortalEntity.PortalSide.ORANGE.ordinal() ? PortalGunPortalEntity.PortalSide.ORANGE : PortalGunPortalEntity.PortalSide.BLUE; } @@ -88,8 +168,16 @@ public class PortalGunProjectileEntity extends ThrowableItemProjectile { return this.entityData.get(DISTANCE); } - public BlockPos getSyncedSpawnPos() { - return new BlockPos(this.entityData.get(SPAWN_X), this.entityData.get(SPAWN_Y), this.entityData.get(SPAWN_Z)); + public int getMaxTravelDistance() { + return this.entityData.get(MAX_TRAVEL_DISTANCE_DATA); + } + + public Vec3 getSyncedSpawnPosition() { + return new Vec3( + Double.longBitsToDouble(this.entityData.get(SPAWN_X)), + Double.longBitsToDouble(this.entityData.get(SPAWN_Y)), + Double.longBitsToDouble(this.entityData.get(SPAWN_Z)) + ); } public Vec3 getSyncedVelocity() { @@ -101,8 +189,9 @@ public class PortalGunProjectileEntity extends ThrowableItemProjectile { return Items.AIR; } - protected double getDefaultGravity() { - return 0.0D; + @Override + protected float getGravity() { + return 0.0F; } @Override @@ -122,32 +211,232 @@ public class PortalGunProjectileEntity extends ThrowableItemProjectile { @Override public void tick() { - super.tick(); - if (!this.spawnSynced) { - this.syncSpawnPosition(this.blockPosition()); + if (this.level().isClientSide && !this.spawnSynced) { + Vec3 spawnPosition = this.getSyncedSpawnPosition(); + this.setPos(spawnPosition.x, spawnPosition.y, spawnPosition.z); + this.setDeltaMovement(this.getSyncedVelocity()); + this.spawnSynced = true; + } + if (this.level() instanceof ServerLevel serverLevel && !this.isRemoved() && !this.prepareServerStep(serverLevel)) { + return; + } + this.baseTick(); + if (this.isRemoved()) { + return; + } + if (!this.spawnSynced && !this.level().isClientSide) { + this.syncSpawnPosition(this.position()); + this.syncVelocity(); + this.spawnSynced = true; } - this.syncVelocity(); this.entityData.set(DISTANCE, this.tickCount); - if (this.tickCount > MAX_FLIGHT_TICKS) { + int maxTravelDistance = this.getMaxTravelDistance(); + Vec3 spawnPosition = this.getSyncedSpawnPosition(); + if (this.tickCount > maxTravelDistance / 5.0D + 10.0D + || this.position().distanceToSqr(spawnPosition) > (maxTravelDistance + 5.0D) * (maxTravelDistance + 5.0D)) { this.discard(); return; } Vec3 motion = this.getDeltaMovement(); + Vec3 start = this.position(); + Vec3 end = start.add(motion); + ClipContext.Fluid fluidMode = this.entityData.get(PASS_THROUGH_LIQUID) ? ClipContext.Fluid.NONE : ClipContext.Fluid.ANY; + HitResult hit = this.level().clip(new ClipContext(start, end, ClipContext.Block.COLLIDER, fluidMode, this)); + if (hit instanceof BlockHitResult blockHit) { + BlockPos hitBlockPos = blockHit.getBlockPos(); + net.minecraft.world.level.block.state.BlockState hitBlockState = this.level().getBlockState(hitBlockPos); + boolean passThroughGlass = this.shouldPassThroughGlass(blockHit); + if (!hitBlockState.isAir()) { + hitBlockState.entityInside(this.level(), hitBlockPos, this); + if (this.isRemoved()) { + return; + } + } + if (!passThroughGlass) { + this.onHit(blockHit); + if (this.isRemoved()) { + return; + } + } + this.setPos(blockHit.getLocation().subtract(motion.scale(0.98D))); + } if (motion.lengthSqr() > 1.0E-6D) { double horizontal = Math.sqrt(motion.x * motion.x + motion.z * motion.z); this.setYRot((float) (net.minecraft.util.Mth.atan2(motion.z, motion.x) * (180.0D / Math.PI)) - 90.0F); this.setXRot((float) (-(net.minecraft.util.Mth.atan2(motion.y, horizontal) * (180.0D / Math.PI)))); } - if (this.level().isClientSide) { - Vec3 point = this.position(); - if (this.getPortalSide() == PortalGunPortalEntity.PortalSide.BLUE) { - this.level().addParticle(net.minecraft.core.particles.ParticleTypes.SOUL_FIRE_FLAME, point.x, point.y, point.z, 0.0D, 0.0D, 0.0D); - this.level().addParticle(net.minecraft.core.particles.ParticleTypes.END_ROD, point.x, point.y, point.z, 0.0D, 0.0D, 0.0D); - } else { - this.level().addParticle(net.minecraft.core.particles.ParticleTypes.FLAME, point.x, point.y, point.z, 0.0D, 0.0D, 0.0D); - this.level().addParticle(net.minecraft.core.particles.ParticleTypes.CRIT, point.x, point.y, point.z, 0.0D, 0.0D, 0.0D); + this.setPos(this.position().add(motion)); + this.checkInsideBlocks(); + if (this.isRemoved()) { + return; + } + if (this.isInWater()) { + for (int i = 0; i < 4; i++) { + float backtrack = 0.25F; + this.level().addParticle( + net.minecraft.core.particles.ParticleTypes.BUBBLE, + this.getX() - motion.x * backtrack, + this.getY() - motion.y * backtrack, + this.getZ() - motion.z * backtrack, + motion.x, + motion.y, + motion.z + ); } } + if (this.level().isClientSide && this.tickCount > 1) { + net.minecraft.core.particles.DustParticleOptions dust = this.trailDust(TRAIL_DUST_SCALE); + Vec3 point = this.position(); + for (int i = 0; i < TRAIL_PARTICLES_PER_TICK; i++) { + Vec3 trailPoint = point.subtract(motion.scale((double) i / TRAIL_PARTICLES_PER_TICK)); + this.level().addParticle(dust, trailPoint.x, trailPoint.y, trailPoint.z, 0.0D, 0.0D, 0.0D); + } + } + } + + @Override + public void remove(Entity.RemovalReason reason) { + this.releaseProjectileTicket(); + super.remove(reason); + } + + private boolean prepareServerStep(ServerLevel level) { + Vec3 position = this.position(); + Vec3 motion = this.getDeltaMovement(); + if (position.y > level.getMaxBuildHeight() + 2.0D && motion.y >= 0.0D + || position.y < level.getMinBuildHeight() - 2.0D && motion.y <= 0.0D) { + this.discard(); + return false; + } + List path = chunksAlong(position, position.add(motion)); + boolean playerArea = true; + for (ChunkPos chunk : path) { + if (!level.isPositionEntityTicking(chunk.getMiddleBlockPosition(0))) { + playerArea = false; + break; + } + } + if (playerArea) { + this.releaseProjectileTicket(); + this.chunkWaitTicks = 0; + return true; + } + if (!AntarchySettings.portalGunCanPortalProjectilesChunkload()) { + this.releaseProjectileTicket(); + this.discard(); + return false; + } + for (ChunkPos chunk : path) { + for (int dx = -GENERATED_CHECK_RADIUS; dx <= GENERATED_CHECK_RADIUS; dx++) { + for (int dz = -GENERATED_CHECK_RADIUS; dz <= GENERATED_CHECK_RADIUS; dz++) { + ChunkPos around = new ChunkPos(chunk.x + dx, chunk.z + dz); + if (level.getChunkSource().getChunkNow(around.x, around.z) != null) { + continue; + } + Boolean generated = this.isGenerated(level, around); + if (generated == null) { + return this.waitForChunks(); + } + if (!generated) { + this.discard(); + return false; + } + } + } + } + this.updateProjectileTicket(level, path); + for (ChunkPos chunk : path) { + if (!level.isPositionEntityTicking(chunk.getMiddleBlockPosition(0))) { + return this.waitForChunks(); + } + } + this.chunkWaitTicks = 0; + return true; + } + + private boolean waitForChunks() { + if (++this.chunkWaitTicks > MAX_CHUNK_WAIT_TICKS) { + this.discard(); + } + return false; + } + + private Boolean isGenerated(ServerLevel level, ChunkPos chunk) { + CompletableFuture check = this.generatedChecks.computeIfAbsent(chunk.toLong(), key -> level.getChunkSource().chunkMap.read(chunk) + .thenApply(tag -> tag.map(PortalGunProjectileEntity::isFullChunk).orElse(false)) + .exceptionally(error -> false)); + return check.isDone() ? check.join() : null; + } + + private static boolean isFullChunk(CompoundTag tag) { + return ChunkStatus.byName(tag.getString("Status")).isOrAfter(ChunkStatus.FULL); + } + + private static List chunksAlong(Vec3 start, Vec3 end) { + int minX = SectionPos.blockToSectionCoord(Math.min(start.x, end.x)); + int maxX = SectionPos.blockToSectionCoord(Math.max(start.x, end.x)); + int minZ = SectionPos.blockToSectionCoord(Math.min(start.z, end.z)); + int maxZ = SectionPos.blockToSectionCoord(Math.max(start.z, end.z)); + if (maxX - minX > 1 || maxZ - minZ > 1) { + return List.of(new ChunkPos(minX, minZ), new ChunkPos(maxX, maxZ)); + } + List chunks = new ArrayList<>(4); + for (int x = minX; x <= maxX; x++) { + for (int z = minZ; z <= maxZ; z++) { + chunks.add(new ChunkPos(x, z)); + } + } + return chunks; + } + + private void updateProjectileTicket(ServerLevel serverLevel, List chunks) { + UUID ticketId = this.getUUID(); + ProjectileTicket current = PROJECTILE_TICKETS.get(ticketId); + if (current != null && current.level == serverLevel && current.chunks.equals(chunks)) { + return; + } + if (current != null) { + removeTicket(ticketId, current); + PROJECTILE_TICKETS.remove(ticketId); + } + while (PROJECTILE_TICKETS.size() >= MAX_TICKETED_PROJECTILES) { + Map.Entry oldest = PROJECTILE_TICKETS.entrySet().iterator().next(); + removeTicket(oldest.getKey(), oldest.getValue()); + PROJECTILE_TICKETS.remove(oldest.getKey()); + } + for (ChunkPos chunk : chunks) { + serverLevel.getChunkSource().addRegionTicket(PROJECTILE_TICKET, chunk, PROJECTILE_TICKET_LEVEL, ticketId); + } + PROJECTILE_TICKETS.put(ticketId, new ProjectileTicket(serverLevel, List.copyOf(chunks))); + this.ticketRegistered = true; + } + + private static void removeTicket(UUID ticketId, ProjectileTicket ticket) { + for (ChunkPos chunk : ticket.chunks()) { + ticket.level().getChunkSource().removeRegionTicket(PROJECTILE_TICKET, chunk, PROJECTILE_TICKET_LEVEL, ticketId); + } + } + + private void releaseProjectileTicket() { + if (!this.ticketRegistered) { + return; + } + UUID ticketId = this.getUUID(); + ProjectileTicket ticket = PROJECTILE_TICKETS.remove(ticketId); + if (ticket != null) { + removeTicket(ticketId, ticket); + } + this.ticketRegistered = false; + } + + public static void releaseAllProjectileTickets() { + for (Map.Entry entry : PROJECTILE_TICKETS.entrySet()) { + removeTicket(entry.getKey(), entry.getValue()); + } + PROJECTILE_TICKETS.clear(); + } + + private record ProjectileTicket(ServerLevel level, List chunks) { } @Override @@ -159,27 +448,44 @@ public class PortalGunProjectileEntity extends ThrowableItemProjectile { if (!this.level().isClientSide && this.level() instanceof ServerLevel serverLevel) { this.spawnImpactParticles(serverLevel, result.getLocation()); ItemStack sourceStack = this.resolveSourceStack(); - if (this.getOwner() instanceof Player player && sourceStack.getItem() instanceof PortalGunItem portalGunItem) { - portalGunItem.handlePortalImpact(serverLevel, player, sourceStack, this.getPortalSide(), result, this.position()); + if (this.getOwner() instanceof LivingEntity shooter && sourceStack.getItem() instanceof PortalGunItem portalGunItem) { + portalGunItem.handlePortalImpact(serverLevel, shooter, sourceStack, this.gunId, this.getPortalSide(), result, result.getLocation(), this.portalWidth, this.portalHeight); } } this.discard(); } - private void spawnImpactParticles(ServerLevel level, Vec3 impactPos) { - if (this.getPortalSide() == PortalGunPortalEntity.PortalSide.BLUE) { - level.sendParticles(net.minecraft.core.particles.ParticleTypes.SOUL_FIRE_FLAME, impactPos.x, impactPos.y, impactPos.z, 10, 0.08D, 0.08D, 0.08D, 0.01D); - level.sendParticles(net.minecraft.core.particles.ParticleTypes.END_ROD, impactPos.x, impactPos.y, impactPos.z, 6, 0.04D, 0.04D, 0.04D, 0.01D); - return; + private boolean shouldPassThroughGlass(BlockHitResult hit) { + if (!this.entityData.get(PASS_THROUGH_GLASS)) { + return false; } - level.sendParticles(net.minecraft.core.particles.ParticleTypes.FLAME, impactPos.x, impactPos.y, impactPos.z, 10, 0.08D, 0.08D, 0.08D, 0.01D); - level.sendParticles(net.minecraft.core.particles.ParticleTypes.CRIT, impactPos.x, impactPos.y, impactPos.z, 6, 0.04D, 0.04D, 0.04D, 0.01D); + BlockPos blockPos = hit.getBlockPos(); + BlockState state = this.level().getBlockState(blockPos); + Block block = state.getBlock(); + return state.is(GLASS_BLOCKS) + || state.is(GLASS_PANES) + || block == Blocks.GLASS + || block == Blocks.GLASS_PANE + || block == Blocks.TINTED_GLASS + || block instanceof StainedGlassBlock + || block instanceof StainedGlassPaneBlock + || block instanceof TintedGlassBlock; } - private void syncSpawnPosition(BlockPos pos) { - this.entityData.set(SPAWN_X, pos.getX()); - this.entityData.set(SPAWN_Y, pos.getY()); - this.entityData.set(SPAWN_Z, pos.getZ()); + private void spawnImpactParticles(ServerLevel level, Vec3 impactPos) { + level.sendParticles(this.trailDust(IMPACT_DUST_SCALE), impactPos.x, impactPos.y, impactPos.z, IMPACT_PARTICLES, 0.12D, 0.12D, 0.12D, 0.02D); + } + + private net.minecraft.core.particles.DustParticleOptions trailDust(float scale) { + int color = this.getVariant().color(this.getPortalSide()); + return new net.minecraft.core.particles.DustParticleOptions( + new org.joml.Vector3f((color >> 16 & 0xFF) / 255.0F, (color >> 8 & 0xFF) / 255.0F, (color & 0xFF) / 255.0F), scale); + } + + private void syncSpawnPosition(Vec3 pos) { + this.entityData.set(SPAWN_X, Double.doubleToRawLongBits(pos.x)); + this.entityData.set(SPAWN_Y, Double.doubleToRawLongBits(pos.y)); + this.entityData.set(SPAWN_Z, Double.doubleToRawLongBits(pos.z)); this.spawnSynced = true; } @@ -205,12 +511,20 @@ public class PortalGunProjectileEntity extends ThrowableItemProjectile { tag.putInt("Side", this.entityData.get(SIDE)); tag.putInt("ShooterId", this.entityData.get(SHOOTER_ID)); tag.putInt("Distance", this.entityData.get(DISTANCE)); - tag.putInt("SpawnX", this.entityData.get(SPAWN_X)); - tag.putInt("SpawnY", this.entityData.get(SPAWN_Y)); - tag.putInt("SpawnZ", this.entityData.get(SPAWN_Z)); + Vec3 spawnPosition = this.getSyncedSpawnPosition(); + tag.putInt("SpawnX", net.minecraft.util.Mth.floor(spawnPosition.x)); + tag.putInt("SpawnY", net.minecraft.util.Mth.floor(spawnPosition.y)); + tag.putInt("SpawnZ", net.minecraft.util.Mth.floor(spawnPosition.z)); + tag.putDouble("SpawnPosX", spawnPosition.x); + tag.putDouble("SpawnPosY", spawnPosition.y); + tag.putDouble("SpawnPosZ", spawnPosition.z); + tag.putInt("MaxTravelDistance", this.entityData.get(MAX_TRAVEL_DISTANCE_DATA)); tag.putFloat("VelocityX", this.entityData.get(VELOCITY_X)); tag.putFloat("VelocityY", this.entityData.get(VELOCITY_Y)); tag.putFloat("VelocityZ", this.entityData.get(VELOCITY_Z)); + tag.putFloat("ProjectileSpeed", this.entityData.get(PROJECTILE_SPEED)); + tag.putBoolean("PassThroughGlass", this.entityData.get(PASS_THROUGH_GLASS)); + tag.putBoolean("PassThroughLiquid", this.entityData.get(PASS_THROUGH_LIQUID)); tag.putInt("PortalWidth", this.portalWidth); tag.putInt("PortalHeight", this.portalHeight); if (this.gunId != null) { @@ -224,21 +538,27 @@ public class PortalGunProjectileEntity extends ThrowableItemProjectile { this.entityData.set(SIDE, tag.getInt("Side")); this.entityData.set(SHOOTER_ID, tag.getInt("ShooterId")); this.entityData.set(DISTANCE, tag.getInt("Distance")); - this.entityData.set(SPAWN_X, tag.getInt("SpawnX")); - this.entityData.set(SPAWN_Y, tag.getInt("SpawnY")); - this.entityData.set(SPAWN_Z, tag.getInt("SpawnZ")); + this.entityData.set(SPAWN_X, Double.doubleToRawLongBits(tag.contains("SpawnPosX") ? tag.getDouble("SpawnPosX") : tag.getInt("SpawnX"))); + this.entityData.set(SPAWN_Y, Double.doubleToRawLongBits(tag.contains("SpawnPosY") ? tag.getDouble("SpawnPosY") : tag.getInt("SpawnY"))); + this.entityData.set(SPAWN_Z, Double.doubleToRawLongBits(tag.contains("SpawnPosZ") ? tag.getDouble("SpawnPosZ") : tag.getInt("SpawnZ"))); + this.entityData.set(MAX_TRAVEL_DISTANCE_DATA, tag.contains("MaxTravelDistance") + ? Math.max(1, tag.getInt("MaxTravelDistance")) + : AntarchySettings.portalGunMaxShootDistance()); this.entityData.set(VELOCITY_X, tag.getFloat("VelocityX")); this.entityData.set(VELOCITY_Y, tag.getFloat("VelocityY")); this.entityData.set(VELOCITY_Z, tag.getFloat("VelocityZ")); - this.portalWidth = Math.max(1, tag.getInt("PortalWidth")); - this.portalHeight = Math.max(2, tag.getInt("PortalHeight")); + this.entityData.set(PROJECTILE_SPEED, tag.contains("ProjectileSpeed") ? tag.getFloat("ProjectileSpeed") : 4.99F); + this.entityData.set(PASS_THROUGH_GLASS, tag.contains("PassThroughGlass") ? tag.getBoolean("PassThroughGlass") : AntarchySettings.portalGunCanFireThroughGlass()); + this.entityData.set(PASS_THROUGH_LIQUID, tag.contains("PassThroughLiquid") ? tag.getBoolean("PassThroughLiquid") : AntarchySettings.portalGunCanFireThroughLiquid()); + this.portalWidth = net.minecraft.util.Mth.clamp(tag.getInt("PortalWidth"), 1, 16); + this.portalHeight = net.minecraft.util.Mth.clamp(tag.getInt("PortalHeight"), 2, 16); this.spawnSynced = true; if (tag.hasUUID("GunId")) { this.gunId = tag.getUUID("GunId"); } ItemStack itemStack = this.getItem(); if (this.gunId != null && !itemStack.isEmpty()) { - itemStack.getOrCreateTag().putUUID(PortalGunItem.GUN_ID_TAG, this.gunId); + AntarchyItemTag.update(itemStack, customData -> customData.putUUID(PortalGunItem.GUN_ID_TAG, this.gunId)); } } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunResetManager.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunResetManager.java new file mode 100644 index 00000000..3a37a81f --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunResetManager.java @@ -0,0 +1,86 @@ +package com.craisinlord.antarchy.content.portalgun; + +import com.craisinlord.antarchy.content.item.PortalGunItem; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.item.ItemStack; + +public final class PortalGunResetManager { + public static final int ARM = 0; + public static final int RELEASE = 1; + public static final int RESET_ALL = 2; + public static final int RESET_BLUE = 3; + private static final Map STATES = new HashMap<>(); + + private PortalGunResetManager() { + } + + public static void handleInput(ServerPlayer player, int action) { + ItemStack stack = heldPortalGun(player); + if (stack.isEmpty()) { + STATES.remove(player.getUUID()); + return; + } + UUID gunId = PortalGunItem.ensureGunIdentity(stack, player); + if (action == ARM) { + STATES.put(player.getUUID(), new ResetState(gunId, player.serverLevel().getGameTime(), false)); + return; + } + ResetState state = activeState(player, gunId); + if (action == RESET_ALL) { + PortalGunItem item = (PortalGunItem) stack.getItem(); + item.resetPortals(player, stack); + STATES.remove(player.getUUID()); + } else if (action == RESET_BLUE && state != null && !state.sideReset()) { + ((PortalGunItem) stack.getItem()).resetPortalSide(player, stack, PortalGunPortalEntity.PortalSide.BLUE); + STATES.put(player.getUUID(), new ResetState(gunId, state.startedAt(), true)); + } else if (action == RELEASE) { + STATES.remove(player.getUUID()); + } + } + + public static boolean handleOrangeReset(ServerPlayer player, ItemStack stack) { + if (!(stack.getItem() instanceof PortalGunItem)) { + return false; + } + UUID gunId = PortalGunItem.getGunId(stack); + ResetState state = activeState(player, gunId); + if (state == null) { + return false; + } + if (!state.sideReset()) { + ((PortalGunItem) stack.getItem()).resetPortalSide(player, stack, PortalGunPortalEntity.PortalSide.ORANGE); + STATES.put(player.getUUID(), new ResetState(gunId, state.startedAt(), true)); + } + return true; + } + + public static void clear(MinecraftServer server) { + STATES.clear(); + } + + private static ResetState activeState(ServerPlayer player, UUID gunId) { + ResetState state = STATES.get(player.getUUID()); + if (state == null || gunId == null || !state.gunId().equals(gunId) + || player.serverLevel().getGameTime() - state.startedAt() > 100L) { + STATES.remove(player.getUUID()); + return null; + } + return state; + } + + private static ItemStack heldPortalGun(ServerPlayer player) { + ItemStack main = player.getMainHandItem(); + if (main.getItem() instanceof PortalGunItem) { + return main; + } + ItemStack offhand = player.getOffhandItem(); + return offhand.getItem() instanceof PortalGunItem ? offhand : ItemStack.EMPTY; + } + + private record ResetState(UUID gunId, long startedAt, boolean sideReset) { + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunSavedData.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunSavedData.java index f4935684..2daf9f3d 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunSavedData.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunSavedData.java @@ -1,23 +1,31 @@ package com.craisinlord.antarchy.content.portalgun; +import com.craisinlord.antarchy.content.item.PortalGunItem; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; import java.util.Optional; +import java.util.Set; import java.util.UUID; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; +import net.minecraft.resources.ResourceLocation; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.Entity; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.saveddata.SavedData; public final class PortalGunSavedData extends SavedData { - private static final String ID = "antarchy_portal_gun_pairs"; + private static final String ID = "antarchy_portal_gun_pairs_v2"; private static final String ENTRIES_KEY = "Entries"; - private static final String OWNER_KEY = "Owner"; + private static final String DIMENSION_KEY = "Dimension"; + private static final String GUN_KEY = "Gun"; private static final String BLUE_KEY = "Blue"; private static final String ORANGE_KEY = "Orange"; - private final Map pairs = new HashMap<>(); + private static final String OWNER_KEY = "Owner"; + private final Map pairs = new HashMap<>(); public static PortalGunSavedData create() { return new PortalGunSavedData(); @@ -27,10 +35,14 @@ public final class PortalGunSavedData extends SavedData { PortalGunSavedData data = new PortalGunSavedData(); for (net.minecraft.nbt.Tag rawEntry : tag.getList(ENTRIES_KEY, net.minecraft.nbt.Tag.TAG_COMPOUND)) { CompoundTag entryTag = (CompoundTag) rawEntry; - UUID owner = entryTag.getUUID(OWNER_KEY); + ResourceLocation dimension = ResourceLocation.tryParse(entryTag.getString(DIMENSION_KEY)); + if (dimension == null || !entryTag.hasUUID(GUN_KEY)) { + continue; + } UUID blue = entryTag.hasUUID(BLUE_KEY) ? entryTag.getUUID(BLUE_KEY) : null; UUID orange = entryTag.hasUUID(ORANGE_KEY) ? entryTag.getUUID(ORANGE_KEY) : null; - data.pairs.put(owner, new PairRecord(blue, orange)); + UUID owner = entryTag.hasUUID(OWNER_KEY) ? entryTag.getUUID(OWNER_KEY) : null; + data.pairs.put(new PairKey(dimension, entryTag.getUUID(GUN_KEY)), new PairRecord(blue, orange, owner)); } return data; } @@ -38,15 +50,19 @@ public final class PortalGunSavedData extends SavedData { @Override public CompoundTag save(CompoundTag tag) { ListTag entries = new ListTag(); - for (Map.Entry entry : this.pairs.entrySet()) { + for (Map.Entry entry : this.pairs.entrySet()) { CompoundTag entryTag = new CompoundTag(); - entryTag.putUUID(OWNER_KEY, entry.getKey()); + entryTag.putString(DIMENSION_KEY, entry.getKey().dimension().toString()); + entryTag.putUUID(GUN_KEY, entry.getKey().gunId()); if (entry.getValue().bluePortalId() != null) { entryTag.putUUID(BLUE_KEY, entry.getValue().bluePortalId()); } if (entry.getValue().orangePortalId() != null) { entryTag.putUUID(ORANGE_KEY, entry.getValue().orangePortalId()); } + if (entry.getValue().ownerId() != null) { + entryTag.putUUID(OWNER_KEY, entry.getValue().ownerId()); + } entries.add(entryTag); } tag.put(ENTRIES_KEY, entries); @@ -61,91 +77,204 @@ public final class PortalGunSavedData extends SavedData { ); } - public static Optional getPortalId(MinecraftServer server, UUID owner, PortalGunPortalEntity.PortalSide side) { - PairRecord record = get(server).pairs.get(owner); + public static Optional getPortalId(MinecraftServer server, UUID gunId, PortalGunPortalEntity.PortalSide side, ResourceLocation dimension) { + if (gunId == null) { + return Optional.empty(); + } + PairRecord record = get(server).pairs.get(new PairKey(dimension, gunId)); if (record == null) { return Optional.empty(); } return Optional.ofNullable(side == PortalGunPortalEntity.PortalSide.BLUE ? record.bluePortalId() : record.orangePortalId()); } - public static boolean isRegistered(MinecraftServer server, UUID owner, PortalGunPortalEntity.PortalSide side, UUID portalId) { - return getPortalId(server, owner, side).map(portalId::equals).orElse(false); + public static boolean isRegistered(ServerLevel level, UUID gunId, PortalGunPortalEntity.PortalSide side, UUID portalId) { + return portalId != null && getPortalId(level.getServer(), gunId, side, level.dimension().location()).map(portalId::equals).orElse(false); } - public static void setPortal(MinecraftServer server, UUID owner, PortalGunPortalEntity.PortalSide side, UUID portalId) { - PortalGunSavedData data = get(server); - PairRecord current = data.pairs.getOrDefault(owner, new PairRecord(null, null)); - PairRecord updated = side == PortalGunPortalEntity.PortalSide.BLUE - ? new PairRecord(portalId, current.orangePortalId()) - : new PairRecord(current.bluePortalId(), portalId); - if (updated.bluePortalId() == null && updated.orangePortalId() == null) { - data.pairs.remove(owner); - } else { - data.pairs.put(owner, updated); + public static void setPortal(ServerLevel level, UUID gunId, UUID ownerId, PortalGunPortalEntity.PortalSide side, UUID portalId) { + if (gunId == null) { + return; } - data.setDirty(); + PortalGunSavedData data = get(level.getServer()); + PairKey key = new PairKey(level.dimension().location(), gunId); + PairRecord current = data.pairs.getOrDefault(key, new PairRecord(null, null, null)); + UUID owner = ownerId != null ? ownerId : current.ownerId(); + data.put(key, side == PortalGunPortalEntity.PortalSide.BLUE + ? new PairRecord(portalId, current.orangePortalId(), owner) + : new PairRecord(current.bluePortalId(), portalId, owner)); } - public static void clearPortal(MinecraftServer server, UUID owner, PortalGunPortalEntity.PortalSide side, UUID portalId) { + public static void clearPortal(MinecraftServer server, UUID gunId, PortalGunPortalEntity.PortalSide side, UUID portalId, ResourceLocation dimension) { + if (gunId == null) { + return; + } PortalGunSavedData data = get(server); - PairRecord current = data.pairs.get(owner); + PairKey key = new PairKey(dimension, gunId); + PairRecord current = data.pairs.get(key); if (current == null) { return; } - UUID blue = current.bluePortalId(); - UUID orange = current.orangePortalId(); - if (side == PortalGunPortalEntity.PortalSide.BLUE && portalId.equals(blue)) { - blue = null; - } - if (side == PortalGunPortalEntity.PortalSide.ORANGE && portalId.equals(orange)) { - orange = null; - } - if (blue == null && orange == null) { - data.pairs.remove(owner); - } else { - data.pairs.put(owner, new PairRecord(blue, orange)); - } - data.setDirty(); + UUID blue = side == PortalGunPortalEntity.PortalSide.BLUE && portalId.equals(current.bluePortalId()) ? null : current.bluePortalId(); + UUID orange = side == PortalGunPortalEntity.PortalSide.ORANGE && portalId.equals(current.orangePortalId()) ? null : current.orangePortalId(); + data.put(key, new PairRecord(blue, orange, current.ownerId())); } - public static void clearAllPortals(MinecraftServer server, UUID owner) { - PortalGunSavedData data = get(server); - PairRecord current = data.pairs.remove(owner); - data.setDirty(); - if (current == null) { + public static void clearAllPortals(ServerLevel level, UUID gunId) { + if (gunId == null) { return; } - discardIfLoaded(server, current.bluePortalId()); - discardIfLoaded(server, current.orangePortalId()); + MinecraftServer server = level.getServer(); + PortalGunSavedData data = get(server); + Set portalIds = new HashSet<>(); + data.pairs.entrySet().removeIf(entry -> { + if (!entry.getKey().gunId().equals(gunId)) { + return false; + } + addPortalIds(portalIds, entry.getValue()); + return true; + }); + data.setDirty(); + for (UUID portalId : portalIds) { + discardIfLoaded(server, portalId); + } } - public static PortalGunPortalEntity findLoadedPortal(MinecraftServer server, UUID owner, PortalGunPortalEntity.PortalSide side) { - Optional portalId = getPortalId(server, owner, side); + public static void clearPortalSide(ServerLevel level, UUID gunId, PortalGunPortalEntity.PortalSide side) { + if (gunId == null) { + return; + } + MinecraftServer server = level.getServer(); + PortalGunSavedData data = get(server); + Set portalIds = new HashSet<>(); + for (Map.Entry entry : new HashMap<>(data.pairs).entrySet()) { + if (!entry.getKey().gunId().equals(gunId)) { + continue; + } + PairRecord pair = entry.getValue(); + UUID removed = side == PortalGunPortalEntity.PortalSide.BLUE ? pair.bluePortalId() : pair.orangePortalId(); + if (removed == null) { + continue; + } + portalIds.add(removed); + data.put(entry.getKey(), side == PortalGunPortalEntity.PortalSide.BLUE + ? new PairRecord(null, pair.orangePortalId(), pair.ownerId()) + : new PairRecord(pair.bluePortalId(), null, pair.ownerId())); + } + for (UUID portalId : portalIds) { + discardIfLoaded(server, portalId); + } + } + + public static int clearOwnedBy(MinecraftServer server, Set ownerIds) { + return clearMatching(server, record -> record.ownerId() != null && ownerIds.contains(record.ownerId())); + } + + public static int clearMissingGuns(ServerPlayer player) { + PortalGunSavedData data = get(player.serverLevel().getServer()); + if (data.pairs.isEmpty()) { + return 0; + } + + Set heldGunIds = new HashSet<>(); + collectGunIds(player.getInventory().items, heldGunIds); + collectGunIds(player.getInventory().armor, heldGunIds); + collectGunIds(player.getInventory().offhand, heldGunIds); + + UUID ownerId = player.getUUID(); + Set removedPortalIds = new HashSet<>(); + Set missingGunIds = new HashSet<>(); + boolean removed = data.pairs.entrySet().removeIf(entry -> { + PairRecord record = entry.getValue(); + if (!ownerId.equals(record.ownerId()) || heldGunIds.contains(entry.getKey().gunId())) { + return false; + } + missingGunIds.add(entry.getKey().gunId()); + addPortalIds(removedPortalIds, record); + return true; + }); + if (removed) { + data.setDirty(); + } + for (UUID portalId : removedPortalIds) { + discardIfLoaded(player.serverLevel().getServer(), portalId); + } + return missingGunIds.size(); + } + + private static void collectGunIds(Iterable stacks, Set gunIds) { + for (ItemStack stack : stacks) { + if (stack.getItem() instanceof PortalGunItem) { + UUID gunId = PortalGunItem.getGunId(stack); + if (gunId != null) { + gunIds.add(gunId); + } + } + } + } + + public static int clearEverything(MinecraftServer server) { + return clearMatching(server, record -> true); + } + + private static int clearMatching(MinecraftServer server, java.util.function.Predicate filter) { + PortalGunSavedData data = get(server); + Set portalIds = new HashSet<>(); + boolean removed = data.pairs.values().removeIf(record -> { + if (!filter.test(record)) { + return false; + } + addPortalIds(portalIds, record); + return true; + }); + if (removed) { + data.setDirty(); + } + for (UUID portalId : portalIds) { + discardIfLoaded(server, portalId); + } + return portalIds.size(); + } + + public static PortalGunPortalEntity findLoadedPortal(ServerLevel level, UUID gunId, PortalGunPortalEntity.PortalSide side) { + Optional portalId = getPortalId(level.getServer(), gunId, side, level.dimension().location()); if (portalId.isEmpty()) { return null; } - for (ServerLevel level : server.getAllLevels()) { - Entity entity = level.getEntity(portalId.get()); - if (entity instanceof PortalGunPortalEntity portal && !portal.isRemoved()) { - return portal; - } + Entity entity = level.getEntity(portalId.get()); + return entity instanceof PortalGunPortalEntity portal && !portal.isRemoved() ? portal : null; + } + + private void put(PairKey key, PairRecord record) { + if (record.bluePortalId() == null && record.orangePortalId() == null) { + this.pairs.remove(key); + } else { + this.pairs.put(key, record); + } + this.setDirty(); + } + + private static void addPortalIds(Set portalIds, PairRecord pair) { + if (pair.bluePortalId() != null) { + portalIds.add(pair.bluePortalId()); + } + if (pair.orangePortalId() != null) { + portalIds.add(pair.orangePortalId()); } - return null; } private static void discardIfLoaded(MinecraftServer server, UUID portalId) { - if (portalId == null) { - return; - } for (ServerLevel level : server.getAllLevels()) { - if (level.getEntity(portalId) instanceof PortalGunPortalEntity portal) { + if (level.getEntity(portalId) instanceof PortalGunPortalEntity portal && !portal.isRemoved()) { portal.discard(); return; } } } - private record PairRecord(UUID bluePortalId, UUID orangePortalId) { + private record PairKey(ResourceLocation dimension, UUID gunId) { + } + + private record PairRecord(UUID bluePortalId, UUID orangePortalId, UUID ownerId) { } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunTransformUtil.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunTransformUtil.java deleted file mode 100644 index 3ad4ec8b..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunTransformUtil.java +++ /dev/null @@ -1,117 +0,0 @@ -package com.craisinlord.antarchy.content.portalgun; - -import net.minecraft.util.Mth; -import net.minecraft.world.phys.Vec3; -import org.joml.Matrix3f; -import org.joml.Quaternionf; -import org.joml.Vector3f; - -public final class PortalGunTransformUtil { - private static final Vec3 WORLD_UP = new Vec3(0.0D, 1.0D, 0.0D); - private static final Vec3 WORLD_FORWARD_FALLBACK = new Vec3(0.0D, 0.0D, 1.0D); - - private PortalGunTransformUtil() { - } - - public static Quaternionf createTransform(PortalGunPortalEntity sourcePortal, PortalGunPortalEntity destinationPortal) { - return createTransform(sourcePortal.getWidthVec(), sourcePortal.getUpVec(), sourcePortal.getNormalVec().scale(-1.0D), destinationPortal.getWidthVec(), destinationPortal.getUpVec(), destinationPortal.getNormalVec()); - } - - public static Quaternionf createTransform(Vec3 sourceWidth, Vec3 sourceUp, Vec3 sourceForward, Vec3 destinationWidth, Vec3 destinationUp, Vec3 destinationForward) { - Matrix3f sourceBasis = new Matrix3f( - (float) sourceWidth.x, (float) sourceUp.x, (float) sourceForward.x, - (float) sourceWidth.y, (float) sourceUp.y, (float) sourceForward.y, - (float) sourceWidth.z, (float) sourceUp.z, (float) sourceForward.z - ); - Matrix3f destinationBasis = new Matrix3f( - (float) destinationWidth.x, (float) destinationUp.x, (float) destinationForward.x, - (float) destinationWidth.y, (float) destinationUp.y, (float) destinationForward.y, - (float) destinationWidth.z, (float) destinationUp.z, (float) destinationForward.z - ); - Matrix3f transform = destinationBasis.mul(sourceBasis.transpose(new Matrix3f()), new Matrix3f()); - return transform.getNormalizedRotation(new Quaternionf()); - } - - public static Vec3 transform(Vec3 vector, Quaternionf quaternion) { - Vector3f rotated = new Vector3f((float) vector.x, (float) vector.y, (float) vector.z).rotate(quaternion); - return new Vec3(rotated.x(), rotated.y(), rotated.z()); - } - - public static Vec3 transformRelativePosition(PortalGunPortalEntity sourcePortal, PortalGunPortalEntity destinationPortal, Vec3 relativePosition) { - return transformPosition(sourcePortal, destinationPortal, relativePosition); - } - - public static Vec3 transformPosition(PortalGunPortalEntity sourcePortal, PortalGunPortalEntity destinationPortal, Vec3 relativePosition) { - Vec3 sourceWidth = sourcePortal.getWidthVec().normalize(); - Vec3 sourceUp = sourcePortal.getUpVec().normalize(); - Vec3 sourceNormal = sourcePortal.getNormalVec().normalize(); - Vec3 destinationWidth = destinationPortal.getWidthVec().normalize(); - Vec3 destinationUp = destinationPortal.getUpVec().normalize(); - Vec3 destinationNormal = destinationPortal.getNormalVec().normalize(); - return destinationWidth.scale(relativePosition.dot(sourceWidth)) - .add(destinationUp.scale(relativePosition.dot(sourceUp))) - .add(destinationNormal.scale(relativePosition.dot(sourceNormal))); - } - - public static Vec3 transformVector(PortalGunPortalEntity sourcePortal, PortalGunPortalEntity destinationPortal, Vec3 vector) { - Vec3 sourceWidth = sourcePortal.getWidthVec().normalize(); - Vec3 sourceUp = sourcePortal.getUpVec().normalize(); - Vec3 sourceInto = sourcePortal.getNormalVec().normalize().scale(-1.0D); - Vec3 destinationWidth = destinationPortal.getWidthVec().normalize(); - Vec3 destinationUp = destinationPortal.getUpVec().normalize(); - Vec3 destinationOut = destinationPortal.getNormalVec().normalize(); - return destinationWidth.scale(vector.dot(sourceWidth)) - .add(destinationUp.scale(vector.dot(sourceUp))) - .add(destinationOut.scale(vector.dot(sourceInto))); - } - - public static float yawFromLook(Vec3 look) { - return (float) Math.toDegrees(Math.atan2(-look.x, look.z)); - } - - public static float pitchFromLook(Vec3 look) { - return (float) Math.toDegrees(-Math.asin(Mth.clamp(look.y, -1.0D, 1.0D))); - } - - public static Vec3 upVectorFromLookAndRoll(Vec3 look, float rollDegrees) { - Vec3 normalizedLook = look.normalize(); - Vec3 referenceUp = Math.abs(normalizedLook.dot(WORLD_UP)) > 0.999D ? WORLD_FORWARD_FALLBACK : WORLD_UP; - Vec3 right = referenceUp.cross(normalizedLook).normalize(); - Vec3 up = normalizedLook.cross(right).normalize(); - if (Math.abs(rollDegrees) <= 1.0E-4F) { - return up; - } - Quaternionf roll = new Quaternionf().fromAxisAngleDeg((float) normalizedLook.x, (float) normalizedLook.y, (float) normalizedLook.z, rollDegrees); - return transform(up, roll).normalize(); - } - - public static float rollFromOrientation(Vec3 look, Vec3 up) { - Vec3 normalizedLook = look.normalize(); - Vec3 normalizedUp = up.normalize(); - Vec3 baseUp = upVectorFromLookAndRoll(normalizedLook, 0.0F); - Vec3 projectedUp = normalizedUp.subtract(normalizedLook.scale(normalizedUp.dot(normalizedLook))); - if (projectedUp.lengthSqr() < 1.0E-8D) { - return 0.0F; - } - projectedUp = projectedUp.normalize(); - double sin = normalizedLook.dot(baseUp.cross(projectedUp)); - double cos = Mth.clamp(baseUp.dot(projectedUp), -1.0D, 1.0D); - return normalizeDegrees((float) Math.toDegrees(Math.atan2(sin, cos))); - } - - public static Quaternionf orientationQuaternion(Vec3 look, Vec3 up) { - Vec3 forward = look.normalize(); - Vec3 correctedUp = up.subtract(forward.scale(up.dot(forward))).normalize(); - Vec3 right = correctedUp.cross(forward).normalize(); - Matrix3f basis = new Matrix3f( - (float) right.x, (float) correctedUp.x, (float) (-forward.x), - (float) right.y, (float) correctedUp.y, (float) (-forward.y), - (float) right.z, (float) correctedUp.z, (float) (-forward.z) - ); - return basis.getNormalizedRotation(new Quaternionf()); - } - - public static float normalizeDegrees(float degrees) { - return Mth.wrapDegrees(degrees); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunVariant.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunVariant.java new file mode 100644 index 00000000..fb7ac621 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunVariant.java @@ -0,0 +1,68 @@ +package com.craisinlord.antarchy.content.portalgun; + +import com.craisinlord.antarchy.Antarchy; +import net.minecraft.resources.ResourceLocation; + +public enum PortalGunVariant { + DEFAULT("", 0x40A0FF, 0xFF961E, "blue", "orange"), + ATLAS("atlas", 0x53A6D0, 0x6A2BE0, "blue", "purple"), + P_BODY("p_body", 0xF9D660, 0xC0282A, "yellow", "red"), + CRAISIN("craisin", 0x6A2BE0, 0xF9D660, "purple", "gold"), + LAYNCE("laynce", 0xFF961E, 0x1FBF3A, "orange", "green"); + + private final String key; + private final int blueColor; + private final int orangeColor; + private final String blueColorName; + private final String orangeColorName; + private final ResourceLocation crosshairTexture; + private final ResourceLocation modelTexture; + private final ResourceLocation blueVortexTexture; + private final ResourceLocation orangeVortexTexture; + + PortalGunVariant(String key, int blueColor, int orangeColor, String blueColorName, String orangeColorName) { + this.key = key; + this.blueColor = blueColor; + this.orangeColor = orangeColor; + this.blueColorName = blueColorName; + this.orangeColorName = orangeColorName; + String prefix = key.isEmpty() ? "" : key + "_"; + this.crosshairTexture = new ResourceLocation(Antarchy.MODID, "textures/gui/portal_gun_" + prefix + "crosshair.png"); + this.modelTexture = new ResourceLocation(Antarchy.MODID, "textures/models/item/portal_gun" + (key.isEmpty() ? "" : "_" + key) + ".png"); + this.blueVortexTexture = new ResourceLocation(Antarchy.MODID, "textures/entity/portal_gun/portal_" + prefix + "blue_vortex.png"); + this.orangeVortexTexture = new ResourceLocation(Antarchy.MODID, "textures/entity/portal_gun/portal_" + prefix + "orange_vortex.png"); + } + + public String key() { + return this.key; + } + + public int color(PortalGunPortalEntity.PortalSide side) { + return side == PortalGunPortalEntity.PortalSide.BLUE ? this.blueColor : this.orangeColor; + } + + public String colorTranslationKey(PortalGunPortalEntity.PortalSide side) { + return "tooltip.antarchy.portal_gun.color." + (side == PortalGunPortalEntity.PortalSide.BLUE ? this.blueColorName : this.orangeColorName); + } + + public ResourceLocation crosshairTexture() { + return this.crosshairTexture; + } + + public ResourceLocation modelTexture() { + return this.modelTexture; + } + + public ResourceLocation vortexTexture(PortalGunPortalEntity.PortalSide side) { + return side == PortalGunPortalEntity.PortalSide.BLUE ? this.blueVortexTexture : this.orangeVortexTexture; + } + + public int id() { + return this.ordinal(); + } + + public static PortalGunVariant byId(int id) { + PortalGunVariant[] values = values(); + return id >= 0 && id < values.length ? values[id] : DEFAULT; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunWorldPortalShape.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunWorldPortalShape.java deleted file mode 100644 index a8394276..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunWorldPortalShape.java +++ /dev/null @@ -1,189 +0,0 @@ -package com.craisinlord.antarchy.content.portalgun; - -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec3; -import java.util.List; - -public record PortalGunWorldPortalShape( - Vec3 center, - Vec3 normal, - Vec3 up, - Vec3 right, - double halfWidth, - double halfHeight, - double halfDepth -) { - public static final double DEFAULT_SCAN_DISTANCE = 3.0D; - - public AABB getPlane() { - return this.createPlaneAround(0.0D, 0.0125D); - } - - public AABB getFlatPlane() { - return this.createPlaneAround(0.0D, 0.0D); - } - - public AABB getScanRange() { - return this.getFlatPlane().expandTowards(this.normal.scale(DEFAULT_SCAN_DISTANCE)); - } - - public AABB getPortalInsides() { - return this.createPlaneAround(0.0D, this.halfDepth); - } - - public AABB getTeleportPlane(double offset) { - return this.createPlaneAround(offset, this.halfDepth); - } - - public Vec3[] getCorners(double normalOffset) { - Vec3 center = this.center.add(this.normal.scale(normalOffset)); - Vec3 width = this.right.scale(this.halfWidth); - Vec3 height = this.up.scale(this.halfHeight); - return new Vec3[] { - center.subtract(width).subtract(height), - center.subtract(width).add(height), - center.add(width).add(height), - center.add(width).subtract(height) - }; - } - - public PortalLocalCoords localCoords(Vec3 position) { - Vec3 relative = position.subtract(this.center); - return new PortalLocalCoords(relative.dot(this.right), relative.dot(this.up), relative.dot(this.normal)); - } - - public boolean contains(Vec3 position, double depthPadding) { - PortalLocalCoords coords = this.localCoords(position); - return Math.abs(coords.horizontal()) <= this.halfWidth - && Math.abs(coords.vertical()) <= this.halfHeight - && Math.abs(coords.depth()) <= this.halfDepth + depthPadding; - } - - public boolean crosses(Vec3 previousPosition, Vec3 currentPosition) { - PortalLocalCoords previous = this.localCoords(previousPosition); - PortalLocalCoords current = this.localCoords(currentPosition); - double depthDelta = current.depth() - previous.depth(); - if (depthDelta > -1.0E-6D || previous.depth() <= 0.0D || current.depth() > 0.0D) { - return false; - } - double t = -previous.depth() / depthDelta; - if (t < 0.0D || t > 1.0D) { - return false; - } - double horizontal = previous.horizontal() + (current.horizontal() - previous.horizontal()) * t; - double vertical = previous.vertical() + (current.vertical() - previous.vertical()) * t; - return Math.abs(horizontal) <= this.halfWidth && Math.abs(vertical) <= this.halfHeight; - } - - public boolean shouldRenderFront(Vec3 cameraPos) { - PortalLocalCoords coords = this.localCoords(cameraPos); - if (coords.depth() <= -0.25D) { - return false; - } - double depthScale = Math.min(DEFAULT_SCAN_DISTANCE, Math.max(0.0D, coords.depth())); - return Math.abs(coords.horizontal()) <= this.halfWidth + depthScale - && Math.abs(coords.vertical()) <= this.halfHeight + depthScale; - } - - public boolean intersectsFront(AABB box, double tolerance) { - double maxDepth = Double.NEGATIVE_INFINITY; - for (Vec3 corner : corners(box)) { - maxDepth = Math.max(maxDepth, this.localCoords(corner).depth()); - if (maxDepth >= -tolerance) { - return true; - } - } - return false; - } - - public boolean intersectsPortalColumn(AABB box, double horizontalPadding, double verticalPadding, double depthPadding) { - double minHorizontal = Double.POSITIVE_INFINITY; - double maxHorizontal = Double.NEGATIVE_INFINITY; - double minVertical = Double.POSITIVE_INFINITY; - double maxVertical = Double.NEGATIVE_INFINITY; - double minDepth = Double.POSITIVE_INFINITY; - double maxDepth = Double.NEGATIVE_INFINITY; - for (Vec3 corner : corners(box)) { - PortalLocalCoords coords = this.localCoords(corner); - minHorizontal = Math.min(minHorizontal, coords.horizontal()); - maxHorizontal = Math.max(maxHorizontal, coords.horizontal()); - minVertical = Math.min(minVertical, coords.vertical()); - maxVertical = Math.max(maxVertical, coords.vertical()); - minDepth = Math.min(minDepth, coords.depth()); - maxDepth = Math.max(maxDepth, coords.depth()); - } - return maxHorizontal >= -this.halfWidth - horizontalPadding - && minHorizontal <= this.halfWidth + horizontalPadding - && maxVertical >= -this.halfHeight - verticalPadding - && minVertical <= this.halfHeight + verticalPadding - && maxDepth >= -this.halfDepth - depthPadding - && minDepth <= this.halfDepth + depthPadding; - } - - public AABB getBoundsForCulling() { - return this.createPlaneAround(0.0D, this.halfDepth).inflate(1.5D); - } - - public List getCollisionBoundaries(double borderThickness) { - double horizontalOuter = this.halfWidth + borderThickness; - double verticalOuter = this.halfHeight + borderThickness; - return List.of( - this.createLocalBox(-horizontalOuter, this.halfWidth, -verticalOuter, verticalOuter, -this.halfDepth, this.halfDepth), - this.createLocalBox(-this.halfWidth, horizontalOuter, -verticalOuter, verticalOuter, -this.halfDepth, this.halfDepth), - this.createLocalBox(-this.halfWidth, this.halfWidth, -verticalOuter, -this.halfHeight, -this.halfDepth, this.halfDepth), - this.createLocalBox(-this.halfWidth, this.halfWidth, this.halfHeight, verticalOuter, -this.halfDepth, this.halfDepth) - ); - } - - private AABB createPlaneAround(double planeOffset, double thickness) { - Vec3 boxCenter = this.center.add(this.normal.scale(planeOffset)); - double halfX = this.halfWidth * Math.abs(this.right.x) + this.halfHeight * Math.abs(this.up.x) + thickness * Math.abs(this.normal.x); - double halfY = this.halfWidth * Math.abs(this.right.y) + this.halfHeight * Math.abs(this.up.y) + thickness * Math.abs(this.normal.y); - double halfZ = this.halfWidth * Math.abs(this.right.z) + this.halfHeight * Math.abs(this.up.z) + thickness * Math.abs(this.normal.z); - return new AABB(boxCenter.x - halfX, boxCenter.y - halfY, boxCenter.z - halfZ, boxCenter.x + halfX, boxCenter.y + halfY, boxCenter.z + halfZ); - } - - private AABB createLocalBox(double minHorizontal, double maxHorizontal, double minVertical, double maxVertical, double minDepth, double maxDepth) { - Vec3[] corners = new Vec3[] { - this.center.add(this.right.scale(minHorizontal)).add(this.up.scale(minVertical)).add(this.normal.scale(minDepth)), - this.center.add(this.right.scale(minHorizontal)).add(this.up.scale(minVertical)).add(this.normal.scale(maxDepth)), - this.center.add(this.right.scale(minHorizontal)).add(this.up.scale(maxVertical)).add(this.normal.scale(minDepth)), - this.center.add(this.right.scale(minHorizontal)).add(this.up.scale(maxVertical)).add(this.normal.scale(maxDepth)), - this.center.add(this.right.scale(maxHorizontal)).add(this.up.scale(minVertical)).add(this.normal.scale(minDepth)), - this.center.add(this.right.scale(maxHorizontal)).add(this.up.scale(minVertical)).add(this.normal.scale(maxDepth)), - this.center.add(this.right.scale(maxHorizontal)).add(this.up.scale(maxVertical)).add(this.normal.scale(minDepth)), - this.center.add(this.right.scale(maxHorizontal)).add(this.up.scale(maxVertical)).add(this.normal.scale(maxDepth)) - }; - double minX = Double.POSITIVE_INFINITY; - double minY = Double.POSITIVE_INFINITY; - double minZ = Double.POSITIVE_INFINITY; - double maxX = Double.NEGATIVE_INFINITY; - double maxY = Double.NEGATIVE_INFINITY; - double maxZ = Double.NEGATIVE_INFINITY; - for (Vec3 corner : corners) { - minX = Math.min(minX, corner.x); - minY = Math.min(minY, corner.y); - minZ = Math.min(minZ, corner.z); - maxX = Math.max(maxX, corner.x); - maxY = Math.max(maxY, corner.y); - maxZ = Math.max(maxZ, corner.z); - } - return new AABB(minX, minY, minZ, maxX, maxY, maxZ); - } - - private static Vec3[] corners(AABB box) { - return new Vec3[] { - new Vec3(box.minX, box.minY, box.minZ), - new Vec3(box.minX, box.minY, box.maxZ), - new Vec3(box.minX, box.maxY, box.minZ), - new Vec3(box.minX, box.maxY, box.maxZ), - new Vec3(box.maxX, box.minY, box.minZ), - new Vec3(box.maxX, box.minY, box.maxZ), - new Vec3(box.maxX, box.maxY, box.minZ), - new Vec3(box.maxX, box.maxY, box.maxZ) - }; - } - - public record PortalLocalCoords(double horizontal, double vertical, double depth) { - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/recipe/PortalGunVariantRecipe.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/recipe/PortalGunVariantRecipe.java new file mode 100644 index 00000000..45e7800d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/recipe/PortalGunVariantRecipe.java @@ -0,0 +1,56 @@ +package com.craisinlord.antarchy.content.recipe; + +import com.craisinlord.antarchy.content.item.PortalGunItem; +import com.google.gson.JsonObject; +import net.minecraft.core.RegistryAccess; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.inventory.CraftingContainer; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.item.crafting.ShapelessRecipe; + +public class PortalGunVariantRecipe extends ShapelessRecipe { + public static final RecipeSerializer SERIALIZER = new Serializer(); + + public PortalGunVariantRecipe(ShapelessRecipe recipe) { + super(recipe.getId(), recipe.getGroup(), recipe.category(), recipe.getResultItem(RegistryAccess.EMPTY), recipe.getIngredients()); + } + + @Override + public ItemStack assemble(CraftingContainer input, RegistryAccess registries) { + ItemStack result = super.assemble(input, registries); + for (int slot = 0; slot < input.getContainerSize(); slot++) { + ItemStack ingredient = input.getItem(slot); + if (ingredient.getItem() instanceof PortalGunItem) { + if (ingredient.hasTag()) { + result.getOrCreateTag().merge(ingredient.getTag().copy()); + } + break; + } + } + return result; + } + + @Override + public RecipeSerializer getSerializer() { + return SERIALIZER; + } + + private static final class Serializer implements RecipeSerializer { + @Override + public PortalGunVariantRecipe fromJson(ResourceLocation id, JsonObject json) { + return new PortalGunVariantRecipe(RecipeSerializer.SHAPELESS_RECIPE.fromJson(id, json)); + } + + @Override + public PortalGunVariantRecipe fromNetwork(ResourceLocation id, FriendlyByteBuf buffer) { + return new PortalGunVariantRecipe(RecipeSerializer.SHAPELESS_RECIPE.fromNetwork(id, buffer)); + } + + @Override + public void toNetwork(FriendlyByteBuf buffer, PortalGunVariantRecipe recipe) { + RecipeSerializer.SHAPELESS_RECIPE.toNetwork(buffer, recipe); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/ChronosphereManager.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/ChronosphereManager.java deleted file mode 100644 index 8e05e3be..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/ChronosphereManager.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.craisinlord.antarchy.content.time; - -import com.craisinlord.antarchy.content.enchantment.AntarchyEnchantments; -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.ServerPlayer; - -public final class ChronosphereManager { - public static final double RATE = 0.35D; - private static final Map ACTIVE_FIELDS = new HashMap<>(); - private ChronosphereManager() {} - - public static void refresh(ServerPlayer player) { - if (!(player.level() instanceof ServerLevel level)) return; - int enchantmentLevel = AntarchyEnchantments.chronosphereLevel(player); - UUID playerId = player.getUUID(); - TimeDilationFieldEntity field = null; - UUID known = ACTIVE_FIELDS.get(playerId); - if (known != null && level.getEntity(known) instanceof TimeDilationFieldEntity existing) field = existing; - if (enchantmentLevel <= 0 || !player.isAlive()) { - ACTIVE_FIELDS.remove(playerId); - if (field != null) field.discard(); - return; - } - if (field == null) { - for (net.minecraft.world.entity.Entity entity : level.getAllEntities()) { - if (entity instanceof TimeDilationFieldEntity candidate && candidate.isChronosphere() && candidate.isOwnedBy(player)) { - field = candidate; - break; - } - } - } - if (field == null) { - field = TimeDilationApi.createField(level, player.position(), radius(enchantmentLevel), RATE, -1, player.getUUID()); - field.configureChronosphere(player); - } else { - field.configureChronosphere(player); - } - field.setFieldRadius(radius(enchantmentLevel)); - ACTIVE_FIELDS.put(playerId, field.getUUID()); - } - - public static double radius(int level) { - return level == 1 ? 1.5D : level == 2 ? 2.5D : 3.5D; - } - -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationApi.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationApi.java deleted file mode 100644 index ab83067f..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationApi.java +++ /dev/null @@ -1,122 +0,0 @@ -package com.craisinlord.antarchy.content.time; - -import java.util.function.BiConsumer; -import java.util.Map; -import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; -import java.util.List; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.phys.Vec3; - -public final class TimeDilationApi { - private static final ThreadLocal ROTATION_BYPASS = ThreadLocal.withInitial(() -> false); - private static BiConsumer syncDispatcher = (entity, rate) -> { - }; - private static BiConsumer> fieldSyncDispatcher = (player, fields) -> { - }; - private static final Map SYNCED_CLIENT_RATES = new ConcurrentHashMap<>(); - - private TimeDilationApi() { - } - - public static void setSyncDispatcher(BiConsumer dispatcher) { - syncDispatcher = dispatcher != null ? dispatcher : (entity, rate) -> { - }; - } - - public static void setFieldSyncDispatcher(BiConsumer> dispatcher) { - fieldSyncDispatcher = dispatcher != null ? dispatcher : (player, fields) -> { - }; - } - - public static TimeDilationFieldEntity createField(ServerLevel level, Vec3 center, double radius, double rate, int durationTicks) { - return createField(level, center, radius, rate, durationTicks, null); - } - - public static TimeDilationFieldEntity createField(ServerLevel level, Vec3 center, double radius, double rate, int durationTicks, UUID ownerId) { - TimeDilationFieldEntity field = TimeDilationFieldEntity.create(level, center, radius, rate, durationTicks, ownerId); - level.addFreshEntity(field); - return field; - } - - public static double getRate(Entity entity) { - if (entity instanceof TimeDilationEntityAccess access) { - if (entity.level().isClientSide) { - Double syncedRate = SYNCED_CLIENT_RATES.get(entity.getUUID()); - if (syncedRate != null) { - return syncedRate; - } - } - return access.antarchy$getTimeDilationRate(); - } - return TimeDilationMath.NORMAL_RATE; - } - - public static boolean isDilated(Entity entity) { - return getRate(entity) < TimeDilationMath.NORMAL_RATE; - } - - public static void setInheritedRate(Entity entity, double rate) { - if (entity instanceof TimeDilationEntityAccess access) { - access.antarchy$setInheritedTimeDilationRate(rate); - } - } - - public static void applySyncedRate(Entity entity, double rate) { - applySyncedRate(entity.getUUID(), rate); - if (entity instanceof TimeDilationEntityAccess access) { - access.antarchy$setTimeDilationRate(rate); - } - } - - public static void applySyncedRate(UUID entityUuid, double rate) { - double clampedRate = TimeDilationMath.clampRate(rate); - SYNCED_CLIENT_RATES.put(entityUuid, clampedRate); - } - - /** Clears both the authoritative entity state and any client-side UUID cache. */ - public static void clearRate(Entity entity) { - if (entity instanceof TimeDilationEntityAccess access) { - boolean wasDilated = access.antarchy$getTimeDilationRate() < TimeDilationMath.NORMAL_RATE; - access.antarchy$setTimeDilationRate(TimeDilationMath.NORMAL_RATE); - if (wasDilated) { - syncEntityRate(entity, TimeDilationMath.NORMAL_RATE); - } - } - SYNCED_CLIENT_RATES.remove(entity.getUUID()); - } - - public static void clearSyncedClientRates() { - SYNCED_CLIENT_RATES.clear(); - } - - public static void syncEntityRate(Entity entity, double rate) { - syncDispatcher.accept(entity, TimeDilationMath.clampRate(rate)); - } - - public static void syncFields(ServerPlayer player, List fields) { - fieldSyncDispatcher.accept(player, fields); - } - - public static boolean consumeTick(Entity entity, String timerKey) { - double rate = getRate(entity); - if (rate >= TimeDilationMath.NORMAL_RATE || !(entity instanceof TimeDilationEntityAccess access)) { - return true; - } - return access.antarchy$consumeTimeDilationTick(timerKey, rate); - } - - public static int scaleCooldownTicks(Entity entity, int ticks) { - double rate = getRate(entity); - if (ticks <= 0 || rate >= TimeDilationMath.NORMAL_RATE) { - return ticks; - } - return (int) Math.ceil(ticks / Math.max(TimeDilationMath.MIN_RATE, rate)); - } - - public static void enterRotationBypass() { ROTATION_BYPASS.set(true); } - public static void exitRotationBypass() { ROTATION_BYPASS.set(false); } - public static boolean isRotationBypassActive() { return ROTATION_BYPASS.get(); } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationCommand.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationCommand.java deleted file mode 100644 index 891c5258..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationCommand.java +++ /dev/null @@ -1,101 +0,0 @@ -package com.craisinlord.antarchy.content.time; - -import com.mojang.brigadier.CommandDispatcher; -import com.mojang.brigadier.arguments.DoubleArgumentType; -import com.mojang.brigadier.arguments.IntegerArgumentType; -import com.mojang.brigadier.context.CommandContext; -import java.util.ArrayList; -import java.util.List; -import net.minecraft.commands.CommandSourceStack; -import net.minecraft.commands.Commands; -import net.minecraft.commands.arguments.coordinates.Vec3Argument; -import net.minecraft.network.chat.Component; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.phys.Vec3; - -public final class TimeDilationCommand { - private TimeDilationCommand() { - } - - public static void register(CommandDispatcher dispatcher) { - dispatcher.register( - Commands.literal("timedilation") - .requires(source -> source.hasPermission(2)) - .then(Commands.literal("create") - .then(Commands.argument("center", Vec3Argument.vec3()) - .then(Commands.argument("radius", DoubleArgumentType.doubleArg(0.5D, 128.0D)) - .then(Commands.argument("rate", DoubleArgumentType.doubleArg(TimeDilationMath.MIN_RATE, 1.0D)) - .then(Commands.argument("durationTicks", IntegerArgumentType.integer(-1)) - .executes(TimeDilationCommand::create)))))) - .then(Commands.literal("create_here") - .then(Commands.argument("radius", DoubleArgumentType.doubleArg(0.5D, 128.0D)) - .then(Commands.argument("rate", DoubleArgumentType.doubleArg(TimeDilationMath.MIN_RATE, 1.0D)) - .then(Commands.argument("durationTicks", IntegerArgumentType.integer(-1)) - .executes(TimeDilationCommand::createHere))))) - .then(Commands.literal("list").executes(TimeDilationCommand::list)) - .then(Commands.literal("clear").executes(TimeDilationCommand::clear)) - ); - } - - private static int create(CommandContext context) { - return createField(context, Vec3Argument.getVec3(context, "center")); - } - - private static int createHere(CommandContext context) { - return createField(context, context.getSource().getPosition()); - } - - private static int createField(CommandContext context, Vec3 center) { - ServerLevel level = context.getSource().getLevel(); - double radius = DoubleArgumentType.getDouble(context, "radius"); - double rate = DoubleArgumentType.getDouble(context, "rate"); - int durationTicks = IntegerArgumentType.getInteger(context, "durationTicks"); - TimeDilationFieldEntity field = TimeDilationApi.createField(level, center, radius, rate, durationTicks); - context.getSource().sendSuccess( - () -> Component.literal("Created time dilation field " + field.getUUID() + " radius=" + radius - + " rate=" + rate + " durationTicks=" + durationTicks), - true - ); - return 1; - } - - private static int list(CommandContext context) { - int count = 0; - for (ServerLevel level : context.getSource().getServer().getAllLevels()) { - for (Entity entity : level.getAllEntities()) { - if (!(entity instanceof TimeDilationFieldEntity field)) { - continue; - } - count++; - context.getSource().sendSuccess( - () -> Component.literal(field.getUUID() + " " + level.dimension().location() + " @ " - + format(field.position()) + " radius=" + field.fieldRadius() + " rate=" + field.fieldRate() - + " age=" + field.fieldAge() - + (field.isInfinite() ? " duration=infinite" : " duration=" + field.fieldDurationTicks())), - false - ); - } - } - return count; - } - - private static int clear(CommandContext context) { - List fields = new ArrayList<>(); - for (ServerLevel level : context.getSource().getServer().getAllLevels()) { - for (Entity entity : level.getAllEntities()) { - if (entity instanceof TimeDilationFieldEntity field) { - fields.add(field); - } - } - } - fields.forEach(Entity::discard); - int count = fields.size(); - context.getSource().sendSuccess(() -> Component.literal("Cleared " + count + " time dilation field(s)"), true); - return count; - } - - private static String format(Vec3 vec) { - return String.format(java.util.Locale.ROOT, "%.2f %.2f %.2f", vec.x, vec.y, vec.z); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationEntityAccess.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationEntityAccess.java deleted file mode 100644 index af7ed8af..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationEntityAccess.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.craisinlord.antarchy.content.time; - -public interface TimeDilationEntityAccess { - double antarchy$getTimeDilationRate(); - - void antarchy$setTimeDilationRate(double rate); - - double antarchy$getInheritedTimeDilationRate(); - - void antarchy$setInheritedTimeDilationRate(double rate); - - boolean antarchy$consumeTimeDilationTick(String timerKey, double rate); - - boolean antarchy$isInTimeDilationMove(); - - void antarchy$setInTimeDilationMove(boolean inMove); - - boolean antarchy$isApplyingExternalImpulse(); - - void antarchy$setApplyingExternalImpulse(boolean applying); -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationFieldEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationFieldEntity.java deleted file mode 100644 index ac8dc536..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationFieldEntity.java +++ /dev/null @@ -1,171 +0,0 @@ -package com.craisinlord.antarchy.content.time; - -import com.craisinlord.antarchy.content.AntarchyObjects; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.network.syncher.EntityDataAccessor; -import net.minecraft.network.syncher.EntityDataSerializers; -import net.minecraft.network.syncher.SynchedEntityData; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.item.ItemEntity; -import net.minecraft.world.entity.projectile.Projectile; -import net.minecraft.world.level.Level; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.phys.Vec3; -import java.util.UUID; - -public class TimeDilationFieldEntity extends Entity { - private static final EntityDataAccessor RADIUS = - SynchedEntityData.defineId(TimeDilationFieldEntity.class, EntityDataSerializers.FLOAT); - private static final EntityDataAccessor RATE = - SynchedEntityData.defineId(TimeDilationFieldEntity.class, EntityDataSerializers.FLOAT); - - private static final String RADIUS_KEY = "Radius"; - private static final String RATE_KEY = "Rate"; - private static final String DURATION_KEY = "DurationTicks"; - private static final String AGE_KEY = "Age"; - - private int durationTicks = -1; - private int age; - private UUID ownerId; - private UUID anchorId; - private int missingAnchorTicks; - private boolean visual = true; - private boolean chronosphere; - - public TimeDilationFieldEntity(EntityType entityType, Level level) { - super(entityType, level); - this.noPhysics = true; - this.noCulling = true; - } - - public static TimeDilationFieldEntity create(Level level, Vec3 center, double radius, double rate, int durationTicks) { - return create(level, center, radius, rate, durationTicks, null); - } - - public static TimeDilationFieldEntity create(Level level, Vec3 center, double radius, double rate, int durationTicks, UUID ownerId) { - TimeDilationFieldEntity field = new TimeDilationFieldEntity(AntarchyObjects.TIME_DILATION_FIELD.get(), level); - field.setPos(center.x, center.y, center.z); - field.setFieldRadius(radius); - field.setFieldRate(rate); - field.durationTicks = durationTicks; - field.ownerId = ownerId; - return field; - } - - public boolean isOwnedBy(Entity entity) { - return this.ownerId != null && entity != null && this.ownerId.equals(entity.getUUID()); - } - - public void attachTo(Entity anchor) { this.anchorId = anchor == null ? null : anchor.getUUID(); this.missingAnchorTicks = 0; } - public void configureChronosphere(Entity owner) { - this.ownerId = owner.getUUID(); attachTo(owner); this.durationTicks = -1; this.visual = false; this.chronosphere = true; - } - public boolean isChronosphere() { return chronosphere; } - public boolean isVisual() { return visual; } - public boolean affects(Entity entity) { - if (isOwnedBy(entity) || anchorId != null && anchorId.equals(entity.getUUID())) return false; - return !chronosphere || entity instanceof LivingEntity || entity instanceof Projectile || entity instanceof ItemEntity; - } - - @Override - protected void defineSynchedData() { - this.entityData.define(RADIUS, 8.0F); - this.entityData.define(RATE, (float) TimeDilationMath.NORMAL_RATE); - } - - @Override - public void tick() { - super.tick(); - if (this.level().isClientSide) { - return; - } - if (anchorId != null && this.level() instanceof ServerLevel level) { - Entity anchor = level.getEntity(anchorId); - if (anchor != null && anchor.isAlive()) { - setPos(anchor.getX(), anchor.getY(), anchor.getZ()); - missingAnchorTicks = 0; - if (chronosphere && age % 20 == 0) { - if (!(anchor instanceof net.minecraft.server.level.ServerPlayer player) - || com.craisinlord.antarchy.content.enchantment.AntarchyEnchantments.chronosphereLevel(player) <= 0) { discard(); return; } - setFieldRadius(ChronosphereManager.radius(com.craisinlord.antarchy.content.enchantment.AntarchyEnchantments.chronosphereLevel(player))); - } - } else if (++missingAnchorTicks > 20) { discard(); return; } - } - this.age++; - if (this.durationTicks >= 0 && this.age >= this.durationTicks) { - this.discard(); - } - } - - public void setFieldRadius(double radius) { - this.entityData.set(RADIUS, (float) Math.max(0.5D, radius)); - } - - public double fieldRadius() { - return this.entityData.get(RADIUS); - } - - public double fieldRadiusSqr() { - double radius = this.fieldRadius(); - return radius * radius; - } - - public double influenceRadius() { return chronosphere ? fieldRadius() * 2.0D : fieldRadius(); } - - public void setFieldRate(double rate) { - this.entityData.set(RATE, (float) TimeDilationMath.clampRate(rate)); - } - - public double fieldRate() { - return TimeDilationMath.clampRate(this.entityData.get(RATE)); - } - - public double effectiveFieldRate() { - return TimeDilationMath.effectiveFieldRate(this.fieldRate(), this.age, this.durationTicks); - } - - public int fieldDurationTicks() { - return this.durationTicks; - } - - public int fieldAge() { - return this.age; - } - - public boolean isInfinite() { - return this.durationTicks < 0; - } - - @Override - public boolean isIgnoringBlockTriggers() { - return true; - } - - @Override - protected void readAdditionalSaveData(CompoundTag tag) { - this.setFieldRadius(tag.getDouble(RADIUS_KEY)); - this.setFieldRate(tag.getDouble(RATE_KEY)); - this.durationTicks = tag.contains(DURATION_KEY) ? tag.getInt(DURATION_KEY) : -1; - this.age = tag.getInt(AGE_KEY); - this.ownerId = tag.hasUUID("OwnerUuid") ? tag.getUUID("OwnerUuid") : null; - this.anchorId = tag.hasUUID("AnchorUuid") ? tag.getUUID("AnchorUuid") : null; - this.visual = !tag.contains("Visual") || tag.getBoolean("Visual"); - this.chronosphere = tag.getBoolean("Chronosphere"); - } - - @Override - protected void addAdditionalSaveData(CompoundTag tag) { - tag.putDouble(RADIUS_KEY, this.fieldRadius()); - tag.putDouble(RATE_KEY, this.fieldRate()); - tag.putInt(DURATION_KEY, this.durationTicks); - tag.putInt(AGE_KEY, this.age); - if (this.ownerId != null) { - tag.putUUID("OwnerUuid", this.ownerId); - } - if (this.anchorId != null) tag.putUUID("AnchorUuid", this.anchorId); - tag.putBoolean("Visual", this.visual); - tag.putBoolean("Chronosphere", this.chronosphere); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationFieldSampler.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationFieldSampler.java deleted file mode 100644 index fe669540..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationFieldSampler.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.craisinlord.antarchy.content.time; - -import java.util.List; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.phys.Vec3; - -public final class TimeDilationFieldSampler { - private TimeDilationFieldSampler() { - } - - public static double sample(List fields, Vec3 position) { - return sample(fields, position.x, position.y, position.z); - } - - public static double sample(List fields, double x, double y, double z) { - double combinedRate = TimeDilationMath.NORMAL_RATE; - for (TimeDilationFieldEntity field : fields) { - Vec3 center = field.position(); - double dx = center.x - x; - double dy = center.y - y; - double dz = center.z - z; - double distanceSqr = dx * dx + dy * dy + dz * dz; - if (distanceSqr >= field.fieldRadiusSqr()) { - continue; - } - double falloff = TimeDilationMath.gaussianFalloff(Math.sqrt(distanceSqr), field.fieldRadius()); - combinedRate *= TimeDilationMath.localFieldRate(field.effectiveFieldRate(), falloff); - } - return TimeDilationMath.clampRate(combinedRate); - } - - public static double sample(List fields, Entity entity) { - double combinedRate = TimeDilationMath.NORMAL_RATE; - for (TimeDilationFieldEntity field : fields) { - if (!field.affects(entity)) { - continue; - } - Vec3 center = field.position(); - double dx = center.x - entity.getX(); - double dy = center.y - entity.getY(); - double dz = center.z - entity.getZ(); - double distanceSqr = dx * dx + dy * dy + dz * dz; - double distance = Math.sqrt(distanceSqr); - double radius = field.fieldRadius(); - double falloff; - if (field.isChronosphere()) { - if (distance >= radius * 2.0D) continue; - falloff = distance <= radius ? 1.0D : TimeDilationMath.gaussianFalloff(distance - radius, radius); - } else if (distanceSqr < field.fieldRadiusSqr()) { - falloff = TimeDilationMath.gaussianFalloff(distance, radius); - } else { - continue; - } - if (falloff > 0.0D) { - combinedRate *= TimeDilationMath.localFieldRate(field.effectiveFieldRate(), falloff); - } - } - return TimeDilationMath.clampRate(combinedRate); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationFieldSnapshot.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationFieldSnapshot.java deleted file mode 100644 index 3a888752..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationFieldSnapshot.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.craisinlord.antarchy.content.time; - -public record TimeDilationFieldSnapshot( - double x, - double y, - double z, - double radius, - double rate, - int age, - int durationTicks -) { - public double radiusSquared() { - return this.radius * this.radius; - } - - public double effectiveRate() { - return TimeDilationMath.effectiveFieldRate(this.rate, this.age, this.durationTicks); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationFieldSnapshotSampler.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationFieldSnapshotSampler.java deleted file mode 100644 index 96a27f27..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationFieldSnapshotSampler.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.craisinlord.antarchy.content.time; - -public final class TimeDilationFieldSnapshotSampler { - private TimeDilationFieldSnapshotSampler() { - } - - public static double sample(Iterable fields, double x, double y, double z) { - double combinedRate = TimeDilationMath.NORMAL_RATE; - for (TimeDilationFieldSnapshot field : fields) { - double dx = field.x() - x; - double dy = field.y() - y; - double dz = field.z() - z; - double distanceSqr = dx * dx + dy * dy + dz * dz; - if (distanceSqr >= field.radiusSquared()) { - continue; - } - double falloff = TimeDilationMath.gaussianFalloff(Math.sqrt(distanceSqr), field.radius()); - combinedRate *= TimeDilationMath.localFieldRate(field.effectiveRate(), falloff); - } - return TimeDilationMath.clampRate(combinedRate); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationManager.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationManager.java deleted file mode 100644 index f8657679..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationManager.java +++ /dev/null @@ -1,170 +0,0 @@ -package com.craisinlord.antarchy.content.time; - -import com.craisinlord.antarchy.content.AntarchyObjects; -import com.craisinlord.antarchy.content.AntarchyTags; -import com.craisinlord.antarchy.content.effect.DilatedMobEffect; -import com.craisinlord.antarchy.content.effect.ContractedMobEffect; -import com.craisinlord.antarchy.content.effect.TimeDilationEligibility; -import java.util.ArrayList; -import java.util.Collections; -import java.util.IdentityHashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.WeakHashMap; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.projectile.Projectile; - -public final class TimeDilationManager { - private static final Map TRACKING = new WeakHashMap<>(); - - private TimeDilationManager() { - } - - public static void tickServer(MinecraftServer server) { - for (ServerLevel level : server.getAllLevels()) { - for (ServerPlayer player : level.players()) { - ChronosphereManager.refresh(player); - } - List fields = collectFields(level); - TrackingState tracking = TRACKING.computeIfAbsent(level, ignored -> new TrackingState()); - discoverFieldEntities(level, fields, tracking); - syncFieldSnapshots(level, fields, tracking); - updateEntities(level, fields, tracking); - if (fields.isEmpty() && tracking.entities.isEmpty()) { - TRACKING.remove(level); - } - if (!fields.isEmpty()) { - TimeDilationParticles.spawnFieldBorders(level, fields); - } - } - } - - public static void trackPotentiallyAffected(Entity entity) { - if (!(entity.level() instanceof ServerLevel level) || entity instanceof TimeDilationFieldEntity) { - return; - } - if (entity instanceof TimeDilationEntityAccess access - && Math.abs(access.antarchy$getTimeDilationRate() - TimeDilationMath.NORMAL_RATE) < 0.001D - && Math.abs(access.antarchy$getInheritedTimeDilationRate() - TimeDilationMath.NORMAL_RATE) < 0.001D - && (!(entity instanceof LivingEntity living) || !living.hasEffect(AntarchyObjects.DILATED_EFFECT.get()))) { - return; - } - TRACKING.computeIfAbsent(level, ignored -> new TrackingState()).entities.add(entity); - } - - private static void syncFieldSnapshots(ServerLevel level, List fields, TrackingState tracking) { - List snapshots = fields.stream() - .filter(TimeDilationFieldEntity::isVisual) - .map(field -> new TimeDilationFieldSnapshot(field.getX(), field.getY(), field.getZ(), - field.fieldRadius(), field.fieldRate(), field.fieldAge(), field.fieldDurationTicks())) - .limit(128) - .toList(); - if (level.getGameTime() % 4L != 0L && snapshots.size() == tracking.lastSnapshots.size()) { - return; - } - tracking.lastSnapshots = snapshots; - for (ServerPlayer player : level.players()) { - TimeDilationApi.syncFields(player, snapshots); - } - } - - private static List collectFields(ServerLevel level) { - List fields = new ArrayList<>(); - for (Entity entity : level.getAllEntities()) { - if (entity instanceof TimeDilationFieldEntity field && field.isAlive()) { - fields.add(field); - } - } - return fields; - } - - private static void discoverFieldEntities(ServerLevel level, List fields, TrackingState tracking) { - for (TimeDilationFieldEntity field : fields) { - double radius = field.influenceRadius(); - var center = field.position(); - var area = new net.minecraft.world.phys.AABB(center.x - radius, center.y - radius, center.z - radius, - center.x + radius, center.y + radius, center.z + radius); - tracking.entities.addAll(level.getEntities(field, area, - entity -> entity.isAlive() && !(entity instanceof TimeDilationFieldEntity) - && entity instanceof TimeDilationEntityAccess)); - } - } - - private static void updateEntities(ServerLevel level, List fields, TrackingState tracking) { - var iterator = tracking.entities.iterator(); - while (iterator.hasNext()) { - Entity entity = iterator.next(); - if (!(entity instanceof TimeDilationEntityAccess access) || entity instanceof TimeDilationFieldEntity) { - continue; - } - boolean blocked = entity.getType().is(AntarchyTags.Entities.TIME_DILATION_IMMUNE) - || entity.getType().is(AntarchyTags.Entities.DILATED_BLACKLIST); - if (entity instanceof LivingEntity living) { - blocked = blocked || !TimeDilationEligibility.canApply(living); - } - if (blocked) { - if (entity instanceof LivingEntity living) { - living.removeEffect(AntarchyObjects.DILATED_EFFECT.get()); - } - TimeDilationApi.clearRate(entity); - iterator.remove(); - continue; - } - - double previousRate = access.antarchy$getTimeDilationRate(); - double fieldRate = TimeDilationFieldSampler.sample(fields, entity); - double effectRate = TimeDilationMath.NORMAL_RATE; - if (entity instanceof LivingEntity living) { - var effect = living.getEffect(AntarchyObjects.DILATED_EFFECT.get()); - if (effect != null) { - effectRate = DilatedMobEffect.rateForAmplifier(effect.getAmplifier()); - } - var contracted = living.getEffect(AntarchyObjects.CONTRACTED_EFFECT.get()); - if (contracted != null) { - effectRate = Math.max(effectRate, ContractedMobEffect.rateForAmplifier(contracted.getAmplifier())); - } - } - double inheritedRate = access.antarchy$getInheritedTimeDilationRate(); - if (entity instanceof Projectile projectile && projectile.getOwner() != null) { - double ownerRate = TimeDilationApi.getRate(projectile.getOwner()); - inheritedRate = ownerRate < TimeDilationMath.NORMAL_RATE - ? Math.min(inheritedRate, ownerRate) : Math.max(inheritedRate, ownerRate); - } - double slowRate = TimeDilationMath.NORMAL_RATE; - double fastRate = TimeDilationMath.NORMAL_RATE; - for (double candidate : new double[]{fieldRate, effectRate, inheritedRate}) { - if (candidate < TimeDilationMath.NORMAL_RATE) slowRate = Math.min(slowRate, candidate); - else fastRate = Math.max(fastRate, candidate); - } - double targetRate = slowRate < TimeDilationMath.NORMAL_RATE ? slowRate : fastRate; - double rate = TimeDilationMath.transitionRate(previousRate, targetRate); - if (Math.abs(targetRate - TimeDilationMath.NORMAL_RATE) < 0.001D - && Math.abs(rate - TimeDilationMath.NORMAL_RATE) < 0.001D) { - TimeDilationApi.clearRate(entity); - } else { - access.antarchy$setTimeDilationRate(rate); - } - if (Math.abs(previousRate - rate) > 0.001D) { - TimeDilationApi.syncEntityRate(entity, rate); - } - boolean hasEffect = entity instanceof LivingEntity living && living.hasEffect(AntarchyObjects.DILATED_EFFECT.get()); - boolean hasInheritedRate = Math.abs(access.antarchy$getInheritedTimeDilationRate() - TimeDilationMath.NORMAL_RATE) >= 0.001D; - boolean hasActiveRate = Math.abs(access.antarchy$getTimeDilationRate() - TimeDilationMath.NORMAL_RATE) >= 0.001D; - if (!hasEffect && !hasInheritedRate && !hasActiveRate - && Math.abs(targetRate - TimeDilationMath.NORMAL_RATE) < 0.001D) { - iterator.remove(); - } - } - tracking.entities.removeIf(entity -> !entity.isAlive() || entity.isRemoved()); - } - - private static final class TrackingState { - private final Set entities = Collections.newSetFromMap(new IdentityHashMap<>()); - private List lastSnapshots = List.of(); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationMath.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationMath.java deleted file mode 100644 index 8a4c3e28..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationMath.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.craisinlord.antarchy.content.time; - -public final class TimeDilationMath { - public static final double MIN_RATE = 0.05D; - public static final double NORMAL_RATE = 1.0D; - public static final int FIELD_TRANSITION_TICKS = 20; - public static final int EFFECT_TRANSITION_TICKS = 20; - private static final double GAUSSIAN_EDGE_EXPONENT = -4.5D; - - private TimeDilationMath() { - } - - public static double clampRate(double rate) { - if (Double.isNaN(rate) || Double.isInfinite(rate)) { - return NORMAL_RATE; - } - return Math.max(MIN_RATE, Math.min(NORMAL_RATE, rate)); - } - - /** Moves an entity's effective rate toward a new effect/field target without a hard step. */ - public static double transitionRate(double currentRate, double targetRate) { - double current = clampRate(currentRate); - double target = clampRate(targetRate); - double maximumStep = (NORMAL_RATE - MIN_RATE) / EFFECT_TRANSITION_TICKS; - double delta = Math.max(-maximumStep, Math.min(maximumStep, target - current)); - return clampRate(current + delta); - } - - public static double gaussianFalloff(double distance, double radius) { - if (distance < 0.0D || distance >= radius || radius <= 0.0D) { - return 0.0D; - } - double normalized = distance / radius; - return Math.exp(GAUSSIAN_EDGE_EXPONENT * normalized * normalized); - } - - public static double localFieldRate(double fieldRate, double falloff) { - double clampedRate = clampRate(fieldRate); - double clampedFalloff = Math.max(0.0D, Math.min(1.0D, falloff)); - if (clampedRate <= 0.0D) { - return 0.0D; - } - return Math.pow(clampedRate, clampedFalloff); - } - - public static double smoothStep(double value) { - double clamped = Math.max(0.0D, Math.min(1.0D, value)); - return clamped * clamped * (3.0D - 2.0D * clamped); - } - - public static double fieldStrength(int age, int durationTicks) { - double fadeIn = smoothStep((double) age / FIELD_TRANSITION_TICKS); - if (durationTicks < 0) { - return fadeIn; - } - - double remaining = durationTicks - age; - double fadeOut = smoothStep(remaining / FIELD_TRANSITION_TICKS); - return Math.min(fadeIn, fadeOut); - } - - public static double effectiveFieldRate(double fieldRate, int age, int durationTicks) { - double strength = fieldStrength(age, durationTicks); - return NORMAL_RATE + (clampRate(fieldRate) - NORMAL_RATE) * strength; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationParticles.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationParticles.java deleted file mode 100644 index f10a6039..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationParticles.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.craisinlord.antarchy.content.time; - -import java.util.List; -import net.minecraft.core.particles.ParticleTypes; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.util.Mth; -import net.minecraft.world.phys.Vec3; - -public final class TimeDilationParticles { - private static final int PARTICLE_INTERVAL_TICKS = 4; - private static final int MAX_RING_POINTS = 96; - - private TimeDilationParticles() { - } - - public static void spawnFieldBorders(ServerLevel level, List fields) { - if (level.getGameTime() % PARTICLE_INTERVAL_TICKS != 0L) { - return; - } - for (TimeDilationFieldEntity field : fields) { - if (field.isVisual()) spawnBorder(level, field.position(), field.fieldRadius()); - } - } - - private static void spawnBorder(ServerLevel level, Vec3 center, double radius) { - int points = Mth.clamp((int) Math.ceil(radius * 10.0D), 24, MAX_RING_POINTS); - double phase = (level.getGameTime() % 80L) * 0.07853981633974483D; - - for (int i = 0; i < points; i++) { - double angle = phase + (Math.PI * 2.0D * i / points); - double x = center.x + Math.cos(angle) * radius; - double z = center.z + Math.sin(angle) * radius; - spawnParticle(level, x, center.y, z); - - if (i % 4 == 0) { - spawnParticle(level, x, center.y + radius * 0.5D, z); - spawnParticle(level, x, center.y - radius * 0.5D, z); - } - if (i % 8 == 0) { - spawnParticle(level, center.x + Math.cos(angle) * radius * 0.7D, center.y + Math.sin(angle) * radius, center.z); - spawnParticle(level, center.x, center.y + Math.sin(angle) * radius, center.z + Math.cos(angle) * radius * 0.7D); - } - } - } - - private static void spawnParticle(ServerLevel level, double x, double y, double z) { - level.sendParticles(ParticleTypes.REVERSE_PORTAL, x, y, z, 1, 0.02D, 0.02D, 0.02D, 0.0D); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/util/WormHookRope.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/util/WormHookRope.java index 6912b529..8cbe373b 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/util/WormHookRope.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/util/WormHookRope.java @@ -12,16 +12,6 @@ import net.minecraft.world.phys.Vec3; import java.util.ArrayList; import java.util.List; -/** - * Tracks the path of a taut rope from a fixed anchor point to a moving end point (the - * player's eyes), bending around block corners when the straight-line path would otherwise - * clip through terrain. The anchor never moves (the worm hook is stuck in a block), so this - * only needs to add/remove bends on the player's side of the rope. - * - * Ported from the corner-wrapping algorithm in Yyon's GrappleMod (GPL-3.0), adapted from a - * custom vector class to vanilla Vec3 and from a moving-hook/moving-player pair to a fixed - * anchor. - */ public final class WormHookRope { private static final double BEND_OFFSET = 0.05D; private static final double INTO_BLOCK = 0.05D; @@ -44,7 +34,6 @@ public final class WormHookRope { this.prevEnd = end; } - /** Recomputes the bend list for the current anchor/end positions. Anchor must stay constant. */ public void update(Entity context, Vec3 anchor, Vec3 end, double ropeLength) { this.ropeLength = ropeLength; Level level = context.level(); @@ -52,7 +41,6 @@ public final class WormHookRope { points.set(0, anchor); points.set(points.size() - 1, end); - // Unwind bends the rope has swung clear of. while (points.size() > 2) { int index = points.size() - 2; Vec3 closest = points.get(index); @@ -153,12 +141,10 @@ public final class WormHookRope { topSides.remove(index); } - /** The pivot point closest to the moving end: either the anchor, or the last bend before it. */ public Vec3 getPivot() { return points.get(points.size() - 2); } - /** Rope length used up getting from the anchor to the pivot (0 if the rope has no bends). */ public double getConsumedLength() { double dist = 0; for (int i = 0; i < points.size() - 2; i++) { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/weather/ThoraxisWeatherKind.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/weather/ThoraxisWeatherKind.java deleted file mode 100644 index 073f5f59..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/weather/ThoraxisWeatherKind.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.craisinlord.antarchy.content.weather; - -import java.util.Optional; - -public enum ThoraxisWeatherKind { - NONE("none"), - INVERSION_STORM("inversion_storm"), - BLOOD_RAIN("blood_rain"), - SANDSTORM("sandstorm"); - - private final String id; - - ThoraxisWeatherKind(String id) { - this.id = id; - } - - public String id() { - return this.id; - } - - public boolean isActive() { - return this != NONE; - } - - public static ThoraxisWeatherKind byId(String value) { - if (value == null) { - return NONE; - } - - for (ThoraxisWeatherKind kind : values()) { - if (kind.id.equalsIgnoreCase(value)) { - return kind; - } - } - - return NONE; - } - - public static Optional parse(String value) { - ThoraxisWeatherKind kind = byId(value); - return kind == NONE ? Optional.empty() : Optional.of(kind); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/weather/ThoraxisWeatherManager.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/weather/ThoraxisWeatherManager.java deleted file mode 100644 index 2f254a93..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/weather/ThoraxisWeatherManager.java +++ /dev/null @@ -1,304 +0,0 @@ -package com.craisinlord.antarchy.content.weather; - -import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.AntarchyObjects; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityTransition; -import net.minecraft.core.BlockPos; -import net.minecraft.core.particles.BlockParticleOption; -import net.minecraft.core.particles.ParticleTypes; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.effect.MobEffectInstance; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.sounds.SoundEvents; -import net.minecraft.util.RandomSource; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.LightningBolt; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.block.Blocks; - -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.WeakHashMap; -import java.util.UUID; - -public final class ThoraxisWeatherManager { - private static final ResourceLocation THORAXIS_DIMENSION = new ResourceLocation(Antarchy.MODID, "thoraxis"); - private static final ResourceKey THORAXIS_WASTES = ResourceKey.create( - net.minecraft.core.registries.Registries.BIOME, - new ResourceLocation(Antarchy.MODID, "nightmare_wastes") - ); - private static final ResourceKey DREAM_DUNES = ResourceKey.create( - net.minecraft.core.registries.Registries.BIOME, - new ResourceLocation(Antarchy.MODID, "dream_dunes") - ); - private static final ResourceKey LUCID_POOLS = ResourceKey.create( - net.minecraft.core.registries.Registries.BIOME, - new ResourceLocation(Antarchy.MODID, "lucid_pools") - ); - private static final int WEATHER_RECHECK_MIN_TICKS = 400; - private static final int WEATHER_RECHECK_MAX_TICKS = 900; - private static final int STORM_MIN_TICKS = 600; - private static final int STORM_MAX_TICKS = 1800; - private static final int INVERSION_STRIKE_INTERVAL = 600; - private static final int INVERSION_GRAVITY_TICKS = 220; - private static final int INVERSION_EFFECT_TICKS = 200; - private static final int WEATHER_PARTICLE_INTERVAL = 4; - private static final double WEATHER_RADIUS = 48.0D; - - private static final WeakHashMap STATES = new WeakHashMap<>(); - - private ThoraxisWeatherManager() { - } - - public static ThoraxisWeatherSnapshot tick(ServerLevel level) { - if (!isThoraxis(level)) { - return null; - } - - WeatherState state = STATES.computeIfAbsent(level, ignored -> new WeatherState()); - long now = level.getGameTime(); - RandomSource random = level.getRandom(); - - if (state.kind.isActive()) { - runActiveWeather(level, state, now); - if (now >= state.expiresAt) { - state.clear(now + randomCooldown(random)); - return snapshot(level, state); - } - return null; - } - - if (now < state.nextDecisionAt) { - return null; - } - - WeatherKindSelection selection = chooseWeather(level, random); - if (selection.kind == ThoraxisWeatherKind.NONE) { - state.nextDecisionAt = now + randomCooldown(random); - return null; - } - - state.start(selection.kind, selection.anchor, now, now + randomDuration(random)); - runActiveWeather(level, state, now); - return snapshot(level, state); - } - - public static ThoraxisWeatherSnapshot snapshot(ServerLevel level) { - WeatherState state = STATES.get(level); - if (state == null) { - return new ThoraxisWeatherSnapshot(level.dimension().location(), ThoraxisWeatherKind.NONE, 0L, BlockPos.ZERO); - } - - return snapshot(level, state); - } - - public static ThoraxisWeatherSnapshot force(ServerLevel level, ThoraxisWeatherKind kind, BlockPos anchor, long durationTicks) { - if (!isThoraxis(level)) { - return new ThoraxisWeatherSnapshot(level.dimension().location(), ThoraxisWeatherKind.NONE, 0L, BlockPos.ZERO); - } - - WeatherState state = STATES.computeIfAbsent(level, ignored -> new WeatherState()); - long now = level.getGameTime(); - if (kind == null || !kind.isActive()) { - state.clear(now + randomCooldown(level.getRandom())); - return snapshot(level, state); - } - - long expiresAt = durationTicks <= 0L ? now + randomDuration(level.getRandom()) : now + durationTicks; - state.start(kind, anchor == null ? BlockPos.ZERO : anchor, now, expiresAt); - runActiveWeather(level, state, now); - return snapshot(level, state); - } - - public static ThoraxisWeatherSnapshot clear(ServerLevel level) { - if (!isThoraxis(level)) { - return new ThoraxisWeatherSnapshot(level.dimension().location(), ThoraxisWeatherKind.NONE, 0L, BlockPos.ZERO); - } - - WeatherState state = STATES.computeIfAbsent(level, ignored -> new WeatherState()); - state.clear(level.getGameTime() + randomCooldown(level.getRandom())); - return snapshot(level, state); - } - - private static ThoraxisWeatherSnapshot snapshot(ServerLevel level, WeatherState state) { - return new ThoraxisWeatherSnapshot(level.dimension().location(), state.kind, state.expiresAt, state.anchor); - } - - private static void runActiveWeather(ServerLevel level, WeatherState state, long now) { - switch (state.kind) { - case INVERSION_STORM -> tickInversionStorm(level, state, now); - case BLOOD_RAIN -> tickBloodRain(level, state, now); - case SANDSTORM -> tickSandstorm(level, state, now); - default -> { - } - } - } - - private static void tickInversionStorm(ServerLevel level, WeatherState state, long now) { - cleanupExpiredForcedInversions(level, state, now); - if (now % INVERSION_STRIKE_INTERVAL != 0L) { - return; - } - - List targets = level.getEntitiesOfClass( - LivingEntity.class, - new net.minecraft.world.phys.AABB(state.anchor).inflate(WEATHER_RADIUS), - entity -> entity.isAlive() && !entity.isSpectator() - ); - - if (targets.isEmpty()) { - return; - } - - LivingEntity target = targets.get(level.getRandom().nextInt(targets.size())); - LightningBolt bolt = EntityType.LIGHTNING_BOLT.create(level); - if (bolt != null) { - bolt.moveTo(target.getX(), target.getY() + target.getBbHeight() * 0.5D, target.getZ()); - bolt.setVisualOnly(true); - level.addFreshEntity(bolt); - } - - if (!AntarchyGravityApi.isGravityForced(target)) { - AntarchyGravityApi.setForcedGravityDirection(target, AntarchyGravityDirection.UP, new AntarchyGravityTransition(12)); - state.forcedInversionExpiry.put(target.getUUID(), now + INVERSION_GRAVITY_TICKS); - } - - target.addEffect(new MobEffectInstance(AntarchyObjects.INVERTED_EFFECT.get(), INVERSION_EFFECT_TICKS, 0, false, true, true)); - } - - private static void cleanupExpiredForcedInversions(ServerLevel level, WeatherState state, long now) { - Iterator> iterator = state.forcedInversionExpiry.entrySet().iterator(); - while (iterator.hasNext()) { - Map.Entry entry = iterator.next(); - if (entry.getValue() > now) { - continue; - } - - LivingEntity entity = level.getEntity(entry.getKey()) instanceof LivingEntity living ? living : null; - if (entity != null && entity.isAlive() && AntarchyGravityApi.isGravityForced(entity)) { - AntarchyGravityApi.clearForcedGravity(entity); - } - iterator.remove(); - } - } - - private static void tickBloodRain(ServerLevel level, WeatherState state, long now) { - if (now % WEATHER_PARTICLE_INTERVAL != 0L) { - return; - } - - level.sendParticles( - new BlockParticleOption(ParticleTypes.BLOCK, Blocks.RED_SAND.defaultBlockState()), - state.anchor.getX() + 0.5D, - state.anchor.getY() + 28.0D, - state.anchor.getZ() + 0.5D, - 26, - 18.0D, - 12.0D, - 18.0D, - 0.12D - ); - level.playSound(null, state.anchor, SoundEvents.LIGHTNING_BOLT_THUNDER, net.minecraft.sounds.SoundSource.WEATHER, 0.2F, 0.8F); - } - - private static void tickSandstorm(ServerLevel level, WeatherState state, long now) { - if (now % WEATHER_PARTICLE_INTERVAL != 0L) { - return; - } - - level.sendParticles( - new BlockParticleOption(ParticleTypes.BLOCK, Blocks.SAND.defaultBlockState()), - state.anchor.getX() + 0.5D, - state.anchor.getY() + 12.0D, - state.anchor.getZ() + 0.5D, - 40, - 14.0D, - 6.0D, - 14.0D, - 0.10D - ); - } - - private static WeatherKindSelection chooseWeather(ServerLevel level, RandomSource random) { - var players = level.players(); - if (players.isEmpty()) { - return WeatherKindSelection.none(); - } - - LivingEntity anchorEntity = players.get(random.nextInt(players.size())); - BlockPos anchor = anchorEntity.blockPosition(); - var biome = level.getBiome(anchor); - - if (biome.is(DREAM_DUNES)) { - return new WeatherKindSelection(ThoraxisWeatherKind.SANDSTORM, anchor); - } - - if (biome.is(LUCID_POOLS)) { - return random.nextFloat() < 0.35F - ? new WeatherKindSelection(ThoraxisWeatherKind.BLOOD_RAIN, anchor) - : WeatherKindSelection.none(); - } - - if (biome.is(THORAXIS_WASTES)) { - float roll = random.nextFloat(); - if (roll < 0.58F) { - return new WeatherKindSelection(ThoraxisWeatherKind.INVERSION_STORM, anchor); - } - if (roll < 0.88F) { - return new WeatherKindSelection(ThoraxisWeatherKind.BLOOD_RAIN, anchor); - } - } - - return WeatherKindSelection.none(); - } - - private static int randomDuration(RandomSource random) { - return STORM_MIN_TICKS + random.nextInt(STORM_MAX_TICKS - STORM_MIN_TICKS + 1); - } - - private static int randomCooldown(RandomSource random) { - return WEATHER_RECHECK_MIN_TICKS + random.nextInt(WEATHER_RECHECK_MAX_TICKS - WEATHER_RECHECK_MIN_TICKS + 1); - } - - private static boolean isThoraxis(ServerLevel level) { - return level.dimension().location().equals(THORAXIS_DIMENSION); - } - - private record WeatherKindSelection(ThoraxisWeatherKind kind, BlockPos anchor) { - private static WeatherKindSelection none() { - return new WeatherKindSelection(ThoraxisWeatherKind.NONE, BlockPos.ZERO); - } - } - - private static final class WeatherState { - private ThoraxisWeatherKind kind = ThoraxisWeatherKind.NONE; - private long expiresAt; - private long nextDecisionAt; - private long startedAt; - private BlockPos anchor = BlockPos.ZERO; - private final Map forcedInversionExpiry = new java.util.HashMap<>(); - - private void start(ThoraxisWeatherKind kind, BlockPos anchor, long startedAt, long expiresAt) { - this.kind = kind; - this.anchor = anchor; - this.startedAt = startedAt; - this.expiresAt = expiresAt; - this.nextDecisionAt = expiresAt; - } - - private void clear(long nextDecisionAt) { - this.kind = ThoraxisWeatherKind.NONE; - this.anchor = BlockPos.ZERO; - this.expiresAt = 0L; - this.startedAt = 0L; - this.nextDecisionAt = nextDecisionAt; - this.forcedInversionExpiry.clear(); - } - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/weather/ThoraxisWeatherSnapshot.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/weather/ThoraxisWeatherSnapshot.java deleted file mode 100644 index 69413172..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/weather/ThoraxisWeatherSnapshot.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.craisinlord.antarchy.content.weather; - -import net.minecraft.core.BlockPos; -import net.minecraft.resources.ResourceLocation; - -public record ThoraxisWeatherSnapshot( - ResourceLocation dimension, - ThoraxisWeatherKind kind, - long expiresAt, - BlockPos anchor -) { - public boolean isActive() { - return this.kind != ThoraxisWeatherKind.NONE; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/VillagePoolAdditions.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/VillagePoolAdditions.java new file mode 100644 index 00000000..2faa6d13 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/VillagePoolAdditions.java @@ -0,0 +1,125 @@ +package com.craisinlord.antarchy.content.worldgen; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.mixins.PoiTypesAccessor; +import com.craisinlord.integrated_api.mixins.structures.StructurePoolAccessor; +import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.mojang.datafixers.util.Pair; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import net.minecraft.core.Holder; +import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.packs.resources.Resource; +import net.minecraft.world.level.levelgen.structure.pools.StructurePoolElement; +import net.minecraft.world.level.levelgen.structure.pools.StructureTemplatePool; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructureProcessorList; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.core.registries.BuiltInRegistries; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public final class VillagePoolAdditions { + private static final Gson GSON = new Gson(); + private static final String DIRECTORY = "structure_pool_additions"; + + private VillagePoolAdditions() { + } + + public static void apply(MinecraftServer server) { + registerComputerPoiStates(server); + com.craisinlord.antarchy.content.portal.PermanentPortalType.registerPoiStates( + server.registryAccess().registryOrThrow(Registries.POINT_OF_INTEREST_TYPE)); + Registry pools = server.registryAccess().registryOrThrow(Registries.TEMPLATE_POOL); + Registry processors = server.registryAccess().registryOrThrow(Registries.PROCESSOR_LIST); + + for (Map.Entry entry : server.getResourceManager() + .listResources(DIRECTORY, path -> path.getPath().endsWith(".json")).entrySet()) { + try (java.io.Reader reader = entry.getValue().openAsReader()) { + JsonObject definition = GSON.fromJson(reader, JsonObject.class); + addToPool(pools, processors, definition, entry.getKey()); + } catch (IOException | RuntimeException exception) { + Antarchy.LOGGER.error("Failed to apply structure pool additions from {}", entry.getKey(), exception); + } + } + } + + private static void registerComputerPoiStates(MinecraftServer server) { + ResourceLocation poiId = new ResourceLocation(Antarchy.MODID, "computer"); + Registry poiRegistry = + server.registryAccess().registryOrThrow(Registries.POINT_OF_INTEREST_TYPE); + Holder poi = poiRegistry.getHolderOrThrow( + ResourceKey.create(Registries.POINT_OF_INTEREST_TYPE, poiId)); + Map> stateMap = + PoiTypesAccessor.antarchy$getTypeByState(); + net.minecraft.world.level.block.Block computer = BuiltInRegistries.BLOCK.get( + new ResourceLocation("antos", "computer")); + for (BlockState state : computer.getStateDefinition().getPossibleStates()) { + stateMap.put(state, poi); + } + } + + private static void addToPool( + Registry pools, + Registry processors, + JsonObject definition, + ResourceLocation source + ) { + ResourceLocation poolId = new ResourceLocation(definition.get("pool").getAsString()); + StructureTemplatePool pool = pools.get(poolId); + if (pool == null) { + Antarchy.LOGGER.warn("Skipping structure pool addition {} because pool {} does not exist", source, poolId); + return; + } + + JsonObject elementDefinition = definition.getAsJsonObject("element"); + ResourceLocation location = new ResourceLocation(elementDefinition.get("location").getAsString()); + ResourceLocation processorId = new ResourceLocation(stringValue( + elementDefinition, "processors", "minecraft:empty")); + Holder processor = processors.getHolderOrThrow( + ResourceKey.create(Registries.PROCESSOR_LIST, processorId)); + StructureTemplatePool.Projection projection = projection(stringValue( + elementDefinition, "projection", "rigid")); + int weight = definition.has("weight") ? definition.get("weight").getAsInt() : 1; + if (weight < 1) { + throw new IllegalArgumentException("weight must be positive"); + } + + StructurePoolElement poolElement = StructurePoolElement + .legacy(location.toString(), processor) + .apply(projection); + StructurePoolAccessor accessor = (StructurePoolAccessor) pool; + List> templates = new ArrayList<>(accessor.integratedapi_getRawTemplates()); + templates.add(Pair.of(poolElement, weight)); + accessor.integratedapi_setRawTemplates(templates); + + ObjectArrayList expandedTemplates = new ObjectArrayList<>(accessor.integratedapi_getTemplates()); + for (int i = 0; i < weight; i++) { + expandedTemplates.add(poolElement); + } + accessor.integratedapi_setTemplates(expandedTemplates); + } + + private static StructureTemplatePool.Projection projection(String value) { + return switch (value) { + case "rigid" -> StructureTemplatePool.Projection.RIGID; + case "terrain_matching" -> StructureTemplatePool.Projection.TERRAIN_MATCHING; + default -> throw new IllegalArgumentException("Unknown structure pool projection: " + value); + }; + } + + private static JsonElement primitive(String value) { + return new com.google.gson.JsonPrimitive(value); + } + + private static String stringValue(JsonObject object, String key, String fallback) { + return object.has(key) ? object.get(key).getAsString() : fallback; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynEggPatchFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynEggPatchFeature.java index 0dc46511..60acf0dd 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynEggPatchFeature.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynEggPatchFeature.java @@ -2,8 +2,8 @@ package com.craisinlord.antarchy.content.worldgen.cavaryn; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.AntarchyObjects; -import com.craisinlord.antarchy.content.block.CreepingHorrorEggBlock; -import com.craisinlord.antarchy.content.block.LurkingTerrorEggBlock; +import com.craisinlord.antarchy.content.block.CrawlingBlightEggBlock; +import com.craisinlord.antarchy.content.block.SkulkingFrightEggBlock; import com.mojang.serialization.Codec; import java.util.ArrayList; import java.util.List; @@ -45,7 +45,7 @@ public final class CavarynEggPatchFeature extends Feature { - // The 1.20 implementation keeps its historical Java name, but the public - // registry id follows the 1.21 rename. - private static final ResourceLocation JUMPY_BUG_EGG_ID = new ResourceLocation(Antarchy.MODID, "springbug_egg"); - private static final int SEARCH_RADIUS = 8; - private static final int VERTICAL_SCAN = 24; - private static final int SEARCH_ATTEMPTS = 24; - private static final int MAX_PLACEMENTS = 3; - - public JumpyBugEggCeilingFeature(Codec codec) { - super(codec); - } - - @Override - public boolean place(FeaturePlaceContext context) { - Block eggBlock = getBlock(JUMPY_BUG_EGG_ID); - if (eggBlock == null) { - return false; - } - - WorldGenLevel level = context.level(); - RandomSource random = context.random(); - BlockPos origin = context.origin(); - - boolean placedAny = false; - int placements = 0; - BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); - for (int attempt = 0; attempt < SEARCH_ATTEMPTS && placements < MAX_PLACEMENTS; attempt++) { - int x = origin.getX() + random.nextInt(SEARCH_RADIUS * 2 + 1) - SEARCH_RADIUS; - int z = origin.getZ() + random.nextInt(SEARCH_RADIUS * 2 + 1) - SEARCH_RADIUS; - int startY = origin.getY() + random.nextInt(VERTICAL_SCAN * 2 + 1) - VERTICAL_SCAN; - int minY = Math.max(level.getMinBuildHeight() + 1, startY - VERTICAL_SCAN); - int maxY = Math.min(level.getMaxBuildHeight() - 2, startY + VERTICAL_SCAN); - - BlockPos spot = null; - for (int y = maxY; y >= minY; y--) { - mutable.set(x, y, z); - if (isValidCeilingSpot(level, mutable)) { - spot = mutable.immutable(); - break; - } - } - - if (spot == null) { - continue; - } - BlockState eggState = eggBlock.defaultBlockState() - .setValue(JumpyBugEggBlock.HANGING, true) - .setValue(JumpyBugEggBlock.ROTATED, random.nextBoolean()); - level.setBlock(spot, eggState, 3); - placedAny = true; - placements++; - } - - return placedAny; - } - - private static boolean isValidCeilingSpot(WorldGenLevel level, BlockPos pos) { - BlockState state = level.getBlockState(pos); - if (!state.isAir()) { - return false; - } - - BlockPos abovePos = pos.above(); - BlockState aboveState = level.getBlockState(abovePos); - return aboveState.isFaceSturdy(level, abovePos, Direction.DOWN); - } - - private static Block getBlock(ResourceLocation id) { - Optional block = BuiltInRegistries.BLOCK.getOptional(id); - return block.orElse(null); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/SpringbugEggCeilingFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/SpringbugEggCeilingFeature.java new file mode 100644 index 00000000..e8ec309a --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/SpringbugEggCeilingFeature.java @@ -0,0 +1,89 @@ +package com.craisinlord.antarchy.content.worldgen.cavaryn; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.block.SpringbugEggBlock; +import com.mojang.serialization.Codec; +import java.util.Optional; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; + +public final class SpringbugEggCeilingFeature extends Feature { + private static final ResourceLocation SPRINGBUG_EGG_ID = new ResourceLocation(Antarchy.MODID, "springbug_egg"); + private static final int SEARCH_RADIUS = 8; + private static final int VERTICAL_SCAN = 24; + private static final int SEARCH_ATTEMPTS = 24; + private static final int MAX_PLACEMENTS = 3; + + public SpringbugEggCeilingFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + Block eggBlock = getBlock(SPRINGBUG_EGG_ID); + if (eggBlock == null) { + return false; + } + + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + + boolean placedAny = false; + int placements = 0; + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int attempt = 0; attempt < SEARCH_ATTEMPTS && placements < MAX_PLACEMENTS; attempt++) { + int x = origin.getX() + random.nextInt(SEARCH_RADIUS * 2 + 1) - SEARCH_RADIUS; + int z = origin.getZ() + random.nextInt(SEARCH_RADIUS * 2 + 1) - SEARCH_RADIUS; + int startY = origin.getY() + random.nextInt(VERTICAL_SCAN * 2 + 1) - VERTICAL_SCAN; + int minY = Math.max(level.getMinBuildHeight() + 1, startY - VERTICAL_SCAN); + int maxY = Math.min(level.getMaxBuildHeight() - 2, startY + VERTICAL_SCAN); + + BlockPos spot = null; + for (int y = maxY; y >= minY; y--) { + mutable.set(x, y, z); + if (isValidCeilingSpot(level, mutable)) { + spot = mutable.immutable(); + break; + } + } + + if (spot == null) { + continue; + } + BlockState eggState = eggBlock.defaultBlockState() + .setValue(SpringbugEggBlock.HANGING, true) + .setValue(SpringbugEggBlock.ROTATED, random.nextBoolean()); + level.setBlock(spot, eggState, 3); + placedAny = true; + placements++; + } + + return placedAny; + } + + private static boolean isValidCeilingSpot(WorldGenLevel level, BlockPos pos) { + BlockState state = level.getBlockState(pos); + if (!state.isAir()) { + return false; + } + + BlockPos abovePos = pos.above(); + BlockState aboveState = level.getBlockState(abovePos); + return aboveState.isFaceSturdy(level, abovePos, Direction.DOWN); + } + + private static Block getBlock(ResourceLocation id) { + Optional block = BuiltInRegistries.BLOCK.getOptional(id); + return block.orElse(null); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/CoralSpikeFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/CoralSpikeFeature.java index 73c77ddd..37bc0e8b 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/CoralSpikeFeature.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/CoralSpikeFeature.java @@ -67,13 +67,13 @@ public class CoralSpikeFeature extends Feature { CoralSet[] coralSets = coralSets(); CoralSet coral = coralSets[random.nextInt(coralSets.length)]; - int baseRadius = 2 + random.nextInt(2); // 2-3 wide at base - int totalHeight = 20 + random.nextInt(15); // 20-34 blocks tall + int baseRadius = 2 + random.nextInt(2); + int totalHeight = 20 + random.nextInt(15); double curveAngle = random.nextDouble() * Math.PI * 2; double curveDX = Math.cos(curveAngle); double curveDZ = Math.sin(curveAngle); - double maxCurve = 4.0 + random.nextDouble() * 5.0; // 4-9 block lean at tip + double maxCurve = 4.0 + random.nextDouble() * 5.0; boolean placed = false; @@ -81,12 +81,10 @@ public class CoralSpikeFeature extends Feature { int blockY = floorY + dy; double progress = (double) dy / totalHeight; - // Quadratic lean -- slow at base, bending hard near tip double curveOffset = maxCurve * progress * progress; double centerX = origin.getX() + curveDX * curveOffset; double centerZ = origin.getZ() + curveDZ * curveOffset; - // Taper: full width for bottom 25%, then narrows sharply to a point double taperT = Math.max(0.0, (progress - 0.25) / 0.75); int radius = (int) Math.max(0, baseRadius * (1.0 - taperT * taperT * 1.3)); @@ -147,7 +145,6 @@ public class CoralSpikeFeature extends Feature { } } - // Floor scatter: coral plants, fans, and sea pickles around the base int decorCount = 10 + random.nextInt(12); for (int i = 0; i < decorCount; i++) { int fx = origin.getX() + random.nextInt(13) - 6; @@ -192,7 +189,6 @@ public class CoralSpikeFeature extends Feature { } } } else if (decorInWater) { - // Sea pickle cluster -- only underwater BlockState pickle = Blocks.SEA_PICKLE.defaultBlockState() .setValue(SeaPickleBlock.PICKLES, 1 + random.nextInt(4)); if (pickle.canSurvive(level, decorPos)) { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java index ae71430b..7af80eef 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java @@ -15,373 +15,62 @@ import net.minecraft.world.level.biome.BiomeSource; import net.minecraft.world.level.biome.Climate; import net.minecraft.world.level.biome.MultiNoiseBiomeSource; -public class ElythiaBiomeSource extends BiomeSource { - public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( - MultiNoiseBiomeSource.DIRECT_CODEC.forGetter(ElythiaBiomeSource::parameters), - Codec.INT.optionalFieldOf("moleworm_caves_max_y", 72).forGetter(ElythiaBiomeSource::molewormCavesMaxY), - Codec.INT.optionalFieldOf("surface_biome_sample_y", 160).forGetter(ElythiaBiomeSource::surfaceBiomeSampleY), - Codec.INT.optionalFieldOf("ocean_max_y", 85).forGetter(ElythiaBiomeSource::oceanMaxY), - Codec.INT.optionalFieldOf("sea_level", 78).forGetter(ElythiaBiomeSource::seaLevel), - Codec.INT.optionalFieldOf("cloud_sea_min_y", 360).forGetter(ElythiaBiomeSource::cloudSeaMinY) - ).apply(instance, ElythiaBiomeSource::new)); - private static final ResourceKey MOLEWORM_CAVES = ResourceKey.create( - Registries.BIOME, - new ResourceLocation(Antarchy.MODID, "moleworm_caves") - ); - private static final ResourceKey ELYTHIA_LUSH_CAVES = ResourceKey.create( - Registries.BIOME, - new ResourceLocation(Antarchy.MODID, "elythia_lush_caves") - ); - private static final ResourceKey ELYTHIA_OCEAN = ResourceKey.create( - Registries.BIOME, - new ResourceLocation(Antarchy.MODID, "elythia_ocean") - ); - private static final ResourceKey ELYTHIA_CORAL_SPIKES = ResourceKey.create( - Registries.BIOME, - new ResourceLocation(Antarchy.MODID, "elythia_coral_spikes") - ); - private static final ResourceKey ELYTHIA_BEACH = ResourceKey.create( - Registries.BIOME, - new ResourceLocation(Antarchy.MODID, "elythia_beach") - ); - private static final ResourceKey OURANWOOD_FOREST = ResourceKey.create( - Registries.BIOME, - new ResourceLocation(Antarchy.MODID, "ouranwood_forest") - ); - private static final ResourceKey SPARSE_OURANWOOD_FOREST = ResourceKey.create( - Registries.BIOME, - new ResourceLocation(Antarchy.MODID, "sparse_ouranwood_forest") - ); - private static final ResourceKey PEACH_FOREST = ResourceKey.create( - Registries.BIOME, - new ResourceLocation(Antarchy.MODID, "peach_forest") - ); - private static final ResourceKey FUNGAL_OURANWOOD_FOREST = ResourceKey.create( - Registries.BIOME, - new ResourceLocation(Antarchy.MODID, "fungal_ouranwood_forest") - ); - private static final ResourceKey GLIMMERING_POOLS = ResourceKey.create( - Registries.BIOME, - new ResourceLocation(Antarchy.MODID, "glimmering_pools") - ); +public final class ElythiaBiomeSource extends BiomeSource { private static final ResourceKey CLOUD_SEA = ResourceKey.create( Registries.BIOME, new ResourceLocation(Antarchy.MODID, "cloud_sea") ); - private static final int[] SURFACE_FALLBACK_BLOCK_YS = new int[]{192, 160, 128, 96, 64, 32, 0}; - private static final class ColumnBiomeCache { - long key = Long.MIN_VALUE; - Holder value; - } - - private final ThreadLocal molewormSurfaceFallbackCache = ThreadLocal.withInitial(ColumnBiomeCache::new); - private final ThreadLocal peachForestSurfaceFallbackCache = ThreadLocal.withInitial(ColumnBiomeCache::new); - private final ThreadLocal landFallbackCache = ThreadLocal.withInitial(ColumnBiomeCache::new); - - private static long packColumnKey(int x, int z) { - return ((long) x << 32) ^ (z & 0xFFFFFFFFL); - } + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + MultiNoiseBiomeSource.DIRECT_CODEC.forGetter(ElythiaBiomeSource::parameters), + Codec.INT.optionalFieldOf("cloud_sea_min_y", 250).forGetter(ElythiaBiomeSource::cloudSeaMinY) + ).apply(instance, ElythiaBiomeSource::new)); private final Climate.ParameterList> parameters; private final MultiNoiseBiomeSource delegate; - private final int molewormCavesMaxY; - private final int surfaceBiomeSampleY; - private final int oceanMaxY; - private final int seaLevel; private final int cloudSeaMinY; - private final int molewormCavesMaxQuartY; - private final int surfaceBiomeSampleQuartY; - private final int oceanMaxQuartY; - private final int seaLevelQuartY; - private final int undergroundGuardMaxQuartY; private final int cloudSeaMinQuartY; - private final Holder oceanHolder; - private final Holder defaultLandHolder; - private final Holder glimmeringPoolsHolder; - private final Holder ouranwoodForestHolder; private final Holder cloudSeaHolder; - public ElythiaBiomeSource(Climate.ParameterList> parameters, int molewormCavesMaxY, int surfaceBiomeSampleY, int oceanMaxY, int seaLevel, int cloudSeaMinY) { + public ElythiaBiomeSource(Climate.ParameterList> parameters, int cloudSeaMinY) { this.parameters = parameters; - this.delegate = MultiNoiseBiomeSource.createFromList(parameters); - this.molewormCavesMaxY = molewormCavesMaxY; - this.surfaceBiomeSampleY = surfaceBiomeSampleY; - this.oceanMaxY = oceanMaxY; - this.seaLevel = seaLevel; this.cloudSeaMinY = cloudSeaMinY; - this.molewormCavesMaxQuartY = QuartPos.fromBlock(molewormCavesMaxY); - this.surfaceBiomeSampleQuartY = QuartPos.fromBlock(surfaceBiomeSampleY); - this.oceanMaxQuartY = QuartPos.fromBlock(oceanMaxY); - this.seaLevelQuartY = QuartPos.fromBlock(seaLevel); - // Cave pockets carved into hills/mountains above sea level have no other guard — - // they just resolve via raw climate matching, which can land on peach_forest/glimmering_pools - // even though those are meant to be surface-only. Anything at or below this Y gets - // treated as underground for those two biomes specifically. - this.undergroundGuardMaxQuartY = QuartPos.fromBlock(molewormCavesMaxY + 40); this.cloudSeaMinQuartY = QuartPos.fromBlock(cloudSeaMinY); - this.oceanHolder = parameters.values().stream() - .map(Pair::getSecond) - .filter(h -> h.is(ELYTHIA_OCEAN)) - .findFirst() - .orElse(null); - this.glimmeringPoolsHolder = parameters.values().stream() - .map(Pair::getSecond) - .filter(h -> h.is(GLIMMERING_POOLS)) - .findFirst() - .orElse(null); - this.ouranwoodForestHolder = parameters.values().stream() - .map(Pair::getSecond) - .filter(h -> h.is(OURANWOOD_FOREST)) - .findFirst() - .orElse(null); - this.defaultLandHolder = parameters.values().stream() - .map(Pair::getSecond) - .filter(h -> !isOceanBiome(h) && !h.is(ELYTHIA_BEACH) - && !h.is(MOLEWORM_CAVES) && !h.is(ELYTHIA_LUSH_CAVES) - && !h.is(GLIMMERING_POOLS)) - .findFirst() - .orElse(null); this.cloudSeaHolder = parameters.values().stream() .map(Pair::getSecond) - .filter(h -> h.is(CLOUD_SEA)) + .filter(holder -> holder.is(CLOUD_SEA)) .findFirst() .orElse(null); + this.delegate = MultiNoiseBiomeSource.createFromList(new Climate.ParameterList<>( + parameters.values().stream() + .filter(entry -> !entry.getSecond().is(CLOUD_SEA)) + .toList() + )); } - private Climate.ParameterList> parameters() { return this.parameters; } - private int molewormCavesMaxY() { return this.molewormCavesMaxY; } - private int surfaceBiomeSampleY() { return this.surfaceBiomeSampleY; } - private int oceanMaxY() { return this.oceanMaxY; } - private int seaLevel() { return this.seaLevel; } - private int cloudSeaMinY() { return this.cloudSeaMinY; } + private Climate.ParameterList> parameters() { + return this.parameters; + } + + private int cloudSeaMinY() { + return this.cloudSeaMinY; + } @Override - protected com.mojang.serialization.Codec codec() { + protected Codec codec() { return CODEC; } @Override protected Stream> collectPossibleBiomes() { - return this.delegate.possibleBiomes().stream(); + return this.parameters.values().stream().map(Pair::getSecond).distinct(); } - private static final long OCEAN_CONTINENTALNESS_THRESHOLD = Climate.quantizeCoord(-0.87f); - private static final int CLOUD_SEA_CELL_SIZE = 96; - private static final long CLOUD_SEA_CHANCE_DENOMINATOR = 5L; // 1-in-5 columns == ~20% @Override public Holder getNoiseBiome(int x, int y, int z, Climate.Sampler sampler) { - // Only some sky columns are the cloud sea — everywhere else, altitude above the cloud - // floor just falls through to whatever biome would normally be there. Decided before - // touching the (expensive) delegate at all, both for correctness (multi-noise has no - // real notion of raw Y to gate a biome on) and as a speed win for the common case. - if (this.cloudSeaHolder != null && y >= this.cloudSeaMinQuartY && isCloudSeaColumn(x, z)) { + if (this.cloudSeaHolder != null && y >= this.cloudSeaMinQuartY) { return this.cloudSeaHolder; } - - Holder biome = this.delegate.getNoiseBiome(x, y, z, sampler); - - // Defensive: cloud_sea's multi-noise parameter point is reserved far off in "offset" - // so it shouldn't win nearest-neighbor on its own, but if it ever does for a query - // below the cloud floor, treat it like any other biome that has no business at that - // altitude and fall back to a real land biome instead of leaking clouds into terrain. - if (biome.is(CLOUD_SEA)) { - return resolveLandFallback(x, z, sampler); - } - - // Cap moleworm caves below their max Y — replace with surface biome above it - if (biome.is(MOLEWORM_CAVES) && y > this.molewormCavesMaxQuartY) { - return resolveSurfaceFallback(x, z, sampler, this.molewormSurfaceFallbackCache, MOLEWORM_CAVES, GLIMMERING_POOLS); - } - - // Use continentalness o classify the column. - // Ocean columns get the ocean biome at every Y so structures, particles, - // and ambient effects work correctly above the water surface. - // Cave biomes are always preserved even in ocean columns. - Climate.TargetPoint target = sampler.sample(x, this.seaLevelQuartY, z); - if (target.continentalness() < OCEAN_CONTINENTALNESS_THRESHOLD && y <= this.oceanMaxQuartY) { - if (biome.is(MOLEWORM_CAVES) || biome.is(ELYTHIA_LUSH_CAVES)) return biome; - Holder seaLevelBiome = this.delegate.getNoiseBiome(x, this.seaLevelQuartY, z, sampler); - // MultiNoise can return a land biome at sea-level depth — force ocean if so - if (isOceanBiome(seaLevelBiome)) return seaLevelBiome; - return oceanHolder != null ? oceanHolder : seaLevelBiome; - } - - // Land column below sea level: force any non-allowed surface biome to ocean. - // Cave sand/decorations are prevented by above_preliminary_surface in the - // surface rules, so this is safe to apply unconditionally. - if (y <= this.seaLevelQuartY && oceanHolder != null && !allowedBelowSeaLevel(biome)) { - return oceanHolder; - } - - // Land column prevent ocean biomes from sneakin in - if (isOceanBiome(biome)) { - return resolveLandFallback(x, z, sampler); - } - - if (biome.is(SPARSE_OURANWOOD_FOREST) && !isSparseOuranwoodCandidate(target, x, z)) { - biome = this.ouranwoodForestHolder != null ? this.ouranwoodForestHolder : biome; - } - - if (isGlimmeringPoolsCandidate(biome, target, x, z)) { - biome = this.glimmeringPoolsHolder != null ? this.glimmeringPoolsHolder : biome; - } - - // Neither peach_forest nor glimmering_pools should ever generate underground — - // fall back to whatever a nearby surface reference sample would give instead. - if ((biome.is(PEACH_FOREST) || biome.is(GLIMMERING_POOLS)) && y <= this.undergroundGuardMaxQuartY) { - return resolveSurfaceFallback(x, z, sampler, this.peachForestSurfaceFallbackCache, PEACH_FOREST, GLIMMERING_POOLS); - } - - return biome; - } - - private static boolean allowedBelowSeaLevel(Holder biome) { - return biome.is(MOLEWORM_CAVES) || biome.is(ELYTHIA_LUSH_CAVES) - || biome.is(ELYTHIA_OCEAN) || biome.is(ELYTHIA_CORAL_SPIKES); - } - - private static boolean isOceanBiome(Holder biome) { - return biome.is(ELYTHIA_OCEAN) || biome.is(ELYTHIA_CORAL_SPIKES); - } - - private static boolean isOuranwoodBiome(Holder biome) { - // peach_forest is deliberately excluded here: letting glimmering_pools carve - // into it fragments its own (already modest) territory into tiny patches. - return biome.is(OURANWOOD_FOREST) || biome.is(SPARSE_OURANWOOD_FOREST) - || biome.is(FUNGAL_OURANWOOD_FOREST); - } - - private static boolean isGlimmeringPoolsCandidate(Holder biome, Climate.TargetPoint target, int x, int z) { - if (!isOuranwoodBiome(biome)) { - return false; - } - - long humidity = target.humidity(); - long continentalness = target.continentalness(); - long weirdness = target.weirdness(); - long depth = target.depth(); - - if (humidity < Climate.quantizeCoord(0.64F) || humidity > Climate.quantizeCoord(1.0F)) { - return false; - } - if (continentalness < Climate.quantizeCoord(0.29F) || continentalness > Climate.quantizeCoord(0.90F)) { - return false; - } - if (weirdness < Climate.quantizeCoord(-0.88F) || weirdness > Climate.quantizeCoord(0.33F)) { - return false; - } - if (depth < Climate.quantizeCoord(0.0F) || depth > Climate.quantizeCoord(0.80F)) { - return false; - } - - long cellX = Math.floorDiv(x, 11); - long cellZ = Math.floorDiv(z, 11); - long gate = Math.floorMod(cellX * 73428767L + cellZ * 912931L, 5L); - return gate <= 3L; - } - - private static boolean isCloudSeaColumn(int x, int z) { - long cellX = Math.floorDiv(x, CLOUD_SEA_CELL_SIZE); - long cellZ = Math.floorDiv(z, CLOUD_SEA_CELL_SIZE); - long gate = Math.floorMod(cellX * 668265263L + cellZ * 2246822519L, CLOUD_SEA_CHANCE_DENOMINATOR); - return gate == 0L; - } - - private static boolean isSparseOuranwoodCandidate(Climate.TargetPoint target, int x, int z) { - if (target.temperature() > Climate.quantizeCoord(0.24F)) { - return false; - } - if (target.humidity() > Climate.quantizeCoord(0.70F)) { - return false; - } - if (target.continentalness() < Climate.quantizeCoord(0.90F)) { - return false; - } - if (target.erosion() > Climate.quantizeCoord(-0.22F)) { - return false; - } - if (target.weirdness() < Climate.quantizeCoord(0.92F)) { - return false; - } - - long cellX = Math.floorDiv(x, 24); - long cellZ = Math.floorDiv(z, 24); - long gate = Math.floorMod(cellX * 1103515245L + cellZ * 2147483647L, 12L); - return gate == 0L; - } - - @SafeVarargs - private Holder resolveSurfaceFallback(int x, int z, Climate.Sampler sampler, ThreadLocal cacheHolder, ResourceKey... excluded) { - ColumnBiomeCache cache = cacheHolder.get(); - long key = packColumnKey(x, z); - if (cache.key == key) { - return cache.value; - } - - Holder result = this.delegate.getNoiseBiome(x, this.surfaceBiomeSampleQuartY, z, sampler); - if (isExcluded(result, excluded)) { - for (int sampleBlockY : SURFACE_FALLBACK_BLOCK_YS) { - Holder candidate = this.delegate.getNoiseBiome(x, QuartPos.fromBlock(sampleBlockY), z, sampler); - if (!isExcluded(candidate, excluded)) { - result = candidate; - break; - } - } - } - - cache.key = key; - cache.value = result; - return result; - } - - private Holder resolveLandFallback(int x, int z, Climate.Sampler sampler) { - ColumnBiomeCache cache = this.landFallbackCache.get(); - long key = packColumnKey(x, z); - if (cache.key == key) { - return cache.value; - } - - Holder result = this.delegate.getNoiseBiome(x, this.surfaceBiomeSampleQuartY, z, sampler); - if (isOceanOrCave(result)) { - Holder resolved = null; - for (int sampleBlockY : SURFACE_FALLBACK_BLOCK_YS) { - Holder candidate = this.delegate.getNoiseBiome(x, QuartPos.fromBlock(sampleBlockY), z, sampler); - if (!isOceanOrCave(candidate)) { - resolved = candidate; - break; - } - } - result = resolved != null ? resolved : (defaultLandHolder != null ? defaultLandHolder : result); - } - - cache.key = key; - cache.value = result; - return result; - } - - @SafeVarargs - private static boolean isExcluded(Holder biome, ResourceKey... excluded) { - for (ResourceKey key : excluded) { - if (biome.is(key)) return true; - } - return false; - } - - private static boolean isOceanOrCave(Holder biome) { - return isOceanBiome(biome) || biome.is(ELYTHIA_BEACH) - || biome.is(MOLEWORM_CAVES) || biome.is(ELYTHIA_LUSH_CAVES) - || biome.is(GLIMMERING_POOLS) || biome.is(CLOUD_SEA); - } - - @Override - public void addDebugInfo(java.util.List debug, net.minecraft.core.BlockPos pos, Climate.Sampler sampler) { - try { - this.delegate.addDebugInfo(debug, pos, sampler); - } catch (NullPointerException ignored) { - } - debug.add("Elythia mole cave cap: y<=" + this.molewormCavesMaxY); - debug.add("Elythia sea level: " + this.seaLevel); - debug.add("Elythia cloud sea: y>=" + this.cloudSeaMinY + " in ~1/" + CLOUD_SEA_CHANCE_DENOMINATOR + " columns"); + return this.delegate.getNoiseBiome(x, y, z, sampler); } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaCloudFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaCloudFeature.java index 276021ad..18c59645 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaCloudFeature.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaCloudFeature.java @@ -10,10 +10,6 @@ import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -/** - * Scatters solid puffs of {@link AntarchyObjects#CLOUD_BLOCK} sized and shaped - * anywhere from thin wispy veils to large, dense masses, with a softly feathered edge. - */ public final class ElythiaCloudFeature extends Feature { public ElythiaCloudFeature(Codec codec) { super(codec); @@ -76,9 +72,6 @@ public final class ElythiaCloudFeature extends Feature int yRange = Math.max(1, radiusY); int zRange = Math.max(1, radiusZ); BlockState cloud = AntarchyObjects.CLOUD_BLOCK.get().defaultBlockState(); - // Clouds are solid puffs, not hollow shells — only the outer rind is feathered for a - // soft, ragged edge. Wispy clouds get a lower edge-fill chance so they read as thin - // and sparse without turning the whole body into visible holes. float edgeFillChance = size == CloudSize.WISPY ? 0.55F : 0.85F; double edgeStart = 0.7D; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaFloraFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaFloraFeature.java index bb81c3ed..e9c10a3a 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaFloraFeature.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaFloraFeature.java @@ -20,6 +20,8 @@ import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import java.util.HashMap; +import java.util.Map; public class ElythiaFloraFeature extends Feature { private static final String SIZEABLE_FOLIAGE_MODID = "sizeable_foliage"; @@ -38,6 +40,8 @@ public class ElythiaFloraFeature extends Feature { WorldGenLevel level = context.level(); RandomSource random = context.random(); BlockPos origin = context.origin(); + Map surfaceHeightCache = new HashMap<>(); + Map oceanFloorHeightCache = new HashMap<>(); int attempts = switch (this.variant) { case FOREST -> 185; case MEADOW -> 95; @@ -68,7 +72,7 @@ public class ElythiaFloraFeature extends Feature { case FLOWER_FOREST_MILKWEED -> 0.0F; }; if (random.nextFloat() < torchflowerChance) { - placedAny |= this.placeTorchflowerPatch(level, origin, random); + placedAny |= this.placeTorchflowerPatch(level, origin, random, surfaceHeightCache); } } @@ -79,7 +83,7 @@ public class ElythiaFloraFeature extends Feature { case FOREST -> 0.05F; case FLOWER_FOREST_MILKWEED -> 0.0F; }) { - placedAny |= this.placePitcherPatch(level, origin, random); + placedAny |= this.placePitcherPatch(level, origin, random, surfaceHeightCache); } if (random.nextFloat() < switch (this.variant) { case MEADOW -> 0.16F; @@ -88,7 +92,7 @@ public class ElythiaFloraFeature extends Feature { case FOREST -> 0.06F; case FLOWER_FOREST_MILKWEED -> 0.18F; }) { - placedAny |= this.placeMilkweedPatch(level, origin, random, AntarchyObjects.ORANGE_MILKWEED.get()); + placedAny |= this.placeMilkweedPatch(level, origin, random, AntarchyObjects.ORANGE_MILKWEED.get(), surfaceHeightCache); } if (random.nextFloat() < switch (this.variant) { case MEADOW -> 0.16F; @@ -97,20 +101,20 @@ public class ElythiaFloraFeature extends Feature { case FOREST -> 0.06F; case FLOWER_FOREST_MILKWEED -> 0.18F; }) { - placedAny |= this.placeMilkweedPatch(level, origin, random, AntarchyObjects.PINK_MILKWEED.get()); + placedAny |= this.placeMilkweedPatch(level, origin, random, AntarchyObjects.PINK_MILKWEED.get(), surfaceHeightCache); } if (this.variant == Variant.PEACH_FOREST && random.nextFloat() < 0.14F) { - placedAny |= this.placeMilkweedPatch(level, origin, random, antarchyBlock(CAMELLIA_ID)); + placedAny |= this.placeMilkweedPatch(level, origin, random, antarchyBlock(CAMELLIA_ID), surfaceHeightCache); } if (this.variant == Variant.FOREST || this.variant == Variant.PEACH_FOREST) { - placedAny |= this.placeBigBushes(level, origin, random, radius); + placedAny |= this.placeBigBushes(level, origin, random, radius, surfaceHeightCache); } for (int i = 0; i < attempts; i++) { int x = origin.getX() + random.nextInt(radius * 2 + 1) - radius; int z = origin.getZ() + random.nextInt(radius * 2 + 1) - radius; - int y = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, x, z); + int y = cachedHeight(level, Heightmap.Types.WORLD_SURFACE_WG, x, z, surfaceHeightCache); BlockPos plantPos = new BlockPos(x, y, z); BlockPos groundPos = plantPos.below(); @@ -125,7 +129,7 @@ public class ElythiaFloraFeature extends Feature { } } - placedAny |= this.placeSeagrass(level, origin, random, radius); + placedAny |= this.placeSeagrass(level, origin, random, radius, oceanFloorHeightCache); return placedAny; } @@ -227,7 +231,7 @@ public class ElythiaFloraFeature extends Feature { return block; } - private boolean placeBigBushes(WorldGenLevel level, BlockPos origin, RandomSource random, int radius) { + private boolean placeBigBushes(WorldGenLevel level, BlockPos origin, RandomSource random, int radius, Map surfaceHeightCache) { Block bushBlock = BuiltInRegistries.BLOCK.get(new ResourceLocation(SIZEABLE_FOLIAGE_MODID, "big_bush")); if (!(bushBlock instanceof BigBushBlock)) { return false; @@ -241,7 +245,7 @@ public class ElythiaFloraFeature extends Feature { for (int i = 0; i < bushAttempts; i++) { int x = origin.getX() + random.nextInt(radius * 2 + 1) - radius; int z = origin.getZ() + random.nextInt(radius * 2 + 1) - radius; - int y = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, x, z); + int y = cachedHeight(level, Heightmap.Types.WORLD_SURFACE_WG, x, z, surfaceHeightCache); BlockPos plantPos = new BlockPos(x, y, z); if (!isValidPlantSpot(level, plantPos, plantPos.below())) { @@ -333,8 +337,8 @@ public class ElythiaFloraFeature extends Feature { return true; } - private boolean placeTorchflowerPatch(WorldGenLevel level, BlockPos origin, RandomSource random) { - BlockPos patchCenter = sampleSurface(level, origin, random, this.variant == Variant.FOREST ? 8 : 12); + private boolean placeTorchflowerPatch(WorldGenLevel level, BlockPos origin, RandomSource random, Map surfaceHeightCache) { + BlockPos patchCenter = sampleSurface(level, origin, random, this.variant == Variant.FOREST ? 8 : 12, surfaceHeightCache); if (patchCenter == null) { return false; } @@ -346,7 +350,7 @@ public class ElythiaFloraFeature extends Feature { boolean bushEligible = this.variant == Variant.FOREST || this.variant == Variant.MEADOW; boolean placed = false; for (int i = 0; i < plants; i++) { - BlockPos plantPos = samplePatchPos(level, patchCenter, radius, random); + BlockPos plantPos = samplePatchPos(level, patchCenter, radius, random, surfaceHeightCache); if (plantPos == null) { continue; } @@ -369,8 +373,8 @@ public class ElythiaFloraFeature extends Feature { return placed; } - private boolean placePitcherPatch(WorldGenLevel level, BlockPos origin, RandomSource random) { - BlockPos patchCenter = sampleSurface(level, origin, random, this.variant == Variant.FOREST ? 8 : 13); + private boolean placePitcherPatch(WorldGenLevel level, BlockPos origin, RandomSource random, Map surfaceHeightCache) { + BlockPos patchCenter = sampleSurface(level, origin, random, this.variant == Variant.FOREST ? 8 : 13, surfaceHeightCache); if (patchCenter == null) { return false; } @@ -379,7 +383,7 @@ public class ElythiaFloraFeature extends Feature { int plants = this.variant == Variant.BUTTERFLY_FIELDS ? 10 + random.nextInt(12) : this.variant == Variant.FLOWER_FOREST_MILKWEED ? 2 + random.nextInt(3) : 5 + random.nextInt(11); boolean placed = false; for (int i = 0; i < plants; i++) { - BlockPos plantPos = samplePatchPos(level, patchCenter, radius, random); + BlockPos plantPos = samplePatchPos(level, patchCenter, radius, random, surfaceHeightCache); if (plantPos == null) { continue; } @@ -396,8 +400,8 @@ public class ElythiaFloraFeature extends Feature { return placed; } - private boolean placeMilkweedPatch(WorldGenLevel level, BlockPos origin, RandomSource random, Block flower) { - BlockPos patchCenter = sampleSurface(level, origin, random, this.variant == Variant.FOREST ? 8 : 13); + private boolean placeMilkweedPatch(WorldGenLevel level, BlockPos origin, RandomSource random, Block flower, Map surfaceHeightCache) { + BlockPos patchCenter = sampleSurface(level, origin, random, this.variant == Variant.FOREST ? 8 : 13, surfaceHeightCache); if (patchCenter == null) { return false; } @@ -406,7 +410,7 @@ public class ElythiaFloraFeature extends Feature { int plants = this.variant == Variant.BUTTERFLY_FIELDS ? 14 + random.nextInt(16) : this.variant == Variant.FLOWER_FOREST_MILKWEED ? 2 + random.nextInt(4) : 4 + random.nextInt(9); boolean placed = false; for (int i = 0; i < plants; i++) { - BlockPos plantPos = samplePatchPos(level, patchCenter, radius, random); + BlockPos plantPos = samplePatchPos(level, patchCenter, radius, random, surfaceHeightCache); if (plantPos == null) { continue; } @@ -423,7 +427,7 @@ public class ElythiaFloraFeature extends Feature { return placed; } - private boolean placeSeagrass(WorldGenLevel level, BlockPos origin, RandomSource random, int radius) { + private boolean placeSeagrass(WorldGenLevel level, BlockPos origin, RandomSource random, int radius, Map oceanFloorHeightCache) { int attempts = switch (this.variant) { case FOREST -> 3; case MEADOW -> 5; @@ -436,7 +440,7 @@ public class ElythiaFloraFeature extends Feature { for (int i = 0; i < attempts; i++) { int x = origin.getX() + random.nextInt(radius * 2 + 1) - radius; int z = origin.getZ() + random.nextInt(radius * 2 + 1) - radius; - int y = level.getHeight(Heightmap.Types.OCEAN_FLOOR_WG, x, z); + int y = cachedHeight(level, Heightmap.Types.OCEAN_FLOOR_WG, x, z, oceanFloorHeightCache); BlockPos seagrassPos = new BlockPos(x, y, z); BlockPos floorPos = seagrassPos.below(); @@ -455,11 +459,11 @@ public class ElythiaFloraFeature extends Feature { return placed; } - private static BlockPos sampleSurface(WorldGenLevel level, BlockPos origin, RandomSource random, int radius) { + private static BlockPos sampleSurface(WorldGenLevel level, BlockPos origin, RandomSource random, int radius, Map surfaceHeightCache) { for (int attempt = 0; attempt < 8; attempt++) { int x = origin.getX() + random.nextInt(radius * 2 + 1) - radius; int z = origin.getZ() + random.nextInt(radius * 2 + 1) - radius; - int y = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, x, z); + int y = cachedHeight(level, Heightmap.Types.WORLD_SURFACE_WG, x, z, surfaceHeightCache); BlockPos plantPos = new BlockPos(x, y, z); if (isValidPlantSpot(level, plantPos, plantPos.below())) { return plantPos; @@ -468,14 +472,25 @@ public class ElythiaFloraFeature extends Feature { return null; } - private static BlockPos samplePatchPos(WorldGenLevel level, BlockPos center, int radius, RandomSource random) { + private static BlockPos samplePatchPos(WorldGenLevel level, BlockPos center, int radius, RandomSource random, Map surfaceHeightCache) { int x = center.getX() + random.nextInt(radius * 2 + 1) - radius; int z = center.getZ() + random.nextInt(radius * 2 + 1) - radius; - int y = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, x, z); + int y = cachedHeight(level, Heightmap.Types.WORLD_SURFACE_WG, x, z, surfaceHeightCache); BlockPos plantPos = new BlockPos(x, y, z); return isOpenPlantSpot(level, plantPos) ? plantPos : null; } + private static int cachedHeight(WorldGenLevel level, Heightmap.Types type, int x, int z, Map cache) { + long key = ((long) x << 32) ^ (z & 0xFFFFFFFFL); + Integer cached = cache.get(key); + if (cached != null) { + return cached; + } + int height = level.getHeight(type, x, z); + cache.put(key, height); + return height; + } + private static void normalizePeachForestGround(WorldGenLevel level, BlockPos groundPos, Variant variant) { if (variant != Variant.PEACH_FOREST) { return; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaRiverCarveFunction.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaRiverCarveFunction.java index fea135ed..f5109e29 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaRiverCarveFunction.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaRiverCarveFunction.java @@ -1,43 +1,28 @@ package com.craisinlord.antarchy.content.worldgen.elythia; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.util.KeyDispatchDataCodec; import net.minecraft.world.level.levelgen.DensityFunction; -/** - * Custom density function that carves narrow river channels in Elythia. - * - * Logic: - * - Outside river-erosion territory (erosion <= EROSION_THRESHOLD): behaves identically - * to the original "-0.06 * erosion" term in elythia_surface.json. - * - Inside river-erosion territory (erosion > EROSION_THRESHOLD): additionally applies - * a strong negative carve when the ridges value is near 0, producing a narrow channel. - * The carve tapers quadratically from full depth at ridges=0 to zero at |ridges|=CHANNEL_HALF_WIDTH. - * - * Tuning: - * - EROSION_THRESHOLD: raise to make rivers rarer, lower to make them appear in more terrain - * - CHANNEL_HALF_WIDTH: controls channel width in blocks (wider noise band = wider river) - * - CHANNEL_DEPTH: controls how far below sea level the river floor sits - */ public record ElythiaRiverCarveFunction( DensityFunction erosion, DensityFunction ridges ) implements DensityFunction { - @SuppressWarnings("unchecked") - public static final KeyDispatchDataCodec KEY_CODEC = - (KeyDispatchDataCodec) (KeyDispatchDataCodec) KeyDispatchDataCodec.of(CODEC); + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> + instance.group( + DensityFunction.HOLDER_HELPER_CODEC.fieldOf("erosion").forGetter(ElythiaRiverCarveFunction::erosion), + DensityFunction.HOLDER_HELPER_CODEC.fieldOf("ridges").forGetter(ElythiaRiverCarveFunction::ridges) + ).apply(instance, ElythiaRiverCarveFunction::new) + ); + + public static final KeyDispatchDataCodec KEY_CODEC = + KeyDispatchDataCodec.of(CODEC); - // Erosion must exceed this for river carving to engage private static final double EROSION_THRESHOLD = 0.70; - // Half-width of the channel in ridges-space. Ridges ranges roughly -1 to 1 across - // the landscape; this controls the physical width of the carved channel. private static final double CHANNEL_HALF_WIDTH = 0.08; - // Maximum density reduction applied at the center of the channel. - // ~0.35 pushes the terrain floor roughly 25 blocks below its normal level, - // landing below sea level (63) so the channel fills with water naturally. private static final double CHANNEL_DEPTH = 0.35; - // Matches the original elythia_surface.json erosion multiplier so non-river areas are unchanged private static final double BASE_EROSION_FACTOR = -0.06; @Override diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FallenOuranwoodFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FallenOuranwoodFeature.java index 20d47475..77d464c8 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FallenOuranwoodFeature.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FallenOuranwoodFeature.java @@ -31,8 +31,8 @@ public class FallenOuranwoodFeature extends Feature { BlockPos origin = context.origin(); Direction.Axis axis = random.nextBoolean() ? Direction.Axis.X : Direction.Axis.Z; - int length = 36 + random.nextInt(44); // 36–79 blocks long - int outerRadius = 1 + random.nextInt(3); // 1–3 (cross-section up to 7-wide) + int length = 36 + random.nextInt(44); + int outerRadius = 1 + random.nextInt(3); boolean hollow = outerRadius >= 2; Block ouranwoodLog = BuiltInRegistries.BLOCK.getOptional( @@ -46,7 +46,6 @@ public class FallenOuranwoodFeature extends Feature { BlockState woodState = AntarchyObjects.MOSSY_OURANWOOD_WOOD.get().defaultBlockState() .setValue(RotatedPillarBlock.AXIS, Direction.Axis.Y); - // Pre-generate a smoothed damage profile along the length (0=solid, 1=gap) float[] damage = new float[length]; for (int i = 0; i < length; i++) damage[i] = random.nextFloat(); for (int pass = 0; pass < 4; pass++) { @@ -54,7 +53,6 @@ public class FallenOuranwoodFeature extends Feature { damage[i] = (damage[i - 1] + damage[i] * 2 + damage[i + 1]) / 4f; } } - // Bias upward so more sections are heavily damaged for (int i = 0; i < length; i++) damage[i] = damage[i] * damage[i]; int anchorY = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, origin.getX(), origin.getZ()); diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FlytrapPatchFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FlytrapPatchFeature.java new file mode 100644 index 00000000..d16a6f8a --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FlytrapPatchFeature.java @@ -0,0 +1,169 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.entity.FlytrapEntity; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.tags.BlockTags; +import net.minecraft.util.RandomSource; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; + +public final class FlytrapPatchFeature extends Feature { + private static final int PATCH_RADIUS = 5; + private static final double PATCH_RADIUS_SQR = 30.25D; + + public FlytrapPatchFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + int surfaceY = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, origin.getX(), origin.getZ()) - 1; + if (surfaceY <= level.getMinBuildHeight()) { + return false; + } + + BlockPos center = new BlockPos(origin.getX(), surfaceY, origin.getZ()); + if (!canUseSurface(level, center)) { + return false; + } + + ServerLevelAccessor serverLevel = level; + + FlytrapEntity flytrap = AntarchyObjects.FLYTRAP.get().create(serverLevel.getLevel()); + if (flytrap == null) { + return false; + } + + DifficultyInstance difficulty = serverLevel.getCurrentDifficultyAt(center); + flytrap.moveTo(center.getX() + 0.5D, center.getY() + 1.0D, center.getZ() + 0.5D, random.nextFloat() * 360.0F, 0.0F); + flytrap.finalizeSpawn(serverLevel, difficulty, MobSpawnType.CHUNK_GENERATION, null, null); + flytrap.setPersistenceRequired(); + + layPatch(level, center, random); + serverLevel.addFreshEntity(flytrap); + return true; + } + + private static boolean canUseSurface(WorldGenLevel level, BlockPos center) { + for (int dx = -1; dx <= 1; dx++) { + for (int dz = -1; dz <= 1; dz++) { + BlockPos surfacePos = center.offset(dx, 0, dz); + BlockState surfaceState = level.getBlockState(surfacePos); + BlockPos belowPos = surfacePos.below(); + BlockState belowState = level.getBlockState(belowPos); + + if (!isSurfaceCandidate(surfaceState)) { + return false; + } + + if (!belowState.isFaceSturdy(level, belowPos, Direction.UP)) { + return false; + } + + for (int y = 1; y <= 7; y++) { + BlockState aboveState = level.getBlockState(surfacePos.above(y)); + if (!aboveState.isAir() && !aboveState.canBeReplaced()) { + return false; + } + } + } + } + + return true; + } + + private static void layPatch(WorldGenLevel level, BlockPos center, RandomSource random) { + for (int dx = -PATCH_RADIUS; dx <= PATCH_RADIUS; dx++) { + for (int dz = -PATCH_RADIUS; dz <= PATCH_RADIUS; dz++) { + double distanceSqr = dx * dx + dz * dz; + if (distanceSqr > PATCH_RADIUS_SQR) { + continue; + } + + BlockPos surfacePos = center.offset(dx, 0, dz); + BlockState surfaceState = level.getBlockState(surfacePos); + if (!isPatchSurfaceCandidate(surfaceState)) { + continue; + } + + clearReplaceableColumn(level, surfacePos, 8); + + BlockState patchState = patchState(random, dx, dz, distanceSqr); + if (patchState != null) { + level.setBlock(surfacePos, patchState, 2); + } + } + } + } + + private static void clearReplaceableColumn(WorldGenLevel level, BlockPos surfacePos, int maxHeight) { + for (int y = 1; y <= maxHeight; y++) { + BlockPos abovePos = surfacePos.above(y); + BlockState aboveState = level.getBlockState(abovePos); + if (aboveState.canBeReplaced()) { + level.setBlock(abovePos, Blocks.AIR.defaultBlockState(), 2); + } + } + } + + private static BlockState patchState(RandomSource random, int dx, int dz, double distanceSqr) { + if (dx == 0 && dz == 0) { + return Blocks.MOSS_BLOCK.defaultBlockState(); + } + + double normalizedDistance = Math.sqrt(distanceSqr) / PATCH_RADIUS; + double mudChance = 1.0D - normalizedDistance * 0.82D; + if (mudChance <= 0.0D || random.nextDouble() > mudChance) { + return null; + } + + BlockState goo = AntarchyObjects.FLYTRAP_GOO_BLOCK.get().defaultBlockState(); + BlockState mud = Blocks.MUD.defaultBlockState(); + + if (normalizedDistance < 0.32D) { + float roll = random.nextFloat(); + if (roll < 0.45F) { + return Blocks.MOSS_BLOCK.defaultBlockState(); + } + return roll < 0.72F ? goo : mud; + } + + if (normalizedDistance < 0.58D) { + float roll = random.nextFloat(); + if (roll < 0.18F) { + return Blocks.MOSS_BLOCK.defaultBlockState(); + } + return roll < 0.44F ? goo : mud; + } + + return random.nextFloat() < 0.18F ? goo : mud; + } + + private static boolean isSurfaceCandidate(BlockState state) { + return state.is(BlockTags.DIRT) + || state.is(Blocks.GRASS_BLOCK) + || state.is(Blocks.MOSS_BLOCK) + || state.is(Blocks.ROOTED_DIRT) + || state.is(Blocks.COARSE_DIRT) + || state.canBeReplaced(); + } + + private static boolean isPatchSurfaceCandidate(BlockState state) { + return isSurfaceCandidate(state) + || state.is(Blocks.MUD); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FungalMushroomFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FungalMushroomFeature.java index a6da40dd..f0740df9 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FungalMushroomFeature.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FungalMushroomFeature.java @@ -39,7 +39,7 @@ public class FungalMushroomFeature extends Feature { double maxLean = 2.0 + random.nextDouble() * 3.5; int baseY = origin.getY(); - int stemOffset = stemSize == 2 ? 0 : -1; // center 3x3 on origin + int stemOffset = stemSize == 2 ? 0 : -1; BlockState stemPore = Blocks.MUSHROOM_STEM.defaultBlockState() .setValue(HugeMushroomBlock.NORTH, false) @@ -98,7 +98,6 @@ public class FungalMushroomFeature extends Feature { double nomRadius = baseCapRadius - cl; if (nomRadius < 0) break; - // The cap center also shifts slightly with lean for a drooping overhang feel double layerCapX = capCenterX + leanDX * cl * 0.3; double layerCapZ = capCenterZ + leanDZ * cl * 0.3; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/KingsTreeGridFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/KingsTreeGridFeature.java index 14643c93..8ccdea68 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/KingsTreeGridFeature.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/KingsTreeGridFeature.java @@ -1,10 +1,12 @@ package com.craisinlord.antarchy.content.worldgen.elythia; import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.entity.royal.KingEntity; import com.mojang.serialization.Codec; -import java.util.Optional; import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; import net.minecraft.util.Mth; import net.minecraft.util.RandomSource; import net.minecraft.world.level.ChunkPos; @@ -18,14 +20,29 @@ import net.minecraft.world.level.levelgen.structure.templatesystem.BlockIgnorePr import net.minecraft.world.level.levelgen.structure.templatesystem.StructurePlaceSettings; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplateManager; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; + +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; +import java.util.WeakHashMap; +import java.util.concurrent.ConcurrentLinkedQueue; -/** Places the authored King's Tree as independently generated chunk slices on a fixed world grid. */ public final class KingsTreeGridFeature extends Feature { - private static final int TREE_MIN_X = -191, TREE_MAX_X = 192; - private static final int TREE_MIN_Z = -227, TREE_MAX_Z = 227; - private static final int TREE_BOTTOM_Y = -22, TREE_TOP_Y = 335; + private static final Map> CLAIMED_TREE_KINGS = new WeakHashMap<>(); + private static final ConcurrentLinkedQueue PENDING_KING_SPAWNS = new ConcurrentLinkedQueue<>(); + private static final int TREE_MIN_X = -191; + private static final int TREE_MAX_X = 192; + private static final int TREE_MIN_Z = -227; + private static final int TREE_MAX_Z = 227; + private static final int TREE_BOTTOM_Y = -22; + private static final int TREE_TOP_Y = 335; - public KingsTreeGridFeature(Codec codec) { super(codec); } + public KingsTreeGridFeature(Codec codec) { + super(codec); + } @Override public boolean place(FeaturePlaceContext context) { @@ -33,40 +50,179 @@ public final class KingsTreeGridFeature extends Feature TREE_MAX_X - || relativeMaxZ < TREE_MIN_Z || relativeMinZ > TREE_MAX_Z) return false; - int minTileX = Math.floorDiv(relativeMinX, 16), maxTileX = Math.floorDiv(relativeMaxX, 16); - int minTileZ = Math.floorDiv(relativeMinZ, 16), maxTileZ = Math.floorDiv(relativeMaxZ, 16); - int surfaceY = context.chunkGenerator().getBaseHeight(centerX, centerZ, - Heightmap.Types.WORLD_SURFACE_WG, level, level.getLevel().getChunkSource().randomState()); + || relativeMaxZ < TREE_MIN_Z || relativeMinZ > TREE_MAX_Z) { + return false; + } + int minTileX = Math.floorDiv(relativeMinX, 16); + int maxTileX = Math.floorDiv(relativeMaxX, 16); + int minTileZ = Math.floorDiv(relativeMinZ, 16); + int maxTileZ = Math.floorDiv(relativeMaxZ, 16); + + int surfaceY = context.chunkGenerator().getBaseHeight( + centerX, + centerZ, + Heightmap.Types.WORLD_SURFACE_WG, + level, + level.getLevel().getChunkSource().randomState() + ); int minimumBaseY = level.getMinBuildHeight() - TREE_BOTTOM_Y; int maximumBaseY = level.getMaxBuildHeight() - 1 - TREE_TOP_Y; int baseY = Mth.clamp(surfaceY, minimumBaseY, maximumBaseY); BlockPos treeBottomOrigin = new BlockPos(0, baseY + TREE_BOTTOM_Y, 0); - BoundingBox chunkBounds = new BoundingBox(chunk.getMinBlockX(), level.getMinBuildHeight(), chunk.getMinBlockZ(), - chunk.getMaxBlockX(), level.getMaxBuildHeight() - 1, chunk.getMaxBlockZ()); - StructurePlaceSettings settings = new StructurePlaceSettings().setBoundingBox(chunkBounds) + + BoundingBox chunkBounds = new BoundingBox( + chunk.getMinBlockX(), + level.getMinBuildHeight(), + chunk.getMinBlockZ(), + chunk.getMaxBlockX(), + level.getMaxBuildHeight() - 1, + chunk.getMaxBlockZ() + ); + StructurePlaceSettings settings = new StructurePlaceSettings() + .setBoundingBox(chunkBounds) + .setKeepLiquids(false) .addProcessor(BlockIgnoreProcessor.STRUCTURE_BLOCK); StructureTemplateManager templates = level.getLevel().getStructureManager(); RandomSource random = context.random(); boolean placed = false; + boolean centralTilePlaced = false; + for (int tileX = minTileX; tileX <= maxTileX; tileX++) { for (int tileZ = minTileZ; tileZ <= maxTileZ; tileZ++) { Optional template = templates.get(tileLocation(tileX, tileZ)); - if (template.isEmpty()) continue; + if (template.isEmpty()) { + continue; + } BlockPos tileOrigin = treeBottomOrigin.offset(centerX + tileX * 16, 0, centerZ + tileZ * 16); - placed |= template.get().placeInWorld(level, tileOrigin, tileOrigin, settings, random, 2); + boolean tilePlaced = template.get().placeInWorld(level, tileOrigin, tileOrigin, settings, random, 2); + placed |= tilePlaced; + centralTilePlaced |= tileX == 0 && tileZ == 0 && tilePlaced; } } + if (centralTilePlaced) { + queueTreeKing(level.getLevel(), centerX, centerZ, baseY); + } return placed; } - private static ResourceLocation tileLocation(int tileX, int tileZ) { - return new ResourceLocation(Antarchy.MODID, "kings_tree_tiles/" + coordinateName(tileX) + "_" + coordinateName(tileZ)); + private static void queueTreeKing(ServerLevel serverLevel, int centerX, int centerZ, int baseY) { + long treeKey = ((long) centerX << 32) ^ (centerZ & 0xffffffffL); + synchronized (CLAIMED_TREE_KINGS) { + if (!CLAIMED_TREE_KINGS.computeIfAbsent(serverLevel, ignored -> new java.util.HashSet<>()).add(treeKey)) { + return; + } + } + PENDING_KING_SPAWNS.add(new PendingKingSpawn(serverLevel, centerX, centerZ, baseY)); } - private static String coordinateName(int coordinate) { return coordinate < 0 ? "m" + -coordinate : "p" + coordinate; } + public static void tickPendingSpawns(ServerLevel level) { + int pendingCount = PENDING_KING_SPAWNS.size(); + for (int index = 0; index < pendingCount; index++) { + PendingKingSpawn pending = PENDING_KING_SPAWNS.poll(); + if (pending == null) { + return; + } + if (pending.level() != level || !spawnTreeKing(pending)) { + PENDING_KING_SPAWNS.add(pending); + } + } + } + + private static boolean spawnTreeKing(PendingKingSpawn pending) { + ServerLevel serverLevel = pending.level(); + int centerX = pending.centerX(); + int centerZ = pending.centerZ(); + int baseY = pending.baseY(); + Vec3 treeCenter = new Vec3(centerX + 0.5D, 0.0D, centerZ + 0.5D); + AABB searchBox = new AABB( + centerX - 512.0D, serverLevel.getMinBuildHeight(), centerZ - 512.0D, + centerX + 512.0D, serverLevel.getMaxBuildHeight(), centerZ + 512.0D); + List treeKings = serverLevel.getEntitiesOfClass(KingEntity.class, searchBox, + king -> king.isAlive() && king.isTreePatrolFor(treeCenter)); + if (!treeKings.isEmpty()) { + for (int index = 1; index < treeKings.size(); index++) { + treeKings.get(index).discard(); + } + return true; + } + KingEntity king = AntarchyObjects.KING.get().create(serverLevel); + if (king == null) { + return true; + } + double minimumY = baseY + 24.0D; + double maximumY = baseY + 304.0D; + double spawnY = minimumY + (maximumY - minimumY) * 0.65D; + Vec3 spawn = findSafeKingSpawn(serverLevel, king, centerX, centerZ, spawnY); + if (spawn == null) { + return false; + } + king.moveTo(spawn.x, spawn.y, spawn.z, + (float) (Math.atan2(centerZ + 0.5D - spawn.z, centerX + 0.5D - spawn.x) + * 180.0D / Math.PI) - 90.0F, + 0.0F); + king.setTreePatrolHome(treeCenter, minimumY, maximumY, 0.0D); + king.setPersistenceRequired(); + serverLevel.addFreshEntity(king); + return true; + } + + private static Vec3 findSafeKingSpawn(ServerLevel level, KingEntity king, + int centerX, int centerZ, double spawnY) { + double[] radii = {96.0D, 80.0D, 64.0D}; + double[] heightOffsets = {0.0D, 18.0D, -12.0D, 32.0D}; + for (double radius : radii) { + for (int angleIndex = 0; angleIndex < 16; angleIndex++) { + double angle = angleIndex * Math.PI * 2.0D / 16.0D; + double x = centerX + 0.5D + Math.cos(angle) * radius; + double z = centerZ + 0.5D + Math.sin(angle) * radius; + for (double heightOffset : heightOffsets) { + Vec3 candidate = new Vec3(x, spawnY + heightOffset, z); + BlockPos blockPos = BlockPos.containing(candidate); + if (!areCollisionChunksLoaded(level, blockPos.offset(-8, -8, -8), blockPos.offset(8, 16, 8))) { + continue; + } + king.moveTo(candidate.x, candidate.y, candidate.z, 0.0F, 0.0F); + if (level.noCollision(king, king.getBoundingBox())) { + return candidate; + } + } + } + } + return null; + } + + private static boolean areCollisionChunksLoaded(ServerLevel level, BlockPos min, BlockPos max) { + var chunkSource = level.getChunkSource(); + for (int chunkX = min.getX() >> 4; chunkX <= max.getX() >> 4; chunkX++) { + for (int chunkZ = min.getZ() >> 4; chunkZ <= max.getZ() >> 4; chunkZ++) { + if (chunkSource.getChunkNow(chunkX, chunkZ) == null) { + return false; + } + } + } + return true; + } + + private record PendingKingSpawn(ServerLevel level, int centerX, int centerZ, int baseY) { + } + + private static ResourceLocation tileLocation(int tileX, int tileZ) { + return new ResourceLocation( + Antarchy.MODID, + "kings_tree_tiles/" + coordinateName(tileX) + "_" + coordinateName(tileZ) + ); + } + + private static String coordinateName(int coordinate) { + return coordinate < 0 ? "m" + -coordinate : "p" + coordinate; + } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/OuranwoodTreeFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/OuranwoodTreeFeature.java index 60942183..06550e46 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/OuranwoodTreeFeature.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/OuranwoodTreeFeature.java @@ -7,7 +7,12 @@ import com.craisinlord.antarchy.content.block.OuranwoodLeavesBlock; import com.craisinlord.antarchy.content.entity.flying_squirrel.FlyingSquirrelEntity; import com.mojang.serialization.Codec; import java.util.ArrayList; +import java.util.ArrayDeque; +import java.util.HashMap; +import java.util.LinkedHashSet; import java.util.List; +import java.util.Map; +import java.util.Set; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; @@ -30,6 +35,13 @@ import net.minecraft.world.level.block.state.properties.IntegerProperty; import org.jetbrains.annotations.Nullable; public class OuranwoodTreeFeature extends Feature { + private static final ThreadLocal ACTIVE_PLACEMENT = new ThreadLocal<>(); + + private static final class TreePlacement { + private final Set logPositions = new LinkedHashSet<>(); + private final Set leafPositions = new LinkedHashSet<>(); + } + public OuranwoodTreeFeature(Codec codec) { super(codec); } @@ -41,9 +53,12 @@ public class OuranwoodTreeFeature extends Feature { OuranwoodTreeConfiguration config = context.config(); RandomSource random = context.random(); - if (!canGrowOn(level, origin.below())) { - return false; - } + TreePlacement placement = new TreePlacement(); + ACTIVE_PLACEMENT.set(placement); + try { + if (!canGrowOn(level, origin.below())) { + return false; + } int height = config.height().sample(random); int trunkRadius = config.trunkRadius().sample(random); @@ -83,7 +98,10 @@ public class OuranwoodTreeFeature extends Feature { this.placeVinesAndGlowBerries(level, canopyCenter, config, random, canopyRadius, canopyDepth, height); this.placeFlyingSquirrelNest(level, origin, config, random, trunkRadius, height); this.placeCaterpillarChrysalis(level, origin, config, random, canopyCenter, canopyRadius, canopyDepth); - return true; + return true; + } finally { + ACTIVE_PLACEMENT.remove(); + } } protected BlockPos resolveCanopyCenter(BlockPos origin, int height, int canopyDepth) { @@ -555,8 +573,6 @@ public class OuranwoodTreeFeature extends Feature { return; } - // The tick is scheduled here on the WorldGenLevel because onPlace() is never - // called during world generation, so the block cannot self-schedule. int squirrelCount = 1 + random.nextInt(3); BlockPos markerPos = floorBlocks.get(0); setBlock(level, markerPos, AntarchyObjects.SQUIRREL_NEST_BLOCK.get().defaultBlockState() @@ -670,13 +686,8 @@ public class OuranwoodTreeFeature extends Feature { } protected void placeCaterpillarChrysalis(WorldGenLevel level, BlockPos origin, OuranwoodTreeConfiguration config, RandomSource random, BlockPos canopyCenter, int canopyRadius, int canopyDepth) { - // Tree-grown chrysalis placement is intentionally disabled for now. } - /** - * Finds a log or leaf block in the canopy that has sufficient clear space beneath it. - * {@code clearBelow} is the vertical depth to check; {@code clearRadius} is the XZ half-width (0 = 1x1, 1 = 3x3). - */ protected @Nullable BlockPos findCanopyAnchor(WorldGenLevel level, RandomSource random, BlockPos canopyCenter, int canopyRadius, int canopyDepth, int clearBelow, int clearRadius, int attempts) { BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(); int r = Math.max(1, canopyRadius - 1); @@ -814,7 +825,6 @@ public class OuranwoodTreeFeature extends Feature { int worldX = origin.getX() + x; int worldZ = origin.getZ() + z; - // Raise soil to form a mound around the base (from adaptTerrain) int currentTopY = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, worldX, worldZ) - 1; int falloff = (int) Math.floor(Math.sqrt(distanceSq) / 2.1D); int desiredTopY = baseY - falloff + (distanceSq <= trunkRadiusSq ? 0 : random.nextInt(2)); @@ -1042,6 +1052,28 @@ public class OuranwoodTreeFeature extends Feature { } protected void pruneExposedTopLogs(WorldGenLevel level, BlockPos origin, BlockPos canopyCenter, OuranwoodTreeConfiguration config, RandomSource random, int trunkRadius, int canopyRadius, int canopyDepth, int height) { + TreePlacement placement = ACTIVE_PLACEMENT.get(); + if (placement != null) { + for (BlockPos pos : placement.logPositions) { + if (this.isWithinTrunkCore(origin, pos, trunkRadius, canopyCenter.getY())) { + continue; + } + BlockState state = level.getBlockState(pos); + if (!state.is(BlockTags.LOGS)) { + continue; + } + int leafNeighbors = this.countLeafNeighbors(level, pos); + int openFaces = this.countOpenFaces(level, pos); + boolean topExposed = level.getBlockState(pos.above()).isAir(); + boolean lowerCanopyStray = pos.getY() <= canopyCenter.getY() + && leafNeighbors >= 3 + && openFaces >= 2; + if ((topExposed && leafNeighbors >= 1) || lowerCanopyStray) { + this.setLeaf(level, pos, config, random); + } + } + return; + } int horizontalRadius = canopyRadius + 6; int minY = canopyCenter.getY() - Math.max(4, canopyDepth / 2 + 1); int maxY = origin.getY() + height + canopyDepth + 6; @@ -1075,6 +1107,23 @@ public class OuranwoodTreeFeature extends Feature { } protected void coverExposedBranchSides(WorldGenLevel level, BlockPos origin, BlockPos canopyCenter, OuranwoodTreeConfiguration config, RandomSource random, int trunkRadius, int canopyRadius, int canopyDepth, int height) { + TreePlacement placement = ACTIVE_PLACEMENT.get(); + if (placement != null) { + for (BlockPos pos : placement.logPositions) { + if (!level.getBlockState(pos).is(BlockTags.LOGS) + || this.isWithinTrunkCore(origin, pos, trunkRadius, canopyCenter.getY()) + || this.countLeafNeighbors(level, pos) < 1) { + continue; + } + for (Direction direction : Direction.Plane.HORIZONTAL) { + BlockPos sidePos = pos.relative(direction); + if (level.getBlockState(sidePos).isAir() && this.canWrapBranchSide(level, pos, direction)) { + this.tryPlaceLeaf(level, sidePos, config, random); + } + } + } + return; + } int horizontalRadius = canopyRadius + 6; int minY = Math.max(origin.getY() + Math.max(4, height / 4), canopyCenter.getY() - canopyDepth - 3); int maxY = origin.getY() + height + canopyDepth + 4; @@ -1110,47 +1159,168 @@ public class OuranwoodTreeFeature extends Feature { } protected void updateLeafDistances(WorldGenLevel level, BlockPos origin, int height, int canopyRadius, int canopyDepth) { + TreePlacement placement = ACTIVE_PLACEMENT.get(); + if (placement != null) { + this.updateLeafDistances(level, placement.leafPositions); + return; + } int horizontalRadius = canopyRadius + 2; int minY = Math.max(level.getMinBuildHeight(), origin.getY() - 2); int maxY = Math.min(level.getMaxBuildHeight() - 1, origin.getY() + height + canopyDepth + 8); List leafPositions = new ArrayList<>(); + Map distances = new HashMap<>(); + ArrayDeque queue = new ArrayDeque<>(); BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(); for (int x = origin.getX() - horizontalRadius; x <= origin.getX() + horizontalRadius; x++) { for (int z = origin.getZ() - horizontalRadius; z <= origin.getZ() + horizontalRadius; z++) { for (int y = minY; y <= maxY; y++) { cursor.set(x, y, z); - if (level.getBlockState(cursor).getBlock() instanceof LeavesBlock) { - leafPositions.add(cursor.immutable()); + BlockState state = level.getBlockState(cursor); + if (state.getBlock() instanceof LeavesBlock && this.getLeafDistanceProperty(state) != null) { + BlockPos pos = cursor.immutable(); + leafPositions.add(pos); + distances.put(pos, this.getLeafDistanceLimit(state)); } } } } - for (int pass = 1; pass <= 16; pass++) { - boolean anyChanged = false; - for (BlockPos pos : leafPositions) { - BlockState state = level.getBlockState(pos); - IntegerProperty distanceProperty = this.getLeafDistanceProperty(state); - if (!(state.getBlock() instanceof LeavesBlock) || distanceProperty == null) { - continue; + for (BlockPos pos : leafPositions) { + BlockState state = level.getBlockState(pos); + int limit = this.getLeafDistanceLimit(state); + int bestDistance = limit; + for (Direction direction : Direction.values()) { + BlockPos neighborPos = pos.relative(direction); + BlockState neighbor = level.getBlockState(neighborPos); + if (neighbor.is(BlockTags.LOGS)) { + bestDistance = 1; + break; } - int computedDistance = this.computeLeafDistance(level, pos, state); - if (computedDistance == state.getValue(distanceProperty)) { - continue; + if (!distances.containsKey(neighborPos)) { + IntegerProperty neighborProperty = this.getLeafDistanceProperty(neighbor); + if (neighborProperty != null) { + bestDistance = Math.min(bestDistance, neighbor.getValue(neighborProperty) + 1); + } } - - BlockState updatedState; - if (state.getBlock() instanceof OuranwoodLeavesBlock) { - updatedState = OuranwoodLeavesBlock.setOuranwoodDistanceForWorldgen(state, computedDistance); - } else { - updatedState = state.setValue(distanceProperty, computedDistance); - } - setBlock(level, pos, updatedState); - anyChanged = true; } - if (!anyChanged) break; + if (bestDistance < distances.get(pos)) { + distances.put(pos, bestDistance); + queue.add(pos); + } + } + + while (!queue.isEmpty()) { + BlockPos pos = queue.removeFirst(); + int distance = distances.get(pos); + for (Direction direction : Direction.values()) { + BlockPos neighborPos = pos.relative(direction); + Integer neighborDistance = distances.get(neighborPos); + if (neighborDistance == null) { + continue; + } + + BlockState neighborState = level.getBlockState(neighborPos); + int candidate = Math.min(this.getLeafDistanceLimit(neighborState), distance + 1); + if (candidate < neighborDistance) { + distances.put(neighborPos, candidate); + queue.addLast(neighborPos); + } + } + } + + for (BlockPos pos : leafPositions) { + BlockState state = level.getBlockState(pos); + IntegerProperty distanceProperty = this.getLeafDistanceProperty(state); + if (distanceProperty == null) { + continue; + } + + int computedDistance = distances.get(pos); + if (computedDistance == state.getValue(distanceProperty)) { + continue; + } + + BlockState updatedState; + if (state.getBlock() instanceof OuranwoodLeavesBlock) { + updatedState = OuranwoodLeavesBlock.setOuranwoodDistanceForWorldgen(state, computedDistance); + } else { + updatedState = state.setValue(distanceProperty, computedDistance); + } + setBlock(level, pos, updatedState); + } + } + + private void updateLeafDistances(WorldGenLevel level, Set leafPositions) { + Map distances = new HashMap<>(); + ArrayDeque queue = new ArrayDeque<>(); + + for (BlockPos pos : leafPositions) { + BlockState state = level.getBlockState(pos); + IntegerProperty property = this.getLeafDistanceProperty(state); + if (property != null) { + distances.put(pos, this.getLeafDistanceLimit(state)); + } + } + + for (BlockPos pos : leafPositions) { + BlockState state = level.getBlockState(pos); + IntegerProperty property = this.getLeafDistanceProperty(state); + if (property == null) { + continue; + } + int bestDistance = this.getLeafDistanceLimit(state); + for (Direction direction : Direction.values()) { + BlockPos neighborPos = pos.relative(direction); + BlockState neighbor = level.getBlockState(neighborPos); + if (neighbor.is(BlockTags.LOGS)) { + bestDistance = 1; + break; + } + IntegerProperty neighborProperty = this.getLeafDistanceProperty(neighbor); + if (neighborProperty != null && !distances.containsKey(neighborPos)) { + bestDistance = Math.min(bestDistance, neighbor.getValue(neighborProperty) + 1); + } + } + if (bestDistance < distances.get(pos)) { + distances.put(pos, bestDistance); + queue.add(pos); + } + } + + while (!queue.isEmpty()) { + BlockPos pos = queue.removeFirst(); + int distance = distances.get(pos); + for (Direction direction : Direction.values()) { + BlockPos neighborPos = pos.relative(direction); + Integer neighborDistance = distances.get(neighborPos); + if (neighborDistance == null) { + continue; + } + BlockState neighborState = level.getBlockState(neighborPos); + int candidate = Math.min(this.getLeafDistanceLimit(neighborState), distance + 1); + if (candidate < neighborDistance) { + distances.put(neighborPos, candidate); + queue.addLast(neighborPos); + } + } + } + + for (BlockPos pos : leafPositions) { + BlockState state = level.getBlockState(pos); + IntegerProperty property = this.getLeafDistanceProperty(state); + if (property == null) { + continue; + } + int computedDistance = distances.get(pos); + if (computedDistance == state.getValue(property)) { + continue; + } + BlockState updatedState = state.getBlock() instanceof OuranwoodLeavesBlock + ? OuranwoodLeavesBlock.setOuranwoodDistanceForWorldgen(state, computedDistance) + : state.setValue(property, computedDistance); + setBlock(level, pos, updatedState); } } @@ -1484,6 +1654,15 @@ public class OuranwoodTreeFeature extends Feature { protected void setBlock(WorldGenLevel level, BlockPos pos, BlockState state) { if (canWriteAt(level, pos)) { setBlock((LevelWriter) level, pos, state); + TreePlacement placement = ACTIVE_PLACEMENT.get(); + if (placement != null) { + BlockPos immutablePos = pos.immutable(); + if (state.is(BlockTags.LOGS)) { + placement.logPositions.add(immutablePos); + } else if (state.is(BlockTags.LEAVES)) { + placement.leafPositions.add(immutablePos); + } + } } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachTreeFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachTreeFeature.java index 24ea1a0c..7086ec1e 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachTreeFeature.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachTreeFeature.java @@ -47,6 +47,15 @@ public class PeachTreeFeature extends Feature { } List trunkPath = buildTrunkPath(origin, height, random); + for (BlockPos trunkPos : trunkPath) { + for (int dx = 0; dx < trunkWidth; dx++) { + for (int dz = 0; dz < trunkWidth; dz++) { + if (!canReplace(level, trunkPos.offset(dx, 0, dz))) { + return false; + } + } + } + } Set logPositions = new LinkedHashSet<>(); Set leafPositions = new LinkedHashSet<>(); @@ -431,7 +440,7 @@ public class PeachTreeFeature extends Feature { private static boolean canReplace(WorldGenLevel level, BlockPos pos) { BlockState state = level.getBlockState(pos); - return state.isAir() || state.canBeReplaced() || state.getBlock() instanceof LeavesBlock; + return state.isAir() || state.getBlock() instanceof LeavesBlock; } private static Direction.Axis axisForSegment(BlockPos from, BlockPos to) { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/TriffidPatchFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/TriffidPatchFeature.java deleted file mode 100644 index 78903f73..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/TriffidPatchFeature.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.craisinlord.antarchy.content.worldgen.elythia; - -import com.craisinlord.antarchy.content.AntarchyObjects; -import com.craisinlord.antarchy.content.entity.TriffidEntity; -import com.mojang.serialization.Codec; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.tags.BlockTags; -import net.minecraft.util.RandomSource; -import net.minecraft.world.DifficultyInstance; -import net.minecraft.world.entity.MobSpawnType; -import net.minecraft.world.level.ServerLevelAccessor; -import net.minecraft.world.level.WorldGenLevel; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.Heightmap; -import net.minecraft.world.level.levelgen.feature.Feature; -import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; -import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; - -public final class TriffidPatchFeature extends Feature { - private static final int PATCH_RADIUS = 5; - private static final double PATCH_RADIUS_SQR = 30.25D; - - public TriffidPatchFeature(Codec codec) { - super(codec); - } - - @Override - public boolean place(FeaturePlaceContext context) { - WorldGenLevel level = context.level(); - RandomSource random = context.random(); - BlockPos origin = context.origin(); - int surfaceY = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, origin.getX(), origin.getZ()) - 1; - if (surfaceY <= level.getMinBuildHeight()) { - return false; - } - - BlockPos center = new BlockPos(origin.getX(), surfaceY, origin.getZ()); - if (!canUseSurface(level, center)) { - return false; - } - - ServerLevelAccessor serverLevel = level; - - TriffidEntity triffid = AntarchyObjects.TRIFFID.get().create(serverLevel.getLevel()); - if (triffid == null) { - return false; - } - - DifficultyInstance difficulty = serverLevel.getCurrentDifficultyAt(center); - triffid.moveTo(center.getX() + 0.5D, center.getY() + 1.0D, center.getZ() + 0.5D, random.nextFloat() * 360.0F, 0.0F); - triffid.finalizeSpawn(serverLevel, difficulty, MobSpawnType.CHUNK_GENERATION, null, null); - triffid.setPersistenceRequired(); - - layPatch(level, center, random); - serverLevel.addFreshEntity(triffid); - return true; - } - - private static boolean canUseSurface(WorldGenLevel level, BlockPos center) { - for (int dx = -1; dx <= 1; dx++) { - for (int dz = -1; dz <= 1; dz++) { - BlockPos surfacePos = center.offset(dx, 0, dz); - BlockState surfaceState = level.getBlockState(surfacePos); - BlockPos belowPos = surfacePos.below(); - BlockState belowState = level.getBlockState(belowPos); - - if (!isSurfaceCandidate(surfaceState)) { - return false; - } - - if (!belowState.isFaceSturdy(level, belowPos, Direction.UP)) { - return false; - } - - for (int y = 1; y <= 7; y++) { - BlockState aboveState = level.getBlockState(surfacePos.above(y)); - if (!aboveState.isAir() && !aboveState.canBeReplaced()) { - return false; - } - } - } - } - - return true; - } - - private static void layPatch(WorldGenLevel level, BlockPos center, RandomSource random) { - for (int dx = -PATCH_RADIUS; dx <= PATCH_RADIUS; dx++) { - for (int dz = -PATCH_RADIUS; dz <= PATCH_RADIUS; dz++) { - double distanceSqr = dx * dx + dz * dz; - if (distanceSqr > PATCH_RADIUS_SQR) { - continue; - } - - BlockPos surfacePos = center.offset(dx, 0, dz); - BlockState surfaceState = level.getBlockState(surfacePos); - if (!isPatchSurfaceCandidate(surfaceState)) { - continue; - } - - clearReplaceableColumn(level, surfacePos, 8); - - BlockState patchState = patchState(random, dx, dz, distanceSqr); - if (patchState != null) { - level.setBlock(surfacePos, patchState, 2); - } - } - } - } - - private static void clearReplaceableColumn(WorldGenLevel level, BlockPos surfacePos, int maxHeight) { - for (int y = 1; y <= maxHeight; y++) { - BlockPos abovePos = surfacePos.above(y); - BlockState aboveState = level.getBlockState(abovePos); - if (aboveState.canBeReplaced()) { - level.setBlock(abovePos, Blocks.AIR.defaultBlockState(), 2); - } - } - } - - private static BlockState patchState(RandomSource random, int dx, int dz, double distanceSqr) { - if (dx == 0 && dz == 0) { - return Blocks.MOSS_BLOCK.defaultBlockState(); - } - - double normalizedDistance = Math.sqrt(distanceSqr) / PATCH_RADIUS; - double mudChance = 1.0D - normalizedDistance * 0.82D; - if (mudChance <= 0.0D || random.nextDouble() > mudChance) { - return null; - } - - BlockState goo = AntarchyObjects.TRIFFID_GOO_BLOCK.get().defaultBlockState(); - BlockState mud = Blocks.MUD.defaultBlockState(); - - if (normalizedDistance < 0.32D) { - float roll = random.nextFloat(); - if (roll < 0.45F) { - return Blocks.MOSS_BLOCK.defaultBlockState(); - } - return roll < 0.72F ? goo : mud; - } - - if (normalizedDistance < 0.58D) { - float roll = random.nextFloat(); - if (roll < 0.18F) { - return Blocks.MOSS_BLOCK.defaultBlockState(); - } - return roll < 0.44F ? goo : mud; - } - - return random.nextFloat() < 0.18F ? goo : mud; - } - - private static boolean isSurfaceCandidate(BlockState state) { - return state.is(BlockTags.DIRT) - || state.is(Blocks.GRASS_BLOCK) - || state.is(Blocks.MOSS_BLOCK) - || state.is(Blocks.ROOTED_DIRT) - || state.is(Blocks.COARSE_DIRT) - || state.canBeReplaced(); - } - - private static boolean isPatchSurfaceCandidate(BlockState state) { - return isSurfaceCandidate(state) - || state.is(Blocks.MUD); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/royal/RoyalTreeFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/royal/RoyalTreeFeature.java index 37d9700c..8756d123 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/royal/RoyalTreeFeature.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/royal/RoyalTreeFeature.java @@ -17,6 +17,7 @@ import net.minecraft.util.Mth; import net.minecraft.util.RandomSource; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.LeavesBlock; +import net.minecraft.world.level.block.RotatedPillarBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; @@ -105,7 +106,7 @@ public class RoyalTreeFeature extends Feature { if (s % 2 == 0) { cursor = cursor.above(); } - placeLog(level, random, config, cursor, logs); + placeLog(level, random, config, cursor, logs, branchDir.getAxis()); } int padRadius = 2 + random.nextInt(3); placeCanopy(level, random, config, cursor.above(), padRadius, Math.max(2, padRadius - 1), 1, 0, leaves); @@ -188,10 +189,18 @@ public class RoyalTreeFeature extends Feature { } private void placeLog(WorldGenLevel level, RandomSource random, RoyalTreeConfiguration config, BlockPos pos, Set logs) { + placeLog(level, random, config, pos, logs, Direction.Axis.Y); + } + + private void placeLog(WorldGenLevel level, RandomSource random, RoyalTreeConfiguration config, BlockPos pos, Set logs, Direction.Axis axis) { if (!canReplace(level, pos)) { return; } - setBlock(level, pos, config.trunkProvider().getState(random, pos)); + BlockState state = config.trunkProvider().getState(random, pos); + if (state.hasProperty(RotatedPillarBlock.AXIS)) { + state = state.setValue(RotatedPillarBlock.AXIS, axis); + } + setBlock(level, pos, state); logs.add(pos.immutable()); } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/BedBugSurfaceClusterFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/BedBugSurfaceClusterFeature.java index dac5ce32..be7d83ab 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/BedBugSurfaceClusterFeature.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/BedBugSurfaceClusterFeature.java @@ -24,7 +24,7 @@ public final class BedBugSurfaceClusterFeature extends Feature codec) { super(codec); diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/DimensionalTearFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/DimensionalTearFeature.java index 2b2b86f8..67cf31d8 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/DimensionalTearFeature.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/DimensionalTearFeature.java @@ -1,10 +1,9 @@ package com.craisinlord.antarchy.content.worldgen.thoraxis; import com.craisinlord.antarchy.config.AntarchySettings; -import com.craisinlord.antarchy.content.entity.portal.DimensionalTearEntity; +import com.craisinlord.antarchy.content.AntarchyObjects; import com.mojang.serialization.Codec; import net.minecraft.core.BlockPos; -import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.WorldGenRegion; import net.minecraft.util.Mth; import net.minecraft.util.RandomSource; @@ -13,15 +12,10 @@ import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.Nullable; public final class DimensionalTearFeature extends Feature { - private static final int MIN_LINK_RANGE = 50; - private static final int MAX_LINK_RANGE = 500; private static final int LOCAL_SEARCH_ATTEMPTS = 18; - private static final int PARTNER_ORIGIN_ATTEMPTS = 12; - private static final int PARTNER_SEARCH_ATTEMPTS = 48; public DimensionalTearFeature(Codec codec) { super(codec); @@ -29,45 +23,25 @@ public final class DimensionalTearFeature extends Feature context) { + if (!AntarchySettings.dimensionalTearsSpawnNaturally()) { + return false; + } + WorldGenLevel level = context.level(); - ServerLevelAccessor serverLevelAccessor = level; + if (!(level instanceof ServerLevelAccessor)) { + return false; + } RandomSource random = context.random(); - BlockPos first = findOpenPocket(level, context.origin(), random, LOCAL_SEARCH_ATTEMPTS); - if (first == null) { + BlockPos anchor = findOpenPocket(level, context.origin(), random, LOCAL_SEARCH_ATTEMPTS); + if (anchor == null || !canAccess(level, anchor)) { return false; } - BlockPos second = null; - for (int i = 0; i < PARTNER_ORIGIN_ATTEMPTS && second == null; i++) { - second = findOpenPocket(level, linkedOrigin(first, random), random, PARTNER_SEARCH_ATTEMPTS); - } - if (second == null) { - return false; - } - - ServerLevel serverLevel = serverLevelAccessor.getLevel(); - int lifetime = Math.max(1200, AntarchySettings.dimensionalTearLifetimeTicks()); - float yawA = random.nextFloat() * 360.0F; - float yawB = Mth.wrapDegrees(yawA + 140.0F + random.nextFloat() * 80.0F); - DimensionalTearEntity tearA = DimensionalTearEntity.create(serverLevel, center(first), yawA, lifetime); - DimensionalTearEntity tearB = DimensionalTearEntity.create(serverLevel, center(second), yawB, lifetime); - tearA.linkTo(tearB); - tearB.linkTo(tearA); - serverLevel.addFreshEntity(tearA); - serverLevel.addFreshEntity(tearB); + level.setBlock(anchor, AntarchyObjects.DIMENSIONAL_TEAR_MARKER.get().defaultBlockState(), 2); return true; } - private static BlockPos linkedOrigin(BlockPos first, RandomSource random) { - double angle = random.nextDouble() * Math.PI * 2.0D; - int distance = Mth.nextInt(random, MIN_LINK_RANGE, MAX_LINK_RANGE); - int dx = Mth.floor(Math.cos(angle) * distance); - int dz = Mth.floor(Math.sin(angle) * distance); - int dy = Mth.nextInt(random, -36, 36); - return first.offset(dx, dy, dz); - } - @Nullable private static BlockPos findOpenPocket(WorldGenLevel level, BlockPos origin, RandomSource random, int attempts) { int minY = level.getMinBuildHeight() + 8; @@ -103,8 +77,4 @@ public final class DimensionalTearFeature extends Feature maxCeilingY + 3) { continue; } @@ -113,7 +116,7 @@ public final class LucidAntiwaterPoolFeature extends Feature { private final ResourceLocation blockId; private final Direction direction; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/QueenHavocTrailFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/QueenHavocTrailFeature.java index 411c6ce2..dfd685a9 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/QueenHavocTrailFeature.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/QueenHavocTrailFeature.java @@ -15,7 +15,6 @@ import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -/** Generates the deterministic underside Queen trail and its one-shot spawn marker. */ public final class QueenHavocTrailFeature extends Feature { private static final ResourceLocation DREAM_SAND = id("dream_sand"); private static final ResourceLocation DREAM_SANDSTONE = id("dream_sandstone"); diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/QueenTrailGrid.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/QueenTrailGrid.java index dff89cac..83af312e 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/QueenTrailGrid.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/QueenTrailGrid.java @@ -2,9 +2,8 @@ package com.craisinlord.antarchy.content.worldgen.thoraxis; import net.minecraft.util.RandomSource; -/** Shared deterministic layout used by Queen trail generation and locatequeen. */ public final class QueenTrailGrid { - public static final int SPACING = 1_536; + public static final int SPACING = 1_500; private static final int JITTER_MARGIN = 256; private QueenTrailGrid() {} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisAntiwaterPoolFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisAntiwaterPoolFeature.java deleted file mode 100644 index 84d06dda..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisAntiwaterPoolFeature.java +++ /dev/null @@ -1,268 +0,0 @@ -package com.craisinlord.antarchy.content.worldgen.thoraxis; - -import com.craisinlord.antarchy.content.AntarchyObjects; -import com.mojang.serialization.Codec; -import net.minecraft.core.BlockPos; -import net.minecraft.util.Mth; -import net.minecraft.util.RandomSource; -import net.minecraft.world.level.WorldGenLevel; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.LiquidBlock; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.feature.Feature; -import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; -import net.minecraft.world.level.material.FluidState; - -public final class ThoraxisAntiwaterPoolFeature extends Feature { - private static final int MIN_CAVITY_HEIGHT = 8; - private static final int MAX_CAVITY_HEIGHT = 40; - - public ThoraxisAntiwaterPoolFeature(Codec codec) { - super(codec); - } - - @Override - public boolean place(FeaturePlaceContext context) { - WorldGenLevel level = context.level(); - BlockPos origin = context.origin(); - RandomSource random = context.random(); - ThoraxisAntiwaterPoolConfiguration config = context.config(); - - int radius = randomBetween(random, config.minRadius(), config.maxRadius()); - int depth = randomBetween(random, config.minDepth(), config.maxDepth()); - BlockState antiwaterSourceState = config.state().getState(random, origin); - BlockState nyxiteState = AntarchyObjects.NYXITE.get().defaultBlockState(); - - int pools = randomBetween(random, 1, Math.max(1, 1 + depth / 8)); - boolean placedAny = false; - - for (int i = 0; i < pools; i++) { - int offsetX = random.nextInt(radius * 2 + 1) - radius; - int offsetZ = random.nextInt(radius * 2 + 1) - radius; - int centerX = origin.getX() + offsetX; - int centerZ = origin.getZ() + offsetZ; - - int floorY = findFloorY(level, centerX, centerZ); - if (floorY <= level.getMinBuildHeight()) { - continue; - } - - int ceilingY = findCeilingY(level, centerX, centerZ, floorY); - if (ceilingY <= floorY + MIN_CAVITY_HEIGHT || ceilingY - floorY > MAX_CAVITY_HEIGHT) { - continue; - } - - int poolRadius = randomBetween(random, Math.max(2, radius / 6), Math.max(3, radius / 4 + 1)); - int ventCount = randomBetween(random, 0, Math.max(1, depth / 4)); - placedAny |= placeSparsePool(level, random, centerX, centerZ, floorY, ceilingY, poolRadius, ventCount, antiwaterSourceState, nyxiteState); - } - - return placedAny; - } - - private boolean placeSparsePool( - WorldGenLevel level, - RandomSource random, - int centerX, - int centerZ, - int floorY, - int ceilingY, - int poolRadius, - int ventCount, - BlockState antiwaterSourceState, - BlockState nyxiteState - ) { - boolean placedAny = false; - int ceilingBandY = ceilingY - 1; - int sourceY = floorY + 1; - - placedAny |= placeNyxiteBase(level, random, centerX, floorY, centerZ, poolRadius, nyxiteState); - placedAny |= seedAntiwaterVent(level, sourceY, centerX, centerZ, antiwaterSourceState); - - for (int i = 0; i < ventCount; i++) { - int ventX = centerX + random.nextInt(poolRadius * 2 + 1) - poolRadius; - int ventZ = centerZ + random.nextInt(poolRadius * 2 + 1) - poolRadius; - int distance = Math.abs(ventX - centerX) + Math.abs(ventZ - centerZ); - if (distance > poolRadius + random.nextInt(2)) { - continue; - } - - placedAny |= placeNyxiteBase(level, random, ventX, floorY, ventZ, Math.max(1, poolRadius - 1), nyxiteState); - placedAny |= seedAntiwaterVent(level, sourceY, ventX, ventZ, antiwaterSourceState); - placedAny |= seedCeilingPocket(level, random, ventX, ventZ, ceilingBandY, Math.max(1, poolRadius - 1), antiwaterSourceState); - placedAny |= seedStem(level, ventX, ventZ, floorY, ceilingBandY, antiwaterSourceState); - } - - return placedAny; - } - - private static boolean placeNyxiteBase(WorldGenLevel level, RandomSource random, int centerX, int floorY, int centerZ, int radius, BlockState nyxiteState) { - boolean placedAny = false; - BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); - - for (int dx = -radius; dx <= radius; dx++) { - for (int dz = -radius; dz <= radius; dz++) { - double distance = Math.sqrt(dx * dx + dz * dz); - if (distance > radius + random.nextDouble()) { - continue; - } - - double density = 1.0D - (distance / Math.max(1.0D, radius)); - double chance = Mth.clamp(0.18D + density * 0.45D, 0.0D, 0.78D); - if (random.nextDouble() > chance) { - continue; - } - - mutable.set(centerX + dx, floorY, centerZ + dz); - BlockState existing = level.getBlockState(mutable); - if (existing.is(Blocks.BEDROCK) || existing.blocksMotion()) { - continue; - } - - level.setBlock(mutable, nyxiteState, 2); - placedAny = true; - } - } - - return placedAny; - } - - private static boolean seedAntiwaterVent(WorldGenLevel level, int y, int x, int z, BlockState antiwaterSourceState) { - BlockPos pos = new BlockPos(x, y, z); - BlockState state = level.getBlockState(pos); - FluidState fluidState = state.getFluidState(); - if (state.is(Blocks.BEDROCK) || state.blocksMotion() || !fluidState.isEmpty()) { - return false; - } - - level.setBlock(pos, antiwaterSourceState, 2); - scheduleFluidTick(level, pos, antiwaterSourceState); - return true; - } - - private static boolean seedCeilingPocket(WorldGenLevel level, RandomSource random, int centerX, int centerZ, int ceilingBandY, int radius, BlockState antiwaterSourceState) { - boolean placedAny = false; - BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); - BlockState flowingAntiwater = flowingAntiwaterState(antiwaterSourceState, Math.max(1, Math.min(7, 6 + random.nextInt(2)))); - - for (int dx = -radius; dx <= radius; dx++) { - for (int dz = -radius; dz <= radius; dz++) { - double distance = Math.sqrt(dx * dx + dz * dz); - if (distance > radius + random.nextDouble() * 0.5D) { - continue; - } - - double density = 1.0D - (distance / Math.max(1.0D, radius)); - double chance = Mth.clamp(0.22D + density * 0.52D, 0.0D, 0.84D); - if (random.nextDouble() > chance) { - continue; - } - - mutable.set(centerX + dx, ceilingBandY, centerZ + dz); - BlockState existing = level.getBlockState(mutable); - FluidState fluidState = existing.getFluidState(); - if (existing.is(Blocks.BEDROCK) || existing.blocksMotion() || !fluidState.isEmpty()) { - continue; - } - - level.setBlock(mutable, flowingAntiwater, 2); - scheduleFluidTick(level, mutable, flowingAntiwater); - placedAny = true; - } - } - - return placedAny; - } - - private static boolean seedStem(WorldGenLevel level, int x, int z, int floorY, int ceilingBandY, BlockState antiwaterSourceState) { - boolean placedAny = false; - int stemHeight = Math.max(2, Math.min(ceilingBandY - floorY - 1, 5)); - for (int i = 1; i <= stemHeight; i++) { - int y = floorY + i; - if (y >= ceilingBandY) { - break; - } - - BlockPos pos = new BlockPos(x, y, z); - BlockState state = level.getBlockState(pos); - if (state.is(Blocks.BEDROCK) || state.blocksMotion()) { - break; - } - - BlockState stemState = i == 1 ? antiwaterSourceState : flowingAntiwaterState(antiwaterSourceState, Math.max(1, 8 - i)); - level.setBlock(pos, stemState, 2); - scheduleFluidTick(level, pos, stemState); - placedAny = true; - } - - return placedAny; - } - - private static BlockState flowingAntiwaterState(BlockState sourceState, int level) { - if (!sourceState.hasProperty(LiquidBlock.LEVEL)) { - return sourceState; - } - - int clamped = Mth.clamp(level, 1, 7); - return sourceState.setValue(LiquidBlock.LEVEL, clamped); - } - - private static void scheduleFluidTick(WorldGenLevel level, BlockPos pos, BlockState state) { - FluidState fluidState = state.getFluidState(); - if (!fluidState.isEmpty()) { - level.scheduleTick(pos, fluidState.getType(), fluidState.getType().getTickDelay(level)); - } - } - - private static int findFloorY(WorldGenLevel level, int x, int z) { - BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); - int floorY = Integer.MIN_VALUE; - - for (int y = level.getMinBuildHeight() + 1; y < level.getMaxBuildHeight() - 1; y++) { - mutable.set(x, y, z); - BlockState state = level.getBlockState(mutable); - if (!isSolidSurface(state)) { - continue; - } - - mutable.set(x, y + 1, z); - if (isOpenBlock(level.getBlockState(mutable))) { - floorY = y; - } - } - - return floorY; - } - - private static int findCeilingY(WorldGenLevel level, int x, int z, int floorY) { - BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); - for (int y = floorY + 2; y < level.getMaxBuildHeight() - 1; y++) { - mutable.set(x, y, z); - BlockState state = level.getBlockState(mutable); - if (!isSolidSurface(state)) { - continue; - } - - mutable.set(x, y - 1, z); - if (isOpenBlock(level.getBlockState(mutable))) { - return y; - } - } - - return Integer.MIN_VALUE; - } - - private static boolean isSolidSurface(BlockState state) { - return !state.isAir() && state.blocksMotion() && state.getFluidState().isEmpty(); - } - - private static boolean isOpenBlock(BlockState state) { - return state.isAir(); - } - - private static int randomBetween(RandomSource random, int minInclusive, int maxInclusive) { - int min = Math.min(minInclusive, maxInclusive); - int max = Math.max(minInclusive, maxInclusive); - return min >= max ? min : min + random.nextInt(max - min + 1); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisBiomeSource.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisBiomeSource.java index aea535b8..c3dcb9c4 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisBiomeSource.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisBiomeSource.java @@ -2,8 +2,10 @@ package com.craisinlord.antarchy.content.worldgen.thoraxis; import com.craisinlord.antarchy.Antarchy; import com.mojang.serialization.Codec; +import com.mojang.serialization.DataResult; import com.mojang.serialization.codecs.RecordCodecBuilder; import it.unimi.dsi.fastutil.longs.Long2DoubleOpenHashMap; +import java.util.List; import java.util.stream.Stream; import net.minecraft.core.BlockPos; import net.minecraft.core.Holder; @@ -17,17 +19,14 @@ import net.minecraft.world.level.biome.Climate; import net.minecraft.world.level.biome.MultiNoiseBiomeSource; public final class ThoraxisBiomeSource extends BiomeSource { - public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( - MultiNoiseBiomeSource.DIRECT_CODEC.forGetter(ThoraxisBiomeSource::parameters), - Codec.INT.optionalFieldOf("dream_dunes_max_y", 160).forGetter(ThoraxisBiomeSource::dreamDunesMaxY), - Codec.INT.optionalFieldOf("umbral_hills_max_y", 160).forGetter(ThoraxisBiomeSource::umbralHillsMaxY), - Codec.INT.optionalFieldOf("lucid_pools_min_y", 116).forGetter(ThoraxisBiomeSource::lucidPoolsMinY) - ).apply(instance, ThoraxisBiomeSource::new)); private static final int REGION_NOISE_SCALE = 96; private static final int REGION_DETAIL_SCALE = 41; private static final int VERTICAL_NOISE_SCALE = 8; private static final double DUNES_SELECTOR_CUTOFF = 0.38D; - private static final double HILLS_SELECTOR_CUTOFF = 0.24D; + private static final double DREAM_DUNES_SELECTOR_CUTOFF = 0.42D; + private static final double HILLS_SELECTOR_CUTOFF = 0.33D; + private static final double NADIR_FOREST_SELECTOR_MIN = 0.54D; + private static final double NADIR_FOREST_SELECTOR_MAX = 0.56D; private static final ResourceKey NIGHTMARE_WASTES = ResourceKey.create( Registries.BIOME, new ResourceLocation(Antarchy.MODID, "nightmare_wastes") @@ -36,6 +35,10 @@ public final class ThoraxisBiomeSource extends BiomeSource { Registries.BIOME, new ResourceLocation(Antarchy.MODID, "dream_dunes") ); + private static final ResourceKey VORTEX_EXPANSE = ResourceKey.create( + Registries.BIOME, + new ResourceLocation(Antarchy.MODID, "vortex_expanse") + ); private static final ResourceKey UMBRAL_HILLS = ResourceKey.create( Registries.BIOME, new ResourceLocation(Antarchy.MODID, "umbral_hills") @@ -44,35 +47,57 @@ public final class ThoraxisBiomeSource extends BiomeSource { Registries.BIOME, new ResourceLocation(Antarchy.MODID, "lucid_pools") ); + private static final ResourceKey NADIR_FOREST = ResourceKey.create( + Registries.BIOME, + new ResourceLocation(Antarchy.MODID, "nadir_forest") + ); + + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + MultiNoiseBiomeSource.DIRECT_CODEC.forGetter(ThoraxisBiomeSource::parameters), + Codec.INT.optionalFieldOf("dream_dunes_max_y", 160).forGetter(ThoraxisBiomeSource::dreamDunesMaxY), + Codec.INT.optionalFieldOf("umbral_hills_max_y", 160).forGetter(ThoraxisBiomeSource::umbralHillsMaxY), + Codec.INT.optionalFieldOf("lucid_pools_min_y", 116).forGetter(ThoraxisBiomeSource::lucidPoolsMinY), + Codec.INT.optionalFieldOf("nadir_forest_min_y", 128).forGetter(ThoraxisBiomeSource::nadirForestMinY), + RegionalBiomeOverlay.CODEC.listOf().optionalFieldOf("regional_overlays", List.of()).forGetter(ThoraxisBiomeSource::regionalOverlays) + ).apply(instance, ThoraxisBiomeSource::new)); private final Climate.ParameterList> parameters; private final MultiNoiseBiomeSource delegate; private final int dreamDunesMaxY; private final int umbralHillsMaxY; private final int lucidPoolsMinY; + private final int nadirForestMinY; + private final List regionalOverlays; private final int dreamDunesMaxQuartY; private final int umbralHillsMaxQuartY; private final int lucidPoolsMinQuartY; + private final int nadirForestMinQuartY; private volatile boolean biomesResolved; private Holder nightmareWastesBiome; private Holder dreamDunesBiome; + private Holder vortexExpanseBiome; private Holder umbralHillsBiome; private Holder lucidPoolsBiome; + private Holder nadirForestBiome; + private List resolvedRegionalOverlays = List.of(); private static final ThreadLocal REGION_CACHE = ThreadLocal.withInitial(() -> new Long2DoubleOpenHashMap(512)); private static final ThreadLocal VERTICAL_CACHE = ThreadLocal.withInitial(() -> new Long2DoubleOpenHashMap(64)); - public ThoraxisBiomeSource(Climate.ParameterList> parameters, int dreamDunesMaxY, int umbralHillsMaxY, int lucidPoolsMinY) { + public ThoraxisBiomeSource(Climate.ParameterList> parameters, int dreamDunesMaxY, int umbralHillsMaxY, int lucidPoolsMinY, int nadirForestMinY, List regionalOverlays) { this.parameters = parameters; this.delegate = MultiNoiseBiomeSource.createFromList(parameters); this.dreamDunesMaxY = dreamDunesMaxY; this.umbralHillsMaxY = umbralHillsMaxY; this.lucidPoolsMinY = lucidPoolsMinY; + this.nadirForestMinY = nadirForestMinY; + this.regionalOverlays = regionalOverlays; this.dreamDunesMaxQuartY = QuartPos.fromBlock(dreamDunesMaxY); this.umbralHillsMaxQuartY = QuartPos.fromBlock(umbralHillsMaxY); this.lucidPoolsMinQuartY = QuartPos.fromBlock(lucidPoolsMinY); + this.nadirForestMinQuartY = QuartPos.fromBlock(nadirForestMinY); } private void resolveBiomesIfNeeded() { @@ -85,8 +110,11 @@ public final class ThoraxisBiomeSource extends BiomeSource { } this.nightmareWastesBiome = this.findBiome(NIGHTMARE_WASTES); this.dreamDunesBiome = this.findBiome(DREAM_DUNES); + this.vortexExpanseBiome = this.findBiome(VORTEX_EXPANSE); this.umbralHillsBiome = this.findBiome(UMBRAL_HILLS); this.lucidPoolsBiome = this.findBiome(LUCID_POOLS); + this.nadirForestBiome = this.findBiome(NADIR_FOREST); + this.resolvedRegionalOverlays = this.resolveRegionalOverlays(); this.biomesResolved = true; } } @@ -99,6 +127,10 @@ public final class ThoraxisBiomeSource extends BiomeSource { return this.lucidPoolsMinY; } + private int nadirForestMinY() { + return this.nadirForestMinY; + } + private int dreamDunesMaxY() { return this.dreamDunesMaxY; } @@ -107,8 +139,12 @@ public final class ThoraxisBiomeSource extends BiomeSource { return this.umbralHillsMaxY; } + private List regionalOverlays() { + return this.regionalOverlays; + } + @Override - protected com.mojang.serialization.Codec codec() { + protected Codec codec() { return CODEC; } @@ -120,23 +156,45 @@ public final class ThoraxisBiomeSource extends BiomeSource { @Override public Holder getNoiseBiome(int x, int y, int z, Climate.Sampler sampler) { this.resolveBiomesIfNeeded(); - if (y >= this.lucidPoolsMinQuartY && this.lucidPoolsBiome != null) { - return this.lucidPoolsBiome; + if (y < 0 && this.dreamDunesBiome != null) { + return this.dreamDunesBiome; } double region = cachedRegionNoise(x, z); double vertical = cachedVerticalNoise(y); double dreamDunesSelector = region * 0.65D + (1.0D - vertical) * 0.35D; double umbralHillsSelector = region * 0.55D + vertical * 0.45D; + double nadirForestSelector = region * 0.78D + vertical * 0.22D; - if (this.dreamDunesBiome != null && y <= this.dreamDunesMaxQuartY && dreamDunesSelector <= DUNES_SELECTOR_CUTOFF) { + if (this.nadirForestBiome != null + && y >= this.nadirForestMinQuartY + && nadirForestSelector >= NADIR_FOREST_SELECTOR_MIN + && nadirForestSelector <= NADIR_FOREST_SELECTOR_MAX) { + return this.nadirForestBiome; + } + + if (y >= this.lucidPoolsMinQuartY && this.lucidPoolsBiome != null) { + return this.lucidPoolsBiome; + } + + if (this.dreamDunesBiome != null && y <= this.dreamDunesMaxQuartY && dreamDunesSelector <= DREAM_DUNES_SELECTOR_CUTOFF) { return this.dreamDunesBiome; } + if (this.vortexExpanseBiome != null && dreamDunesSelector <= DUNES_SELECTOR_CUTOFF) { + return this.vortexExpanseBiome; + } + if (this.umbralHillsBiome != null && y <= this.umbralHillsMaxQuartY && umbralHillsSelector <= HILLS_SELECTOR_CUTOFF) { return this.umbralHillsBiome; } + for (ResolvedRegionalBiomeOverlay overlay : this.resolvedRegionalOverlays) { + if (region >= overlay.minNoise() && region < overlay.maxNoise()) { + return overlay.biome(); + } + } + Holder delegateBiome = this.delegate.getNoiseBiome(x, y, z, sampler); return this.nightmareWastesBiome != null ? this.nightmareWastesBiome : delegateBiome; } @@ -146,6 +204,7 @@ public final class ThoraxisBiomeSource extends BiomeSource { this.delegate.addDebugInfo(debug, pos, sampler); debug.add("Thoraxis selector: mixed vertical/region noise"); debug.add("Thoraxis Lucid Pools: y>=" + this.lucidPoolsMinY); + debug.add("Thoraxis Nadir Forest: y>=" + this.nadirForestMinY); } private Holder findBiome(ResourceKey key) { @@ -155,6 +214,37 @@ public final class ThoraxisBiomeSource extends BiomeSource { .orElse(null); } + private Holder findBiome(ResourceLocation location) { + ResourceKey key = ResourceKey.create(Registries.BIOME, location); + return this.findBiome(key); + } + + private List resolveRegionalOverlays() { + return this.regionalOverlays.stream().map(overlay -> { + Holder biome = this.findBiome(overlay.biome()); + if (biome == null) { + throw new IllegalStateException("Thoraxis regional overlay biome " + overlay.biome() + " must be listed in the biome source parameters"); + } + return new ResolvedRegionalBiomeOverlay(biome, overlay.minNoise(), overlay.maxNoise()); + }).toList(); + } + + private record RegionalBiomeOverlay(ResourceLocation biome, double minNoise, double maxNoise) { + private static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + ResourceLocation.CODEC.fieldOf("biome").forGetter(RegionalBiomeOverlay::biome), + Codec.DOUBLE.fieldOf("min_noise").forGetter(RegionalBiomeOverlay::minNoise), + Codec.DOUBLE.fieldOf("max_noise").forGetter(RegionalBiomeOverlay::maxNoise) + ).apply(instance, RegionalBiomeOverlay::new)).flatXmap( + overlay -> overlay.minNoise() >= 0.0D && overlay.maxNoise() <= 1.0D && overlay.minNoise() < overlay.maxNoise() + ? DataResult.success(overlay) + : DataResult.error(() -> "Regional biome overlay noise bounds must satisfy 0 <= min_noise < max_noise <= 1"), + DataResult::success + ); + } + + private record ResolvedRegionalBiomeOverlay(Holder biome, double minNoise, double maxNoise) { + } + private double cachedRegionNoise(int quartX, int quartZ) { long key = net.minecraft.world.level.ChunkPos.asLong(quartX, quartZ); Long2DoubleOpenHashMap cache = REGION_CACHE.get(); diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisBloodCrystalFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisBloodCrystalFeature.java index c90352b6..7ff837a5 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisBloodCrystalFeature.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisBloodCrystalFeature.java @@ -18,6 +18,8 @@ import java.util.ArrayList; import java.util.List; public final class ThoraxisBloodCrystalFeature extends Feature { + private static final int SURFACE_SEARCH_RANGE = 32; + public ThoraxisBloodCrystalFeature(Codec codec) { super(codec); } @@ -199,7 +201,8 @@ public final class ThoraxisBloodCrystalFeature extends Feature level.getMinBuildHeight(); y--) { + int minY = Math.max(level.getMinBuildHeight() + 1, startY - SURFACE_SEARCH_RANGE); + for (int y = startY; y > minY; y--) { BlockPos pos = new BlockPos(x, y, z); BlockState state = level.getBlockState(pos); if (state.isAir() || state.canBeReplaced() || !state.getFluidState().isEmpty()) { @@ -219,7 +222,8 @@ public final class ThoraxisBloodCrystalFeature extends Feature= max ? min : min + random.nextInt(max - min + 1); } } - diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisIchorLakeFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisIchorLakeFeature.java index 8f19a75a..4df2d14a 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisIchorLakeFeature.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisIchorLakeFeature.java @@ -11,10 +11,6 @@ import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -/** - * Fills the low, open main-side Thoraxis basin with source ichor during chunk generation. - * The feature works one chunk at a time so it does not depend on runtime fluid spreading. - */ public final class ThoraxisIchorLakeFeature extends Feature { private static final int LAKE_FLOOR_Y = 1; private static final int LAKE_SURFACE_Y = 8; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisTransitionThroatConfiguration.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisTransitionThroatConfiguration.java new file mode 100644 index 00000000..6df71bb8 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisTransitionThroatConfiguration.java @@ -0,0 +1,11 @@ +package com.craisinlord.antarchy.content.worldgen.thoraxis; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration; + +public record ThoraxisTransitionThroatConfiguration(boolean large) implements FeatureConfiguration { + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + Codec.BOOL.fieldOf("large").forGetter(ThoraxisTransitionThroatConfiguration::large) + ).apply(instance, ThoraxisTransitionThroatConfiguration::new)); +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisTransitionThroatFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisTransitionThroatFeature.java index 1b2a8f95..3756d4ee 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisTransitionThroatFeature.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisTransitionThroatFeature.java @@ -6,44 +6,69 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; -import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -/** Carves the vertical transition throat between the upper world and Thoraxis underside. */ -public final class ThoraxisTransitionThroatFeature extends Feature { - public ThoraxisTransitionThroatFeature() { super(NoneFeatureConfiguration.CODEC); } +public final class ThoraxisTransitionThroatFeature extends Feature { + public ThoraxisTransitionThroatFeature() { + super(ThoraxisTransitionThroatConfiguration.CODEC); + } @Override - public boolean place(FeaturePlaceContext context) { + public boolean place(FeaturePlaceContext context) { WorldGenLevel level = context.level(); BlockPos origin = context.origin(); + boolean large = context.config().large(); + int searchRadius = large ? 18 : 9; + double baseRadius = large ? 10.0D : 5.0D; + double radiusVariance = large ? 5.0D : 2.5D; + double layerOffsetScale = large ? 4.0D : 2.0D; + BlockPos center = new BlockPos(origin.getX(), ThoraxisUndersideManager.GRAVITY_FLIP_Y, origin.getZ()); int upperSurface = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, center.getX(), center.getZ()) - 1; int undersideSurface = findUndersideSurface(level, center); - if (upperSurface < ThoraxisUndersideManager.GRAVITY_FLIP_Y || undersideSurface < level.getMinBuildHeight()) return false; + if (upperSurface < ThoraxisUndersideManager.GRAVITY_FLIP_Y || undersideSurface < level.getMinBuildHeight()) { + return false; + } + long seed = context.random().nextLong(); for (int y = undersideSurface; y <= upperSurface; y++) { - int layerX = noise(seed, Math.floorDiv(y, 5), 17) * 2; - int layerZ = noise(seed, Math.floorDiv(y, 5), 31) * 2; - double radiusX = 3.5D + noise01(seed, Math.floorDiv(y, 11), 43) * 2.0D; - double radiusZ = 3.5D + noise01(seed, Math.floorDiv(y, 13), 59) * 2.0D; - for (int x = -7; x <= 7; x++) for (int z = -7; z <= 7; z++) { - double dx = x - layerX, dz = z - layerZ; - double distance = Math.sqrt((dx * dx) / (radiusX * radiusX) + (dz * dz) / (radiusZ * radiusZ)); - if (distance <= 0.72D + noise01(seed, x * 3 + Math.floorDiv(y, 3), z * 3 + 71) * 0.42D) - level.setBlock(center.offset(x, y, z), Blocks.AIR.defaultBlockState(), 2); + int layerOffsetX = (int) (noise(seed, Math.floorDiv(y, 5), 17) * layerOffsetScale); + int layerOffsetZ = (int) (noise(seed, Math.floorDiv(y, 5), 31) * layerOffsetScale); + double radiusX = baseRadius + noise01(seed, Math.floorDiv(y, 11), 43) * radiusVariance; + double radiusZ = baseRadius + noise01(seed, Math.floorDiv(y, 13), 59) * radiusVariance; + + for (int x = -searchRadius; x <= searchRadius; x++) { + for (int z = -searchRadius; z <= searchRadius; z++) { + double dx = x - layerOffsetX; + double dz = z - layerOffsetZ; + double distance = Math.sqrt((dx * dx) / (radiusX * radiusX) + (dz * dz) / (radiusZ * radiusZ)); + double edgeNoise = noise01(seed, x * 3 + Math.floorDiv(y, 3), z * 3 + 71); + if (distance <= 0.72D + edgeNoise * 0.42D) { + level.setBlock(center.offset(x, y, z), Blocks.AIR.defaultBlockState(), 2); + } + } } } + return true; } private static int findUndersideSurface(WorldGenLevel level, BlockPos center) { int minY = level.getMinBuildHeight(); int firstSolid = Integer.MIN_VALUE; - for (int y = ThoraxisUndersideManager.GRAVITY_FLIP_Y - 1; y >= minY; y--) - if (!level.getBlockState(center.atY(y)).isAir()) { firstSolid = y; break; } - if (firstSolid == Integer.MIN_VALUE) return minY; + for (int y = ThoraxisUndersideManager.GRAVITY_FLIP_Y - 1; y >= minY; y--) { + if (!level.getBlockState(center.atY(y)).isAir()) { + firstSolid = y; + break; + } + } + if (firstSolid == Integer.MIN_VALUE) { + return minY; + } + int y = firstSolid; - while (y > minY && !level.getBlockState(center.atY(y - 1)).isAir()) y--; + while (y > minY && !level.getBlockState(center.atY(y - 1)).isAir()) { + y--; + } return y; } @@ -57,5 +82,7 @@ public final class ThoraxisTransitionThroatFeature extends Feature>> 11) * 0x1.0p-53; } - private static int noise(long seed, int x, int z) { return noise01(seed, x, z) < 0.5D ? -1 : 1; } + private static int noise(long seed, int x, int z) { + return noise01(seed, x, z) < 0.5D ? -1 : 1; + } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisUndersideManager.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisUndersideManager.java index 03668c2b..573fce66 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisUndersideManager.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisUndersideManager.java @@ -2,10 +2,11 @@ package com.craisinlord.antarchy.content.worldgen.thoraxis; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.AntarchyObjects; -import com.craisinlord.antarchy.content.block.DreamSandBlock; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityTransition; +import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.antarchy.content.advancement.AntarchyAdvancementTriggers; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; +import com.craisinlord.anthology.gravity.GravityTransition; import java.util.Collections; import java.util.IdentityHashMap; import java.util.Map; @@ -14,22 +15,27 @@ import java.util.WeakHashMap; import java.util.UUID; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.ServerLevelAccessor; import net.minecraft.world.level.Level; +import net.minecraft.world.level.NaturalSpawner; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; public final class ThoraxisUndersideManager { public static final int GRAVITY_FLIP_Y = 0; - private static final ResourceLocation THORAXIS_DIMENSION = new ResourceLocation(Antarchy.MODID, "thoraxis"); - private static final AntarchyGravityTransition TRANSITION = new AntarchyGravityTransition(12); + private static final net.minecraft.resources.ResourceLocation THORAXIS_DIMENSION = new net.minecraft.resources.ResourceLocation(Antarchy.MODID, "thoraxis"); + private static final GravityTransition TRANSITION = new GravityTransition(12); + private static final GravityTransition THROAT_TRANSITION = new GravityTransition(12); private static final int EFFECT_DURATION_TICKS = 50; private static final int EFFECT_REFRESH_THRESHOLD_TICKS = 10; private static final int DISCOVERY_INTERVAL_TICKS = 5; @@ -40,6 +46,16 @@ public final class ThoraxisUndersideManager { private static final int ENTER_UNDERSIDE_Y = GRAVITY_FLIP_Y - 4; private static final int EXIT_UNDERSIDE_Y = GRAVITY_FLIP_Y + 4; private static final int FLIP_COOLDOWN_TICKS = 40; + private static final int CROSSING_TIMEOUT_TICKS = 100; + private static final int SETTLE_TIMEOUT_TICKS = 70; + private static final double MIN_CROSSING_SPEED = 0.48D; + private static final double MIN_ENTRY_CROSSING_SPEED = 0.02D; + private static final int RECENT_UNDERSIDE_WINDOW_TICKS = 40; + private static final int UNDERSIDE_ENTRY_BORDER_Y = GRAVITY_FLIP_Y - 7; + private static final int FRESH_ENTRY_DELAY_TICKS = 20; + private static final int ENTRY_SLOW_FALL_DURATION_TICKS = 300; + private static final double CEILING_SPAWN_GAP = 1.75D; + private static final double SHORT_CEILING_SPAWN_GAP = 1.25D; private static final Map STATES = new WeakHashMap<>(); private ThoraxisUndersideManager() { @@ -59,6 +75,7 @@ public final class ThoraxisUndersideManager { long startNanos = System.nanoTime(); long now = level.getGameTime(); + tickPlayerTransitions(level, tracking, now); int discoveredLiving = 0; int discoveredItems = 0; if (now % DISCOVERY_INTERVAL_TICKS == 0L) { @@ -71,17 +88,23 @@ public final class ThoraxisUndersideManager { int refreshedLiving = 0; int flippedItems = 0; int restoredItems = 0; + Set evicted = Collections.newSetFromMap(new IdentityHashMap<>()); for (Entity entity : tracking.entities) { if (!entity.isAlive() || entity.isSpectator()) { continue; } if (entity instanceof LivingEntity living) { + if (living instanceof Player) { + continue; + } boolean hasEffect = living.hasEffect(AntarchyObjects.INVERTED_EFFECT.get()); int threshold = hasEffect ? EXIT_UNDERSIDE_Y : ENTER_UNDERSIDE_Y; if (living.getY() < threshold) { refreshInvertedEffect(living); refreshedLiving++; + } else if (!hasEffect) { + evicted.add(entity); } continue; } @@ -95,8 +118,8 @@ public final class ThoraxisUndersideManager { boolean shouldInvert = tracked ? entity.getY() < EXIT_UNDERSIDE_Y : entity.getY() < ENTER_UNDERSIDE_Y; if (shouldInvert) { - boolean needsFlip = AntarchyGravityApi.getGravityDirection(entity) != AntarchyGravityDirection.UP - || !AntarchyGravityApi.isGravityForced(entity); + boolean needsFlip = GravityApi.getGravityDirection(entity) != GravityDirection.UP + || !GravityApi.isGravityForced(entity); tracking.forcedItems.add(entity); if (needsFlip && (flipsRemaining <= 0 || !flipReady(tracking, uuid, now))) { continue; @@ -104,30 +127,34 @@ public final class ThoraxisUndersideManager { if (needsFlip) { flipsRemaining--; tracking.lastFlipTick.put(uuid, now); - AntarchyGravityApi.setForcedGravityDirection(entity, AntarchyGravityDirection.UP, TRANSITION); + GravityApi.setForcedGravityDirection(entity, GravityDirection.UP, TRANSITION); flippedItems++; } continue; } if (tracked) { - boolean isForcedUp = AntarchyGravityApi.getGravityDirection(entity) == AntarchyGravityDirection.UP - && AntarchyGravityApi.isGravityForced(entity); + boolean isForcedUp = GravityApi.getGravityDirection(entity) == GravityDirection.UP + && GravityApi.isGravityForced(entity); if (isForcedUp && !flipReady(tracking, uuid, now)) { continue; } tracking.forcedItems.remove(entity); if (isForcedUp) { tracking.lastFlipTick.put(uuid, now); - AntarchyGravityApi.setGravityDirection(entity, AntarchyGravityDirection.DOWN, false, TRANSITION); + GravityApi.setGravityDirection(entity, GravityDirection.DOWN, false, TRANSITION); restoredItems++; } + evicted.add(entity); } } + tracking.entities.removeAll(evicted); + tracking.forcedItems.removeAll(evicted); tracking.entities.removeIf(entity -> !entity.isAlive() || entity.isRemoved()); tracking.forcedItems.removeIf(entity -> !entity.isAlive() || entity.isRemoved()); tracking.lastFlipTick.entrySet().removeIf(entry -> now - entry.getValue() > FLIP_COOLDOWN_TICKS * 4L); + tracking.lastUndersideExitTick.entrySet().removeIf(entry -> now - entry.getValue() > RECENT_UNDERSIDE_WINDOW_TICKS * 4L); double elapsedMs = (System.nanoTime() - startNanos) / 1_000_000.0D; if (elapsedMs >= SLOW_TICK_WARN_MS && now - tracking.lastDiagnosticTick >= DIAGNOSTIC_INTERVAL_TICKS) { @@ -144,6 +171,8 @@ public final class ThoraxisUndersideManager { private final Set entities = Collections.newSetFromMap(new IdentityHashMap<>()); private final Set forcedItems = Collections.newSetFromMap(new IdentityHashMap<>()); private final Map lastFlipTick = new java.util.HashMap<>(); + private final Map playerCrossings = new java.util.HashMap<>(); + private final Map lastUndersideExitTick = new java.util.HashMap<>(); private long lastDiagnosticTick = Long.MIN_VALUE / 2L; private DiscoveryStats discover(ServerLevel level) { @@ -172,6 +201,133 @@ public final class ThoraxisUndersideManager { entities.clear(); forcedItems.clear(); lastFlipTick.clear(); + playerCrossings.clear(); + lastUndersideExitTick.clear(); + } + } + + private static void tickPlayerTransitions(ServerLevel level, TrackingState tracking, long now) { + tracking.playerCrossings.keySet().removeIf(uuid -> level.getPlayerByUUID(uuid) == null); + for (ServerPlayer player : level.players()) { + PlayerCrossing crossing = tracking.playerCrossings.get(player.getUUID()); + if (crossing != null) { + tickPlayerCrossing(player, crossing, tracking, now); + continue; + } + + if (player.isSpectator()) { + continue; + } + + if (isCrossingGravityBoundary(player)) { + boolean toUnderside = GravityApi.getGravityDirection(player) == GravityDirection.DOWN; + if (!toUnderside) { + refreshInvertedEffect(player); + } else { + player.addEffect(new MobEffectInstance(MobEffects.SLOW_FALLING, ENTRY_SLOW_FALL_DURATION_TICKS, 0, false, true, true)); + } + tracking.playerCrossings.put(player.getUUID(), new PlayerCrossing(toUnderside)); + continue; + } + + if (GravityApi.getGravityDirection(player) == GravityDirection.DOWN + && player.getY() < UNDERSIDE_ENTRY_BORDER_Y + && flipReady(tracking, player.getUUID(), now)) { + GravityApi.setAirborneGravityDirection(player, GravityDirection.UP, true, THROAT_TRANSITION); + player.resetFallDistance(); + tracking.lastFlipTick.put(player.getUUID(), now); + refreshInvertedEffect(player); + continue; + } + + if (GravityApi.isGravityInverted(player) && player.getY() < EXIT_UNDERSIDE_Y) { + refreshInvertedEffect(player); + } + } + } + + private static void tickPlayerCrossing(ServerPlayer player, PlayerCrossing crossing, TrackingState tracking, long now) { + crossing.ticks++; + Vec3 velocity = GravityApi.getWorldVelocity(player); + if (!crossing.flipped) { + if (!crossing.toUnderside) { + refreshInvertedEffect(player); + } + if (crossing.ticks > CROSSING_TIMEOUT_TICKS) { + tracking.playerCrossings.remove(player.getUUID()); + return; + } + + AABB bounds = player.getBoundingBox(); + boolean clear; + if (crossing.toUnderside) { + if (bounds.maxY >= UNDERSIDE_ENTRY_BORDER_Y) { + return; + } + Long lastExit = tracking.lastUndersideExitTick.get(player.getUUID()); + boolean recentlyUnderside = lastExit != null && now - lastExit < RECENT_UNDERSIDE_WINDOW_TICKS; + clear = recentlyUnderside || crossing.ticks >= FRESH_ENTRY_DELAY_TICKS; + } else { + clear = bounds.minY > EXIT_UNDERSIDE_Y; + } + if (!clear) { + return; + } + if (!flipReady(tracking, player.getUUID(), now)) { + return; + } + + GravityDirection destination = crossing.toUnderside + ? GravityDirection.UP + : GravityDirection.DOWN; + GravityApi.setAirborneGravityDirection(player, destination, crossing.toUnderside, THROAT_TRANSITION); + double assistedVerticalVelocity = crossing.toUnderside + ? Math.min(velocity.y, -0.7D) + : Math.max(velocity.y, 0.7D); + GravityApi.setWorldVelocity(player, + new Vec3(velocity.x, assistedVerticalVelocity, velocity.z)); + player.resetFallDistance(); + crossing.flipped = true; + crossing.ticks = 0; + tracking.lastFlipTick.put(player.getUUID(), now); + if (crossing.toUnderside) { + refreshInvertedEffect(player); + AntarchyAdvancementTriggers.crossedGravityThroat(player, "down"); + } else { + player.removeEffect(AntarchyObjects.INVERTED_EFFECT.get()); + tracking.lastUndersideExitTick.put(player.getUUID(), now); + } + return; + } + + if (crossing.toUnderside) { + refreshInvertedEffect(player); + } + if (player.onGround() || crossing.ticks >= SETTLE_TIMEOUT_TICKS) { + tracking.playerCrossings.remove(player.getUUID()); + } + } + + private static boolean isCrossingGravityBoundary(ServerPlayer player) { + Vec3 velocity = GravityApi.getWorldVelocity(player); + AABB swept = player.getBoundingBox().expandTowards(velocity.scale(-1.0D)).inflate(0.08D); + GravityDirection direction = GravityApi.getGravityDirection(player); + return direction == GravityDirection.DOWN + ? swept.minY < UNDERSIDE_ENTRY_BORDER_Y && swept.maxY >= UNDERSIDE_ENTRY_BORDER_Y && velocity.y <= -MIN_ENTRY_CROSSING_SPEED + : swept.minY <= GRAVITY_FLIP_Y && swept.maxY > GRAVITY_FLIP_Y && velocity.y >= MIN_CROSSING_SPEED; + } + + private static boolean isUndersideEffect(MobEffectInstance effect) { + return effect.isAmbient() && !effect.isVisible(); + } + + private static final class PlayerCrossing { + private final boolean toUnderside; + private int ticks; + private boolean flipped; + + private PlayerCrossing(boolean toUnderside) { + this.toUnderside = toUnderside; } } @@ -194,37 +350,54 @@ public final class ThoraxisUndersideManager { } } - public static boolean shouldSpawnInvertedOnDreamSand(ServerLevelAccessor level, BlockPos pos) { + public static boolean isUndersideCeilingSpawn(EntityType type, ServerLevelAccessor level, BlockPos pos) { + return type.is(AntarchyTags.Entities.UNDERSIDE_CEILING_SPAWNERS) && isUndersideCeilingSpot(level, pos, type); + } + + public static boolean isUndersideCeilingSpot(ServerLevelAccessor level, BlockPos pos, EntityType type) { if (!isThoraxis(level.getLevel()) || pos.getY() >= GRAVITY_FLIP_Y) { return false; } BlockState bodyState = level.getBlockState(pos); - if (!bodyState.isAir() && !bodyState.getCollisionShape(level, pos).isEmpty()) { + BlockPos belowPos = pos.below(); + BlockState belowState = level.getBlockState(belowPos); + if (!NaturalSpawner.isValidEmptySpawnBlock(level, pos, bodyState, bodyState.getFluidState(), type) + || !NaturalSpawner.isValidEmptySpawnBlock(level, belowPos, belowState, belowState.getFluidState(), type) + || belowState.isFaceSturdy(level, belowPos, Direction.UP)) { return false; } - BlockPos supportPos = pos.above(); - BlockState supportState = level.getBlockState(supportPos); - if (!(supportState.getBlock() instanceof DreamSandBlock)) { - return false; - } + BlockPos ceilingPos = pos.above(); + BlockState ceilingState = level.getBlockState(ceilingPos); + return ceilingState.isFaceSturdy(level, ceilingPos, Direction.DOWN) + && ceilingState.isValidSpawn(level, ceilingPos, type); + } - return supportState.isFaceSturdy(level, supportPos, Direction.DOWN) - && level.getFluidState(pos).isEmpty() - && level.isEmptyBlock(pos.below()); + public static double ceilingSpawnFeetY(EntityType type, BlockPos pos, double height) { + double gap = type.is(AntarchyTags.Entities.UNDERSIDE_CEILING_SHORT_GAP) ? SHORT_CEILING_SPAWN_GAP : CEILING_SPAWN_GAP; + return pos.getY() + 1.0D - gap - height; + } + + public static AABB ceilingSpawnBounds(EntityType type, BlockPos pos) { + double feetY = ceilingSpawnFeetY(type, pos, type.getHeight()); + return type.getAABB(pos.getX() + 0.5D, feetY, pos.getZ() + 0.5D).setMaxY(pos.getY() + 1.0D); } public static boolean isThoraxis(Level level) { return level.dimension().location().equals(THORAXIS_DIMENSION); } + public static boolean isInUnderside(Entity entity) { + return isThoraxis(entity.level()) && entity.getY() < GRAVITY_FLIP_Y; + } + public static boolean isAboveUndersideExit(Entity entity) { return isThoraxis(entity.level()) && entity.getY() >= EXIT_UNDERSIDE_Y; } - /** True while an entity is inside the inverted-gravity underside volume. */ - public static boolean isInUnderside(Entity entity) { - return isThoraxis(entity.level()) && entity.getY() < EXIT_UNDERSIDE_Y; + public static boolean shouldInvertInUnderside(Entity entity) { + return GravityApi.isGravityInverted(entity) + && isInUnderside(entity); } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/AbstractArrowAccessor.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/AbstractArrowAccessor.java deleted file mode 100644 index e5afd28f..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/AbstractArrowAccessor.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.craisinlord.antarchy.mixins; - -import net.minecraft.world.entity.projectile.AbstractArrow; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(AbstractArrow.class) -public interface AbstractArrowAccessor { - @Accessor("inGround") - void antarchy$setInGround(boolean inGround); - - @Accessor("inGroundTime") - void antarchy$setInGroundTime(int inGroundTime); - - @Accessor("shakeTime") - void antarchy$setShakeTime(int shakeTime); -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/AbstractMinecartMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/AbstractMinecartMixin.java index 790adece..544bd09d 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/AbstractMinecartMixin.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/AbstractMinecartMixin.java @@ -12,6 +12,8 @@ import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.npc.Villager; +import net.minecraft.world.entity.npc.WanderingTrader; import net.minecraft.world.entity.vehicle.AbstractMinecart; import net.minecraft.world.level.block.BaseRailBlock; import net.minecraft.world.level.block.state.BlockState; @@ -32,6 +34,7 @@ public abstract class AbstractMinecartMixin implements AntimetalMinecartAccess { private static final EntityDataAccessor ANTARCHY$ON_ANTIMETAL_RAIL = SynchedEntityData.defineId(AbstractMinecart.class, EntityDataSerializers.BOOLEAN); private static final int ANTARCHY$INVERTED_REFRESH_TICKS = 20; + @Unique private static final double ANTARCHY$STANDING_PASSENGER_OFFSET = 0.1875D; @Unique diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/AntarchyMixinErrorHandler.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/AntarchyMixinErrorHandler.java index 5fb18e7f..4cf18dca 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/AntarchyMixinErrorHandler.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/AntarchyMixinErrorHandler.java @@ -4,9 +4,6 @@ import org.spongepowered.asm.mixin.extensibility.IMixinConfig; import org.spongepowered.asm.mixin.extensibility.IMixinErrorHandler; import org.spongepowered.asm.mixin.extensibility.IMixinInfo; -/* - * Keeps bad mixins from hard-crashing startup. - */ public final class AntarchyMixinErrorHandler implements IMixinErrorHandler { private static final String BROKEN_MARVEL_STELLARIS_MIXIN = "net.tintankgames.marvel.mixin.integration.stellaris.DimensionOxygenManagerMixin"; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/AntarchyMixinPlugin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/AntarchyMixinPlugin.java index c804109e..1b593305 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/AntarchyMixinPlugin.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/AntarchyMixinPlugin.java @@ -7,10 +7,9 @@ import org.spongepowered.asm.mixin.Mixins; import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; import org.spongepowered.asm.mixin.extensibility.IMixinInfo; -/* - * Mixin plugin for compat-gated mixins and optional deps. - */ public final class AntarchyMixinPlugin implements IMixinConfigPlugin { + private static final AntarchyRangedAttackPatcher RANGED_ATTACK_PATCHER = new AntarchyRangedAttackPatcher(); + @Override public void onLoad(String mixinPackage) { Mixins.registerErrorHandlerClass(AntarchyMixinErrorHandler.class.getName()); @@ -23,19 +22,40 @@ public final class AntarchyMixinPlugin implements IMixinConfigPlugin { @Override public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { - String resourcePath = targetClassName.replace('.', '/') + ".class"; - if (this.getClass().getClassLoader().getResource(resourcePath) == null) { + if (!classPresent(targetClassName)) { return false; } + if (mixinClassName.startsWith("com.craisinlord.antarchy.mixins.compat.scguns.")) { + return classPresent("top.ribs.scguns.entity.projectile.ProjectileEntity"); + } + if (mixinClassName.startsWith("com.craisinlord.antarchy.mixins.compat.irons_spellbooks.")) { + return classPresent("io.redspace.ironsspellbooks.entity.spells.AbstractMagicProjectile"); + } + if (mixinClassName.startsWith("com.craisinlord.antarchy.mixins.compat.ars_nouveau.")) { + return classPresent("com.hollingsworth.arsnouveau.common.entity.EntityProjectileSpell"); + } + if (mixinClassName.startsWith("com.craisinlord.antarchy.mixins.compat.biolith.")) { + return classPresent("com.terraformersmc.biolith.api.biome.BiolithFittestNodes"); + } + if (mixinClassName.startsWith("com.craisinlord.antarchy.mixins.compat.alexscaves.")) { + return true; + } if (mixinClassName.endsWith(".VillagerTradesMixin")) { - // Trade registration is platform-driven on every supported loader now. Keeping the - // static VillagerTrades class-init mixin around risks touching AntarchyObjects before - // registration is finished on Fabric and duplicates trades on event-driven loaders. return false; } return true; } + private static boolean classPresent(String className) { + String resourcePath = className.replace('.', '/') + ".class"; + ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader(); + if (contextClassLoader != null && contextClassLoader.getResource(resourcePath) != null) { + return true; + } + ClassLoader mixinClassLoader = AntarchyMixinPlugin.class.getClassLoader(); + return mixinClassLoader != null && mixinClassLoader.getResource(resourcePath) != null; + } + @Override public void acceptTargets(Set myTargets, Set otherTargets) { } @@ -51,5 +71,6 @@ public final class AntarchyMixinPlugin implements IMixinConfigPlugin { @Override public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + RANGED_ATTACK_PATCHER.patch(targetClass); } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/AntarchyRangedAttackPatcher.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/AntarchyRangedAttackPatcher.java index 8c7a89e7..8e73ea46 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/AntarchyRangedAttackPatcher.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/AntarchyRangedAttackPatcher.java @@ -14,7 +14,7 @@ final class AntarchyRangedAttackPatcher { private static final String LIVING_D_DESC = "(Lnet/minecraft/world/entity/LivingEntity;D)D"; private static final String D_LIVING_DESC = "(DLnet/minecraft/world/entity/LivingEntity;)D"; private static final String DELTA_MOVEMENT_DESC = "(Lnet/minecraft/world/entity/LivingEntity;)Lnet/minecraft/world/phys/Vec3;"; - private static final String API_OWNER = "com/craisinlord/antarchy/content/gravity/AntarchyGravityApi"; + private static final String API_OWNER = "com/craisinlord/antarchy/content/gravity/GravityApi"; private enum AimMode { BODY, diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/BlockEntityTypeSignMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/BlockEntityTypeSignMixin.java index f8ff883d..aac8db39 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/BlockEntityTypeSignMixin.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/BlockEntityTypeSignMixin.java @@ -30,18 +30,48 @@ public abstract class BlockEntityTypeSignMixin { private static Block antarchy$peachHangingSign; @Unique private static Block antarchy$peachWallHangingSign; + @Unique + private static Block antarchy$nadirSign; + @Unique + private static Block antarchy$nadirWallSign; + @Unique + private static Block antarchy$nadirHangingSign; + @Unique + private static Block antarchy$nadirWallHangingSign; + @Unique + private static Block antarchy$royalSign; + @Unique + private static Block antarchy$royalWallSign; + @Unique + private static Block antarchy$royalHangingSign; + @Unique + private static Block antarchy$royalWallHangingSign; + @Unique + private static Block antarchy$truffaloSign; + @Unique + private static Block antarchy$truffaloWallSign; + @Unique + private static Block antarchy$truffaloHangingSign; + @Unique + private static Block antarchy$truffaloWallHangingSign; @Inject(method = "isValid", at = @At("HEAD"), cancellable = true) private void antarchy$allowOuranwoodSigns(BlockState state, CallbackInfoReturnable cir) { Object self = this; if (self == BlockEntityType.SIGN) { if (state.is(antarchy$sign()) || state.is(antarchy$wallSign()) - || state.is(antarchy$peachSign()) || state.is(antarchy$peachWallSign())) { + || state.is(antarchy$peachSign()) || state.is(antarchy$peachWallSign()) + || state.is(antarchy$nadirSign()) || state.is(antarchy$nadirWallSign()) + || state.is(antarchy$royalSign()) || state.is(antarchy$royalWallSign()) + || state.is(antarchy$truffaloSign()) || state.is(antarchy$truffaloWallSign())) { cir.setReturnValue(true); } } else if (self == BlockEntityType.HANGING_SIGN) { if (state.is(antarchy$hangingSign()) || state.is(antarchy$wallHangingSign()) - || state.is(antarchy$peachHangingSign()) || state.is(antarchy$peachWallHangingSign())) { + || state.is(antarchy$peachHangingSign()) || state.is(antarchy$peachWallHangingSign()) + || state.is(antarchy$nadirHangingSign()) || state.is(antarchy$nadirWallHangingSign()) + || state.is(antarchy$royalHangingSign()) || state.is(antarchy$royalWallHangingSign()) + || state.is(antarchy$truffaloHangingSign()) || state.is(antarchy$truffaloWallHangingSign())) { cir.setReturnValue(true); } } @@ -111,6 +141,102 @@ public abstract class BlockEntityTypeSignMixin { return antarchy$peachWallHangingSign; } + @Unique + private static Block antarchy$nadirSign() { + if (antarchy$nadirSign == null) { + antarchy$nadirSign = antarchy$resolve("nadir_sign"); + } + return antarchy$nadirSign; + } + + @Unique + private static Block antarchy$nadirWallSign() { + if (antarchy$nadirWallSign == null) { + antarchy$nadirWallSign = antarchy$resolve("nadir_wall_sign"); + } + return antarchy$nadirWallSign; + } + + @Unique + private static Block antarchy$nadirHangingSign() { + if (antarchy$nadirHangingSign == null) { + antarchy$nadirHangingSign = antarchy$resolve("nadir_hanging_sign"); + } + return antarchy$nadirHangingSign; + } + + @Unique + private static Block antarchy$nadirWallHangingSign() { + if (antarchy$nadirWallHangingSign == null) { + antarchy$nadirWallHangingSign = antarchy$resolve("nadir_wall_hanging_sign"); + } + return antarchy$nadirWallHangingSign; + } + + @Unique + private static Block antarchy$royalSign() { + if (antarchy$royalSign == null) { + antarchy$royalSign = antarchy$resolve("royal_sign"); + } + return antarchy$royalSign; + } + + @Unique + private static Block antarchy$royalWallSign() { + if (antarchy$royalWallSign == null) { + antarchy$royalWallSign = antarchy$resolve("royal_wall_sign"); + } + return antarchy$royalWallSign; + } + + @Unique + private static Block antarchy$royalHangingSign() { + if (antarchy$royalHangingSign == null) { + antarchy$royalHangingSign = antarchy$resolve("royal_hanging_sign"); + } + return antarchy$royalHangingSign; + } + + @Unique + private static Block antarchy$royalWallHangingSign() { + if (antarchy$royalWallHangingSign == null) { + antarchy$royalWallHangingSign = antarchy$resolve("royal_wall_hanging_sign"); + } + return antarchy$royalWallHangingSign; + } + + @Unique + private static Block antarchy$truffaloSign() { + if (antarchy$truffaloSign == null) { + antarchy$truffaloSign = antarchy$resolve("truffalo_sign"); + } + return antarchy$truffaloSign; + } + + @Unique + private static Block antarchy$truffaloWallSign() { + if (antarchy$truffaloWallSign == null) { + antarchy$truffaloWallSign = antarchy$resolve("truffalo_wall_sign"); + } + return antarchy$truffaloWallSign; + } + + @Unique + private static Block antarchy$truffaloHangingSign() { + if (antarchy$truffaloHangingSign == null) { + antarchy$truffaloHangingSign = antarchy$resolve("truffalo_hanging_sign"); + } + return antarchy$truffaloHangingSign; + } + + @Unique + private static Block antarchy$truffaloWallHangingSign() { + if (antarchy$truffaloWallHangingSign == null) { + antarchy$truffaloWallHangingSign = antarchy$resolve("truffalo_wall_hanging_sign"); + } + return antarchy$truffaloWallHangingSign; + } + @Unique private static Block antarchy$resolve(String path) { return BuiltInRegistries.BLOCK.get(new ResourceLocation(Antarchy.MODID, path)); diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/CommandedMobMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/CommandedMobMixin.java index 0dd0ff3f..b3ad46fc 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/CommandedMobMixin.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/CommandedMobMixin.java @@ -13,6 +13,8 @@ public abstract class CommandedMobMixin implements CommandedEntityAccess { private UUID antarchy$commanderUuid; @Unique private boolean antarchy$commandedTargetOwned; + @Unique + private boolean antarchy$royalInvested; @Override public UUID antarchy$getCommanderUuid() { @@ -34,11 +36,22 @@ public abstract class CommandedMobMixin implements CommandedEntityAccess { antarchy$commandedTargetOwned = owned; } + @Override + public boolean antarchy$isRoyalInvested() { + return antarchy$royalInvested; + } + + @Override + public void antarchy$setRoyalInvested(boolean invested) { + antarchy$royalInvested = invested; + } + @org.spongepowered.asm.mixin.injection.Inject(method = "addAdditionalSaveData", at = @org.spongepowered.asm.mixin.injection.At("TAIL")) private void antarchy$saveCommandedData(CompoundTag tag, org.spongepowered.asm.mixin.injection.callback.CallbackInfo ci) { if (antarchy$commanderUuid != null) { tag.putUUID("AntarchyCommander", antarchy$commanderUuid); tag.putBoolean("AntarchyCommandedTargetOwned", antarchy$commandedTargetOwned); + tag.putBoolean("AntarchyRoyalInvested", antarchy$royalInvested); } } @@ -47,6 +60,7 @@ public abstract class CommandedMobMixin implements CommandedEntityAccess { if (tag.hasUUID("AntarchyCommander")) { antarchy$commanderUuid = tag.getUUID("AntarchyCommander"); antarchy$commandedTargetOwned = tag.getBoolean("AntarchyCommandedTargetOwned"); + antarchy$royalInvested = tag.getBoolean("AntarchyRoyalInvested"); } } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/CreativeModeTabsEnchantmentOrderMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/CreativeModeTabsEnchantmentOrderMixin.java new file mode 100644 index 00000000..aec4934b --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/CreativeModeTabsEnchantmentOrderMixin.java @@ -0,0 +1,40 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.enchantment.AntarchyEnchantments; +import java.util.Comparator; +import java.util.List; +import java.util.stream.Stream; +import net.minecraft.core.Holder; +import net.minecraft.core.HolderLookup; +import net.minecraft.world.item.enchantment.Enchantment; +import net.minecraft.world.item.CreativeModeTabs; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(CreativeModeTabs.class) +public abstract class CreativeModeTabsEnchantmentOrderMixin { + @Redirect( + method = {"generateEnchantmentBookTypesOnlyMaxLevel", "generateEnchantmentBookTypesAllLevels"}, + at = @At(value = "INVOKE", target = "Lnet/minecraft/core/HolderLookup;listElements()Ljava/util/stream/Stream;") + ) + private static Stream> antarchy$orderEnchantments(HolderLookup lookup) { + List> enchantments = lookup.listElements().toList(); + List> antarchyEnchantments = enchantments.stream() + .filter(CreativeModeTabsEnchantmentOrderMixin::isAntarchyEnchantment) + .sorted(Comparator.comparingInt(CreativeModeTabsEnchantmentOrderMixin::priority)) + .toList(); + return Stream.concat( + antarchyEnchantments.stream(), + enchantments.stream().filter(holder -> !isAntarchyEnchantment(holder)) + ); + } + + private static boolean isAntarchyEnchantment(Holder.Reference holder) { + return holder.is(AntarchyEnchantments.FEATHER_RISING) || holder.is(AntarchyEnchantments.CHRONOSPHERE); + } + + private static int priority(Holder.Reference holder) { + return holder.is(AntarchyEnchantments.FEATHER_RISING) ? 0 : 1; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/CriteriaTriggersAccessor.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/CriteriaTriggersAccessor.java new file mode 100644 index 00000000..0a1f06eb --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/CriteriaTriggersAccessor.java @@ -0,0 +1,14 @@ +package com.craisinlord.antarchy.mixins; + +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.advancements.CriterionTrigger; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +@Mixin(CriteriaTriggers.class) +public interface CriteriaTriggersAccessor { + @Invoker("register") + static > T antarchy$register(T trigger) { + throw new AssertionError(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/DreamFireBlockMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/DreamFireBlockMixin.java index d930c012..44cd64b9 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/DreamFireBlockMixin.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/DreamFireBlockMixin.java @@ -15,9 +15,6 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(BaseFireBlock.class) -/* - * Lets dream fire pick the floor or ceiling variant from the same support tag. - */ public abstract class DreamFireBlockMixin { private static final ResourceLocation DREAM_FIRE_ID = new ResourceLocation(Antarchy.MODID, "dream_fire"); private static final ResourceLocation DREAM_CEILING_FIRE_ID = new ResourceLocation(Antarchy.MODID, "dream_fire_ceiling"); diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/DreamSandLowGravityMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/DreamSandLowGravityMixin.java deleted file mode 100644 index f1523d5c..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/DreamSandLowGravityMixin.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.craisinlord.antarchy.mixins; - -import com.craisinlord.antarchy.content.movement.DreamSandLowGravityAccess; -import net.minecraft.world.entity.LivingEntity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; - -@Mixin(LivingEntity.class) -/* - * Stores per-entity dream sand low-grav state. - */ -public abstract class DreamSandLowGravityMixin implements DreamSandLowGravityAccess { - @Unique - private boolean antarchy$dreamSandLowGravityActive; - @Unique - private int antarchy$dreamSandLowGravityTicksRemaining; - @Unique - private int antarchy$dreamSandLandingGraceTicks; - - @Override - public boolean antarchy$isDreamSandLowGravityActive() { - return this.antarchy$dreamSandLowGravityActive; - } - - @Override - public void antarchy$setDreamSandLowGravityActive(boolean active) { - this.antarchy$dreamSandLowGravityActive = active; - } - - @Override - public int antarchy$getDreamSandLowGravityTicksRemaining() { - return this.antarchy$dreamSandLowGravityTicksRemaining; - } - - @Override - public void antarchy$setDreamSandLowGravityTicksRemaining(int ticks) { - this.antarchy$dreamSandLowGravityTicksRemaining = Math.max(0, ticks); - } - - @Override - public int antarchy$getDreamSandLandingGraceTicks() { - return this.antarchy$dreamSandLandingGraceTicks; - } - - @Override - public void antarchy$setDreamSandLandingGraceTicks(int ticks) { - this.antarchy$dreamSandLandingGraceTicks = Math.max(0, ticks); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/EnchantmentApplicabilityMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/EnchantmentApplicabilityMixin.java new file mode 100644 index 00000000..17d87331 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/EnchantmentApplicabilityMixin.java @@ -0,0 +1,28 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.enchantment.AntarchyEnchantability; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.enchantment.Enchantment; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(Enchantment.class) +public abstract class EnchantmentApplicabilityMixin { + @Inject(method = "canEnchant", at = @At("HEAD"), cancellable = true) + private void antarchy$applyItemTagSupport(ItemStack stack, CallbackInfoReturnable cir) { + Boolean supported = AntarchyEnchantability.supports((Enchantment) (Object) this, stack.getItem()); + if (supported != null) { + cir.setReturnValue(supported); + } + } + + @Inject(method = "canApplyAtEnchantingTable", at = @At("HEAD"), cancellable = true, remap = false, require = 0) + private void antarchy$applyItemTagPrimary(ItemStack stack, CallbackInfoReturnable cir) { + Boolean primary = AntarchyEnchantability.primary((Enchantment) (Object) this, stack.getItem()); + if (primary != null) { + cir.setReturnValue(primary); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/EnchantmentTableApplicabilityMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/EnchantmentTableApplicabilityMixin.java new file mode 100644 index 00000000..9f2a828f --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/EnchantmentTableApplicabilityMixin.java @@ -0,0 +1,33 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.enchantment.AntarchyEnchantability; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.enchantment.Enchantment; +import net.minecraft.world.item.enchantment.EnchantmentCategory; +import net.minecraft.world.item.enchantment.EnchantmentHelper; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(EnchantmentHelper.class) +public abstract class EnchantmentTableApplicabilityMixin { + @Unique + private static final ThreadLocal ANTARCHY_CURRENT = new ThreadLocal<>(); + + @Redirect(method = "getAvailableEnchantmentResults", require = 0, + at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/enchantment/Enchantment;isDiscoverable()Z")) + private static boolean antarchy$trackEnchantment(Enchantment enchantment) { + ANTARCHY_CURRENT.set(enchantment); + return enchantment.isDiscoverable(); + } + + @Redirect(method = "getAvailableEnchantmentResults", require = 0, + at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/enchantment/EnchantmentCategory;canEnchant(Lnet/minecraft/world/item/Item;)Z")) + private static boolean antarchy$applyItemTagPrimary(EnchantmentCategory category, Item item) { + Enchantment enchantment = ANTARCHY_CURRENT.get(); + ANTARCHY_CURRENT.remove(); + Boolean primary = AntarchyEnchantability.primary(enchantment, item); + return primary != null ? primary : category.canEnchant(item); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/FrogVariantBootstrapMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/FrogVariantBootstrapMixin.java deleted file mode 100644 index 852735ba..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/FrogVariantBootstrapMixin.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.craisinlord.antarchy.mixins; - -import com.craisinlord.antarchy.content.entity.ElythiaFrog; -import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.entity.animal.FrogVariant; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(FrogVariant.class) -public abstract class FrogVariantBootstrapMixin { - @Inject(method = "bootstrap", at = @At("TAIL")) - private static void antarchy$registerElythiaVariant(Registry registry, CallbackInfoReturnable cir) { - ResourceLocation id = ElythiaFrog.VARIANT.location(); - if (registry.containsKey(id)) { - return; - } - - Registry.register(registry, id, new FrogVariant(ElythiaFrog.TEXTURE)); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/GlimmeringDamageImmunityMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/GlimmeringDamageImmunityMixin.java index 503f1ea0..24612110 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/GlimmeringDamageImmunityMixin.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/GlimmeringDamageImmunityMixin.java @@ -12,7 +12,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(LivingEntity.class) public abstract class GlimmeringDamageImmunityMixin { - // Magic damage (potions, spells) is tagged bypasses_armor, so it's excluded @Inject(method = "hurt", at = @At("HEAD"), cancellable = true) private void antarchy$glimmeringIgnoresAttacks(DamageSource source, float amount, CallbackInfoReturnable cir) { LivingEntity self = (LivingEntity) (Object) this; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/GlimmeringPushableMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/GlimmeringPushableMixin.java index 1cec3278..a49931ef 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/GlimmeringPushableMixin.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/GlimmeringPushableMixin.java @@ -8,8 +8,6 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -// LivingEntity.isPushable()/isPickable() are full overrides of Entity's versions (they don't call -// super), so this has to target LivingEntity directly, not Entity, or the injected code never runs. @Mixin(LivingEntity.class) public abstract class GlimmeringPushableMixin { @Inject(method = "isPushable", at = @At("RETURN"), cancellable = true) @@ -25,9 +23,6 @@ public abstract class GlimmeringPushableMixin { } } - // Projectiles (and entity-picking in general) skip targets that aren't isPickable(), so this - // is what actually lets arrows/tridents/etc. pass through a glimmering entity instead of - // colliding with it; the damage-immunity mixin alone only stopped the damage, not the impact. @Inject(method = "isPickable", at = @At("RETURN"), cancellable = true) private void antarchy$glimmeringNotPickable(CallbackInfoReturnable cir) { if (!cir.getReturnValueZ()) { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/GrindstoneMenuMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/GrindstoneMenuMixin.java index fe2bd011..b196f069 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/GrindstoneMenuMixin.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/GrindstoneMenuMixin.java @@ -1,6 +1,7 @@ package com.craisinlord.antarchy.mixins; import com.craisinlord.antarchy.content.item.InnateEnchantmentHelper; +import com.craisinlord.antarchy.content.item.GiantFryingPanItem; import net.minecraft.world.Container; import net.minecraft.world.inventory.GrindstoneMenu; import net.minecraft.world.item.ItemStack; @@ -31,6 +32,11 @@ public abstract class GrindstoneMenuMixin { private void antarchy$blockInnateOnlyNoOp(CallbackInfo ci) { ItemStack firstInput = this.repairSlots.getItem(0); ItemStack secondInput = this.repairSlots.getItem(1); + if (firstInput.getItem() instanceof GiantFryingPanItem || secondInput.getItem() instanceof GiantFryingPanItem) { + this.resultSlots.setItem(0, ItemStack.EMPTY); + return; + } + if (!firstInput.isEmpty() && secondInput.isEmpty() && InnateEnchantmentHelper.hasInnateNonCurseEnchantments(firstInput) && !InnateEnchantmentHelper.hasRemovableNonCurseEnchantments(firstInput)) { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/JudgmentMarkEntityMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/JudgmentMarkEntityMixin.java new file mode 100644 index 00000000..e06899c2 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/JudgmentMarkEntityMixin.java @@ -0,0 +1,42 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.effect.JudgmentMarkAccess; +import net.minecraft.network.syncher.EntityDataAccessor; +import net.minecraft.network.syncher.EntityDataSerializers; +import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.world.entity.LivingEntity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(LivingEntity.class) +public abstract class JudgmentMarkEntityMixin implements JudgmentMarkAccess { + @Unique + private static final EntityDataAccessor ANTARCHY_JUDGMENT_MARKED = + SynchedEntityData.defineId(LivingEntity.class, EntityDataSerializers.BOOLEAN); + + @Inject(method = "defineSynchedData", at = @At("TAIL")) + private void antarchy$defineJudgmentState(CallbackInfo ci) { + ((LivingEntity) (Object) this).getEntityData().define(ANTARCHY_JUDGMENT_MARKED, false); + } + + @Inject(method = "tick", at = @At("TAIL")) + private void antarchy$tickJudgmentState(CallbackInfo ci) { + com.craisinlord.antarchy.content.effect.JudgmentMarkManager.tickTarget((LivingEntity) (Object) this); + } + + @Override + public boolean antarchy$isJudgmentMarked() { + return ((LivingEntity) (Object) this).getEntityData().get(ANTARCHY_JUDGMENT_MARKED); + } + + @Override + public void antarchy$setJudgmentMarked(boolean marked) { + LivingEntity entity = (LivingEntity) (Object) this; + if (!entity.level().isClientSide && entity.getEntityData().get(ANTARCHY_JUDGMENT_MARKED) != marked) { + entity.getEntityData().set(ANTARCHY_JUDGMENT_MARKED, marked); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/PoiTypesAccessor.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/PoiTypesAccessor.java new file mode 100644 index 00000000..83cd7050 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/PoiTypesAccessor.java @@ -0,0 +1,17 @@ +package com.craisinlord.antarchy.mixins; + +import net.minecraft.core.Holder; +import net.minecraft.world.entity.ai.village.poi.PoiType; +import net.minecraft.world.level.block.state.BlockState; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import java.util.Map; + +@Mixin(net.minecraft.world.entity.ai.village.poi.PoiTypes.class) +public interface PoiTypesAccessor { + @Accessor("TYPE_BY_STATE") + static Map> antarchy$getTypeByState() { + throw new AssertionError(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/PoiTypesMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/PoiTypesMixin.java new file mode 100644 index 00000000..a5d3d05c --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/PoiTypesMixin.java @@ -0,0 +1,38 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.Antarchy; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.ai.village.poi.PoiType; +import net.minecraft.world.entity.ai.village.poi.PoiTypes; +import net.minecraft.world.level.block.state.BlockState; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import java.util.Optional; + +@Mixin(PoiTypes.class) +public abstract class PoiTypesMixin { + @Inject(method = "forState", at = @At("HEAD"), cancellable = true) + private static void antarchy$computerPoi(BlockState state, + CallbackInfoReturnable>> callback) { + try { + boolean computer = state.is(BuiltInRegistries.BLOCK.get(new ResourceLocation("antos", "computer"))); + boolean antTrap = state.is(BuiltInRegistries.BLOCK.get(new ResourceLocation(Antarchy.MODID, "ant_trap"))); + if (!computer && !antTrap) { + return; + } + ResourceKey key = ResourceKey.create( + Registries.POINT_OF_INTEREST_TYPE, + new ResourceLocation(Antarchy.MODID, computer ? "computer" : "pest_control")); + BuiltInRegistries.POINT_OF_INTEREST_TYPE.getHolder(key) + .ifPresent(holder -> callback.setReturnValue(Optional.of(holder))); + } catch (IllegalStateException ignored) { + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/PortalGunEntityCollisionMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/PortalGunEntityCollisionMixin.java deleted file mode 100644 index f5fa8a2e..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/PortalGunEntityCollisionMixin.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.craisinlord.antarchy.mixins; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.portalgun.PortalGunCollisionHelper; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(Entity.class) -public abstract class PortalGunEntityCollisionMixin { - @Unique - private AABB antarchy$portalGunStartBox; - - @Inject(method = "collide", at = @At("HEAD")) - private void antarchy$capturePortalGunStartBox(Vec3 movement, CallbackInfoReturnable cir) { - this.antarchy$portalGunStartBox = ((Entity) (Object) this).getBoundingBox(); - } - - @Inject(method = "collide", at = @At("RETURN"), cancellable = true) - private void antarchy$restorePortalCrossingMotion(Vec3 movement, CallbackInfoReturnable cir) { - Entity entity = (Entity) (Object) this; - if (this.antarchy$portalGunStartBox == null || AntarchyGravityApi.isGravityInverted(entity)) { - return; - } - Vec3 adjusted = PortalGunCollisionHelper.resolveCollision(entity, this.antarchy$portalGunStartBox, movement, cir.getReturnValue()); - cir.setReturnValue(adjusted); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/PortalGunEntityInWallMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/PortalGunEntityInWallMixin.java deleted file mode 100644 index 1d0db749..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/PortalGunEntityInWallMixin.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.craisinlord.antarchy.mixins; - -import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; -import net.minecraft.world.entity.Entity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(Entity.class) -public abstract class PortalGunEntityInWallMixin { - @Inject(method = "isInWall", at = @At("HEAD"), cancellable = true) - private void antarchy$ignorePortalInWall(CallbackInfoReturnable cir) { - Entity entity = (Entity) (Object) this; - if (entity.level() == null) { - return; - } - for (PortalGunPortalEntity portal : entity.level().getEntitiesOfClass(PortalGunPortalEntity.class, entity.getBoundingBox().inflate(2.0D), PortalGunPortalEntity::isAlive)) { - if (portal.intersectsEntityBounds(entity) || portal.getCollisionRemovalAabbForEntity(entity).intersects(entity.getBoundingBox())) { - cir.setReturnValue(false); - return; - } - } - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/PortalGunItemEntityRemovalMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/PortalGunItemEntityRemovalMixin.java new file mode 100644 index 00000000..5a84852f --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/PortalGunItemEntityRemovalMixin.java @@ -0,0 +1,24 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.item.PortalGunItem; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.item.ItemEntity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(Entity.class) +public abstract class PortalGunItemEntityRemovalMixin { + @Inject(method = "setRemoved", at = @At("HEAD")) + private void antarchy$clearPortalsOfDestroyedGun(Entity.RemovalReason reason, CallbackInfo ci) { + if ((Object) this instanceof ItemEntity itemEntity + && (reason == Entity.RemovalReason.KILLED || reason == Entity.RemovalReason.DISCARDED) + && !itemEntity.isRemoved() + && itemEntity.level() instanceof ServerLevel level + && itemEntity.getItem().getItem() instanceof PortalGunItem) { + PortalGunItem.clearPortalsOf(level, itemEntity.getItem()); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/PortalGunZombieMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/PortalGunZombieMixin.java new file mode 100644 index 00000000..bc44a124 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/PortalGunZombieMixin.java @@ -0,0 +1,29 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.item.PortalGunItem; +import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.monster.Zombie; +import net.minecraft.world.item.ItemStack; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(Zombie.class) +public abstract class PortalGunZombieMixin { + @Inject(method = "tick", at = @At("TAIL")) + private void antarchy$firePortalGun(CallbackInfo ci) { + Zombie zombie = (Zombie) (Object) this; + if (!(zombie.level() instanceof ServerLevel serverLevel)) { + return; + } + ItemStack stack = zombie.getMainHandItem(); + if (stack.getItem() instanceof PortalGunItem portalGun && zombie.getRandom().nextFloat() < 0.008F) { + PortalGunPortalEntity.PortalSide side = zombie.getRandom().nextBoolean() + ? PortalGunPortalEntity.PortalSide.BLUE + : PortalGunPortalEntity.PortalSide.ORANGE; + portalGun.fireMobPortal(serverLevel, zombie, stack, side); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/PotionBrewingInvoker.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/PotionBrewingInvoker.java new file mode 100644 index 00000000..6d6b2181 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/PotionBrewingInvoker.java @@ -0,0 +1,15 @@ +package com.craisinlord.antarchy.mixins; + +import net.minecraft.world.item.Item; +import net.minecraft.world.item.alchemy.Potion; +import net.minecraft.world.item.alchemy.PotionBrewing; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +@Mixin(PotionBrewing.class) +public interface PotionBrewingInvoker { + @Invoker("addMix") + static void antarchy$addMix(Potion input, Item ingredient, Potion output) { + throw new AssertionError(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/PotionBrewingMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/PotionBrewingMixin.java index 7eaba1af..9377fb7c 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/PotionBrewingMixin.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/PotionBrewingMixin.java @@ -10,6 +10,13 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(PotionBrewing.class) public abstract class PotionBrewingMixin { + @Inject(method = "isIngredient", at = @At("HEAD"), cancellable = true) + private static void antarchy$isCustomIngredient(ItemStack stack, CallbackInfoReturnable cir) { + if (CustomBrewingRecipes.isCustomIngredient(stack)) { + cir.setReturnValue(true); + } + } + @Inject(method = "hasMix", at = @At("HEAD"), cancellable = true) private static void antarchy$hasCustomMix(ItemStack input, ItemStack ingredient, CallbackInfoReturnable cir) { if (CustomBrewingRecipes.hasMix(input, ingredient)) { diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/ProjectileRoyalBoundaryMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/ProjectileRoyalBoundaryMixin.java new file mode 100644 index 00000000..4e11d521 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/ProjectileRoyalBoundaryMixin.java @@ -0,0 +1,21 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.effect.RoyalBoundaryManager; +import net.minecraft.world.entity.projectile.Projectile; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(Projectile.class) +public abstract class ProjectileRoyalBoundaryMixin { + @Inject(method = "tick", at = @At("HEAD")) + private void antarchy$prepareRoyalBoundary(CallbackInfo ci) { + RoyalBoundaryManager.prepareProjectile((Projectile) (Object) this); + } + + @Inject(method = "tick", at = @At("TAIL")) + private void antarchy$processRoyalBoundary(CallbackInfo ci) { + RoyalBoundaryManager.tickProjectile((Projectile) (Object) this); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/RoyalBossMoveScanMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/RoyalBossMoveScanMixin.java new file mode 100644 index 00000000..f5cde2c8 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/RoyalBossMoveScanMixin.java @@ -0,0 +1,26 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.entity.royal.RoyalBossEntity; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import java.util.stream.Stream; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.AABB; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(Entity.class) +public abstract class RoyalBossMoveScanMixin { + @WrapOperation( + method = "move", + at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/Level;getBlockStatesIfLoaded(Lnet/minecraft/world/phys/AABB;)Ljava/util/stream/Stream;") + ) + private Stream antarchy$throttleRoyalFireScan(Level level, AABB bounds, Operation> original) { + if ((Object) this instanceof RoyalBossEntity royal && !royal.shouldRunHeavyBlockChecks()) { + return Stream.empty(); + } + return original.call(level, bounds); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/RoyalBoundaryOwnerCleanupMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/RoyalBoundaryOwnerCleanupMixin.java new file mode 100644 index 00000000..31ce2c37 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/RoyalBoundaryOwnerCleanupMixin.java @@ -0,0 +1,17 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.effect.RoyalBoundaryManager; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.Entity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(Entity.class) +public abstract class RoyalBoundaryOwnerCleanupMixin { + @Inject(method = "remove", at = @At("HEAD")) + private void antarchy$removeRoyalBoundary(Entity.RemovalReason reason, CallbackInfo ci) { + if ((Object) this instanceof ServerPlayer player) RoyalBoundaryManager.clearOwner(player); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/RoyalGuardianPlayerAttackMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/RoyalGuardianPlayerAttackMixin.java new file mode 100644 index 00000000..2b4078b0 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/RoyalGuardianPlayerAttackMixin.java @@ -0,0 +1,22 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.item.RoyalGuardianSwordAbilities; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.player.Player; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(Player.class) +public abstract class RoyalGuardianPlayerAttackMixin { + @Inject(method = "attack", at = @At("HEAD")) + private void antarchy$beginGuardianAttack(Entity target, CallbackInfo ci) { + RoyalGuardianSwordAbilities.beginMeleeAttack((Player) (Object) this, target); + } + + @Inject(method = "attack", at = @At("RETURN")) + private void antarchy$endGuardianAttack(Entity target, CallbackInfo ci) { + RoyalGuardianSwordAbilities.endMeleeAttack((Player) (Object) this); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/RoyalGuardianSwordCombatMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/RoyalGuardianSwordCombatMixin.java new file mode 100644 index 00000000..0edd0160 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/RoyalGuardianSwordCombatMixin.java @@ -0,0 +1,27 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.item.RoyalGuardianSwordAbilities; +import com.craisinlord.antarchy.content.item.RoyalGuardianSwordItem; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(LivingEntity.class) +public abstract class RoyalGuardianSwordCombatMixin { + @Inject(method = "hurt", at = @At("RETURN")) + private void antarchy$releaseGuardianElement(DamageSource source, float amount, + CallbackInfoReturnable cir) { + if (!cir.getReturnValue() || amount <= 0.0F || RoyalGuardianSwordAbilities.isApplyingSecondaryDamage()) return; + Entity attacker = source.getEntity(); + if (!(attacker instanceof Player player) || source.getDirectEntity() != player + || !(player.getMainHandItem().getItem() instanceof RoyalGuardianSwordItem) + || !RoyalGuardianSwordAbilities.isChargedMeleeAttack(player, (LivingEntity) (Object) this) + || !RoyalGuardianSwordItem.isDischargeReady(player.getMainHandItem(), player.level().getGameTime())) return; + RoyalGuardianSwordAbilities.discharge(player, (LivingEntity) (Object) this, player.getMainHandItem()); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/RoyalJudgmentCombatMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/RoyalJudgmentCombatMixin.java new file mode 100644 index 00000000..f193ee91 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/RoyalJudgmentCombatMixin.java @@ -0,0 +1,59 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.effect.JudgmentMarkManager; +import com.craisinlord.antarchy.content.effect.CommandedEntityAccess; +import com.craisinlord.antarchy.content.item.RoyalGuardianArmorItem; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.projectile.Projectile; +import net.minecraft.world.entity.player.Player; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.ModifyVariable; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(LivingEntity.class) +public abstract class RoyalJudgmentCombatMixin { + @ModifyVariable(method = "hurt", at = @At("HEAD"), argsOnly = true, ordinal = 0) + private float antarchy$boostMarkedTargetDamage(float amount, DamageSource source) { + if (com.craisinlord.antarchy.content.item.RoyalGuardianSwordAbilities.isApplyingSecondaryDamage()) return amount; + LivingEntity target = (LivingEntity) (Object) this; + if (target instanceof CommandedEntityAccess access && access.antarchy$isRoyalInvested()) { + double reduction = Math.max(0.0D, Math.min(1.0D, AntarchySettings.royalGuardianMusterDamageReduction())); + amount *= (float) (1.0D - reduction); + } + Player attacker = antarchy$resolvePlayer(source); + if (attacker != null && amount > 0.0F && JudgmentMarkManager.isMarkedBy(attacker, target)) { + return amount * (float) RoyalGuardianArmorItem.judgmentDamageMultiplier(attacker); + } + return amount; + } + + @Inject(method = "hurt", at = @At("RETURN")) + private void antarchy$markAfterHit(DamageSource source, float amount, + CallbackInfoReturnable cir) { + if (!cir.getReturnValue() || amount <= 0.0F + || com.craisinlord.antarchy.content.item.RoyalGuardianSwordAbilities.isApplyingSecondaryDamage()) { + return; + } + LivingEntity target = (LivingEntity) (Object) this; + Player attacker = antarchy$resolvePlayer(source); + if (attacker != null) { + JudgmentMarkManager.recordSuccessfulHit(attacker, target); + } + } + + private static Player antarchy$resolvePlayer(DamageSource source) { + Entity attacker = source.getEntity(); + if (attacker instanceof Player player) { + return player; + } + if (source.getDirectEntity() instanceof Projectile projectile && projectile.getOwner() instanceof Player player) { + return player; + } + return null; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/RoyalLootItemGlowMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/RoyalLootItemGlowMixin.java new file mode 100644 index 00000000..8ce132a4 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/RoyalLootItemGlowMixin.java @@ -0,0 +1,16 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.entity.royal.RoyalLootDropGlow; +import net.minecraft.world.entity.item.ItemEntity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(ItemEntity.class) +public abstract class RoyalLootItemGlowMixin { + @Inject(method = "tick", at = @At("HEAD")) + private void antarchy$tickRoyalLootGlow(CallbackInfo ci) { + RoyalLootDropGlow.tick((ItemEntity) (Object) this); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/ServerPlayerGameModeMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/ServerPlayerGameModeMixin.java index 1ae1efb7..6c92338b 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/ServerPlayerGameModeMixin.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/ServerPlayerGameModeMixin.java @@ -14,9 +14,6 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(ServerPlayerGameMode.class) -/* - * Keeps custom sapling stage updates synced like vanilla. - */ public abstract class ServerPlayerGameModeMixin { @Shadow protected ServerLevel level; @Shadow @Final protected ServerPlayer player; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/ServerPlayerRoyalBoundaryMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/ServerPlayerRoyalBoundaryMixin.java new file mode 100644 index 00000000..25978774 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/ServerPlayerRoyalBoundaryMixin.java @@ -0,0 +1,16 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.effect.RoyalBoundaryManager; +import net.minecraft.server.level.ServerPlayer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(ServerPlayer.class) +public abstract class ServerPlayerRoyalBoundaryMixin { + @Inject(method = "tick", at = @At("TAIL")) + private void antarchy$tickRoyalBoundary(CallbackInfo ci) { + RoyalBoundaryManager.tickOwner((ServerPlayer) (Object) this); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/SquidzookaEnchantMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/SquidzookaEnchantMixin.java deleted file mode 100644 index 13119272..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/SquidzookaEnchantMixin.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.craisinlord.antarchy.mixins; - -import com.craisinlord.antarchy.content.AntarchyTags; -import net.minecraft.core.HolderGetter; -import net.minecraft.core.HolderSet; -import net.minecraft.tags.ItemTags; -import net.minecraft.tags.TagKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.enchantment.Enchantments; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -@Mixin(Enchantments.class) -public abstract class SquidzookaEnchantMixin { - @Redirect( - method = "bootstrap", - at = @At(value = "INVOKE", target = "Lnet/minecraft/core/HolderGetter;getOrThrow(Lnet/minecraft/tags/TagKey;)Lnet/minecraft/core/HolderSet$Named;"), - slice = @org.spongepowered.asm.mixin.injection.Slice( - from = @At(value = "FIELD", target = "Lnet/minecraft/world/item/enchantment/Enchantments;MULTISHOT:Lnet/minecraft/resources/ResourceKey;"), - to = @At(value = "FIELD", target = "Lnet/minecraft/world/item/enchantment/Enchantments;QUICK_CHARGE:Lnet/minecraft/resources/ResourceKey;") - ) - ) - private static HolderSet.Named antarchy$allowSquidzookaForMultishot(HolderGetter holderGetter, TagKey tag) { - if (tag.location().equals(new ResourceLocation("minecraft", "enchantable/crossbow"))) { - return holderGetter.getOrThrow(AntarchyTags.Items.MULTISHOT_ENCHANTABLE); - } - - return holderGetter.getOrThrow(tag); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/StinkyLivingEntityMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/StinkyLivingEntityMixin.java deleted file mode 100644 index 8cd675a7..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/StinkyLivingEntityMixin.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.craisinlord.antarchy.mixins; - -import com.craisinlord.antarchy.content.AntarchyObjects; -import com.craisinlord.antarchy.content.effect.StinkyBehavior; -import net.minecraft.world.entity.LivingEntity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(LivingEntity.class) -public abstract class StinkyLivingEntityMixin { - @Inject(method = "tick", at = @At("TAIL")) - private void antarchy$tickStinkyTrail(CallbackInfo ci) { - LivingEntity livingEntity = (LivingEntity) (Object) this; - if (livingEntity.hasEffect(AntarchyObjects.STINKY_EFFECT.get())) { - StinkyBehavior.tickStinkyTrail(livingEntity); - } - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/ThoraxisCeilingSpawnMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/ThoraxisCeilingSpawnMixin.java new file mode 100644 index 00000000..8e551169 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/ThoraxisCeilingSpawnMixin.java @@ -0,0 +1,60 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.llamalad7.mixinextras.sugar.Local; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.SpawnPlacements; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.NaturalSpawner; +import net.minecraft.world.level.biome.MobSpawnSettings; +import net.minecraft.world.phys.AABB; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(NaturalSpawner.class) +public abstract class ThoraxisCeilingSpawnMixin { + @WrapOperation( + method = "isValidSpawnPostitionForType", + at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/NaturalSpawner;isSpawnPositionOk(Lnet/minecraft/world/entity/SpawnPlacements$Type;Lnet/minecraft/world/level/LevelReader;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/entity/EntityType;)Z") + ) + private static boolean antarchy$allowCeilingPlacement(SpawnPlacements.Type placementType, LevelReader level, BlockPos pos, EntityType type, + Operation original) { + if (level instanceof ServerLevel serverLevel && ThoraxisUndersideManager.isUndersideCeilingSpawn(type, serverLevel, pos)) { + return true; + } + return original.call(placementType, level, pos, type); + } + + @WrapOperation( + method = "isValidSpawnPostitionForType", + at = @At(value = "INVOKE", target = "Lnet/minecraft/server/level/ServerLevel;noCollision(Lnet/minecraft/world/phys/AABB;)Z") + ) + private static boolean antarchy$checkCeilingSpawnBounds(ServerLevel level, AABB bounds, Operation original, + @Local(argsOnly = true) MobSpawnSettings.SpawnerData spawnerData, + @Local(argsOnly = true) BlockPos.MutableBlockPos pos) { + if (ThoraxisUndersideManager.isUndersideCeilingSpawn(spawnerData.type, level, pos)) { + return original.call(level, ThoraxisUndersideManager.ceilingSpawnBounds(spawnerData.type, pos)); + } + return original.call(level, bounds); + } + + @WrapOperation( + method = "spawnCategoryForPosition(Lnet/minecraft/world/entity/MobCategory;Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/world/level/chunk/ChunkAccess;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/NaturalSpawner$SpawnPredicate;Lnet/minecraft/world/level/NaturalSpawner$AfterSpawnCallback;)V", + at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Mob;moveTo(DDDFF)V") + ) + private static void antarchy$placeCeilingSpawn(Mob mob, double x, double y, double z, float yRot, float xRot, Operation original, + @Local(argsOnly = true) ServerLevel level) { + BlockPos pos = BlockPos.containing(x, y, z); + if (ThoraxisUndersideManager.isUndersideCeilingSpawn(mob.getType(), level, pos)) { + original.call(mob, x, ThoraxisUndersideManager.ceilingSpawnFeetY(mob.getType(), pos, mob.getBbHeight()), z, yRot, xRot); + ThoraxisUndersideManager.applyUndersideInversion(mob); + return; + } + original.call(mob, x, y, z, yRot, xRot); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/UndertrialSpawnPlacementsMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/UndertrialSpawnPlacementsMixin.java new file mode 100644 index 00000000..a20a6cd6 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/UndertrialSpawnPlacementsMixin.java @@ -0,0 +1,26 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.block.entity.UndertrialSpawnContext; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.entity.SpawnPlacements; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(SpawnPlacements.class) +public abstract class UndertrialSpawnPlacementsMixin { + @Inject(method = "checkSpawnRules", at = @At("RETURN"), cancellable = true) + private static void antarchy$allowUndertrialSpawn( + net.minecraft.world.entity.EntityType entityType, + net.minecraft.world.level.ServerLevelAccessor level, + MobSpawnType spawnReason, + net.minecraft.core.BlockPos pos, + net.minecraft.util.RandomSource random, + CallbackInfoReturnable cir) { + if (!cir.getReturnValueZ() + && UndertrialSpawnContext.isTrialSpawn(spawnReason)) { + cir.setReturnValue(true); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/BlockEntityRenderDispatcherPortalMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/BlockEntityRenderDispatcherPortalMixin.java deleted file mode 100644 index 80c29e75..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/BlockEntityRenderDispatcherPortalMixin.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.craisinlord.antarchy.mixins.client; - -import com.craisinlord.antarchy.content.client.PortalGunPortalRenderState; -import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.renderer.blockentity.BlockEntityRenderDispatcher; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.core.BlockPos; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.phys.AABB; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(BlockEntityRenderDispatcher.class) -public abstract class BlockEntityRenderDispatcherPortalMixin { - @Inject(method = "render(Lnet/minecraft/world/level/block/entity/BlockEntity;FLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;)V", at = @At("HEAD"), cancellable = true) - private void antarchy$clipPortalViewBlockEntities(E blockEntity, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, CallbackInfo ci) { - if (PortalGunPortalRenderState.renderAll() || blockEntity == null || blockEntity.isRemoved()) { - return; - } - BlockPos pos = blockEntity.getBlockPos(); - AABB bounds = new AABB(pos); - if (!PortalGunPortalRenderState.shouldRenderBounds(bounds)) { - ci.cancel(); - } - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/CustomBossBarMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/CustomBossBarMixin.java index 02939a73..47a9b1c7 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/CustomBossBarMixin.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/CustomBossBarMixin.java @@ -38,6 +38,6 @@ public abstract class CustomBossBarMixin { @ModifyConstant(method = "render", constant = @Constant(intValue = 9, ordinal = 1)) private int antarchy$doubleGapForCustomBossBar(int original, @Local LerpingBossEvent bossEvent) { - return CustomBossBarRenderer.isCustomBoss(bossEvent) ? original + 19 : original; + return CustomBossBarRenderer.isCustomBoss(bossEvent) ? original + 30 : original; } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/ElythiaSkyMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/ElythiaSkyMixin.java index ebb156c6..c126a78e 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/ElythiaSkyMixin.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/ElythiaSkyMixin.java @@ -1,6 +1,7 @@ package com.craisinlord.antarchy.mixins.client; import com.craisinlord.antarchy.content.client.renderer.ElythiaSkyRenderer; +import com.craisinlord.antarchy.content.client.renderer.ThoraxisUndersideSkyRenderer; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexBuffer; import net.minecraft.client.Camera; @@ -38,6 +39,21 @@ public abstract class ElythiaSkyMixin { @Inject(method = "renderSky", at = @At("HEAD"), cancellable = true) private void antarchy$renderElythiaSky(PoseStack poseStack, Matrix4f projectionMatrix, float partialTick, Camera camera, boolean isFoggy, Runnable setupFog, CallbackInfo ci) { + if (this.level != null && ThoraxisUndersideSkyRenderer.shouldRender(this.level, camera)) { + ThoraxisUndersideSkyRenderer.render( + this.minecraft, + poseStack, + projectionMatrix, + partialTick, + camera, + isFoggy, + setupFog, + this.skyBuffer + ); + ci.cancel(); + return; + } + if (this.level == null || !ElythiaSkyRenderer.shouldRender(this.level)) { return; } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/EntityBoundSoundInstanceAccessor.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/EntityBoundSoundInstanceAccessor.java deleted file mode 100644 index cad45d2e..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/EntityBoundSoundInstanceAccessor.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.craisinlord.antarchy.mixins.client; - -import net.minecraft.client.resources.sounds.EntityBoundSoundInstance; -import net.minecraft.world.entity.Entity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(EntityBoundSoundInstance.class) -public interface EntityBoundSoundInstanceAccessor { - @Accessor("entity") - Entity antarchy$getEntity(); -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/EntityRenderDispatcherPortalMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/EntityRenderDispatcherPortalMixin.java deleted file mode 100644 index 0d173694..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/EntityRenderDispatcherPortalMixin.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.craisinlord.antarchy.mixins.client; - -import com.craisinlord.antarchy.content.client.PortalGunPortalRenderState; -import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; -import net.minecraft.client.renderer.culling.Frustum; -import net.minecraft.client.renderer.entity.EntityRenderDispatcher; -import net.minecraft.world.entity.Entity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(EntityRenderDispatcher.class) -public abstract class EntityRenderDispatcherPortalMixin { - @Inject(method = "shouldRender", at = @At("HEAD"), cancellable = true) - private void antarchy$clipPortalViewEntities(E entity, Frustum frustum, double x, double y, double z, CallbackInfoReturnable cir) { - if (PortalGunPortalRenderState.renderAll() || entity instanceof PortalGunPortalEntity) { - return; - } - if (!PortalGunPortalRenderState.shouldRenderBounds(entity.getBoundingBox())) { - cir.setReturnValue(false); - } - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/GameRendererSwingThroughGrassMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/GameRendererSwingThroughGrassMixin.java index a29867dc..32e3bb1f 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/GameRendererSwingThroughGrassMixin.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/GameRendererSwingThroughGrassMixin.java @@ -1,117 +1,64 @@ package com.craisinlord.antarchy.mixins.client; +import com.craisinlord.antarchy.compat.entity.EntityReach; import com.craisinlord.antarchy.config.AntarchySettings; import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.projectile.ProjectileUtil; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.EntityHitResult; import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.ModifyArg; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import org.spongepowered.asm.mixin.injection.callback.LocalCapture; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(GameRenderer.class) public abstract class GameRendererSwingThroughGrassMixin { @Shadow + @Final private Minecraft minecraft; - @Shadow - private static HitResult filterHitResult(HitResult hitResult, Vec3 eyePosition, double range) { - throw new AssertionError(); - } - - @Unique - private Double antarchy$swingThroughReachSq; - - @Inject( - method = "pick(Lnet/minecraft/world/entity/Entity;DDF)Lnet/minecraft/world/phys/HitResult;", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/world/phys/HitResult;getLocation()Lnet/minecraft/world/phys/Vec3;" - ), - locals = LocalCapture.CAPTURE_FAILHARD - ) - private void antarchy$cacheSwingThroughReach( - Entity entity, - double blockInteractionRange, - double entityInteractionRange, - float partialTick, - CallbackInfoReturnable cir, - double maxRange, - double maxRangeSq, - Vec3 eyePosition, - HitResult hitResult - ) { - this.antarchy$swingThroughReachSq = null; + @Inject(method = "pick(F)V", at = @At("TAIL")) + private void antarchy$preferAttackableEntityBehindGrass(float partialTick, CallbackInfo ci) { if (!AntarchySettings.swingThroughGrassEnabled()) { return; } - - if (!(hitResult instanceof BlockHitResult blockHitResult) || hitResult.getType() != HitResult.Type.BLOCK) { - return; - } - + Entity cameraEntity = this.minecraft.getCameraEntity(); ClientLevel level = this.minecraft.level; - if (level == null) { + if (cameraEntity == null || level == null || this.minecraft.gameMode == null) { + return; + } + if (!(this.minecraft.hitResult instanceof BlockHitResult blockHitResult) || blockHitResult.getType() != HitResult.Type.BLOCK) { + return; + } + BlockPos blockPos = blockHitResult.getBlockPos(); + if (!level.getBlockState(blockPos).getCollisionShape(level, blockPos).isEmpty()) { return; } - BlockPos blockPos = blockHitResult.getBlockPos(); - if (level.getBlockState(blockPos).getCollisionShape(level, blockPos).isEmpty()) { - this.antarchy$swingThroughReachSq = maxRangeSq; - } - } - - @ModifyArg( - method = "pick(Lnet/minecraft/world/entity/Entity;DDF)Lnet/minecraft/world/phys/HitResult;", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/world/entity/projectile/ProjectileUtil;getEntityHitResult(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/phys/Vec3;Lnet/minecraft/world/phys/Vec3;Lnet/minecraft/world/phys/AABB;Ljava/util/function/Predicate;D)Lnet/minecraft/world/phys/EntityHitResult;" - ), - index = 5 - ) - private double antarchy$useOriginalReachForEntityRaycast(double rangeSq) { - return this.antarchy$swingThroughReachSq == null ? rangeSq : this.antarchy$swingThroughReachSq; - } - - @Inject( - method = "pick(Lnet/minecraft/world/entity/Entity;DDF)Lnet/minecraft/world/phys/HitResult;", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/world/phys/EntityHitResult;getLocation()Lnet/minecraft/world/phys/Vec3;" - ), - cancellable = true, - locals = LocalCapture.CAPTURE_FAILHARD - ) - private void antarchy$preferAttackableEntityBehindGrass( - Entity entity, - double blockInteractionRange, - double entityInteractionRange, - float partialTick, - CallbackInfoReturnable cir, - double maxRange, - double maxRangeSq, - Vec3 eyePosition, - HitResult blockHitResult, - double blockHitDistanceSq, - Vec3 viewVector, - Vec3 reachEnd, - float unused, - AABB aabb, - EntityHitResult entityHitResult - ) { - if (this.antarchy$swingThroughReachSq == null || entityHitResult == null) { + double blockInteractionRange = this.minecraft.gameMode.getPickRange(); + double entityInteractionRange = antarchy$entityInteractionRange(cameraEntity); + double maxRange = Math.max(blockInteractionRange, entityInteractionRange); + double maxRangeSq = maxRange * maxRange; + Vec3 eyePosition = cameraEntity.getEyePosition(partialTick); + Vec3 viewVector = cameraEntity.getViewVector(1.0F); + Vec3 reachEnd = eyePosition.add(viewVector.x * maxRange, viewVector.y * maxRange, viewVector.z * maxRange); + AABB searchBox = cameraEntity.getBoundingBox().expandTowards(viewVector.scale(maxRange)).inflate(1.0D, 1.0D, 1.0D); + EntityHitResult entityHitResult = ProjectileUtil.getEntityHitResult(cameraEntity, eyePosition, reachEnd, searchBox, + candidate -> !candidate.isSpectator() && candidate.isPickable(), maxRangeSq); + if (entityHitResult == null) { return; } @@ -124,8 +71,27 @@ public abstract class GameRendererSwingThroughGrassMixin { return; } - if (eyePosition.distanceToSqr(hitEntity.position()) < this.antarchy$swingThroughReachSq) { - cir.setReturnValue(filterHitResult(entityHitResult, eyePosition, entityInteractionRange)); + if (eyePosition.distanceToSqr(hitEntity.position()) < maxRangeSq) { + Vec3 location = entityHitResult.getLocation(); + if (!location.closerThan(eyePosition, entityInteractionRange)) { + Vec3 direction = location.subtract(eyePosition); + this.minecraft.hitResult = BlockHitResult.miss(location, Direction.getNearest(direction.x, direction.y, direction.z), BlockPos.containing(location)); + this.minecraft.crosshairPickEntity = null; + } else { + this.minecraft.hitResult = entityHitResult; + this.minecraft.crosshairPickEntity = hitEntity; + } } } + + @Unique + private double antarchy$entityInteractionRange(Entity cameraEntity) { + if (this.minecraft.gameMode != null && this.minecraft.gameMode.hasFarPickRange()) { + return 6.0D; + } + if (cameraEntity instanceof Player player) { + return EntityReach.entityInteractionRange(player); + } + return EntityReach.DEFAULT_ENTITY_INTERACTION_RANGE; + } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/GlimmeringTranslucencyMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/GlimmeringTranslucencyMixin.java index 3cdd149d..20128ce8 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/GlimmeringTranslucencyMixin.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/GlimmeringTranslucencyMixin.java @@ -17,8 +17,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(LivingEntityRenderer.class) public abstract class GlimmeringTranslucencyMixin { - // Vertex-color alpha applied to the base skin render while glimmering, on top of the recolor - // overlay, so the body itself reads as see-through rather than just tinted. private static final float GLIMMERING_ALPHA = 0x26 / 255.0F; @Unique @@ -55,8 +53,6 @@ public abstract class GlimmeringTranslucencyMixin { @Shadow protected abstract RenderType getRenderType(T entity, boolean bodyVisible, boolean translucent, boolean glowingEffect); - // 1.20.1's EntityModel#renderToBuffer takes separate red/green/blue/alpha floats instead of a - // packed color int (1.21.1), so only the alpha argument (index 7) needs modifying here. @ModifyArg( method = "render(Lnet/minecraft/world/entity/LivingEntity;FFLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;I)V", at = @At( diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/HoverboardRiderPoseMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/HoverboardRiderPoseMixin.java index 2fe29eb7..a095297c 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/HoverboardRiderPoseMixin.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/HoverboardRiderPoseMixin.java @@ -24,11 +24,10 @@ public abstract class HoverboardRiderPoseMixin humanoidModel) { + float correction = (float) Math.toRadians(HOVERBOARD_RIDER_RENDER_YAW); + humanoidModel.head.yRot -= correction; + humanoidModel.hat.yRot -= correction; + humanoidModel.body.zRot -= (float) Math.toRadians(HOVERBOARD_RIDER_TORSO_ROLL); + } + } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/InventoryScreenRotationBypassMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/InventoryScreenRotationBypassMixin.java index 26e94c31..209960b7 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/InventoryScreenRotationBypassMixin.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/InventoryScreenRotationBypassMixin.java @@ -1,6 +1,6 @@ package com.craisinlord.antarchy.mixins.client; -import com.craisinlord.antarchy.content.time.TimeDilationApi; +import com.craisinlord.anthology.time.TimeDilationApi; import net.minecraft.client.gui.screens.inventory.InventoryScreen; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/LightningBoltRendererMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/LightningBoltRendererMixin.java deleted file mode 100644 index 538f65c1..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/LightningBoltRendererMixin.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.craisinlord.antarchy.mixins.client; - -import com.craisinlord.antarchy.content.client.ThoraxisWeatherClientState; -import com.craisinlord.antarchy.content.weather.ThoraxisWeatherKind; -import com.mojang.blaze3d.vertex.VertexConsumer; -import net.minecraft.client.renderer.entity.LightningBoltRenderer; -import net.minecraft.world.entity.LightningBolt; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.Redirect; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(LightningBoltRenderer.class) -public abstract class LightningBoltRendererMixin { - @Unique - private static final ThreadLocal antarchy$redLightning = ThreadLocal.withInitial(() -> false); - - @Inject(method = "render", at = @At("HEAD")) - private void antarchy$markRedLightning(LightningBolt bolt, float entityYaw, float partialTick, com.mojang.blaze3d.vertex.PoseStack poseStack, net.minecraft.client.renderer.MultiBufferSource buffer, int packedLight, CallbackInfo ci) { - ThoraxisWeatherClientState.ThoraxisWeatherState weather = ThoraxisWeatherClientState.current(bolt.level()); - antarchy$redLightning.set(weather != null - && weather.kind() == ThoraxisWeatherKind.INVERSION_STORM - && weather.anchor().closerToCenterThan(bolt.position(), 64.0D)); - } - - @Inject(method = "render", at = @At("RETURN")) - private void antarchy$clearRedLightning(LightningBolt bolt, float entityYaw, float partialTick, com.mojang.blaze3d.vertex.PoseStack poseStack, net.minecraft.client.renderer.MultiBufferSource buffer, int packedLight, CallbackInfo ci) { - antarchy$redLightning.remove(); - } - - @Redirect( - method = "quad", - at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/vertex/VertexConsumer;color(FFFF)Lcom/mojang/blaze3d/vertex/VertexConsumer;") - ) - private static VertexConsumer antarchy$tintLightning(VertexConsumer consumer, float red, float green, float blue, float alpha) { - if (Boolean.TRUE.equals(antarchy$redLightning.get())) { - return consumer.color(0.95F, 0.12F, 0.12F, 0.35F); - } - - return consumer.color(red, green, blue, alpha); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/LocalPlayerPortalMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/LocalPlayerPortalMixin.java deleted file mode 100644 index ec680db5..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/LocalPlayerPortalMixin.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.craisinlord.antarchy.mixins.client; - -import com.craisinlord.antarchy.content.client.PortalGunRollClientState; -import net.minecraft.client.Minecraft; -import net.minecraft.client.player.LocalPlayer; -import net.minecraft.core.BlockPos; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(LocalPlayer.class) -public abstract class LocalPlayerPortalMixin { - @Inject(method = "suffocatesAt", at = @At("HEAD"), cancellable = true) - private void antarchy$ignorePortalSuffocation(BlockPos pos, CallbackInfoReturnable cir) { - Minecraft minecraft = Minecraft.getInstance(); - if (minecraft.player != null && PortalGunRollClientState.isEntityInsidePortal(minecraft, minecraft.player)) { - cir.setReturnValue(false); - } - } - - @Inject(method = "moveTowardsClosestSpace", at = @At("HEAD"), cancellable = true) - private void antarchy$cancelPortalPushOut(double x, double z, CallbackInfo ci) { - Minecraft minecraft = Minecraft.getInstance(); - if (minecraft.player != null && PortalGunRollClientState.isEntityInsidePortal(minecraft, minecraft.player)) { - ci.cancel(); - } - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/MountedVehicleCameraMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/MountedVehicleCameraMixin.java index 2a8730d8..f5dc0c3e 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/MountedVehicleCameraMixin.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/MountedVehicleCameraMixin.java @@ -1,49 +1,51 @@ package com.craisinlord.antarchy.mixins.client; -import com.craisinlord.antarchy.content.entity.DorrieEntity; import com.craisinlord.antarchy.content.entity.HerculesBeetleEntity; import net.minecraft.client.Camera; import net.minecraft.world.entity.Entity; -import net.minecraft.world.level.BlockGetter; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyArgs; -import org.spongepowered.asm.mixin.injection.invoke.arg.Args; +import org.spongepowered.asm.mixin.injection.ModifyArg; @Mixin(Camera.class) public abstract class MountedVehicleCameraMixin { @Shadow private Entity entity; - @ModifyArgs( + @Shadow + private boolean detached; + + @ModifyArg( method = "setup", - at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Camera;move(DDD)V") + at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Camera;move(DDD)V"), + index = 0 ) - private void antarchy$adjustMountedCameraOffset( - Args args, - BlockGetter level, - Entity entity, - boolean detached, - boolean mirrored, - float partialTick - ) { - if (!detached || this.entity == null || this.entity.getVehicle() == null) { - return; - } + private double antarchy$adjustMountedCameraX(double value) { + return this.antarchy$ridingHerculesBeetle() ? value * 1.45D : value; + } - Entity vehicle = this.entity.getVehicle(); - if (vehicle instanceof HerculesBeetleEntity) { - args.set(0, (Double) args.get(0) * 1.45D); - args.set(1, (Double) args.get(1) + 0.2D); - args.set(2, (Double) args.get(2) + 0.45D); - return; - } + @ModifyArg( + method = "setup", + at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Camera;move(DDD)V"), + index = 1 + ) + private double antarchy$adjustMountedCameraY(double value) { + return this.antarchy$ridingHerculesBeetle() ? value + 0.2D : value; + } -// if (vehicle instanceof DorrieEntity) { -// args.set(0, (Double) args.get(0) * 0.25D); -// args.set(1, (Double) args.get(1) + 0.1D); -// args.set(2, (Double) args.get(2) + 0.55D); -// } + @ModifyArg( + method = "setup", + at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Camera;move(DDD)V"), + index = 2 + ) + private double antarchy$adjustMountedCameraZ(double value) { + return this.antarchy$ridingHerculesBeetle() ? value + 0.45D : value; + } + + @Unique + private boolean antarchy$ridingHerculesBeetle() { + return this.detached && this.entity != null && this.entity.getVehicle() instanceof HerculesBeetleEntity; } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/PortalGunZoomFovMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/PortalGunZoomFovMixin.java new file mode 100644 index 00000000..b3b6b4b2 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/PortalGunZoomFovMixin.java @@ -0,0 +1,18 @@ +package com.craisinlord.antarchy.mixins.client; + +import com.craisinlord.antarchy.content.client.PortalGunZoomClientState; +import net.minecraft.client.Camera; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GameRenderer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(GameRenderer.class) +public abstract class PortalGunZoomFovMixin { + @Inject(method = "getFov", at = @At("RETURN"), cancellable = true) + private void antarchy$applyPortalGunZoom(Camera camera, float partialTick, boolean useFovSetting, CallbackInfoReturnable cir) { + cir.setReturnValue(PortalGunZoomClientState.applyFov(cir.getReturnValue(), partialTick, Minecraft.getInstance().options)); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/QueenMusicManagerMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/QueenMusicManagerMixin.java new file mode 100644 index 00000000..566b7fce --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/QueenMusicManagerMixin.java @@ -0,0 +1,18 @@ +package com.craisinlord.antarchy.mixins.client; + +import com.craisinlord.antarchy.content.client.QueenMusicHandler; +import net.minecraft.client.sounds.MusicManager; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(MusicManager.class) +public abstract class QueenMusicManagerMixin { + @Inject(method = "tick", at = @At("HEAD"), cancellable = true) + private void antarchy$pauseVanillaMusicWhileQueenMusicIsPlaying(CallbackInfo ci) { + if (QueenMusicHandler.isPlaying()) { + ci.cancel(); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/ScreenEffectRendererPortalMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/ScreenEffectRendererPortalMixin.java deleted file mode 100644 index 49327550..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/ScreenEffectRendererPortalMixin.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.craisinlord.antarchy.mixins.client; - -import com.craisinlord.antarchy.content.client.PortalGunRollClientState; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.ScreenEffectRenderer; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.block.Blocks; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(ScreenEffectRenderer.class) -public abstract class ScreenEffectRendererPortalMixin { - @Inject(method = "getViewBlockingState", at = @At("HEAD"), cancellable = true) - private static void antarchy$ignorePortalViewBlock(Player player, CallbackInfoReturnable cir) { - Minecraft minecraft = Minecraft.getInstance(); - if (player != null && PortalGunRollClientState.isEntityInsidePortal(minecraft, player)) { - cir.setReturnValue(Blocks.AIR.defaultBlockState()); - } - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/TemporalContractionLivingRendererMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/TemporalContractionLivingRendererMixin.java new file mode 100644 index 00000000..3968ef2f --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/TemporalContractionLivingRendererMixin.java @@ -0,0 +1,28 @@ +package com.craisinlord.antarchy.mixins.client; + +import com.craisinlord.antarchy.content.client.renderer.TemporalContractionAfterimageLayer; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.model.EntityModel; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.entity.LivingEntityRenderer; +import net.minecraft.client.renderer.entity.layers.RenderLayer; +import net.minecraft.world.entity.LivingEntity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(LivingEntityRenderer.class) +public abstract class TemporalContractionLivingRendererMixin> { + @Invoker("addLayer") + protected abstract boolean antarchy$addLayer(RenderLayer layer); + + @Inject(method = "", at = @At("RETURN")) + private void antarchy$addTemporalContractionLayer(EntityRendererProvider.Context context, M model, + float shadowRadius, CallbackInfo callbackInfo) { + LivingEntityRenderer renderer = (LivingEntityRenderer) (Object) this; + this.antarchy$addLayer(new TemporalContractionAfterimageLayer<>(renderer)); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/compat/biolith/MultiNoiseBiomeSourceNullGuardMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/compat/biolith/MultiNoiseBiomeSourceNullGuardMixin.java new file mode 100644 index 00000000..ef573b72 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/compat/biolith/MultiNoiseBiomeSourceNullGuardMixin.java @@ -0,0 +1,38 @@ +package com.craisinlord.antarchy.mixins.compat.biolith; + +import net.minecraft.core.Holder; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.biome.Climate; +import net.minecraft.world.level.biome.MultiNoiseBiomeSource; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(MultiNoiseBiomeSource.class) +public abstract class MultiNoiseBiomeSourceNullGuardMixin { + @Shadow + protected abstract Climate.ParameterList> parameters(); + + @Inject(method = "getNoiseBiome(IIILnet/minecraft/world/level/biome/Climate$Sampler;)Lnet/minecraft/core/Holder;", at = @At("RETURN"), cancellable = true) + private void antarchy$neverReturnNullBiome(int x, int y, int z, Climate.Sampler sampler, CallbackInfoReturnable> cir) { + if (cir.getReturnValue() != null) { + return; + } + + Climate.ParameterList> parameters = this.parameters(); + Holder biome = parameters.findValue(sampler.sample(x, y, z)); + if (biome != null) { + cir.setReturnValue(biome); + return; + } + + for (var entry : parameters.values()) { + if (entry.getSecond() != null) { + cir.setReturnValue(entry.getSecond()); + return; + } + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/compat/stellarview/StellarViewLunaDirectionMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/compat/stellarview/StellarViewLunaDirectionMixin.java new file mode 100644 index 00000000..5a2a9678 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/compat/stellarview/StellarViewLunaDirectionMixin.java @@ -0,0 +1,49 @@ +package com.craisinlord.antarchy.mixins.compat.stellarview; + +import com.craisinlord.antarchy.content.client.MoonSkyTracker; +import com.craisinlord.anthology.portal.client.PortalSceneRenderer; +import com.mojang.blaze3d.vertex.Tesselator; +import java.lang.reflect.Field; +import net.minecraft.client.Camera; +import net.minecraft.client.multiplayer.ClientLevel; +import org.joml.Matrix4f; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Pseudo; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Coerce; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Pseudo +@Mixin(targets = "net.povstalec.stellarview.client.render.space_objects.distinct.LunaRenderer", remap = false) +public abstract class StellarViewLunaDirectionMixin { + @Unique + private static Field antarchy$thetaField; + @Unique + private static Field antarchy$phiField; + @Unique + private static boolean antarchy$fieldsUnavailable; + + @Inject(method = "renderTextureLayers", at = @At("HEAD"), remap = false, require = 0) + private void antarchy$recordMoonDirection(@Coerce Object viewCenter, ClientLevel level, Camera camera, Tesselator tesselator, + Matrix4f lastMatrix, @Coerce Object sphericalCoords, long ticks, double distance, + float partialTicks, CallbackInfo ci) { + if (PortalSceneRenderer.isRenderingScene() || sphericalCoords == null || camera == null || lastMatrix == null) { + return; + } + if (antarchy$fieldsUnavailable) { + return; + } + try { + if (antarchy$thetaField == null || antarchy$phiField == null) { + antarchy$thetaField = sphericalCoords.getClass().getField("theta"); + antarchy$phiField = sphericalCoords.getClass().getField("phi"); + } + MoonSkyTracker.recordSphericalMoon(level, camera, lastMatrix, + antarchy$thetaField.getDouble(sphericalCoords), antarchy$phiField.getDouble(sphericalCoords)); + } catch (ReflectiveOperationException | RuntimeException exception) { + antarchy$fieldsUnavailable = true; + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/AbstractArrowGravityMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/AbstractArrowGravityMixin.java deleted file mode 100644 index 9a0c1a6a..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/AbstractArrowGravityMixin.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; -import com.craisinlord.antarchy.config.AntarchySettings; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.entity.projectile.AbstractArrow; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(AbstractArrow.class) -/* - * Flips arrow gravity for inverted shooters. - */ -public abstract class AbstractArrowGravityMixin { - - @WrapOperation(method = "tick", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/entity/projectile/AbstractArrow;setDeltaMovement(DDD)V")) - private void antarchy$fixArrowGravityDroop(AbstractArrow instance, double x, double y, double z, Operation original) { - if (!AntarchySettings.invertProjectilesFromInvertedPlayers()) { - original.call(instance, x, y, z); - return; - } - Entity owner = instance.getOwner(); - if (!(owner instanceof Player player)) { - original.call(instance, x, y, z); - return; - } - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(player); - if (!direction.isInverted()) { - original.call(instance, x, y, z); - return; - } - Vec3 velocity = new Vec3(x, y + 0.05D, z); - velocity = AntarchyGravityRotationUtil.vecWorldToPlayer(velocity, direction); - velocity = new Vec3(velocity.x, velocity.y - 0.05D, velocity.z); - velocity = AntarchyGravityRotationUtil.vecPlayerToWorld(velocity, direction); - original.call(instance, velocity.x, velocity.y, velocity.z); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/BehaviorUtilsGravityMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/BehaviorUtilsGravityMixin.java deleted file mode 100644 index 62b95f14..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/BehaviorUtilsGravityMixin.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; -import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import com.llamalad7.mixinextras.sugar.Local; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.ai.behavior.BehaviorUtils; -import net.minecraft.world.entity.item.ItemEntity; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.Level; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(BehaviorUtils.class) -public abstract class BehaviorUtilsGravityMixin { - @WrapOperation( - method = "throwItem(Lnet/minecraft/world/entity/LivingEntity;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/phys/Vec3;Lnet/minecraft/world/phys/Vec3;F)V", - at = @At( - value = "NEW", - target = "(Lnet/minecraft/world/level/Level;DDDLnet/minecraft/world/item/ItemStack;)Lnet/minecraft/world/entity/item/ItemEntity;" - ) - ) - private static ItemEntity antarchy$fixThrownItemSpawn( - Level level, - double x, - double y, - double z, - ItemStack stack, - Operation original, - @Local float yOffset, - @Local LivingEntity entity - ) { - if (!antarchy$shouldInvertThrownItem(entity)) { - return original.call(level, x, y, z, stack); - } - - Vec3 eyeOffset = AntarchyGravityRotationUtil.getEyeOffset(entity, entity.getEyeHeight()); - Vec3 offset = eyeOffset.normalize().scale(yOffset); - Vec3 itemPos = entity.position().add(eyeOffset).subtract(offset); - ItemEntity itemEntity = original.call(level, itemPos.x(), itemPos.y(), itemPos.z(), stack); - AntarchyGravityApi.setGravityDirection(itemEntity, AntarchyGravityApi.getGravityDirection(entity)); - return itemEntity; - } - - @WrapOperation( - method = "throwItem(Lnet/minecraft/world/entity/LivingEntity;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/phys/Vec3;Lnet/minecraft/world/phys/Vec3;F)V", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/world/entity/item/ItemEntity;setDeltaMovement(Lnet/minecraft/world/phys/Vec3;)V" - ) - ) - private static void antarchy$fixThrownItemVelocity( - ItemEntity itemEntity, - Vec3 deltaMovement, - Operation original, - @Local LivingEntity entity - ) { - if (!antarchy$shouldInvertThrownItem(entity)) { - original.call(itemEntity, deltaMovement); - return; - } - - AntarchyGravityApi.setWorldVelocity(itemEntity, deltaMovement); - } - - private static boolean antarchy$shouldInvertThrownItem(LivingEntity entity) { - return AntarchyGravityApi.isGravityInverted(entity) - && ThoraxisUndersideManager.isThoraxis(entity.level()) - && entity.getY() < ThoraxisUndersideManager.GRAVITY_FLIP_Y; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/BucketItemGravityMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/BucketItemGravityMixin.java deleted file mode 100644 index 6cc293e7..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/BucketItemGravityMixin.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.stats.Stats; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.InteractionResultHolder; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.BucketItem; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.ItemUtils; -import net.minecraft.world.level.ClipContext; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.LiquidBlockContainer; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.material.Fluid; -import net.minecraft.world.level.material.Fluids; -import net.minecraft.world.phys.BlockHitResult; -import net.minecraft.world.phys.HitResult; -import net.minecraft.advancements.CriteriaTriggers; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(BucketItem.class) -public abstract class BucketItemGravityMixin { - @Shadow - @Final - private Fluid content; - - @Shadow - public abstract boolean emptyContents(Player player, Level level, BlockPos pos, BlockHitResult hitResult); - - @Shadow - public abstract void checkExtraContent(Player player, Level level, ItemStack stack, BlockPos pos); - - @Inject(method = "use", at = @At("RETURN"), cancellable = true) - private void antarchy$allowInvertedFluidPlacement(Level level, Player player, InteractionHand hand, CallbackInfoReturnable> cir) { - InteractionResultHolder result = cir.getReturnValue(); - if (result.getResult().consumesAction() || this.content == Fluids.EMPTY || !AntarchyGravityApi.isGravityInverted(player)) { - return; - } - - ItemStack stack = player.getItemInHand(hand); - HitResult hitResult = player.pick(5.0D, 1.0F, false); - if (!(hitResult instanceof BlockHitResult blockHitResult) || hitResult.getType() != HitResult.Type.BLOCK) { - return; - } - - Direction face = blockHitResult.getDirection(); - if (face.getAxis() != Direction.Axis.Y) { - return; - } - - BlockPos clickedPos = blockHitResult.getBlockPos(); - BlockState clickedState = level.getBlockState(clickedPos); - Block clickedBlock = clickedState.getBlock(); - BlockPos normalTargetPos = clickedBlock instanceof LiquidBlockContainer && this.content == Fluids.WATER - ? clickedPos - : clickedPos.relative(face); - BlockPos invertedTargetPos = clickedPos.relative(face.getOpposite()); - if (invertedTargetPos.equals(normalTargetPos)) { - return; - } - - if (!level.mayInteract(player, clickedPos) || !player.mayUseItemAt(invertedTargetPos, face.getOpposite(), stack)) { - return; - } - - if (!this.emptyContents(player, level, invertedTargetPos, null)) { - return; - } - - this.checkExtraContent(player, level, stack, invertedTargetPos); - if (player instanceof ServerPlayer serverPlayer) { - CriteriaTriggers.PLACED_BLOCK.trigger(serverPlayer, invertedTargetPos, stack); - } - player.awardStat(Stats.ITEM_USED.get((BucketItem) (Object) this)); - ItemStack successStack = ItemUtils.createFilledResult(stack, player, BucketItem.getEmptySuccessItem(stack, player)); - cir.setReturnValue(InteractionResultHolder.sidedSuccess(successStack, level.isClientSide())); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ChunkMapAccessor.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ChunkMapAccessor.java deleted file mode 100644 index 1f4d60c9..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ChunkMapAccessor.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.server.level.ChunkMap; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(ChunkMap.class) -/* - * Accessor for chunk map tracking internals used by gravity sync. - */ -public interface ChunkMapAccessor { - @Accessor("entityMap") - Int2ObjectMap antarchy$getEntityMap(); -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/CrossbowItemGravityMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/CrossbowItemGravityMixin.java deleted file mode 100644 index a4786784..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/CrossbowItemGravityMixin.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; -import com.craisinlord.antarchy.config.AntarchySettings; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.CrossbowItem; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(CrossbowItem.class) -/* - * Spawns crossbow shots with gravity-aware aim. - */ -public abstract class CrossbowItemGravityMixin { - - private static final double BOLT_OFFSET = 0.15000000596046448D; - - @WrapOperation(method = "shootProjectile", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/entity/LivingEntity;getX()D", ordinal = 0)) - private static double antarchy$fixCrossbowSpawnX(LivingEntity shooter, Operation original) { - if (!AntarchySettings.invertProjectilesFromInvertedPlayers() || !(shooter instanceof Player)) return original.call(shooter); - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(shooter); - if (!direction.isInverted()) return original.call(shooter); - Vec3 offset = AntarchyGravityRotationUtil.vecPlayerToWorld(0.0D, BOLT_OFFSET, 0.0D, direction); - return shooter.getEyePosition().subtract(offset).x; - } - - @WrapOperation(method = "shootProjectile", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/entity/LivingEntity;getEyeY()D", ordinal = 0)) - private static double antarchy$fixCrossbowSpawnY(LivingEntity shooter, Operation original) { - if (!AntarchySettings.invertProjectilesFromInvertedPlayers() || !(shooter instanceof Player)) return original.call(shooter); - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(shooter); - if (!direction.isInverted()) return original.call(shooter); - Vec3 offset = AntarchyGravityRotationUtil.vecPlayerToWorld(0.0D, BOLT_OFFSET, 0.0D, direction); - return shooter.getEyePosition().subtract(offset).y + BOLT_OFFSET; - } - - @WrapOperation(method = "shootProjectile", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/entity/LivingEntity;getZ()D", ordinal = 0)) - private static double antarchy$fixCrossbowSpawnZ(LivingEntity shooter, Operation original) { - if (!AntarchySettings.invertProjectilesFromInvertedPlayers() || !(shooter instanceof Player)) return original.call(shooter); - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(shooter); - if (!direction.isInverted()) return original.call(shooter); - Vec3 offset = AntarchyGravityRotationUtil.vecPlayerToWorld(0.0D, BOLT_OFFSET, 0.0D, direction); - return shooter.getEyePosition().subtract(offset).z; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/DirectionFacingMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/DirectionFacingMixin.java deleted file mode 100644 index f29d121a..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/DirectionFacingMixin.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import net.minecraft.core.Direction; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import java.util.Arrays; -import java.util.Comparator; - -@Mixin(Direction.class) -/* - * Fixes facing math that assumes gravity is always down. - */ -public abstract class DirectionFacingMixin { - - - @Inject(method = "orderedByNearest", at = @At("HEAD"), cancellable = true) - private static void antarchy$fixEntityFacingOrder(Entity entity, CallbackInfoReturnable cir) { - if (!AntarchyGravityApi.isGravityInverted(entity)) { - return; - } - Vec3 look = entity.getViewVector(1.0F); - - Direction[] sorted = Direction.values(); - Arrays.sort(sorted, Comparator.comparingDouble( - (Direction d) -> d.getStepX() * look.x + d.getStepY() * look.y + d.getStepZ() * look.z - ).reversed()); - - cir.setReturnValue(sorted); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityCollisionContextMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityCollisionContextMixin.java deleted file mode 100644 index 0ac4a24f..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityCollisionContextMixin.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; -import net.minecraft.core.BlockPos; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.shapes.EntityCollisionContext; -import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.Redirect; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(EntityCollisionContext.class) -/* - * Uses gravity-aware entity bounds for block collision checks. - */ -public abstract class EntityCollisionContextMixin { - - @Shadow @Final private double entityBottom; - @Shadow @Final @Nullable private Entity entity; - - @Redirect( - method = "(Lnet/minecraft/world/entity/Entity;)V", - at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;getY()D") - ) - private static double antarchy$fixCollisionContextBottom(Entity entity) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - if (!direction.isInverted()) { - return entity.getY(); - } - - return AntarchyGravityRotationUtil.boxWorldToPlayer(entity.getBoundingBox(), direction).minY; - } - - @Inject(method = "isAbove", at = @At("HEAD"), cancellable = true) - private void antarchy$fixIsAbove(VoxelShape shape, BlockPos pos, boolean canAscend, CallbackInfoReturnable cir) { - if (this.entity == null) { - return; - } - - if (shape.isEmpty()) { - cir.setReturnValue(false); - return; - } - - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(this.entity); - if (!direction.isInverted()) { - return; - } - - double baseMinY = AntarchyGravityRotationUtil.boxWorldToPlayer(new AABB(pos), direction).minY; - double shapeMaxY = AntarchyGravityRotationUtil.boxWorldToPlayer( - shape.bounds().inflate(-1.0E-5D), - direction - ).maxY; - cir.setReturnValue(this.entityBottom > baseMinY + shapeMaxY); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityGravityFrameMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityGravityFrameMixin.java deleted file mode 100644 index 0672060e..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityGravityFrameMixin.java +++ /dev/null @@ -1,248 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import net.minecraft.core.BlockPos; -import net.minecraft.core.particles.BlockParticleOption; -import net.minecraft.core.particles.ParticleTypes; -import net.minecraft.util.Mth; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.level.block.RenderShape; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.ModifyVariable; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(Entity.class) -/* - * Rotates entity frame math into local gravity space. - */ -public abstract class EntityGravityFrameMixin { - - @Shadow protected abstract void onBelowWorld(); - - @Inject(method = "makeBoundingBox", at = @At("RETURN"), cancellable = true) - private void antarchy$rotateBoundingBox(CallbackInfoReturnable cir) { - Entity entity = (Entity) (Object) this; - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - if (!direction.isInverted()) { - return; - } - Vec3 origin = entity.position(); - AABB localBox = cir.getReturnValue().move(origin.scale(-1.0D)); - localBox = localBox.move(0.0D, -1.0E-6D, 0.0D); - cir.setReturnValue(AntarchyGravityRotationUtil.boxPlayerToWorld(localBox, direction).move(origin)); - } - - @Inject(method = "getEyeY", at = @At("HEAD"), cancellable = true) - private void antarchy$fixEyeY(CallbackInfoReturnable cir) { - Entity entity = (Entity) (Object) this; - if (!AntarchyGravityApi.isGravityInverted(entity)) { - return; - } - cir.setReturnValue(entity.position().add(AntarchyGravityRotationUtil.getEyeOffset(entity, entity.getEyeHeight())).y); - } - - @Inject(method = "getEyePosition()Lnet/minecraft/world/phys/Vec3;", at = @At("HEAD"), cancellable = true) - private void antarchy$fixEyePosition(CallbackInfoReturnable cir) { - Entity entity = (Entity) (Object) this; - if (!AntarchyGravityApi.isGravityInverted(entity)) { - return; - } - cir.setReturnValue(entity.position().add(AntarchyGravityRotationUtil.getEyeOffset(entity, entity.getEyeHeight()))); - } - - @Inject(method = "getEyePosition(F)Lnet/minecraft/world/phys/Vec3;", at = @At("HEAD"), cancellable = true) - private void antarchy$fixEyePositionInterpolated(float partialTick, CallbackInfoReturnable cir) { - Entity entity = (Entity) (Object) this; - float flipProgress = AntarchyGravityApi.getGravityFlipProgress(entity, partialTick); - if (flipProgress <= 0.0F) { - return; - } - cir.setReturnValue(entity.getPosition(partialTick).add( - AntarchyGravityRotationUtil.getEyeOffset(entity, entity.getEyeHeight(), partialTick) - )); - } - - @Inject(method = "getOnPos(F)Lnet/minecraft/core/BlockPos;", at = @At("HEAD"), cancellable = true) - private void antarchy$fixSupportingBlockPos(float offset, CallbackInfoReturnable cir) { - Entity entity = (Entity) (Object) this; - if (!AntarchyGravityApi.isGravityInverted(entity)) { - return; - } - cir.setReturnValue(AntarchyGravityRotationUtil.getSupportingBlockPos(entity, offset)); - } - - @Inject(method = "getBlockPosBelowThatAffectsMyMovement", - at = @At("HEAD"), cancellable = true) - private void antarchy$fixVelocityAffectingPos(CallbackInfoReturnable cir) { - Entity entity = (Entity) (Object) this; - if (!AntarchyGravityApi.isGravityInverted(entity)) { - return; - } - cir.setReturnValue(BlockPos.containing(entity.position().add(0.0D, 0.5000001D, 0.0D))); - } - - @Inject(method = "getOnPosLegacy", at = @At("HEAD"), cancellable = true) - private void antarchy$fixLandingPos(CallbackInfoReturnable cir) { - Entity entity = (Entity) (Object) this; - if (!AntarchyGravityApi.isGravityInverted(entity)) { - return; - } - cir.setReturnValue(BlockPos.containing(entity.position().add(0.0D, 0.20000000298023224D, 0.0D))); - } - - @WrapOperation(method = "isInWall", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/phys/AABB;ofSize(Lnet/minecraft/world/phys/Vec3;DDD)Lnet/minecraft/world/phys/AABB;", - ordinal = 0)) - private AABB antarchy$fixIsInWallAABB(Vec3 center, double x, double y, double z, Operation original) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection((Entity) (Object) this); - if (!direction.isInverted()) { - return original.call(center, x, y, z); - } - Vec3 rotated = AntarchyGravityRotationUtil.vecPlayerToWorld(new Vec3(x, y, z), direction); - return original.call(center, rotated.x, rotated.y, rotated.z); - } - - @WrapOperation(method = "isFree(DDD)Z", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/phys/AABB;move(DDD)Lnet/minecraft/world/phys/AABB;", - ordinal = 0)) - private AABB antarchy$fixIsFreeMoveAABB(AABB instance, double x, double y, double z, Operation original) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection((Entity) (Object) this); - if (!direction.isInverted()) { - return original.call(instance, x, y, z); - } - Vec3 worldOffset = AntarchyGravityRotationUtil.vecPlayerToWorld(new Vec3(x, y, z), direction); - return original.call(instance, worldOffset.x, worldOffset.y, worldOffset.z); - } - - @ModifyVariable(method = "updateFluidOnEyes", at = @At(value = "STORE"), ordinal = 0) - private double antarchy$fixFluidEyeY(double eyeY) { - Entity entity = (Entity) (Object) this; - if (!AntarchyGravityApi.isGravityInverted(entity)) { - return eyeY; - } - return entity.getEyePosition().y(); - } - - @ModifyVariable(method = "updateFluidOnEyes", at = @At(value = "STORE"), ordinal = 0) - private BlockPos antarchy$fixFluidEyeBlockPos(BlockPos pos) { - Entity entity = (Entity) (Object) this; - if (!AntarchyGravityApi.isGravityInverted(entity)) { - return pos; - } - return BlockPos.containing(entity.getEyePosition()); - } - - @Inject(method = "spawnSprintParticle", at = @At("HEAD"), cancellable = true) - private void antarchy$fixSprintParticle(CallbackInfo ci) { - Entity entity = (Entity) (Object) this; - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - if (!direction.isInverted()) { - return; - } - ci.cancel(); - Vec3 ceilPos = entity.position().add(0.0D, 0.20000000298023224D, 0.0D); - BlockPos blockPos = BlockPos.containing(ceilPos); - var blockState = entity.level().getBlockState(blockPos); - if (blockState.getRenderShape() != RenderShape.INVISIBLE) { - double w = entity.getBbWidth(); - Vec3 particlePos = entity.position().add( - (entity.level().getRandom().nextDouble() - 0.5D) * w, - 0.1D, - (entity.level().getRandom().nextDouble() - 0.5D) * w - ); - Vec3 dm = entity.getDeltaMovement(); - Vec3 particleVel = AntarchyGravityRotationUtil.vecPlayerToWorld( - new Vec3(dm.x * -4.0D, -1.5D, dm.z * -4.0D), - direction - ); - entity.level().addParticle( - new BlockParticleOption(ParticleTypes.BLOCK, blockState), - particlePos.x, particlePos.y, particlePos.z, - particleVel.x, particleVel.y, particleVel.z - ); - } - } - - @Inject(method = "checkBelowWorld", at = @At("HEAD"), cancellable = true) - private void antarchy$checkAboveWorldForInverted(CallbackInfo ci) { - Entity entity = (Entity) (Object) this; - if (!AntarchyGravityApi.isGravityInverted(entity)) { - return; - } - if (entity.getY() > entity.level().getMaxBuildHeight() + 256) { - this.onBelowWorld(); - ci.cancel(); - } - } - - @Inject(method = "push(Lnet/minecraft/world/entity/Entity;)V", - at = @At("HEAD"), cancellable = true) - private void antarchy$fixEntityPush(Entity other, CallbackInfo ci) { - Entity self = (Entity) (Object) this; - boolean selfInverted = AntarchyGravityApi.isGravityInverted(self); - boolean otherInverted = AntarchyGravityApi.isGravityInverted(other); - if (selfInverted == otherInverted) { - return; - } - ci.cancel(); - if (self.isPassengerOfSameVehicle(other)) { - return; - } - if (other.noPhysics || self.noPhysics) { - return; - } - Vec3 worldOffset = other.getBoundingBox().getCenter().subtract(self.getBoundingBox().getCenter()); - AntarchyGravityDirection selfDir = AntarchyGravityApi.getGravityDirection(self); - Vec3 localOffset = AntarchyGravityRotationUtil.vecWorldToPlayer(worldOffset, selfDir); - double dx = localOffset.x; - double dz = localOffset.z; - double dist = Mth.absMax(dx, dz); - if (dist >= 0.009999999776482582D) { - dist = Math.sqrt(dist); - dx /= dist; - dz /= dist; - double scale = Math.min(1.0D / dist, 1.0D) * 0.05D; - dx *= scale; - dz *= scale; - if (!self.isVehicle()) { - Vec3 selfPush = AntarchyGravityRotationUtil.vecPlayerToWorld(new Vec3(-dx, 0.0D, -dz), selfDir); - self.push(selfPush.x, selfPush.y, selfPush.z); - } - if (!other.isVehicle()) { - AntarchyGravityDirection otherDir = AntarchyGravityApi.getGravityDirection(other); - Vec3 otherPush = AntarchyGravityRotationUtil.vecPlayerToWorld(new Vec3(dx, 0.0D, dz), otherDir); - other.push(otherPush.x, otherPush.y, otherPush.z); - } - } - } - - @ModifyVariable(method = "turn", at = @At("HEAD"), argsOnly = true, ordinal = 0) - private double antarchy$invertTurnYaw(double yawDelta) { - Entity entity = (Entity) (Object) this; - if (!AntarchyGravityApi.isGravityInverted(entity)) { - return yawDelta; - } - return -yawDelta; - } - - @ModifyVariable(method = "turn", at = @At("HEAD"), argsOnly = true, ordinal = 1) - private double antarchy$invertTurnPitch(double pitchDelta) { - Entity entity = (Entity) (Object) this; - if (!AntarchyGravityApi.isGravityInverted(entity)) { - return pitchDelta; - } - return -pitchDelta; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityGravityMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityGravityMixin.java deleted file mode 100644 index f5e88787..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityGravityMixin.java +++ /dev/null @@ -1,275 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityAccess; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityTransition; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.core.BlockPos; -import net.minecraft.world.level.material.FluidState; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec3; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.ModifyVariable; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(Entity.class) -/* - * Adds the base gravity state and sync hooks to entities. - */ -public abstract class EntityGravityMixin implements AntarchyGravityAccess { - @Unique - private static final Logger LOGGER = LoggerFactory.getLogger("Antarchy/FallDamage"); - @Unique - private static final String ANTARCHY_GRAVITY_DIRECTION_TAG = "AntarchyGravityDirection"; - @Unique - private static final String ANTARCHY_PREV_GRAVITY_DIRECTION_TAG = "AntarchyPrevGravityDirection"; - @Unique - private static final String ANTARCHY_GRAVITY_FORCED_TAG = "AntarchyGravityForced"; - @Unique - private static final String ANTARCHY_GRAVITY_TRANSITION_DURATION_TAG = "AntarchyGravityTransitionDuration"; - @Unique - private static final String ANTARCHY_GRAVITY_TRANSITION_REMAINING_TAG = "AntarchyGravityTransitionRemaining"; - - @Unique - private AntarchyGravityDirection antarchy$gravityDirection = AntarchyGravityDirection.DOWN; - @Unique - private AntarchyGravityDirection antarchy$prevGravityDirection = AntarchyGravityDirection.DOWN; - @Unique - private boolean antarchy$gravityForced; - @Unique - private int antarchy$gravityTransitionDuration; - @Unique - private int antarchy$gravityTransitionRemaining; - - @Shadow - protected abstract AABB makeBoundingBox(); - - @Shadow - public abstract void setBoundingBox(AABB boundingBox); - - @Inject(method = "saveWithoutId", at = @At("TAIL")) - private void antarchy$saveGravityState(CompoundTag tag, CallbackInfoReturnable cir) { - tag.putString(ANTARCHY_GRAVITY_DIRECTION_TAG, this.antarchy$gravityDirection.getSerializedName()); - tag.putString(ANTARCHY_PREV_GRAVITY_DIRECTION_TAG, this.antarchy$prevGravityDirection.getSerializedName()); - tag.putBoolean(ANTARCHY_GRAVITY_FORCED_TAG, this.antarchy$gravityForced); - tag.putInt(ANTARCHY_GRAVITY_TRANSITION_DURATION_TAG, this.antarchy$gravityTransitionDuration); - tag.putInt(ANTARCHY_GRAVITY_TRANSITION_REMAINING_TAG, this.antarchy$gravityTransitionRemaining); - } - - @Inject(method = "load", at = @At("TAIL")) - private void antarchy$readGravityState(CompoundTag tag, CallbackInfo ci) { - this.antarchy$gravityDirection = AntarchyGravityDirection.parse(tag.getString(ANTARCHY_GRAVITY_DIRECTION_TAG)) - .orElse(AntarchyGravityDirection.DOWN); - this.antarchy$prevGravityDirection = AntarchyGravityDirection.parse(tag.getString(ANTARCHY_PREV_GRAVITY_DIRECTION_TAG)) - .orElse(this.antarchy$gravityDirection); - this.antarchy$gravityForced = tag.getBoolean(ANTARCHY_GRAVITY_FORCED_TAG); - this.antarchy$gravityTransitionDuration = Math.max(0, tag.getInt(ANTARCHY_GRAVITY_TRANSITION_DURATION_TAG)); - this.antarchy$gravityTransitionRemaining = Math.max(0, tag.getInt(ANTARCHY_GRAVITY_TRANSITION_REMAINING_TAG)); - } - - @Inject(method = "baseTick", at = @At("TAIL")) - private void antarchy$tickGravityTransition(CallbackInfo ci) { - if (this.antarchy$gravityTransitionRemaining > 0) { - this.antarchy$gravityTransitionRemaining--; - } - } - - @Inject(method = "updateInWaterStateAndDoFluidPushing", at = @At("TAIL")) - private void antarchy$resetFallDistanceInAntiwater(CallbackInfoReturnable cir) { - Entity entity = this.antarchy$entity(); - AntarchyGravityDirection direction = this.antarchy$gravityDirection; - if (!direction.isInverted()) { - return; - } - - if (!antarchy$isTouchingAntiwater(entity)) { - return; - } - - Vec3 localMotion = AntarchyGravityRotationUtil.vecWorldToPlayer(entity.getDeltaMovement(), direction); - float previousFallDistance = entity.fallDistance; - entity.resetFallDistance(); - - if (!entity.level().isClientSide && LOGGER.isDebugEnabled()) { - LOGGER.debug( - "[FallDamage] Antiwater contact reset during fluid update: entity={} pos={} localMotion={} previousFallDistance={} onGround={} inWaterStateReturned={}", - entity.getClass().getSimpleName(), - entity.position(), - localMotion, - previousFallDistance, - entity.onGround(), - cir.getReturnValue() - ); - } - } - - @Override - public AntarchyGravityDirection antarchy$getGravityDirection() { - return this.antarchy$gravityDirection; - } - - @Override - public AntarchyGravityDirection antarchy$getPrevGravityDirection() { - return this.antarchy$prevGravityDirection; - } - - @Override - public boolean antarchy$isGravityForced() { - return this.antarchy$gravityForced; - } - - @Override - public int antarchy$getGravityTransitionDuration() { - return this.antarchy$gravityTransitionDuration; - } - - @Override - public int antarchy$getGravityTransitionRemaining() { - return this.antarchy$gravityTransitionRemaining; - } - - @Override - public void antarchy$setGravityState(AntarchyGravityDirection direction, boolean forced, AntarchyGravityTransition transition) { - AntarchyGravityDirection previousDirection = this.antarchy$gravityDirection; - boolean changed = this.antarchy$gravityDirection != direction || this.antarchy$gravityForced != forced; - if (this.antarchy$gravityDirection != direction) { - this.antarchy$adjustPositionForGravityChange(this.antarchy$gravityDirection, direction); - this.antarchy$prevGravityDirection = this.antarchy$gravityDirection; - this.antarchy$gravityDirection = direction; - this.antarchy$gravityTransitionDuration = transition.durationTicks(); - this.antarchy$gravityTransitionRemaining = transition.durationTicks(); - this.antarchy$refreshGravityBounds(); - } - - this.antarchy$gravityForced = forced; - if (changed && !this.antarchy$entity().level().isClientSide) { - AntarchyGravityApi.notifyGravityStateChanged(this.antarchy$entity()); - } - } - - @Override - public void antarchy$applySyncedGravityState( - AntarchyGravityDirection direction, - AntarchyGravityDirection previousDirection, - boolean forced, - int transitionDuration, - int transitionRemaining - ) { - AntarchyGravityDirection oldDirection = this.antarchy$gravityDirection; - this.antarchy$gravityDirection = direction; - this.antarchy$prevGravityDirection = previousDirection; - this.antarchy$gravityForced = forced; - this.antarchy$gravityTransitionDuration = Math.max(0, transitionDuration); - this.antarchy$gravityTransitionRemaining = Math.max(0, transitionRemaining); - if (oldDirection != direction) { - // Do NOT adjust position here — the server entity's position is already - // correct (adjusted when gravity first changed on the server). Adjusting - // again on the client causes a double-shift on relog, which creates - // a position desync and stuttering as the server repeatedly corrects us. - this.antarchy$refreshGravityBounds(); - } - } - - @Unique - private Entity antarchy$entity() { - return (Entity) (Object) this; - } - - @Unique - private void antarchy$refreshGravityBounds() { - this.setBoundingBox(this.makeBoundingBox()); - } - - @Unique - private void antarchy$adjustPositionForGravityChange(AntarchyGravityDirection oldDirection, AntarchyGravityDirection newDirection) { - if (oldDirection == newDirection) { - return; - } - - Entity entity = this.antarchy$entity(); - double yOffset = newDirection.isInverted() ? entity.getBbHeight() : -entity.getBbHeight(); - entity.setPos(entity.getX(), entity.getY() + yOffset, entity.getZ()); - entity.setOnGround(false); - entity.resetFallDistance(); - } - - @ModifyVariable(method = "checkFallDamage", at = @At("HEAD"), ordinal = 0, argsOnly = true) - private double antarchy$invertFallDamageY(double worldY) { - Entity entity = (Entity) (Object) this; - if (!AntarchyGravityApi.isGravityInverted(entity) || entity instanceof Player) { - return worldY; - } - - double invertedY = -worldY; - LOGGER.debug( - "[FallDamage] Entity {} inverted checkFallDamage fallback: worldY={} invertedY={} fallDistance={} onGround={} deltaMovement={}", - entity.getClass().getSimpleName(), - worldY, - invertedY, - entity.fallDistance, - entity.onGround(), - entity.getDeltaMovement() - ); - return invertedY; - } - - @Unique - private boolean antarchy$isTouchingAntiwater(Entity entity) { - return antarchy$intersectsAntiwater(entity, entity.getBoundingBox().inflate(0.05D)); - } - - @Unique - private boolean antarchy$intersectsAntiwater(Entity entity, AABB box) { - BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(); - BlockPos min = BlockPos.containing(box.minX, box.minY, box.minZ); - BlockPos max = BlockPos.containing(box.maxX, box.maxY, box.maxZ); - for (int x = min.getX(); x <= max.getX(); x++) { - for (int y = min.getY(); y <= max.getY(); y++) { - for (int z = min.getZ(); z <= max.getZ(); z++) { - cursor.set(x, y, z); - FluidState fluidState = entity.level().getFluidState(cursor); - if (com.craisinlord.antarchy.content.fluid.AntarchyFluidChecks.isAntiwater(fluidState)) { - return true; - } - } - } - } - return false; - } - - @ModifyVariable(method = "isSupportedBy", at = @At("HEAD"), ordinal = 0, argsOnly = true) - private BlockPos antarchy$mirrorSupportBlock(BlockPos pos) { - Entity entity = (Entity) (Object) this; - if (!AntarchyGravityApi.isGravityInverted(entity)) { - return pos; - } - - return pos.above(); - } - - @Inject(method = "canEnterPose", at = @At("HEAD"), cancellable = true) - private void antarchy$fixPoseCheck(net.minecraft.world.entity.Pose pose, CallbackInfoReturnable cir) { - Entity entity = (Entity) (Object) this; - if (!AntarchyGravityApi.isGravityInverted(entity)) return; - net.minecraft.world.entity.EntityDimensions dims = entity.getDimensions(pose); - Vec3 pos = entity.position(); - float halfWidth = dims.width / 2.0F; - float height = dims.height; - AABB invertedBox = new AABB( - pos.x - halfWidth, pos.y - height, pos.z - halfWidth, - pos.x + halfWidth, pos.y, pos.z + halfWidth - ); - cir.setReturnValue(entity.level().noCollision(entity, invertedBox)); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityMountedGravityMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityMountedGravityMixin.java deleted file mode 100644 index 5c95561e..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityMountedGravityMixin.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyMountedGravityHelper; -import net.minecraft.world.entity.Entity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(Entity.class) -public abstract class EntityMountedGravityMixin { - @Unique - private Entity antarchy$previousVehicle; - - @Inject(method = "startRiding(Lnet/minecraft/world/entity/Entity;Z)Z", at = @At("RETURN")) - private void antarchy$syncMountedStack(Entity vehicle, boolean force, CallbackInfoReturnable cir) { - if (cir.getReturnValue()) { - AntarchyMountedGravityHelper.syncConnectedStack((Entity) (Object) this); - } - } - - @Inject(method = "stopRiding", at = @At("HEAD")) - private void antarchy$capturePreviousVehicle(CallbackInfo ci) { - this.antarchy$previousVehicle = ((Entity) (Object) this).getVehicle(); - } - - @Inject(method = "stopRiding", at = @At("TAIL")) - private void antarchy$syncDismountedStacks(CallbackInfo ci) { - AntarchyMountedGravityHelper.syncSeparatedStacks(this.antarchy$previousVehicle, (Entity) (Object) this); - this.antarchy$previousVehicle = null; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityMoveMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityMoveMixin.java deleted file mode 100644 index aeb655ef..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityMoveMixin.java +++ /dev/null @@ -1,243 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.fluid.AntarchyFluidChecks; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; -import java.util.ArrayList; -import java.util.List; -import java.util.TreeSet; -import net.minecraft.core.BlockPos; -import net.minecraft.world.level.material.FluidState; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.MoverType; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec3; -import net.minecraft.world.phys.shapes.VoxelShape; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.ModifyArg; -import org.spongepowered.asm.mixin.injection.ModifyVariable; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(Entity.class) -/* - * Fixes move/landing logic that assumes down is always down. - */ -public abstract class EntityMoveMixin { - @Unique - private static final Logger ANTARCHY_FALL_LOGGER = LoggerFactory.getLogger("Antarchy/FallDamage"); - - @Unique - private double antarchy$lastWorldMoveY = 0.0; - @Unique - private double antarchy$lastPlayerMoveY = 0.0; - @Unique - private AABB antarchy$moveStartBox; - - @Inject(method = "move", at = @At("HEAD")) - private void antarchy$captureMoveStart(MoverType type, Vec3 movement, CallbackInfo ci) { - Entity entity = (Entity) (Object) this; - this.antarchy$moveStartBox = entity.getBoundingBox(); - this.antarchy$lastPlayerMoveY = movement.y; - } - - @ModifyVariable(method = "move", at = @At("HEAD"), ordinal = 0, argsOnly = true) - private Vec3 antarchy$movePlayerToWorld(Vec3 movement) { - Entity entity = (Entity) (Object) this; - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - if (!direction.isInverted()) { - return movement; - } - - Vec3 world = AntarchyGravityRotationUtil.vecPlayerToWorld(movement, direction); - this.antarchy$lastWorldMoveY = world.y; - return world; - } - - @ModifyArg( - method = "move", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/world/phys/Vec3;multiply(Lnet/minecraft/world/phys/Vec3;)Lnet/minecraft/world/phys/Vec3;", - ordinal = 0 - ), - index = 0 - ) - private Vec3 antarchy$moveMaskPlayerToWorld(Vec3 multiplier) { - Entity entity = (Entity) (Object) this; - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - if (!direction.isInverted()) { - return multiplier; - } - - return AntarchyGravityRotationUtil.maskPlayerToWorld(multiplier, direction); - } - - @ModifyVariable( - method = "move", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/util/profiling/ProfilerFiller;pop()V", - ordinal = 0 - ), - ordinal = 0 - ) - private Vec3 antarchy$moveWorldToPlayerAttempted(Vec3 movement) { - Entity entity = (Entity) (Object) this; - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - if (!direction.isInverted()) { - return movement; - } - - return AntarchyGravityRotationUtil.vecWorldToPlayer(movement, direction); - } - - @ModifyVariable( - method = "move", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/util/profiling/ProfilerFiller;pop()V", - ordinal = 0 - ), - ordinal = 1 - ) - private Vec3 antarchy$moveWorldToPlayerResolved(Vec3 movement) { - Entity entity = (Entity) (Object) this; - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - if (!direction.isInverted()) { - return movement; - } - - return AntarchyGravityRotationUtil.vecWorldToPlayer(movement, direction); - } - - - @Inject(method = "move", at = @At("TAIL")) - private void antarchy$fixVerticalCollisionBelow(MoverType type, Vec3 movement, CallbackInfo ci) { - Entity entity = (Entity) (Object) this; - if (!AntarchyGravityApi.isGravityInverted(entity)) { - return; - } - - if (this.antarchy$lastPlayerMoveY < 0.0D && this.antarchy$moveStartBox != null) { - AABB endBox = entity.getBoundingBox(); - Vec3 delta = endBox.getCenter().subtract(this.antarchy$moveStartBox.getCenter()); - AABB sweptBox = this.antarchy$moveStartBox.expandTowards(delta).minmax(endBox).inflate(0.05D); - if (antarchy$intersectsAntiwater(entity, sweptBox)) { - float previousFallDistance = entity.fallDistance; - entity.resetFallDistance(); - if (!entity.level().isClientSide && ANTARCHY_FALL_LOGGER.isDebugEnabled()) { - ANTARCHY_FALL_LOGGER.debug( - "[FallDamage] Antiwater contact reset during move: entity={} startBox={} endBox={} sweptBox={} playerMoveY={} worldMoveY={} previousFallDistance={}", - entity.getClass().getSimpleName(), - this.antarchy$moveStartBox, - endBox, - sweptBox, - this.antarchy$lastPlayerMoveY, - this.antarchy$lastWorldMoveY, - previousFallDistance - ); - } - } - } - - if (!entity.verticalCollision) return; - boolean landedOnCeiling = this.antarchy$lastWorldMoveY > 0.0; - entity.verticalCollisionBelow = landedOnCeiling; - if (landedOnCeiling) { - entity.setOnGround(true); - } - } - - @Inject(method = "collide", at = @At("HEAD"), cancellable = true) - private void antarchy$invertedStepUp(Vec3 movement, CallbackInfoReturnable cir) { - Entity entity = (Entity) (Object) this; - if (!AntarchyGravityApi.isGravityInverted(entity)) { - return; - } - - AABB aabb = entity.getBoundingBox(); - List entityShapes = entity.level().getEntityCollisions(entity, aabb.expandTowards(movement)); - Vec3 collided = movement.lengthSqr() == 0.0 ? movement : Entity.collideBoundingBox(entity, movement, aabb, entity.level(), entityShapes); - - boolean movedX = movement.x != collided.x; - boolean movedY = movement.y != collided.y; - boolean movedZ = movement.z != collided.z; - boolean pressingIntoCeiling = movedY && movement.y > 0.0D; - float maxUpStep = entity.maxUpStep(); - - if (!(maxUpStep > 0.0F) || !(pressingIntoCeiling || entity.onGround()) || !(movedX || movedZ)) { - cir.setReturnValue(collided); - return; - } - - AABB steppedBox = pressingIntoCeiling ? aabb.move(0.0, collided.y, 0.0) : aabb; - AABB searchBox = steppedBox.expandTowards(movement.x, -(double) maxUpStep, movement.z); - if (!pressingIntoCeiling) { - searchBox = searchBox.expandTowards(0.0, 1.0E-5D, 0.0); - } - - List stepShapes = new ArrayList<>(entityShapes); - entity.level().getBlockCollisions(entity, searchBox).forEach(stepShapes::add); - - float currentStepY = (float) collided.y; - float[] candidateHeights = antarchy$collectCandidateStepDownHeights(steppedBox, stepShapes, maxUpStep, currentStepY); - for (float candidate : candidateHeights) { - Vec3 stepped = Entity.collideBoundingBox(entity, new Vec3(movement.x, -(double) candidate, movement.z), steppedBox, entity.level(), stepShapes); - if (stepped.horizontalDistanceSqr() > collided.horizontalDistanceSqr()) { - double offset = steppedBox.maxY - aabb.maxY; - cir.setReturnValue(stepped.add(0.0, offset, 0.0)); - return; - } - } - - cir.setReturnValue(collided); - } - - @Unique - private static float[] antarchy$collectCandidateStepDownHeights(AABB box, List shapes, float maxStep, float currentY) { - TreeSet heights = new TreeSet<>(); - for (VoxelShape shape : shapes) { - for (AABB subBox : shape.toAabbs()) { - for (double coord : new double[]{subBox.minY, subBox.maxY}) { - float height = (float) (box.maxY - coord); - if (height >= 0.0F && height != currentY && height <= maxStep) { - heights.add(height); - } - } - } - } - - float[] result = new float[heights.size()]; - int i = 0; - for (float height : heights) { - result[i++] = height; - } - return result; - } - - @Unique - private boolean antarchy$intersectsAntiwater(Entity entity, AABB box) { - BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(); - BlockPos min = BlockPos.containing(box.minX, box.minY, box.minZ); - BlockPos max = BlockPos.containing(box.maxX, box.maxY, box.maxZ); - for (int x = min.getX(); x <= max.getX(); x++) { - for (int y = min.getY(); y <= max.getY(); y++) { - for (int z = min.getZ(); z <= max.getZ(); z++) { - cursor.set(x, y, z); - FluidState fluidState = entity.level().getFluidState(cursor); - if (AntarchyFluidChecks.isAntiwater(fluidState)) { - return true; - } - } - } - } - return false; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ExplosionGravityMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ExplosionGravityMixin.java deleted file mode 100644 index e2dcb868..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ExplosionGravityMixin.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.level.Explosion; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(Explosion.class) -/* - * Fixes explosion knockback for inverted gravity. - */ -public abstract class ExplosionGravityMixin { - - @WrapOperation(method = "explode", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/entity/Entity;getDeltaMovement()Lnet/minecraft/world/phys/Vec3;", - ordinal = 0)) - private Vec3 antarchy$fixExplosionGetVelocity(Entity entity, Operation original) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - if (!direction.isInverted()) return original.call(entity); - return AntarchyGravityRotationUtil.vecPlayerToWorld(original.call(entity), direction); - } - - @WrapOperation(method = "explode", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/entity/Entity;setDeltaMovement(Lnet/minecraft/world/phys/Vec3;)V", - ordinal = 0)) - private void antarchy$fixExplosionSetVelocity(Entity entity, Vec3 velocity, Operation original) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - if (!direction.isInverted()) { - original.call(entity, velocity); - return; - } - original.call(entity, AntarchyGravityRotationUtil.vecWorldToPlayer(velocity, direction)); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/FallingBlockEntityBlockDataMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/FallingBlockEntityBlockDataMixin.java index a24cc688..5cfe9c22 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/FallingBlockEntityBlockDataMixin.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/FallingBlockEntityBlockDataMixin.java @@ -30,9 +30,6 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @Mixin(FallingBlockEntity.class) -/* - * Preserves full block data on carried falling blocks. - */ public abstract class FallingBlockEntityBlockDataMixin { @Shadow public CompoundTag blockData; @Shadow public abstract BlockState getBlockState(); diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/FireworkRocketGravityMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/FireworkRocketGravityMixin.java deleted file mode 100644 index 23ea875e..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/FireworkRocketGravityMixin.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.projectile.FireworkRocketEntity; -import net.minecraft.world.item.Item; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(FireworkRocketEntity.class) -public abstract class FireworkRocketGravityMixin { - - @WrapOperation(method = "tick", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/entity/LivingEntity;getLookAngle()Lnet/minecraft/world/phys/Vec3;")) - private Vec3 antarchy$fixFireworkThrustDirection(LivingEntity entity, Operation original) { - Vec3 look = original.call(entity); - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - if (!direction.isInverted()) { - return look; - } - return AntarchyGravityRotationUtil.vecWorldToPlayer(look, direction); - } - - @WrapOperation(method = "tick", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/entity/LivingEntity;getHandHoldingItemAngle(Lnet/minecraft/world/item/Item;)Lnet/minecraft/world/phys/Vec3;")) - private Vec3 antarchy$rotateAttachedRocketOffset(LivingEntity entity, Item item, Operation original) { - Vec3 offset = original.call(entity, item); - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - if (!direction.isInverted()) { - return offset; - } - return AntarchyGravityRotationUtil.vecPlayerToWorld(offset, direction); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/GroundPathNavigationMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/GroundPathNavigationMixin.java deleted file mode 100644 index 363ecc56..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/GroundPathNavigationMixin.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.GravityWalkNodeEvaluator; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import net.minecraft.world.entity.ai.navigation.GroundPathNavigation; -import net.minecraft.world.level.pathfinder.NodeEvaluator; -import net.minecraft.world.level.pathfinder.PathFinder; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(GroundPathNavigation.class) -/* - * Makes ground pathing read gravity-aware floor checks. - */ -public abstract class GroundPathNavigationMixin { - private static final Logger LOGGER = LoggerFactory.getLogger("Antarchy/Pathfinding"); - - @Inject(method = "createPathFinder", at = @At("HEAD"), cancellable = true) - private void antarchy$useGravityEvaluator(int maxVisitedNodes, CallbackInfoReturnable cir) { - var accessor = (PathNavigationAccessor) (Object) this; - var mob = accessor.antarchy$getMob(); - if (!AntarchyGravityApi.isGravityInverted(mob)) { - return; - } - - LOGGER.debug( - "[Path] swap evaluator mob={} maxVisitedNodes={}", - mob.getClass().getSimpleName(), - maxVisitedNodes - ); - - NodeEvaluator evaluator = new GravityWalkNodeEvaluator(); - accessor.antarchy$setNodeEvaluator(evaluator); - cir.setReturnValue(new PathFinder(evaluator, maxVisitedNodes)); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/LivingEntityMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/LivingEntityMixin.java deleted file mode 100644 index 72d60635..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/LivingEntityMixin.java +++ /dev/null @@ -1,262 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; -import com.craisinlord.antarchy.content.fluid.AntarchyFluidChecks; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import com.llamalad7.mixinextras.sugar.Local; -import net.minecraft.core.BlockPos; -import net.minecraft.core.particles.ParticleOptions; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.EntityDimensions; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.Pose; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.material.FluidState; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyArg; -import org.spongepowered.asm.mixin.injection.ModifyVariable; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import org.spongepowered.asm.mixin.Unique; - -@Mixin(LivingEntity.class) -/* - * Fixes living entity movement/combat bits for inverted gravity. - */ -public abstract class LivingEntityMixin { - - @WrapOperation(method = "travel", - at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;getY()D")) - private double antarchy$fixTravelGetY(LivingEntity entity, Operation original) { - if (!AntarchyGravityApi.isGravityInverted(entity)) return original.call(entity); - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - return AntarchyGravityRotationUtil.vecWorldToPlayer(entity.position(), direction).y; - } - - @WrapOperation(method = "travel", - at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;getLookAngle()Lnet/minecraft/world/phys/Vec3;")) - private Vec3 antarchy$fixTravelLookAngle(LivingEntity entity, Operation original) { - Vec3 look = original.call(entity); - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - if (!direction.isInverted() || !entity.isFallFlying()) return look; - return AntarchyGravityRotationUtil.vecWorldToPlayer(look, direction); - } - - @ModifyVariable(method = "checkFallDamage", at = @At("HEAD"), ordinal = 0, argsOnly = true) - private double antarchy$invertLivingFallDamageY(double worldY) { - LivingEntity entity = (LivingEntity) (Object) this; - if (!AntarchyGravityApi.isGravityInverted(entity)) { - return worldY; - } - if (antarchy$isTouchingAntiwater(entity)) { - entity.fallDistance = 0.0F; - return 0.0D; - } - return -worldY; - } - - @org.spongepowered.asm.mixin.injection.Inject(method = "calculateEntityAnimation", at = @At("HEAD"), cancellable = true) - private void antarchy$fixEntityAnimation(boolean flutter, CallbackInfo ci) { - LivingEntity entity = (LivingEntity) (Object) this; - if (!AntarchyGravityApi.isGravityInverted(entity)) return; - ci.cancel(); - - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - Vec3 playerPosDelta = AntarchyGravityRotationUtil.vecWorldToPlayer( - new Vec3(entity.getX() - entity.xo, entity.getY() - entity.yo, entity.getZ() - entity.zo), - direction - ); - double d = playerPosDelta.x; - double e = flutter ? playerPosDelta.y : 0.0D; - double f = playerPosDelta.z; - float g = (float) Math.sqrt(d * d + e * e + f * f) * 4.0F; - if (g > 1.0F) g = 1.0F; - entity.walkAnimation.update(g, 0.4F); - } - - @Unique - private boolean antarchy$isTouchingAntiwater(LivingEntity entity) { - AABB box = entity.getBoundingBox().inflate(0.05D); - BlockPos min = BlockPos.containing(box.minX, box.minY, box.minZ); - BlockPos max = BlockPos.containing(box.maxX, box.maxY, box.maxZ); - BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(); - for (int x = min.getX(); x <= max.getX(); x++) { - for (int y = min.getY(); y <= max.getY(); y++) { - for (int z = min.getZ(); z <= max.getZ(); z++) { - cursor.set(x, y, z); - FluidState fluidState = entity.level().getFluidState(cursor); - if (AntarchyFluidChecks.isAntiwater(fluidState)) { - return true; - } - } - } - } - return false; - } - - @org.spongepowered.asm.mixin.injection.Inject(method = "getLocalBoundsForPose", at = @At("RETURN"), cancellable = true) - private void antarchy$fixLocalBoundsForPose(Pose pose, CallbackInfoReturnable cir) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection((Entity) (Object) this); - if (!direction.isInverted()) return; - AABB box = cir.getReturnValue(); - box = box.move(0.0D, -1.0E-6D, 0.0D); - cir.setReturnValue(AntarchyGravityRotationUtil.boxPlayerToWorld(box, direction)); - } - - @WrapOperation(method = "hasLineOfSight", - at = @At(value = "NEW", target = "(DDD)Lnet/minecraft/world/phys/Vec3;", ordinal = 0)) - private Vec3 antarchy$fixHasLineOfSightSelf(double x, double y, double z, Operation original) { - LivingEntity self = (LivingEntity) (Object) this; - if (!AntarchyGravityApi.isGravityInverted(self)) return original.call(x, y, z); - return self.getEyePosition(); - } - - @WrapOperation(method = "hasLineOfSight", - at = @At(value = "NEW", target = "(DDD)Lnet/minecraft/world/phys/Vec3;", ordinal = 1)) - private Vec3 antarchy$fixHasLineOfSightTarget(double x, double y, double z, Operation original, - @Local(argsOnly = true) Entity other) { - if (!AntarchyGravityApi.isGravityInverted(other)) return original.call(x, y, z); - return other.getEyePosition(); - } - - @WrapOperation(method = "tick", - at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;getX()D", ordinal = 0)) - private double antarchy$fixTickBodyRotGetX(LivingEntity entity, Operation original) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - if (!direction.isInverted()) return original.call(entity); - return AntarchyGravityRotationUtil.vecWorldToPlayer( - original.call(entity) - entity.xo, - entity.getY() - entity.yo, - entity.getZ() - entity.zo, - direction - ).x + entity.xo; - } - - @WrapOperation(method = "tick", - at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;getZ()D", ordinal = 0)) - private double antarchy$fixTickBodyRotGetZ(LivingEntity entity, Operation original) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - if (!direction.isInverted()) return original.call(entity); - return AntarchyGravityRotationUtil.vecWorldToPlayer( - entity.getX() - entity.xo, - entity.getY() - entity.yo, - original.call(entity) - entity.zo, - direction - ).z + entity.zo; - } - - @WrapOperation(method = "blockedByShield", - at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;getX()D", ordinal = 0)) - private double antarchy$fixShieldAttackerX(LivingEntity attacker, Operation original) { - AntarchyGravityDirection defDir = AntarchyGravityApi.getGravityDirection((Entity) (Object) this); - if (!defDir.isInverted()) { - if (AntarchyGravityApi.isGravityInverted(attacker)) return attacker.getEyePosition().x; - return original.call(attacker); - } - return AntarchyGravityRotationUtil.vecWorldToPlayer(attacker.getEyePosition(), defDir).x; - } - - @WrapOperation(method = "blockedByShield", - at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;getZ()D", ordinal = 0)) - private double antarchy$fixShieldAttackerZ(LivingEntity attacker, Operation original) { - AntarchyGravityDirection defDir = AntarchyGravityApi.getGravityDirection((Entity) (Object) this); - if (!defDir.isInverted()) return original.call(attacker); - return AntarchyGravityRotationUtil.vecWorldToPlayer(attacker.getEyePosition(), defDir).z; - } - - @WrapOperation(method = "blockedByShield", - at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;getX()D", ordinal = 1)) - private double antarchy$fixShieldDefenderX(LivingEntity shieldUser, Operation original) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection((Entity) (Object) this); - if (!direction.isInverted()) return original.call(shieldUser); - return AntarchyGravityRotationUtil.vecWorldToPlayer(shieldUser.position(), direction).x; - } - - @WrapOperation(method = "blockedByShield", - at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;getZ()D", ordinal = 1)) - private double antarchy$fixShieldDefenderZ(LivingEntity shieldUser, Operation original) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection((Entity) (Object) this); - if (!direction.isInverted()) return original.call(shieldUser); - return AntarchyGravityRotationUtil.vecWorldToPlayer(shieldUser.position(), direction).z; - } - - @ModifyArg(method = "playBlockFallSound", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/level/Level;getBlockState(Lnet/minecraft/core/BlockPos;)Lnet/minecraft/world/level/block/state/BlockState;"), - index = 0) - private BlockPos antarchy$fixBlockFallSoundPos(BlockPos pos) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection((Entity) (Object) this); - if (!direction.isInverted()) return pos; - Entity selfEntity = (Entity) (Object) this; - return BlockPos.containing(selfEntity.position().add( - AntarchyGravityRotationUtil.vecPlayerToWorld(new Vec3(0.0D, -0.20000000298023224D, 0.0D), direction) - )); - } - - @WrapOperation(method = "spawnItemParticles", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/phys/Vec3;add(DDD)Lnet/minecraft/world/phys/Vec3;", - ordinal = 0)) - private Vec3 antarchy$fixItemParticlesAdd(Vec3 base, double x, double y, double z, Operation original) { - Entity self = (Entity) (Object) this; - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(self); - if (!direction.isInverted()) return original.call(base, x, y, z); - Vec3 rotated = AntarchyGravityRotationUtil.vecPlayerToWorld(new Vec3(x, y, z), direction); - return original.call(self.getEyePosition(), rotated.x, rotated.y, rotated.z); - } - - @ModifyVariable(method = "spawnItemParticles", - at = @At(value = "INVOKE_ASSIGN", - target = "Lnet/minecraft/world/phys/Vec3;yRot(F)Lnet/minecraft/world/phys/Vec3;", - ordinal = 0), - ordinal = 0) - private Vec3 antarchy$fixItemParticlesYRotVec(Vec3 vec3) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection((Entity) (Object) this); - if (!direction.isInverted()) return vec3; - return AntarchyGravityRotationUtil.vecPlayerToWorld(vec3, direction); - } - - @WrapOperation(method = "tickEffects", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/level/Level;addParticle(Lnet/minecraft/core/particles/ParticleOptions;DDDDDD)V")) - private void antarchy$fixEffectParticles(Level level, ParticleOptions particle, - double x, double y, double z, double dx, double dy, double dz, - Operation original) { - Entity self = (Entity) (Object) this; - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(self); - if (!direction.isInverted()) { - original.call(level, particle, x, y, z, dx, dy, dz); - return; - } - Vec3 pos = self.position().subtract( - AntarchyGravityRotationUtil.vecPlayerToWorld(self.position().subtract(x, y, z), direction) - ); - original.call(level, particle, pos.x, pos.y, pos.z, dx, dy, dz); - } - - @WrapOperation(method = "makePoofParticles", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/level/Level;addParticle(Lnet/minecraft/core/particles/ParticleOptions;DDDDDD)V", - ordinal = 0)) - private void antarchy$fixPoofParticles(Level level, ParticleOptions particle, - double x, double y, double z, double dx, double dy, double dz, - Operation original) { - Entity self = (Entity) (Object) this; - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(self); - if (!direction.isInverted()) { - original.call(level, particle, x, y, z, dx, dy, dz); - return; - } - Vec3 pos = self.position().subtract( - AntarchyGravityRotationUtil.vecPlayerToWorld(self.position().subtract(x, y, z), direction) - ); - original.call(level, particle, pos.x, pos.y, pos.z, dx, dy, dz); - } - -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/MeleeAttackGoalGravityMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/MeleeAttackGoalGravityMixin.java deleted file mode 100644 index d69998dc..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/MeleeAttackGoalGravityMixin.java +++ /dev/null @@ -1,101 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.PathfinderMob; -import net.minecraft.world.entity.ai.goal.MeleeAttackGoal; -import net.minecraft.world.entity.player.Player; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(MeleeAttackGoal.class) -public abstract class MeleeAttackGoalGravityMixin { - @Shadow - @Final - protected PathfinderMob mob; - - @Shadow - @Final - private double speedModifier; - - @Shadow - @Final - private boolean followingTargetEvenIfNotSeen; - - @Shadow - private int ticksUntilNextAttack; - - @Shadow - protected abstract void checkAndPerformAttack(LivingEntity enemy); - - @Inject(method = "canUse", at = @At("HEAD"), cancellable = true) - private void antarchy$useInvertedMelee(CallbackInfoReturnable cir) { - if (!AntarchyGravityApi.isGravityInverted(this.mob)) { - return; - } - - LivingEntity target = this.mob.getTarget(); - cir.setReturnValue(this.antarchy$isValidInvertedMeleeTarget(target)); - } - - @Inject(method = "canContinueToUse", at = @At("HEAD"), cancellable = true) - private void antarchy$continueInvertedMelee(CallbackInfoReturnable cir) { - if (!AntarchyGravityApi.isGravityInverted(this.mob)) { - return; - } - - LivingEntity target = this.mob.getTarget(); - cir.setReturnValue(this.antarchy$isValidInvertedMeleeTarget(target)); - } - - @Inject(method = "start", at = @At("HEAD"), cancellable = true) - private void antarchy$startInvertedMelee(CallbackInfo ci) { - if (!AntarchyGravityApi.isGravityInverted(this.mob)) { - return; - } - - LivingEntity target = this.mob.getTarget(); - this.mob.getNavigation().stop(); - this.mob.setAggressive(true); - this.ticksUntilNextAttack = 0; - ci.cancel(); - } - - @Inject(method = "tick", at = @At("HEAD"), cancellable = true) - private void antarchy$tickInvertedMelee(CallbackInfo ci) { - if (!AntarchyGravityApi.isGravityInverted(this.mob)) { - return; - } - - LivingEntity target = this.mob.getTarget(); - if (!this.antarchy$isValidInvertedMeleeTarget(target)) { - this.mob.getNavigation().stop(); - ci.cancel(); - return; - } - - this.mob.getLookControl().setLookAt(target, 30.0F, 30.0F); - // Do not call PathNavigation.moveTo here: that starts the unsafe vanilla - // path acquisition path. MoveControl receives a world-space target and - // the gravity movement mixin converts it into the inverted frame. - this.mob.getMoveControl().setWantedPosition(target.getX(), target.getY(), target.getZ(), this.speedModifier); - this.ticksUntilNextAttack = Math.max(0, this.ticksUntilNextAttack - 1); - this.checkAndPerformAttack(target); - ci.cancel(); - } - - private boolean antarchy$isValidInvertedMeleeTarget(LivingEntity target) { - if (target == null || !target.isAlive()) { - return false; - } - if (this.followingTargetEvenIfNotSeen && !this.mob.isWithinRestriction(target.blockPosition())) { - return false; - } - return !(target instanceof Player player) || (!player.isSpectator() && !player.isCreative()); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/MobHurtMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/MobHurtMixin.java deleted file mode 100644 index 5649f57d..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/MobHurtMixin.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.Mob; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(Mob.class) -/* - * Fixes hurt push logic that assumes normal gravity. - */ -public abstract class MobHurtMixin { - @WrapOperation(method = "doHurtTarget", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Mob;getYRot()F")) - private float wrapOperation_tryAttack_getYaw_0(Mob attacker, Operation original, Entity target) { - AntarchyGravityDirection gravityDirection = AntarchyGravityApi.getGravityDirection(target); - if (!gravityDirection.isInverted()) { - return original.call(attacker); - } - return AntarchyGravityRotationUtil.rotWorldToPlayer(original.call(attacker), attacker.getXRot(), gravityDirection).x; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/MoveControlGravityMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/MoveControlGravityMixin.java deleted file mode 100644 index 60116734..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/MoveControlGravityMixin.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; -import net.minecraft.world.entity.Mob; -import net.minecraft.world.entity.ai.control.MoveControl; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(MoveControl.class) -public abstract class MoveControlGravityMixin { - @Shadow - @Final - protected Mob mob; - - @Shadow - protected double wantedX; - - @Shadow - protected double wantedY; - - @Shadow - protected double wantedZ; - - @Shadow - protected double speedModifier; - - @Inject(method = "setWantedPosition", at = @At("TAIL")) - private void antarchy$convertInvertedWantedPosition(double x, double y, double z, double speed, CallbackInfo ci) { - if (!AntarchyGravityApi.isGravityInverted(this.mob)) { - return; - } - - Vec3 worldOffset = new Vec3(x - this.mob.getX(), y - this.mob.getY(), z - this.mob.getZ()); - Vec3 localOffset = AntarchyGravityRotationUtil.vecWorldToPlayer( - worldOffset, - AntarchyGravityApi.getGravityDirection(this.mob)); - this.wantedX = this.mob.getX() + localOffset.x; - this.wantedY = this.mob.getY() + localOffset.y; - this.wantedZ = this.mob.getZ() + localOffset.z; - this.speedModifier = speed; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PathNavigationAccessor.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PathNavigationAccessor.java deleted file mode 100644 index f7bdcedc..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PathNavigationAccessor.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import net.minecraft.world.entity.Mob; -import net.minecraft.world.entity.ai.navigation.PathNavigation; -import net.minecraft.world.level.pathfinder.NodeEvaluator; -import net.minecraft.world.level.pathfinder.Path; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(PathNavigation.class) -/* - * Accessor for path nav internals used by gravity fixes. - */ -public interface PathNavigationAccessor { - @Accessor("mob") - Mob antarchy$getMob(); - - @Accessor("path") - Path antarchy$getPath(); - - @Accessor("nodeEvaluator") - void antarchy$setNodeEvaluator(NodeEvaluator nodeEvaluator); -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PathNavigationDebugMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PathNavigationDebugMixin.java deleted file mode 100644 index e7b1def9..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PathNavigationDebugMixin.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import net.minecraft.core.BlockPos; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.ai.navigation.PathNavigation; -import net.minecraft.world.level.pathfinder.Path; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(PathNavigation.class) -/* - * Keeps path debug shapes lined up with gravity-aware nav. - */ -public abstract class PathNavigationDebugMixin { - private static final Logger LOGGER = LoggerFactory.getLogger("Antarchy/Pathfinding"); - - @Unique - private int antarchy$debugTickCooldown; - - @Inject(method = "moveTo(DDDD)Z", at = @At("HEAD")) - private void antarchy$logMoveToPosition(double x, double y, double z, double speed, CallbackInfoReturnable cir) { - var mob = ((PathNavigationAccessor) (Object) this).antarchy$getMob(); - if (!AntarchyGravityApi.isGravityInverted(mob)) { - return; - } - - LOGGER.debug( - "[Path] moveTo(pos) inverted mob={} target=({}, {}, {}) speed={}", - mob.getClass().getSimpleName(), - x, - y, - z, - speed - ); - } - - @Inject(method = "moveTo(Lnet/minecraft/world/level/pathfinder/Path;D)Z", at = @At("HEAD")) - private void antarchy$logMoveToPath(Path path, double speed, CallbackInfoReturnable cir) { - var mob = ((PathNavigationAccessor) (Object) this).antarchy$getMob(); - if (!AntarchyGravityApi.isGravityInverted(mob)) { - return; - } - - LOGGER.debug( - "[Path] moveTo(path) inverted mob={} nodes={} nextIndex={} speed={}", - mob.getClass().getSimpleName(), - path == null ? -1 : path.getNodeCount(), - path == null ? -1 : path.getNextNodeIndex(), - speed - ); - } - - @Inject(method = "createPath(DDDI)Lnet/minecraft/world/level/pathfinder/Path;", at = @At("RETURN")) - private void antarchy$logCreatePath(double x, double y, double z, int accuracy, CallbackInfoReturnable cir) { - var mob = ((PathNavigationAccessor) (Object) this).antarchy$getMob(); - if (!AntarchyGravityApi.isGravityInverted(mob)) { - return; - } - - Path path = cir.getReturnValue(); - LOGGER.debug( - "[Path] createPath(pos) inverted mob={} target=({}, {}, {}) accuracy={} result={}", - mob.getClass().getSimpleName(), - x, - y, - z, - accuracy, - path == null ? "null" : ("nodes=" + path.getNodeCount() + " nextIndex=" + path.getNextNodeIndex()) - ); - } - - @Inject(method = "createPath(Lnet/minecraft/world/entity/Entity;I)Lnet/minecraft/world/level/pathfinder/Path;", at = @At("RETURN")) - private void antarchy$logCreatePath(Entity target, int accuracy, CallbackInfoReturnable cir) { - var mob = ((PathNavigationAccessor) (Object) this).antarchy$getMob(); - if (!AntarchyGravityApi.isGravityInverted(mob)) { - return; - } - - Path path = cir.getReturnValue(); - LOGGER.debug( - "[Path] createPath(entity) inverted mob={} target={} accuracy={} result={}", - mob.getClass().getSimpleName(), - target == null ? "null" : target.getClass().getSimpleName(), - accuracy, - path == null ? "null" : ("nodes=" + path.getNodeCount() + " nextIndex=" + path.getNextNodeIndex()) - ); - } - - @Inject(method = "createPath(Lnet/minecraft/core/BlockPos;I)Lnet/minecraft/world/level/pathfinder/Path;", at = @At("RETURN")) - private void antarchy$logCreatePath(BlockPos target, int accuracy, CallbackInfoReturnable cir) { - var mob = ((PathNavigationAccessor) (Object) this).antarchy$getMob(); - if (!AntarchyGravityApi.isGravityInverted(mob)) { - return; - } - - Path path = cir.getReturnValue(); - LOGGER.debug( - "[Path] createPath(blockpos) inverted mob={} target={} accuracy={} result={}", - mob.getClass().getSimpleName(), - target, - accuracy, - path == null ? "null" : ("nodes=" + path.getNodeCount() + " nextIndex=" + path.getNextNodeIndex()) - ); - } - - @Inject(method = "tick", at = @At("HEAD")) - private void antarchy$logTick(CallbackInfo ci) { - var mob = ((PathNavigationAccessor) (Object) this).antarchy$getMob(); - if (!AntarchyGravityApi.isGravityInverted(mob)) { - return; - } - - if (this.antarchy$debugTickCooldown-- > 0) { - return; - } - - this.antarchy$debugTickCooldown = 20; - Path path = ((PathNavigationAccessor) (Object) this).antarchy$getPath(); - LOGGER.debug( - "[Path] tick inverted mob={} pathPresent={} pathDone={}", - mob.getClass().getSimpleName(), - path != null, - path != null && path.isDone() - ); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PlayerAttackMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PlayerAttackMixin.java index 2ea84d5c..5eaca4ab 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PlayerAttackMixin.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PlayerAttackMixin.java @@ -1,6 +1,7 @@ package com.craisinlord.antarchy.mixins.gravity; import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.item.EyeOfTheStormItem; import com.craisinlord.antarchy.content.item.GravityGunItem; import com.craisinlord.antarchy.content.item.PrimordialArmorItem; import com.llamalad7.mixinextras.injector.wrapoperation.Operation; @@ -16,26 +17,20 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(Player.class) -/* - * Fixes player attack checks under inverted gravity. - */ public abstract class PlayerAttackMixin { @Inject(method = "attack", at = @At("HEAD"), cancellable = true) private void antarchy$blockGravityGunMelee(Entity target, CallbackInfo ci) { - if (!AntarchySettings.gravityGunEnabled()) { - return; - } - Player player = (Player) (Object) this; ItemStack mainHand = player.getMainHandItem(); - if (mainHand.getItem() instanceof GravityGunItem) { + if (AntarchySettings.gravityGunEnabled() && mainHand.getItem() instanceof GravityGunItem) { + ci.cancel(); + return; + } + if (AntarchySettings.eyeOfTheStormEnabled() && mainHand.getItem() instanceof EyeOfTheStormItem) { ci.cancel(); } } - /* - * Primordial's full set bonus makes player melee knockback ignore the target's knockback resistance. - */ @WrapOperation(method = "attack", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;knockback(DDD)V")) private void antarchy$ignorePrimordialKnockbackResistance(LivingEntity target, double strength, double x, double z, Operation original) { Player player = (Player) (Object) this; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PlayerGravityMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PlayerGravityMixin.java deleted file mode 100644 index 8197a55d..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PlayerGravityMixin.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import com.llamalad7.mixinextras.sugar.Local; -import net.minecraft.core.BlockPos; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.phys.Vec2; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(Player.class) -/* - * Handles player-only gravity sync and movement fixes. - */ -public abstract class PlayerGravityMixin { - @WrapOperation(method = "travel", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/core/BlockPos;containing(DDD)Lnet/minecraft/core/BlockPos;")) - private BlockPos antarchy$fixTravelBlockPos(double x, double y, double z, - Operation original) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection((Entity) (Object) this); - if (!direction.isInverted()) return original.call(x, y, z); - Vec3 rotate = AntarchyGravityRotationUtil.vecPlayerToWorld( - new Vec3(0.0D, 0.9D, 0.0D), direction); - return original.call(x - rotate.x, y - rotate.y + 0.9D, z - rotate.z); - } - - @WrapOperation(method = "attack", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/entity/player/Player;getYRot()F", ordinal = 0)) - private float antarchy$fixAttackYaw0(Player attacker, Operation original, - @Local(argsOnly = true) Entity target) { - AntarchyGravityDirection targetDir = AntarchyGravityApi.getGravityDirection(target); - AntarchyGravityDirection attackerDir = AntarchyGravityApi.getGravityDirection(attacker); - if (targetDir == attackerDir) return original.call(attacker); - Vec2 worldRot = AntarchyGravityRotationUtil.rotPlayerToWorld( - original.call(attacker), attacker.getXRot(), attackerDir); - return AntarchyGravityRotationUtil.rotWorldToPlayer(worldRot.x, worldRot.y, targetDir).x; - } - - @WrapOperation(method = "attack", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/entity/player/Player;getYRot()F", ordinal = 1)) - private float antarchy$fixAttackYaw1(Player attacker, Operation original, - @Local(argsOnly = true) Entity target) { - AntarchyGravityDirection targetDir = AntarchyGravityApi.getGravityDirection(target); - AntarchyGravityDirection attackerDir = AntarchyGravityApi.getGravityDirection(attacker); - if (targetDir == attackerDir) return original.call(attacker); - Vec2 worldRot = AntarchyGravityRotationUtil.rotPlayerToWorld( - original.call(attacker), attacker.getXRot(), attackerDir); - return AntarchyGravityRotationUtil.rotWorldToPlayer(worldRot.x, worldRot.y, targetDir).x; - } - - @WrapOperation(method = "attack", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/entity/player/Player;getYRot()F", ordinal = 2)) - private float antarchy$fixAttackYaw2(Player attacker, Operation original) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(attacker); - if (!direction.isInverted()) return original.call(attacker); - return AntarchyGravityRotationUtil.rotPlayerToWorld( - original.call(attacker), attacker.getXRot(), direction).x; - } - - @WrapOperation(method = "attack", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/entity/player/Player;getYRot()F", ordinal = 3)) - private float antarchy$fixAttackYaw3(Player attacker, Operation original) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(attacker); - if (!direction.isInverted()) return original.call(attacker); - return AntarchyGravityRotationUtil.rotPlayerToWorld( - original.call(attacker), attacker.getXRot(), direction).x; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PlayerPoseFitMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PlayerPoseFitMixin.java deleted file mode 100644 index 584841d3..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PlayerPoseFitMixin.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import net.minecraft.world.entity.EntityDimensions; -import net.minecraft.world.entity.Pose; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(Player.class) -/* - * Fixes pose checks for ceiling-walking players. - */ -public abstract class PlayerPoseFitMixin { - - @Inject(method = "canPlayerFitWithinBlocksAndEntitiesWhen", at = @At("HEAD"), cancellable = true) - private void antarchy$canFitPoseWhenInverted(Pose pose, CallbackInfoReturnable cir) { - Player player = (Player) (Object) this; - if (!AntarchyGravityApi.isGravityInverted(player)) { - return; - } - - EntityDimensions dimensions = player.getDimensions(pose); - Vec3 position = player.position(); - float halfWidth = dimensions.width / 2.0F; - float height = dimensions.height; - AABB invertedBox = new AABB( - position.x - halfWidth, position.y - height, position.z - halfWidth, - position.x + halfWidth, position.y, position.z + halfWidth - ); - cir.setReturnValue(player.level().noCollision(player, invertedBox)); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PlayerSneakMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PlayerSneakMixin.java deleted file mode 100644 index d959395c..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PlayerSneakMixin.java +++ /dev/null @@ -1,109 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.MoverType; -import net.minecraft.world.entity.player.Abilities; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec3; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(Player.class) -/* - * Makes sneaking and edge checks work upside down. - */ -public abstract class PlayerSneakMixin { - - private static final Logger LOGGER = LoggerFactory.getLogger("Antarchy/Sneak"); - - @Shadow @Final private Abilities abilities; - @Shadow protected abstract boolean isStayingOnGroundSurface(); - - @Inject(method = "maybeBackOffFromEdge", at = @At("HEAD"), cancellable = true) - private void antarchy$fixSneakEdge(Vec3 movement, MoverType type, CallbackInfoReturnable cir) { - Entity this_ = (Entity) (Object) this; - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(this_); - if (!direction.isInverted()) { - return; - } - float step = this_.maxUpStep(); - boolean isNearCeiling; - if (this_.onGround()) { - isNearCeiling = true; - } else { - float remaining = step - this_.fallDistance; - if (remaining > 0.0F) { - AABB bb = this_.getBoundingBox(); - isNearCeiling = !this_.level().noCollision(this_, - new AABB(bb.minX, bb.maxY, bb.minZ, - bb.maxX, bb.maxY + remaining + 1.0E-5, bb.maxZ)); - } else { - isNearCeiling = false; - } - } - - LOGGER.debug("[Sneak] inverted player maybeBackOffFromEdge: isNearCeiling={} flying={} stayOnGround={} type={}", - isNearCeiling, this.abilities.flying, this.isStayingOnGroundSurface(), type); - - if (!this.abilities.flying - && (type == MoverType.SELF || type == MoverType.PLAYER) - && this.isStayingOnGroundSurface() - && isNearCeiling) { - Vec3 playerMovement = AntarchyGravityRotationUtil.vecWorldToPlayer(movement, direction); - double d = playerMovement.x; - double e = playerMovement.z; - - LOGGER.debug("[Sneak] Edge check active: step={} d={} e={}", step, d, e); - while (d != 0.0D && canFallAtLeastInverted(this_, d, 0.0D, step, direction)) { - if (Math.abs(d) <= 0.05D) d = 0.0D; - else if (d > 0.0D) d -= 0.05D; - else d += 0.05D; - } - while (e != 0.0D && canFallAtLeastInverted(this_, 0.0D, e, step, direction)) { - if (Math.abs(e) <= 0.05D) e = 0.0D; - else if (e > 0.0D) e -= 0.05D; - else e += 0.05D; - } - while (d != 0.0D && e != 0.0D && canFallAtLeastInverted(this_, d, e, step, direction)) { - if (Math.abs(d) <= 0.05D) d = 0.0D; - else if (d > 0.0D) d -= 0.05D; - else d += 0.05D; - - if (Math.abs(e) <= 0.05D) e = 0.0D; - else if (e > 0.0D) e -= 0.05D; - else e += 0.05D; - } - - LOGGER.debug("[Sneak] Adjusted: x {} -> {} z {} -> {}", playerMovement.x, d, playerMovement.z, e); - cir.setReturnValue(AntarchyGravityRotationUtil.vecPlayerToWorld( - new Vec3(d, playerMovement.y, e), direction)); - - } else { - cir.setReturnValue(movement); - } - } - - - private static boolean canFallAtLeastInverted(Entity entity, - double dx, double dz, - float step, - AntarchyGravityDirection direction) { - Vec3 worldOffset = AntarchyGravityRotationUtil.vecPlayerToWorld( - new Vec3(dx, -step, dz), direction); - - AABB bb = entity.getBoundingBox(); - AABB probe = bb.move(worldOffset); - - return entity.level().noCollision(entity, probe); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ProjectileGravityMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ProjectileGravityMixin.java deleted file mode 100644 index a8f0a2e3..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ProjectileGravityMixin.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import net.minecraft.world.entity.projectile.Projectile; -import org.spongepowered.asm.mixin.Mixin; - -@Mixin(Projectile.class) -/* - * Flips generic projectile gravity for inverted shooters. - */ -public abstract class ProjectileGravityMixin { -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/RandomStrollGoalGravityMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/RandomStrollGoalGravityMixin.java deleted file mode 100644 index 4d8362c1..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/RandomStrollGoalGravityMixin.java +++ /dev/null @@ -1,161 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.util.Mth; -import net.minecraft.world.entity.PathfinderMob; -import net.minecraft.world.entity.Pose; -import net.minecraft.world.entity.ai.goal.RandomStrollGoal; -import net.minecraft.world.entity.EntityDimensions; -import net.minecraft.world.level.Level; -import net.minecraft.world.phys.AABB; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(RandomStrollGoal.class) -public abstract class RandomStrollGoalGravityMixin { - @Unique - private static final int ANTARCHY$INVERTED_STROLL_ATTEMPTS = 12; - @Unique - private static final int ANTARCHY$INVERTED_STROLL_HORIZONTAL_RANGE = 7; - @Unique - private static final int ANTARCHY$INVERTED_STROLL_VERTICAL_RANGE = 2; - - @Shadow - @Final - protected PathfinderMob mob; - - @Shadow - protected double wantedX; - - @Shadow - protected double wantedY; - - @Shadow - protected double wantedZ; - - @Shadow - @Final - protected double speedModifier; - - @Shadow - protected int interval; - - @Shadow - protected boolean forceTrigger; - - @Shadow - @Final - private boolean checkNoActionTime; - - @Unique - private int antarchy$invertedStrollTicks; - - @Inject(method = "canUse", at = @At("HEAD"), cancellable = true) - private void antarchy$useInvertedRandomStroll(CallbackInfoReturnable cir) { - if (!AntarchyGravityApi.isGravityInverted(this.mob)) { - return; - } - - if (this.mob.hasControllingPassenger()) { - cir.setReturnValue(false); - return; - } - - if (!this.forceTrigger) { - if (this.checkNoActionTime && this.mob.getNoActionTime() >= 100) { - cir.setReturnValue(false); - return; - } - int chance = Math.max(1, this.interval); - if (this.mob.getRandom().nextInt(chance) != 0) { - cir.setReturnValue(false); - return; - } - } - - cir.setReturnValue(this.antarchy$findInvertedStrollTarget()); - } - - @Inject(method = "start", at = @At("HEAD"), cancellable = true) - private void antarchy$startInvertedRandomStroll(CallbackInfo ci) { - if (!AntarchyGravityApi.isGravityInverted(this.mob)) { - return; - } - - this.mob.getNavigation().stop(); - this.mob.getMoveControl().setWantedPosition(this.wantedX, this.wantedY, this.wantedZ, this.speedModifier); - this.antarchy$invertedStrollTicks = 0; - this.forceTrigger = false; - ci.cancel(); - } - - @Inject(method = "canContinueToUse", at = @At("HEAD"), cancellable = true) - private void antarchy$continueInvertedRandomStroll(CallbackInfoReturnable cir) { - if (!AntarchyGravityApi.isGravityInverted(this.mob)) { - return; - } - - double dx = this.wantedX - this.mob.getX(); - double dy = this.wantedY - this.mob.getY(); - double dz = this.wantedZ - this.mob.getZ(); - boolean arrived = dx * dx + dy * dy + dz * dz <= 1.0D; - boolean timedOut = this.antarchy$invertedStrollTicks++ >= 200; - if (!arrived && !timedOut && !this.mob.hasControllingPassenger()) { - // RandomStrollGoal inherits Goal.tick(), so continuation is the - // declared per-tick hook available for refreshing direct movement. - this.mob.getMoveControl().setWantedPosition(this.wantedX, this.wantedY, this.wantedZ, this.speedModifier); - } - cir.setReturnValue(!this.mob.hasControllingPassenger() && !arrived && !timedOut); - } - - @Unique - private boolean antarchy$findInvertedStrollTarget() { - int baseX = Mth.floor(this.mob.getX()); - int baseY = Mth.floor(this.mob.getY() + this.mob.getBbHeight()) - 1; - int baseZ = Mth.floor(this.mob.getZ()); - - for (int attempt = 0; attempt < ANTARCHY$INVERTED_STROLL_ATTEMPTS; attempt++) { - int x = baseX + this.mob.getRandom().nextInt(ANTARCHY$INVERTED_STROLL_HORIZONTAL_RANGE * 2 + 1) - ANTARCHY$INVERTED_STROLL_HORIZONTAL_RANGE; - int y = baseY + this.mob.getRandom().nextInt(ANTARCHY$INVERTED_STROLL_VERTICAL_RANGE * 2 + 1) - ANTARCHY$INVERTED_STROLL_VERTICAL_RANGE; - int z = baseZ + this.mob.getRandom().nextInt(ANTARCHY$INVERTED_STROLL_HORIZONTAL_RANGE * 2 + 1) - ANTARCHY$INVERTED_STROLL_HORIZONTAL_RANGE; - if (this.antarchy$isValidInvertedStrollTarget(x, y, z)) { - this.wantedX = x + 0.5D; - this.wantedY = y + 1.0D - 1.0E-3D; - this.wantedZ = z + 0.5D; - return true; - } - } - - return false; - } - - @Unique - private boolean antarchy$isValidInvertedStrollTarget(int x, int y, int z) { - Level level = this.mob.level(); - BlockPos ceilingPos = new BlockPos(x, y + 1, z); - if (!level.getBlockState(ceilingPos).isFaceSturdy(level, ceilingPos, Direction.DOWN)) { - return false; - } - - EntityDimensions dimensions = this.mob.getDimensions(Pose.STANDING); - double halfWidth = dimensions.width / 2.0D; - double topY = y + 1.0D - 1.0E-3D; - AABB bodyBox = new AABB( - x + 0.5D - halfWidth, - topY - dimensions.height, - z + 0.5D - halfWidth, - x + 0.5D + halfWidth, - topY, - z + 0.5D + halfWidth - ).deflate(1.0E-4D); - return level.noCollision(this.mob, bodyBox); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ServerChunkCacheAccessor.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ServerChunkCacheAccessor.java index f70ce183..d5bb3c8e 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ServerChunkCacheAccessor.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ServerChunkCacheAccessor.java @@ -6,9 +6,6 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; @Mixin(ServerChunkCache.class) -/* - * Accessor for server chunk source internals used by gravity sync. - */ public interface ServerChunkCacheAccessor { @Accessor("chunkMap") ChunkMap antarchy$getChunkMap(); diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ServerEntityAccessor.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ServerEntityAccessor.java deleted file mode 100644 index 0b4f0515..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ServerEntityAccessor.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import net.minecraft.server.level.ServerEntity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(ServerEntity.class) -/* - * Accessor for server entity tracking internals. - */ -public interface ServerEntityAccessor { - @Accessor("updateInterval") - void antarchy$setUpdateInterval(int updateInterval); -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ServerGamePacketListenerMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ServerGamePacketListenerMixin.java deleted file mode 100644 index cbbf51ca..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ServerGamePacketListenerMixin.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; -import net.minecraft.network.protocol.game.ServerboundMovePlayerPacket; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.server.network.ServerGamePacketListenerImpl; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyArg; -import org.spongepowered.asm.mixin.injection.ModifyVariable; - -@Mixin(ServerGamePacketListenerImpl.class) -/* - * Fixes move packet checks for inverted players. - */ -public abstract class ServerGamePacketListenerMixin { - - @Shadow - public ServerPlayer player; - - @Shadow - private double lastGoodX; - @Shadow - private double lastGoodY; - @Shadow - private double lastGoodZ; - - @ModifyVariable(method = "handleMovePlayer", - at = @At(value = "STORE", ordinal = 0), - ordinal = 0) - private boolean antarchy$fixHandleMovePlayerFlag(boolean originalFlag, - ServerboundMovePlayerPacket packet) { - AntarchyGravityDirection gravity = AntarchyGravityApi.getGravityDirection(this.player); - if (!gravity.isInverted()) { - return originalFlag; - } - double dx = packet.getX(this.player.getX()) - this.lastGoodX; - double dy = packet.getY(this.player.getY()) - this.lastGoodY; - double dz = packet.getZ(this.player.getZ()) - this.lastGoodZ; - Vec3 localVec = AntarchyGravityRotationUtil.vecWorldToPlayer(new Vec3(dx, dy, dz), gravity); - return localVec.y > 0.0; - } - - @ModifyArg(method = "handleMovePlayer", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/server/level/ServerPlayer;move(Lnet/minecraft/world/entity/MoverType;Lnet/minecraft/world/phys/Vec3;)V")) - private Vec3 antarchy$fixHandleMovePlayerVector(Vec3 worldDelta) { - AntarchyGravityDirection gravity = AntarchyGravityApi.getGravityDirection(this.player); - if (!gravity.isInverted()) { - return worldDelta; - } - return AntarchyGravityRotationUtil.vecWorldToPlayer(worldDelta, gravity); - } - - @ModifyArg(method = "handleMovePlayer", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/server/level/ServerPlayer;setOnGroundWithKnownMovement(ZLnet/minecraft/world/phys/Vec3;)V"), - index = 0) - private boolean antarchy$fixHandleMovePlayerOnGround(boolean originalOnGround) { - AntarchyGravityDirection gravity = AntarchyGravityApi.getGravityDirection(this.player); - if (!gravity.isInverted()) { - return originalOnGround; - } - return originalOnGround || this.player.verticalCollisionBelow || this.player.verticalCollision; - } - - @ModifyArg(method = "handleMovePlayer", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/server/level/ServerPlayer;doCheckFallDamage(DDDZ)V"), - index = 3) - private boolean antarchy$fixHandleMovePlayerFallDamageOnGround(boolean originalOnGround) { - AntarchyGravityDirection gravity = AntarchyGravityApi.getGravityDirection(this.player); - if (!gravity.isInverted()) { - return originalOnGround; - } - return originalOnGround || this.player.verticalCollisionBelow || this.player.verticalCollision; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ServerPlayerGravityMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ServerPlayerGravityMixin.java deleted file mode 100644 index 70629df2..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ServerPlayerGravityMixin.java +++ /dev/null @@ -1,116 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.fluid.AntarchyFluidChecks; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import com.llamalad7.mixinextras.sugar.Local; -import net.minecraft.core.BlockPos; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.material.FluidState; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(ServerPlayer.class) -/* - * Fixes server-side fall damage for inverted players. - */ -public abstract class ServerPlayerGravityMixin { - @Unique - private float antarchy$invertedFallDistance = 0.0F; - - @Inject(method = "doCheckFallDamage", at = @At("HEAD"), cancellable = true) - private void antarchy$cancelFallDamageInAntiwater(double x, double y, double z, boolean onGround, CallbackInfo ci) { - ServerPlayer self = (ServerPlayer) (Object) this; - AntarchyGravityDirection gravity = AntarchyGravityApi.getGravityDirection(self); - if (!gravity.isInverted()) { - return; - } - if (!antarchy$isTouchingAntiwater(self)) { - return; - } - - self.fallDistance = 0.0F; - this.antarchy$invertedFallDistance = 0.0F; - ci.cancel(); - } - - @WrapOperation(method = "doCheckFallDamage", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/entity/player/Player;checkFallDamage(DZLnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/core/BlockPos;)V")) - private void antarchy$fixFallDamage(ServerPlayer instance, - double worldY, boolean onGround, - BlockState state, BlockPos pos, - Operation original, - @Local(ordinal = 0) double dx, - @Local(ordinal = 1) double dy, - @Local(ordinal = 2) double dz) { - ServerPlayer self = (ServerPlayer) (Object) this; - AntarchyGravityDirection gravity = AntarchyGravityApi.getGravityDirection(self); - if (!gravity.isInverted()) { - this.antarchy$invertedFallDistance = 0.0F; - original.call(instance, worldY, onGround, state, pos); - return; - } - if (antarchy$isTouchingAntiwater(self) || antarchy$passedThroughAntiwater(self, dx, dy, dz)) { - self.fallDistance = 0.0F; - this.antarchy$invertedFallDistance = 0.0F; - original.call(instance, 0.0D, onGround, state, pos); - return; - } - Vec3 localVec = AntarchyGravityRotationUtil.vecWorldToPlayer(new Vec3(dx, dy, dz), gravity); - if (!onGround) { - if (localVec.y < 0.0) { - this.antarchy$invertedFallDistance += (float)(-localVec.y); - } else { - this.antarchy$invertedFallDistance = 0.0F; - } - } else if (this.antarchy$invertedFallDistance > self.fallDistance) { - // Vanilla damage uses fallDistance on landing; keep our own inverted accumulator - // in sync because the server pipeline is clearing the field before that point. - self.fallDistance = this.antarchy$invertedFallDistance; - } - original.call(instance, localVec.y, onGround, state, pos); - if (onGround) { - this.antarchy$invertedFallDistance = 0.0F; - } - } - - @Unique - private boolean antarchy$isTouchingAntiwater(ServerPlayer player) { - return antarchy$intersectsAntiwater(player, player.getBoundingBox().inflate(0.05D)); - } - - @Unique - private boolean antarchy$passedThroughAntiwater(ServerPlayer player, double dx, double dy, double dz) { - AABB sweptBox = player.getBoundingBox().expandTowards(-dx, -dy, -dz).inflate(0.05D); - return antarchy$intersectsAntiwater(player, sweptBox); - } - - @Unique - private boolean antarchy$intersectsAntiwater(ServerPlayer player, AABB box) { - BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(); - BlockPos min = BlockPos.containing(box.minX, box.minY, box.minZ); - BlockPos max = BlockPos.containing(box.maxX, box.maxY, box.maxZ); - for (int x = min.getX(); x <= max.getX(); x++) { - for (int y = min.getY(); y <= max.getY(); y++) { - for (int z = min.getZ(); z <= max.getZ(); z++) { - cursor.set(x, y, z); - FluidState fluidState = player.level().getFluidState(cursor); - if (AntarchyFluidChecks.isAntiwater(fluidState)) { - return true; - } - } - } - } - return false; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ThrowableProjectileGravityMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ThrowableProjectileGravityMixin.java deleted file mode 100644 index 6f9da5e5..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ThrowableProjectileGravityMixin.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import net.minecraft.world.entity.projectile.ThrowableProjectile; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; - -@Mixin(ThrowableProjectile.class) -/* - * Flips thrown projectile gravity for inverted shooters. - */ -public abstract class ThrowableProjectileGravityMixin { - @Shadow - protected abstract float getGravity(); - - @WrapOperation(method = "tick", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/entity/projectile/ThrowableProjectile;setDeltaMovement(DDD)V")) - private void antarchy$reverseUndersideGravity(ThrowableProjectile projectile, double x, double y, double z, - Operation original) { - if (ThoraxisUndersideManager.isInUnderside(projectile)) { - // Vanilla has already subtracted getGravity(); add twice to turn it into an upward acceleration. - y += this.getGravity() * 2.0D; - } - original.call(projectile, x, y, z); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/TrackedEntityAccessor.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/TrackedEntityAccessor.java deleted file mode 100644 index b5c258e9..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/TrackedEntityAccessor.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import net.minecraft.server.level.ServerEntity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(targets = "net.minecraft.server.level.ChunkMap$TrackedEntity") -/* - * Accessor for tracked entity internals used by gravity sync. - */ -public interface TrackedEntityAccessor { - @Accessor("serverEntity") - ServerEntity antarchy$getServerEntity(); -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/CameraGravityMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/CameraGravityMixin.java deleted file mode 100644 index d0e06db1..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/CameraGravityMixin.java +++ /dev/null @@ -1,100 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity.client; - -import com.craisinlord.antarchy.content.entity.HerculesBeetleEntity; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; -import net.minecraft.client.Camera; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.level.BlockGetter; -import net.minecraft.world.phys.Vec3; -import org.joml.Vector3f; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -@Mixin(Camera.class) -/* - * Fixes camera anchor position for inverted gravity and the flip anim. - * The actual view-rotation flip is handled by ViewportEvent.ComputeCameraAngles - * (GravityCameraRollHandler) since GameRenderer builds its view matrix from - * Camera.getXRot()/getYRot() directly, not from the Camera.rotation quaternion - * mutated here. - */ -public abstract class CameraGravityMixin { - @Shadow - private Entity entity; - - @Shadow - private float eyeHeight; - - @Shadow - private float eyeHeightOld; - - @Shadow - protected abstract void setPosition(double x, double y, double z); - - @Shadow - protected abstract void move(double forward, double up, double left); - - @Redirect( - method = "setup", - at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Camera;setPosition(DDD)V") - ) - private void antarchy$moveGravityCameraAnchor( - Camera camera, - double x, - double y, - double z, - BlockGetter level, - Entity entity, - boolean detached, - boolean mirrored, - float partialTick - ) { - if (entity == null) { - this.setPosition(x, y, z); - return; - } - - float flipProgress = AntarchyGravityApi.getGravityFlipProgress(entity, partialTick); - if (!AntarchyGravityApi.isGravityInverted(entity) && flipProgress <= 0.0F) { - this.setPosition(x, y, z); - return; - } - - Vec3 interpolatedPos = entity.getPosition(partialTick); - float normalEyeHeight = this.eyeHeightOld + (this.eyeHeight - this.eyeHeightOld) * partialTick; - Vector3f eyeOffset = new Vector3f(0.0F, normalEyeHeight, 0.0F); - eyeOffset.rotate(AntarchyGravityRotationUtil.getWorldRotationQuaternion(entity, partialTick)); - this.setPosition( - interpolatedPos.x + eyeOffset.x(), - interpolatedPos.y + eyeOffset.y(), - interpolatedPos.z + eyeOffset.z() - ); - } - - @Redirect( - method = "setup", - at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Camera;move(DDD)V") - ) - private void antarchy$moveWithGravity( - Camera camera, - double forward, - double up, - double left, - BlockGetter level, - Entity entity, - boolean detached, - boolean mirrored, - float partialTick - ) { - if (detached && this.entity != null && this.entity.getVehicle() instanceof HerculesBeetleEntity) { - forward *= 1.45D; - up += 0.2D; - left += 0.45D; - } - - this.move(forward, up, left); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/ClientPacketListenerGravityMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/ClientPacketListenerGravityMixin.java deleted file mode 100644 index 9afe4f83..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/ClientPacketListenerGravityMixin.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity.client; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import net.minecraft.client.Minecraft; -import net.minecraft.client.multiplayer.ClientPacketListener; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(ClientPacketListener.class) -/* - * Keeps client gravity state in sync from entity updates. - */ -public abstract class ClientPacketListenerGravityMixin { - - @WrapOperation(method = "handleExplosion", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/phys/Vec3;add(DDD)Lnet/minecraft/world/phys/Vec3;", - ordinal = 0)) - private Vec3 antarchy$fixExplosionKnockback(Vec3 current, - double x, double y, double z, - Operation original) { - if (Minecraft.getInstance().player == null) { - return original.call(current, x, y, z); - } - AntarchyGravityDirection gravity = - AntarchyGravityApi.getGravityDirection(Minecraft.getInstance().player); - if (!gravity.isInverted()) { - return original.call(current, x, y, z); - } - Vec3 local = AntarchyGravityRotationUtil.vecWorldToPlayer(new Vec3(x, y, z), gravity); - return original.call(current, local.x, local.y, local.z); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/EntityRenderDispatcherGravityMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/EntityRenderDispatcherGravityMixin.java deleted file mode 100644 index cb7c9f3a..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/EntityRenderDispatcherGravityMixin.java +++ /dev/null @@ -1,114 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity.client; - -import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.VertexConsumer; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.entity.EntityRenderDispatcher; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.ModifyVariable; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(EntityRenderDispatcher.class) -/* - * Rotates entity rendering for inverted gravity. - */ -public abstract class EntityRenderDispatcherGravityMixin { - @org.spongepowered.asm.mixin.Unique - private static boolean antarchy$loggedGravityRenderFailure; - - @Inject( - method = "render", - at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/vertex/PoseStack;translate(DDD)V", ordinal = 0, shift = At.Shift.AFTER) - ) - private void antarchy$rotateEntityRenderPose( - E entity, - double x, - double y, - double z, - float entityYaw, - float partialTick, - PoseStack poseStack, - MultiBufferSource bufferSource, - int packedLight, - CallbackInfo ci - ) { - try { - float flipProgress = AntarchyGravityApi.getGravityFlipProgress(entity, partialTick); - if (!AntarchyGravityApi.isGravityInverted(entity) && flipProgress <= 0.0F) { - return; - } - - poseStack.mulPose(AntarchyGravityRotationUtil.getCameraRotationQuaternion(entity, partialTick)); - } catch (Throwable throwable) { - antarchy$logGravityRenderFailure(entity, throwable); - } - } - - @ModifyVariable( - method = "renderHitbox", - at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/world/phys/AABB;move(DDD)Lnet/minecraft/world/phys/AABB;", ordinal = 0), - ordinal = 0 - ) - private static AABB antarchy$rotateRenderedHitbox( - AABB box, - PoseStack poseStack, - VertexConsumer vertexConsumer, - Entity entity, - float partialTick - ) { - try { - if (!AntarchyGravityApi.isGravityInverted(entity)) { - return box; - } - - return AntarchyGravityRotationUtil.boxWorldToPlayer( - box, - AntarchyGravityApi.getGravityDirection(entity) - ); - } catch (Throwable throwable) { - antarchy$logGravityRenderFailure(entity, throwable); - return box; - } - } - - @WrapOperation( - method = "renderHitbox", - at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;getViewVector(F)Lnet/minecraft/world/phys/Vec3;", ordinal = 0) - ) - private static Vec3 antarchy$rotateRenderedHitboxViewVector(Entity entity, float partialTick, Operation original) { - Vec3 viewVector = original.call(entity, partialTick); - try { - if (!AntarchyGravityApi.isGravityInverted(entity)) { - return viewVector; - } - - return AntarchyGravityRotationUtil.vecWorldToPlayer( - viewVector, - AntarchyGravityApi.getGravityDirection(entity) - ); - } catch (Throwable throwable) { - antarchy$logGravityRenderFailure(entity, throwable); - return viewVector; - } - } - - @org.spongepowered.asm.mixin.Unique - private static void antarchy$logGravityRenderFailure(Entity entity, Throwable throwable) { - if (antarchy$loggedGravityRenderFailure) { - return; - } - - antarchy$loggedGravityRenderFailure = true; - Antarchy.LOGGER.error("Disabling Antarchy gravity render adjustments after a client render failure on entity {}", entity, throwable); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/FallingBlockRendererBlockEntityMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/FallingBlockRendererBlockEntityMixin.java index e2ce0408..a2b6b653 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/FallingBlockRendererBlockEntityMixin.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/FallingBlockRendererBlockEntityMixin.java @@ -19,9 +19,6 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(FallingBlockRenderer.class) -/* - * Keeps falling block render data lined up with carried state. - */ public abstract class FallingBlockRendererBlockEntityMixin { @Inject( method = "render(Lnet/minecraft/world/entity/item/FallingBlockEntity;FFLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;I)V", diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/multipart/EntityMultipartLifecycleMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/multipart/EntityMultipartLifecycleMixin.java deleted file mode 100644 index 0b83f10c..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/multipart/EntityMultipartLifecycleMixin.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.craisinlord.antarchy.mixins.multipart; - -import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.level.entity.EntityInLevelCallback; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(Entity.class) -/* - * Ticks and cleans up multipart child entities with their parent. - */ -public abstract class EntityMultipartLifecycleMixin { - @Inject(method = "setLevelCallback", at = @At("TAIL")) - private void antarchy$spawnMultipartParts(EntityInLevelCallback entityInLevelCallback, CallbackInfo ci) { - if ((Object) this instanceof MultipartEntityOwner owner - && entityInLevelCallback != EntityInLevelCallback.NULL - && owner.antarchy$getMultipartParts() == null) { - owner.antarchy$spawnMultipartParts(); - } - } - - @Inject(method = "tick", at = @At("TAIL")) - private void antarchy$syncMultipartParts(CallbackInfo ci) { - if ((Object) this instanceof MultipartEntityOwner owner) { - owner.antarchy$syncMultipartParts(); - } - } - - @Inject(method = "setRemoved", at = @At("TAIL")) - private void antarchy$discardMultipartParts(Entity.RemovalReason removalReason, CallbackInfo ci) { - if ((Object) this instanceof MultipartEntityOwner owner) { - owner.antarchy$discardMultipartParts(); - } - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/AbstractArrowActionTimeDilationMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/AbstractArrowActionTimeDilationMixin.java deleted file mode 100644 index f14765a1..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/AbstractArrowActionTimeDilationMixin.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import net.minecraft.world.entity.projectile.AbstractArrow; -import org.objectweb.asm.Opcodes; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -@Mixin(AbstractArrow.class) -public abstract class AbstractArrowActionTimeDilationMixin { - @Shadow private int life; - @Shadow protected int inGroundTime; - @Shadow public int shakeTime; - - @Redirect(method = "tick", at = @At(value = "FIELD", target = "Lnet/minecraft/world/entity/projectile/AbstractArrow;shakeTime:I", opcode = Opcodes.PUTFIELD)) - private void antarchy$slowShakeTime(AbstractArrow arrow, int value) { - if (TimeDilationApi.consumeTick(arrow, "arrow_shake")) this.shakeTime = value; - } - - @Redirect(method = "tick", at = @At(value = "FIELD", target = "Lnet/minecraft/world/entity/projectile/AbstractArrow;inGroundTime:I", opcode = Opcodes.PUTFIELD, ordinal = 0)) - private void antarchy$slowInGroundTime(AbstractArrow arrow, int value) { - if (TimeDilationApi.consumeTick(arrow, "arrow_in_ground")) this.inGroundTime = value; - } - - @Redirect(method = "tick", at = @At(value = "FIELD", target = "Lnet/minecraft/world/entity/projectile/AbstractArrow;inGroundTime:I", opcode = Opcodes.PUTFIELD, ordinal = 1)) - private void antarchy$resetInGroundTime(AbstractArrow arrow, int value) { - this.inGroundTime = value; - } - - @Redirect(method = "tickDespawn", at = @At(value = "FIELD", target = "Lnet/minecraft/world/entity/projectile/AbstractArrow;life:I", opcode = Opcodes.PUTFIELD)) - private void antarchy$slowLifetime(AbstractArrow arrow, int value) { - if (TimeDilationApi.consumeTick(arrow, "arrow_lifetime")) this.life = value; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/AbstractArrowMovementTimeDilationMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/AbstractArrowMovementTimeDilationMixin.java deleted file mode 100644 index 4ed3936d..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/AbstractArrowMovementTimeDilationMixin.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import com.craisinlord.antarchy.content.time.TimeDilationMath; -import net.minecraft.world.entity.projectile.AbstractArrow; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -@Mixin(AbstractArrow.class) -public abstract class AbstractArrowMovementTimeDilationMixin { - @Redirect(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/phys/Vec3;add(Lnet/minecraft/world/phys/Vec3;)Lnet/minecraft/world/phys/Vec3;")) - private Vec3 antarchy$slowCollisionPath(Vec3 position, Vec3 movement) { - double rate = TimeDilationApi.getRate((AbstractArrow) (Object) this); - return position.add(rate >= TimeDilationMath.NORMAL_RATE ? movement : movement.scale(rate)); - } - - @Redirect(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/projectile/AbstractArrow;setPos(DDD)V")) - private void antarchy$slowPosition(AbstractArrow arrow, double x, double y, double z) { - double rate = Math.max(TimeDilationMath.MIN_RATE, TimeDilationApi.getRate(arrow)); - if (rate >= TimeDilationMath.NORMAL_RATE) { - arrow.setPos(x, y, z); - return; - } - arrow.setPos(arrow.getX() + (x - arrow.getX()) * rate, - arrow.getY() + (y - arrow.getY()) * rate, - arrow.getZ() + (z - arrow.getZ()) * rate); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/CreeperTimeDilationMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/CreeperTimeDilationMixin.java deleted file mode 100644 index d9541586..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/CreeperTimeDilationMixin.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import net.minecraft.world.entity.monster.Creeper; -import org.spongepowered.asm.mixin.Mixin; -import com.llamalad7.mixinextras.injector.ModifyReturnValue; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(Creeper.class) -public abstract class CreeperTimeDilationMixin { - @ModifyReturnValue(method = "getSwellDir", at = @At("RETURN")) - private int antarchy$slowSwellProgress(int direction) { - Creeper creeper = (Creeper) (Object) this; - return TimeDilationApi.consumeTick(creeper, "creeper_swell") ? direction : 0; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/EndCrystalTimeDilationMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/EndCrystalTimeDilationMixin.java deleted file mode 100644 index f6545b33..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/EndCrystalTimeDilationMixin.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import net.minecraft.world.entity.boss.enderdragon.EndCrystal; -import org.objectweb.asm.Opcodes; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; - -@Mixin(EndCrystal.class) -public abstract class EndCrystalTimeDilationMixin { - @WrapOperation(method = "tick", at = @At(value = "FIELD", target = "Lnet/minecraft/world/entity/boss/enderdragon/EndCrystal;time:I", opcode = Opcodes.PUTFIELD)) - private void antarchy$slowCrystalTime(EndCrystal crystal, int value, Operation original) { - if (TimeDilationApi.consumeTick(crystal, "end_crystal_time")) { - original.call(crystal, value); - } - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/EntityCrouchTimeDilationMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/EntityCrouchTimeDilationMixin.java deleted file mode 100644 index 62c455c2..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/EntityCrouchTimeDilationMixin.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.Pose; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(Entity.class) -public abstract class EntityCrouchTimeDilationMixin { - @Inject(method = "setPose", at = @At("HEAD"), cancellable = true) - private void antarchy$slowCrouchTransition(Pose pose, CallbackInfo callbackInfo) { - Entity entity = (Entity) (Object) this; - if (entity instanceof LivingEntity living - && (pose == Pose.CROUCHING || living.getPose() == Pose.CROUCHING) - && !TimeDilationApi.consumeTick(entity, "living_crouch")) { - callbackInfo.cancel(); - } - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/EntityDeltaMovementTimeDilationMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/EntityDeltaMovementTimeDilationMixin.java deleted file mode 100644 index 834d3b71..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/EntityDeltaMovementTimeDilationMixin.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import com.craisinlord.antarchy.content.time.TimeDilationEntityAccess; -import com.craisinlord.antarchy.content.time.TimeDilationMath; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyVariable; - -@Mixin(Entity.class) -public abstract class EntityDeltaMovementTimeDilationMixin { - @ModifyVariable(method = "setDeltaMovement(Lnet/minecraft/world/phys/Vec3;)V", at = @At("HEAD"), argsOnly = true, ordinal = 0) - private Vec3 antarchy$scaleTimeDilatedVelocityChange(Vec3 nextMovement) { - Entity entity = (Entity) (Object) this; - if (!(entity instanceof TimeDilationEntityAccess access) - || access.antarchy$isInTimeDilationMove() - || access.antarchy$isApplyingExternalImpulse()) { - return nextMovement; - } - - double rate = TimeDilationApi.getRate(entity); - if (rate >= TimeDilationMath.NORMAL_RATE) { - return nextMovement; - } - - Vec3 currentMovement = entity.getDeltaMovement(); - double y = currentMovement.y + (nextMovement.y - currentMovement.y) * rate; - if (nextMovement.y > currentMovement.y && nextMovement.y > 0.0D && (entity.onGround() || currentMovement.y <= 0.0D)) { - y = nextMovement.y; - } - return new Vec3( - currentMovement.x + (nextMovement.x - currentMovement.x) * rate, - y, - currentMovement.z + (nextMovement.z - currentMovement.z) * rate - ); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/EntityMoveTimeDilationMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/EntityMoveTimeDilationMixin.java deleted file mode 100644 index e109cbd3..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/EntityMoveTimeDilationMixin.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import com.craisinlord.antarchy.content.time.TimeDilationEntityAccess; -import com.craisinlord.antarchy.content.time.TimeDilationMath; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.MoverType; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.ModifyVariable; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(Entity.class) -public abstract class EntityMoveTimeDilationMixin { - @Inject(method = "move", at = @At("HEAD")) - private void antarchy$beginTimeDilationMove(MoverType moverType, Vec3 movement, CallbackInfo ci) { - if (this instanceof TimeDilationEntityAccess access) { - access.antarchy$setInTimeDilationMove(true); - } - } - - @Inject(method = "move", at = @At("RETURN")) - private void antarchy$endTimeDilationMove(MoverType moverType, Vec3 movement, CallbackInfo ci) { - if (this instanceof TimeDilationEntityAccess access) { - access.antarchy$setInTimeDilationMove(false); - } - } - - @ModifyVariable(method = "move", at = @At("HEAD"), argsOnly = true, ordinal = 0) - private Vec3 antarchy$scaleTimeDilatedMovement(Vec3 movement) { - Entity entity = (Entity) (Object) this; - double rate = TimeDilationApi.getRate(entity); - if (rate >= TimeDilationMath.NORMAL_RATE) { - return movement; - } - return movement.scale(rate); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/EntityRotationTimeDilationMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/EntityRotationTimeDilationMixin.java deleted file mode 100644 index 92667d79..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/EntityRotationTimeDilationMixin.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import com.craisinlord.antarchy.content.time.TimeDilationMath; -import net.minecraft.util.Mth; -import net.minecraft.world.entity.Entity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyVariable; - -@Mixin(Entity.class) -public abstract class EntityRotationTimeDilationMixin { - @ModifyVariable(method = "setYRot", at = @At("HEAD"), argsOnly = true) - private float antarchy$slowYaw(float nextYaw) { - Entity entity = (Entity) (Object) this; - double rate = TimeDilationApi.getRate(entity); - if (rate >= TimeDilationMath.NORMAL_RATE) { - return nextYaw; - } - return entity.getYRot() + Mth.wrapDegrees(nextYaw - entity.getYRot()) * (float) rate; - } - - @ModifyVariable(method = "setXRot", at = @At("HEAD"), argsOnly = true) - private float antarchy$slowPitch(float nextPitch) { - Entity entity = (Entity) (Object) this; - double rate = TimeDilationApi.getRate(entity); - if (rate >= TimeDilationMath.NORMAL_RATE) { - return nextPitch; - } - return entity.getXRot() + (nextPitch - entity.getXRot()) * (float) rate; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/EntityTimeDilationStateMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/EntityTimeDilationStateMixin.java deleted file mode 100644 index c5160851..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/EntityTimeDilationStateMixin.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationEntityAccess; -import com.craisinlord.antarchy.content.time.TimeDilationMath; -import java.util.HashMap; -import java.util.Map; -import net.minecraft.world.entity.Entity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; - -@Mixin(Entity.class) -public abstract class EntityTimeDilationStateMixin implements TimeDilationEntityAccess { - @Unique - private double antarchy$timeDilationRate = TimeDilationMath.NORMAL_RATE; - @Unique - private double antarchy$inheritedTimeDilationRate = TimeDilationMath.NORMAL_RATE; - @Unique - private final Map antarchy$timeDilationTimerProgress = new HashMap<>(); - @Unique - private boolean antarchy$inTimeDilationMove; - @Unique - private boolean antarchy$applyingExternalImpulse; - - @Override - public double antarchy$getTimeDilationRate() { - return this.antarchy$timeDilationRate; - } - - @Override - public void antarchy$setTimeDilationRate(double rate) { - this.antarchy$timeDilationRate = TimeDilationMath.clampRate(rate); - if (this.antarchy$timeDilationRate >= TimeDilationMath.NORMAL_RATE) { - this.antarchy$timeDilationTimerProgress.clear(); - } - } - - @Override - public double antarchy$getInheritedTimeDilationRate() { - return this.antarchy$inheritedTimeDilationRate; - } - - @Override - public void antarchy$setInheritedTimeDilationRate(double rate) { - this.antarchy$inheritedTimeDilationRate = TimeDilationMath.clampRate(rate); - } - - @Override - public boolean antarchy$consumeTimeDilationTick(String timerKey, double rate) { - double clampedRate = TimeDilationMath.clampRate(rate); - if (clampedRate >= TimeDilationMath.NORMAL_RATE) { - return true; - } - - double progress = this.antarchy$timeDilationTimerProgress.getOrDefault(timerKey, 0.0D) + clampedRate; - int wholeTicks = (int) Math.floor(progress + 1.0E-9D); - if (wholeTicks <= 0) { - this.antarchy$timeDilationTimerProgress.put(timerKey, progress); - return false; - } - - this.antarchy$timeDilationTimerProgress.put(timerKey, progress - wholeTicks); - return true; - } - - @Override - public boolean antarchy$isInTimeDilationMove() { - return this.antarchy$inTimeDilationMove; - } - - @Override - public void antarchy$setInTimeDilationMove(boolean inMove) { - this.antarchy$inTimeDilationMove = inMove; - } - - @Override - public boolean antarchy$isApplyingExternalImpulse() { - return this.antarchy$applyingExternalImpulse; - } - - @Override - public void antarchy$setApplyingExternalImpulse(boolean applying) { - this.antarchy$applyingExternalImpulse = applying; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/GeckoLibAnimationControllerTimeDilationMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/GeckoLibAnimationControllerTimeDilationMixin.java deleted file mode 100644 index 1bd8296d..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/GeckoLibAnimationControllerTimeDilationMixin.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import com.llamalad7.mixinextras.injector.ModifyReturnValue; -import net.minecraft.world.entity.Entity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import software.bernie.geckolib.core.animatable.GeoAnimatable; -import software.bernie.geckolib.core.animation.AnimationController; - -@Mixin(AnimationController.class) -public abstract class GeckoLibAnimationControllerTimeDilationMixin { - @Shadow(remap = false) - protected T animatable; - - @ModifyReturnValue(method = "adjustTick", at = @At("RETURN"), remap = false) - private double antarchy$scaleAnimationTick(double tick) { - if (this.animatable instanceof Entity entity) { - return tick * TimeDilationApi.getRate(entity); - } - return tick; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/HurtingProjectileMovementTimeDilationMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/HurtingProjectileMovementTimeDilationMixin.java deleted file mode 100644 index 1f717d6f..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/HurtingProjectileMovementTimeDilationMixin.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import com.craisinlord.antarchy.content.time.TimeDilationMath; -import net.minecraft.world.entity.projectile.AbstractHurtingProjectile; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -@Mixin(AbstractHurtingProjectile.class) -public abstract class HurtingProjectileMovementTimeDilationMixin { - @Redirect(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/projectile/AbstractHurtingProjectile;setPos(DDD)V")) - private void antarchy$slowPosition(AbstractHurtingProjectile projectile, double x, double y, double z) { - double rate = Math.max(TimeDilationMath.MIN_RATE, TimeDilationApi.getRate(projectile)); - if (rate >= TimeDilationMath.NORMAL_RATE) { - projectile.setPos(x, y, z); - return; - } - projectile.setPos(projectile.getX() + (x - projectile.getX()) * rate, - projectile.getY() + (y - projectile.getY()) * rate, - projectile.getZ() + (z - projectile.getZ()) * rate); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/ItemEntityRendererTimeDilationMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/ItemEntityRendererTimeDilationMixin.java deleted file mode 100644 index 514e6c30..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/ItemEntityRendererTimeDilationMixin.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.client.ClientTimeDilationTicker; -import net.minecraft.client.renderer.entity.ItemEntityRenderer; -import net.minecraft.world.entity.item.ItemEntity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.ModifyArg; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(ItemEntityRenderer.class) -public abstract class ItemEntityRendererTimeDilationMixin { - @Unique - private static final ThreadLocal antarchy$renderingItem = new ThreadLocal<>(); - - @Inject(method = "render", at = @At("HEAD")) - private void antarchy$beginItemRender(ItemEntity item, float entityYaw, float partialTick, - com.mojang.blaze3d.vertex.PoseStack poseStack, - net.minecraft.client.renderer.MultiBufferSource buffer, - int packedLight, CallbackInfo ci) { - antarchy$renderingItem.set(item); - } - - @Inject(method = "render", at = @At("RETURN")) - private void antarchy$endItemRender(ItemEntity item, float entityYaw, float partialTick, - com.mojang.blaze3d.vertex.PoseStack poseStack, - net.minecraft.client.renderer.MultiBufferSource buffer, - int packedLight, CallbackInfo ci) { - antarchy$renderingItem.remove(); - } - - @ModifyArg(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;sin(F)F"), index = 0) - private float antarchy$slowItemBob(float phase) { - ItemEntity item = antarchy$renderingItem.get(); - if (item == null) { - return phase; - } - double rate = com.craisinlord.antarchy.content.time.TimeDilationApi.getRate(item); - return rate >= 1.0D ? phase : phase * (float) rate; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/ItemEntityRotationTimeDilationMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/ItemEntityRotationTimeDilationMixin.java deleted file mode 100644 index f9bcd369..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/ItemEntityRotationTimeDilationMixin.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.client.ClientTimeDilationTicker; -import net.minecraft.world.entity.item.ItemEntity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import com.llamalad7.mixinextras.injector.ModifyReturnValue; - -@Mixin(ItemEntity.class) -public abstract class ItemEntityRotationTimeDilationMixin { - @ModifyReturnValue(method = "getSpin", at = @At("RETURN")) - private float antarchy$slowSpin(float spin) { - return ClientTimeDilationTicker.dilateItemSpin((ItemEntity) (Object) this, spin); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityAttackCooldownTimeDilationMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityAttackCooldownTimeDilationMixin.java deleted file mode 100644 index 0415fb3c..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityAttackCooldownTimeDilationMixin.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import net.minecraft.world.entity.LivingEntity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(LivingEntity.class) -public abstract class LivingEntityAttackCooldownTimeDilationMixin { - @Shadow - private int attackStrengthTicker; - - @Inject(method = "tick", at = @At("RETURN")) - private void antarchy$slowAttackCooldown(CallbackInfo ci) { - LivingEntity entity = (LivingEntity) (Object) this; - if (!TimeDilationApi.consumeTick(entity, "living_attack_cooldown")) { - this.attackStrengthTicker = Math.max(0, this.attackStrengthTicker - 1); - } - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityChronosphereEquipmentMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityChronosphereEquipmentMixin.java deleted file mode 100644 index cfd398de..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityChronosphereEquipmentMixin.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.ChronosphereManager; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.entity.EquipmentSlot; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.item.ItemStack; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(LivingEntity.class) -public abstract class LivingEntityChronosphereEquipmentMixin { - @Inject(method = "onEquipItem", at = @At("TAIL")) - private void antarchy$refreshChronosphere(EquipmentSlot slot, ItemStack oldStack, ItemStack newStack, CallbackInfo callback) { - if (slot == EquipmentSlot.CHEST && (Object) this instanceof ServerPlayer player) { - ChronosphereManager.refresh(player); - } - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityKnockbackTimeDilationMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityKnockbackTimeDilationMixin.java deleted file mode 100644 index 1b033a45..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityKnockbackTimeDilationMixin.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationEntityAccess; -import net.minecraft.world.entity.LivingEntity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(LivingEntity.class) -public abstract class LivingEntityKnockbackTimeDilationMixin { - @Inject(method = "knockback", at = @At("HEAD")) - private void antarchy$beginExternalImpulse(double strength, double x, double z, CallbackInfo ci) { - if (this instanceof TimeDilationEntityAccess access) { - access.antarchy$setApplyingExternalImpulse(true); - } - } - - @Inject(method = "knockback", at = @At("RETURN")) - private void antarchy$endExternalImpulse(double strength, double x, double z, CallbackInfo ci) { - if (this instanceof TimeDilationEntityAccess access) { - access.antarchy$setApplyingExternalImpulse(false); - } - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityRendererAnimationTimeDilationMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityRendererAnimationTimeDilationMixin.java deleted file mode 100644 index e2d0d06c..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityRendererAnimationTimeDilationMixin.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.client.ClientTimeDilationTicker; -import com.llamalad7.mixinextras.injector.ModifyReturnValue; -import net.minecraft.client.renderer.entity.LivingEntityRenderer; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.util.Mth; -import org.spongepowered.asm.mixin.injection.Redirect; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(LivingEntityRenderer.class) -public abstract class LivingEntityRendererAnimationTimeDilationMixin { - private static final ThreadLocal antarchy$renderingEntity = new ThreadLocal<>(); - - @org.spongepowered.asm.mixin.injection.Inject(method = "render", at = @At("HEAD")) - private void antarchy$beginRender(LivingEntity entity, float entityYaw, float partialTick, - com.mojang.blaze3d.vertex.PoseStack poseStack, - net.minecraft.client.renderer.MultiBufferSource buffer, - int packedLight, org.spongepowered.asm.mixin.injection.callback.CallbackInfo ci) { - antarchy$renderingEntity.set(entity); - } - - @org.spongepowered.asm.mixin.injection.Inject(method = "render", at = @At("RETURN")) - private void antarchy$endRender(LivingEntity entity, float entityYaw, float partialTick, - com.mojang.blaze3d.vertex.PoseStack poseStack, - net.minecraft.client.renderer.MultiBufferSource buffer, - int packedLight, org.spongepowered.asm.mixin.injection.callback.CallbackInfo ci) { - antarchy$renderingEntity.remove(); - } - - @Redirect(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;rotLerp(FFF)F", ordinal = 0)) - private float antarchy$slowBodyYaw(float partialTick, float previous, float current) { - LivingEntity entity = antarchy$renderingEntity.get(); - return entity == null ? Mth.rotLerp(partialTick, previous, current) - : ClientTimeDilationTicker.dilateRotation(entity, previous, current, partialTick); - } - - @Redirect(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;rotLerp(FFF)F", ordinal = 1)) - private float antarchy$slowHeadYaw(float partialTick, float previous, float current) { - LivingEntity entity = antarchy$renderingEntity.get(); - return entity == null ? Mth.rotLerp(partialTick, previous, current) - : ClientTimeDilationTicker.dilateRotation(entity, previous, current, partialTick); - } - - @Redirect(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;lerp(FFF)F", ordinal = 0)) - private float antarchy$slowHeadPitch(float partialTick, float previous, float current) { - LivingEntity entity = antarchy$renderingEntity.get(); - return entity == null ? Mth.lerp(partialTick, previous, current) - : ClientTimeDilationTicker.dilatePitch(entity, previous, current, partialTick); - } - - @Redirect(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/WalkAnimationState;speed(F)F")) - private float antarchy$slowWalkAmount(net.minecraft.world.entity.WalkAnimationState state, float partialTick) { - LivingEntity entity = antarchy$renderingEntity.get(); - float amount = state.speed(partialTick); - return entity == null ? amount : ClientTimeDilationTicker.dilateWalkAmount(entity, amount); - } - - @org.spongepowered.asm.mixin.injection.Inject(method = "getOverlayCoords", at = @At("HEAD"), cancellable = true) - private static void antarchy$slowHurtOverlay(LivingEntity entity, float partialTick, CallbackInfoReturnable cir) { - if (com.craisinlord.antarchy.content.time.TimeDilationApi.getRate(entity) < 1.0D - && (entity.hurtTime > 0 || entity.deathTime > 0)) { - cir.setReturnValue(net.minecraft.client.renderer.texture.OverlayTexture.pack(1.0F, entity.deathTime > 0)); - } - } - @ModifyReturnValue(method = "getAttackAnim", at = @At("RETURN")) - private float antarchy$slowAttackAnimation(float animation, LivingEntity entity, float partialTick) { - return ClientTimeDilationTicker.dilateAttackAnimation(entity, partialTick, animation); - } - - @ModifyReturnValue(method = "getBob", at = @At("RETURN")) - private float antarchy$slowIdleAnimation(float bob, LivingEntity entity, float partialTick) { - return ClientTimeDilationTicker.dilateAnimationTime(entity, bob); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityTimeDilationCleanupMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityTimeDilationCleanupMixin.java deleted file mode 100644 index d4dd7984..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityTimeDilationCleanupMixin.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.entity.LivingEntity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(LivingEntity.class) -public abstract class LivingEntityTimeDilationCleanupMixin { - @Inject(method = "die", at = @At("HEAD")) - private void antarchy$clearTimeDilationOnDeath(DamageSource damageSource, CallbackInfo ci) { - TimeDilationApi.clearRate((LivingEntity) (Object) this); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityTimeDilationMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityTimeDilationMixin.java deleted file mode 100644 index edb62d82..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityTimeDilationMixin.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import com.craisinlord.antarchy.content.time.TimeDilationManager; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.item.ItemStack; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(LivingEntity.class) -public abstract class LivingEntityTimeDilationMixin { - @Inject(method = "tickEffects", at = @At("HEAD")) - private void antarchy$trackTemporalEffects(CallbackInfo ci) { - TimeDilationManager.trackPotentiallyAffected((Entity) (Object) this); - } - - @Inject(method = "updateSwingTime", at = @At("HEAD"), cancellable = true) - private void antarchy$slowSwingTime(CallbackInfo ci) { - Entity entity = (Entity) (Object) this; - if (!TimeDilationApi.consumeTick(entity, "living_swing")) { - ci.cancel(); - } - } - - @Inject(method = "tickEffects", at = @At("HEAD"), cancellable = true) - private void antarchy$slowEffectTicks(CallbackInfo ci) { - Entity entity = (Entity) (Object) this; - if (!TimeDilationApi.consumeTick(entity, "living_effects")) { - ci.cancel(); - } - } - - @Inject(method = "updatingUsingItem", at = @At("HEAD"), cancellable = true) - private void antarchy$slowUsingItem(CallbackInfo ci) { - Entity entity = (Entity) (Object) this; - if (!TimeDilationApi.consumeTick(entity, "living_using_item")) { - ci.cancel(); - } - } - - @Inject(method = "swing(Lnet/minecraft/world/InteractionHand;Z)V", at = @At("HEAD"), cancellable = true) - private void antarchy$slowSwingStart(InteractionHand hand, boolean updateSelf, CallbackInfo ci) { - Entity entity = (Entity) (Object) this; - if (!TimeDilationApi.consumeTick(entity, "living_swing_start")) { - ci.cancel(); - } - } - - @Inject(method = "updateUsingItem", at = @At("HEAD"), cancellable = true) - private void antarchy$slowItemUseProgress(ItemStack stack, CallbackInfo ci) { - Entity entity = (Entity) (Object) this; - if (!TimeDilationApi.consumeTick(entity, "living_item_use_progress")) { - ci.cancel(); - } - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/LookControlTimeDilationMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/LookControlTimeDilationMixin.java deleted file mode 100644 index a45e7459..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/LookControlTimeDilationMixin.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import com.craisinlord.antarchy.content.time.TimeDilationMath; -import com.llamalad7.mixinextras.injector.ModifyReturnValue; -import net.minecraft.util.Mth; -import net.minecraft.world.entity.Mob; -import net.minecraft.world.entity.ai.control.LookControl; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(LookControl.class) -public abstract class LookControlTimeDilationMixin { - @Shadow - protected Mob mob; - - @ModifyReturnValue(method = "rotateTowards", at = @At("RETURN")) - private float antarchy$slowLookTurn(float result, float from, float to, float maxAngle) { - double rate = TimeDilationApi.getRate(this.mob); - if (rate >= TimeDilationMath.NORMAL_RATE) { - return result; - } - return from + (float) (Mth.wrapDegrees(result - from) * rate); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/MeleeAttackGoalTimeDilationMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/MeleeAttackGoalTimeDilationMixin.java deleted file mode 100644 index 91464218..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/MeleeAttackGoalTimeDilationMixin.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import net.minecraft.world.entity.PathfinderMob; -import net.minecraft.world.entity.ai.goal.MeleeAttackGoal; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(MeleeAttackGoal.class) -public abstract class MeleeAttackGoalTimeDilationMixin { - @Shadow - @Final - protected PathfinderMob mob; - - @Shadow - private int ticksUntilNextAttack; - - @Inject(method = "resetAttackCooldown", at = @At("RETURN")) - private void antarchy$scaleMeleeCooldown(CallbackInfo ci) { - this.ticksUntilNextAttack = TimeDilationApi.scaleCooldownTicks(this.mob, this.ticksUntilNextAttack); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/MobAttackTimeDilationMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/MobAttackTimeDilationMixin.java deleted file mode 100644 index 70c04436..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/MobAttackTimeDilationMixin.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import com.craisinlord.antarchy.content.time.TimeDilationMath; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.Mob; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(Mob.class) -public abstract class MobAttackTimeDilationMixin { - @Unique - private long antarchy$nextAttackTick = Long.MIN_VALUE; - - @Inject(method = "doHurtTarget", at = @At("HEAD"), cancellable = true) - private void antarchy$rateLimitAttack(Entity target, CallbackInfoReturnable cir) { - Mob mob = (Mob) (Object) this; - if (mob.level().isClientSide) { - return; - } - double rate = TimeDilationApi.getRate(mob); - if (rate >= TimeDilationMath.NORMAL_RATE) { - return; - } - long now = mob.level().getGameTime(); - if (now < this.antarchy$nextAttackTick) { - cir.setReturnValue(false); - return; - } - this.antarchy$nextAttackTick = now + TimeDilationApi.scaleCooldownTicks(mob, 20); - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/ParticlePositionAccessor.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/ParticlePositionAccessor.java deleted file mode 100644 index c38a965e..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/ParticlePositionAccessor.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import net.minecraft.client.particle.Particle; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(Particle.class) -public interface ParticlePositionAccessor { - @Accessor("x") - double antarchy$getX(); - - @Accessor("y") - double antarchy$getY(); - - @Accessor("z") - double antarchy$getZ(); -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/ParticleTimeDilationMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/ParticleTimeDilationMixin.java deleted file mode 100644 index c1630961..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/ParticleTimeDilationMixin.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.client.ClientTimeDilationTicker; -import com.craisinlord.antarchy.content.time.TimeDilationMath; -import net.minecraft.client.particle.Particle; -import org.objectweb.asm.Opcodes; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyArgs; -import org.spongepowered.asm.mixin.injection.Redirect; -import org.spongepowered.asm.mixin.injection.invoke.arg.Args; - -@Mixin(Particle.class) -public abstract class ParticleTimeDilationMixin { - @Shadow - protected int age; - @Shadow - protected double x; - @Shadow - protected double y; - @Shadow - protected double z; - - @Unique - private double antarchy$ageProgress; - - @Unique - private double antarchy$sampleRate() { - return ClientTimeDilationTicker.rateAt(this.x, this.y, this.z); - } - - @ModifyArgs( - method = "tick", - at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/Particle;move(DDD)V") - ) - private void antarchy$slowParticleMovement(Args args) { - double rate = this.antarchy$sampleRate(); - if (rate >= TimeDilationMath.NORMAL_RATE) { - return; - } - args.set(0, (Double) args.get(0) * rate); - args.set(1, (Double) args.get(1) * rate); - args.set(2, (Double) args.get(2) * rate); - } - - @Redirect( - method = "tick", - at = @At(value = "FIELD", target = "Lnet/minecraft/client/particle/Particle;age:I", opcode = Opcodes.PUTFIELD) - ) - private void antarchy$slowParticleAge(Particle self, int nextAge) { - double rate = this.antarchy$sampleRate(); - if (rate >= TimeDilationMath.NORMAL_RATE) { - this.age = nextAge; - return; - } - this.antarchy$ageProgress += rate; - if (this.antarchy$ageProgress >= 1.0D) { - this.antarchy$ageProgress -= 1.0D; - this.age = nextAge; - } - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/PlayerCooldownTimeDilationMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/PlayerCooldownTimeDilationMixin.java deleted file mode 100644 index 5e95ea0a..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/PlayerCooldownTimeDilationMixin.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemCooldowns; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -@Mixin(Player.class) -public abstract class PlayerCooldownTimeDilationMixin { - @Redirect(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/ItemCooldowns;tick()V")) - private void antarchy$advanceCooldowns(ItemCooldowns cooldowns) { - Player player = (Player) (Object) this; - if (TimeDilationApi.consumeTick(player, "player_item_cooldowns")) { - cooldowns.tick(); - } - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/PlayerTemporalTunerMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/PlayerTemporalTunerMixin.java new file mode 100644 index 00000000..613fc67e --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/PlayerTemporalTunerMixin.java @@ -0,0 +1,37 @@ +package com.craisinlord.antarchy.mixins.time; + +import com.craisinlord.anthology.time.TimeDilationMath; +import com.craisinlord.antarchy.content.item.TemporalTunerAccess; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.entity.player.Player; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(Player.class) +public abstract class PlayerTemporalTunerMixin implements TemporalTunerAccess { + @Unique + private double antarchy$temporalTunerRate = TimeDilationMath.NORMAL_RATE; + + @Override + public double antarchy$getTemporalTunerRate() { + return antarchy$temporalTunerRate; + } + + @Override + public void antarchy$setTemporalTunerRate(double rate) { + antarchy$temporalTunerRate = TimeDilationMath.clampRate(rate); + } + + @Inject(method = "addAdditionalSaveData", at = @At("TAIL")) + private void antarchy$saveTemporalTunerRate(CompoundTag tag, CallbackInfo ci) { + tag.putDouble("AntarchyTemporalTunerRate", antarchy$temporalTunerRate); + } + + @Inject(method = "readAdditionalSaveData", at = @At("TAIL")) + private void antarchy$loadTemporalTunerRate(CompoundTag tag, CallbackInfo ci) { + antarchy$temporalTunerRate = TimeDilationMath.clampRate(tag.getDouble("AntarchyTemporalTunerRate")); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/PortalParticleTimeDilationMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/PortalParticleTimeDilationMixin.java deleted file mode 100644 index ec676bb8..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/PortalParticleTimeDilationMixin.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.client.ClientTimeDilationTicker; -import net.minecraft.client.particle.PortalParticle; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(PortalParticle.class) -public abstract class PortalParticleTimeDilationMixin { - @Unique - private double antarchy$timeProgress; - - @Inject(method = "tick", at = @At("HEAD"), cancellable = true) - private void antarchy$slowPortalParticle(CallbackInfo ci) { - ParticlePositionAccessor position = (ParticlePositionAccessor) (Object) this; - double rate = ClientTimeDilationTicker.rateAt(position.antarchy$getX(), position.antarchy$getY(), position.antarchy$getZ()); - if (rate >= 1.0D) { - return; - } - this.antarchy$timeProgress += rate; - if (this.antarchy$timeProgress < 1.0D) { - ci.cancel(); - } else { - this.antarchy$timeProgress -= 1.0D; - } - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/PrimedTntTimeDilationMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/PrimedTntTimeDilationMixin.java deleted file mode 100644 index cd680d01..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/PrimedTntTimeDilationMixin.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import net.minecraft.world.entity.item.PrimedTnt; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(PrimedTnt.class) -public abstract class PrimedTntTimeDilationMixin { - @WrapOperation( - method = "tick", - at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/item/PrimedTnt;setFuse(I)V") - ) - private void antarchy$slowFuse(PrimedTnt tnt, int fuse, Operation original) { - if (TimeDilationApi.consumeTick(tnt, "primed_tnt_fuse")) { - original.call(tnt, fuse); - } - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/ProjectileTimeDilationMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/ProjectileTimeDilationMixin.java deleted file mode 100644 index a471ed0b..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/ProjectileTimeDilationMixin.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import com.craisinlord.antarchy.content.time.TimeDilationManager; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.projectile.Projectile; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(Projectile.class) -public abstract class ProjectileTimeDilationMixin { - @Inject(method = "setOwner", at = @At("TAIL")) - private void antarchy$inheritTimeDilation(Entity owner, CallbackInfo callbackInfo) { - if (owner != null) { - TimeDilationApi.setInheritedRate((Entity) (Object) this, TimeDilationApi.getRate(owner)); - TimeDilationManager.trackPotentiallyAffected((Entity) (Object) this); - } - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/RangedAttackGoalTimeDilationMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/RangedAttackGoalTimeDilationMixin.java deleted file mode 100644 index 1a237829..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/RangedAttackGoalTimeDilationMixin.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import net.minecraft.world.entity.Mob; -import net.minecraft.world.entity.ai.goal.RangedAttackGoal; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(RangedAttackGoal.class) -public abstract class RangedAttackGoalTimeDilationMixin { - @Shadow - @Final - private Mob mob; - - @Inject(method = "tick", at = @At("HEAD"), cancellable = true) - private void antarchy$slowRangedGoalTick(CallbackInfo ci) { - if (!TimeDilationApi.consumeTick(this.mob, "ranged_goal_tick")) { - ci.cancel(); - } - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/RangedBowAttackGoalTimeDilationMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/RangedBowAttackGoalTimeDilationMixin.java deleted file mode 100644 index 191bacff..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/RangedBowAttackGoalTimeDilationMixin.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import net.minecraft.world.entity.Mob; -import net.minecraft.world.entity.ai.goal.RangedBowAttackGoal; -import net.minecraft.world.entity.monster.Monster; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(RangedBowAttackGoal.class) -public abstract class RangedBowAttackGoalTimeDilationMixin { - @Unique - private Mob antarchy$timeDilationMob; - - @Inject(method = "(Lnet/minecraft/world/entity/monster/Monster;DIF)V", at = @At("RETURN")) - private void antarchy$captureMob(Monster mob, double speedModifier, int attackIntervalMin, float attackRadius, CallbackInfo ci) { - this.antarchy$timeDilationMob = mob; - } - - @Inject(method = "tick", at = @At("HEAD"), cancellable = true) - private void antarchy$slowRangedBowGoalTick(CallbackInfo ci) { - if (this.antarchy$timeDilationMob != null && !TimeDilationApi.consumeTick(this.antarchy$timeDilationMob, "ranged_bow_goal_tick")) { - ci.cancel(); - } - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/ReversePortalParticleTimeDilationMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/ReversePortalParticleTimeDilationMixin.java deleted file mode 100644 index a7d5aa85..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/ReversePortalParticleTimeDilationMixin.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.client.ClientTimeDilationTicker; -import net.minecraft.client.particle.ReversePortalParticle; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(ReversePortalParticle.class) -public abstract class ReversePortalParticleTimeDilationMixin { - @Unique - private double antarchy$timeProgress; - - @Inject(method = "tick", at = @At("HEAD"), cancellable = true) - private void antarchy$slowReversePortalParticle(CallbackInfo ci) { - ParticlePositionAccessor position = (ParticlePositionAccessor) (Object) this; - double rate = ClientTimeDilationTicker.rateAt(position.antarchy$getX(), position.antarchy$getY(), position.antarchy$getZ()); - if (rate >= 1.0D) { - return; - } - this.antarchy$timeProgress += rate; - if (this.antarchy$timeProgress < 1.0D) { - ci.cancel(); - } else { - this.antarchy$timeProgress -= 1.0D; - } - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/SoundEngineTimeDilationMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/SoundEngineTimeDilationMixin.java deleted file mode 100644 index 7a2f7aab..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/SoundEngineTimeDilationMixin.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.client.ClientTimeDilationTicker; -import com.craisinlord.antarchy.content.AntarchyObjects; -import com.craisinlord.antarchy.content.time.TimeDilationMath; -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import com.craisinlord.antarchy.content.effect.ContractedMobEffect; -import com.craisinlord.antarchy.content.effect.DilatedMobEffect; -import com.craisinlord.antarchy.mixins.client.EntityBoundSoundInstanceAccessor; -import com.llamalad7.mixinextras.injector.ModifyReturnValue; -import net.minecraft.client.resources.sounds.SoundInstance; -import net.minecraft.client.sounds.SoundEngine; -import net.minecraft.client.Minecraft; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(SoundEngine.class) -public abstract class SoundEngineTimeDilationMixin { - @ModifyReturnValue(method = "calculatePitch", at = @At("RETURN")) - private float antarchy$dilatePitch(float pitch, SoundInstance sound) { - double rate = ClientTimeDilationTicker.rateAt(sound.getX(), sound.getY(), sound.getZ()); - if (sound instanceof EntityBoundSoundInstanceAccessor accessor) { - rate = combineRates(rate, rateForEntity(accessor.antarchy$getEntity())); - } - Minecraft minecraft = Minecraft.getInstance(); - if (minecraft.player != null) { - rate = combineRates(rate, rateForEntity(minecraft.player)); - } - if (Math.abs(rate - TimeDilationMath.NORMAL_RATE) < 0.001D) { - return pitch; - } - return (float) (pitch * Math.max(TimeDilationMath.MIN_RATE, rate)); - } - - private static double combineRates(double first, double second) { - if (first < TimeDilationMath.NORMAL_RATE || second < TimeDilationMath.NORMAL_RATE) { - return Math.min(first, second); - } - return Math.max(first, second); - } - - private static double rateForEntity(Entity entity) { - double rate = TimeDilationApi.getRate(entity); - if (entity instanceof LivingEntity living) { - if (living.hasEffect(AntarchyObjects.DILATED_EFFECT.get())) { - rate = Math.min(rate, DilatedMobEffect.rateForAmplifier( - living.getEffect(AntarchyObjects.DILATED_EFFECT.get()).getAmplifier())); - } - if (living.hasEffect(AntarchyObjects.CONTRACTED_EFFECT.get())) { - rate = combineRates(rate, ContractedMobEffect.rateForAmplifier( - living.getEffect(AntarchyObjects.CONTRACTED_EFFECT.get()).getAmplifier())); - } - } - return rate; - } -} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/ThrowableProjectileMovementTimeDilationMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/ThrowableProjectileMovementTimeDilationMixin.java deleted file mode 100644 index 23f8de85..00000000 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/ThrowableProjectileMovementTimeDilationMixin.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import com.craisinlord.antarchy.content.time.TimeDilationMath; -import net.minecraft.world.entity.projectile.ThrowableProjectile; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -@Mixin(ThrowableProjectile.class) -public abstract class ThrowableProjectileMovementTimeDilationMixin { - @Redirect(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/projectile/ThrowableProjectile;setPos(DDD)V")) - private void antarchy$slowPosition(ThrowableProjectile projectile, double x, double y, double z) { - double rate = Math.max(TimeDilationMath.MIN_RATE, TimeDilationApi.getRate(projectile)); - if (rate >= TimeDilationMath.NORMAL_RATE) { - projectile.setPos(x, y, z); - return; - } - projectile.setPos(projectile.getX() + (x - projectile.getX()) * rate, - projectile.getY() + (y - projectile.getY()) * rate, - projectile.getZ() + (z - projectile.getZ()) * rate); - } -} diff --git a/common-1.20.1/src/main/java/software/bernie/geckolib/animatable/client/GeoRenderProvider.java b/common-1.20.1/src/main/java/software/bernie/geckolib/animatable/client/GeoRenderProvider.java index fa4a6881..0ca3bae0 100644 --- a/common-1.20.1/src/main/java/software/bernie/geckolib/animatable/client/GeoRenderProvider.java +++ b/common-1.20.1/src/main/java/software/bernie/geckolib/animatable/client/GeoRenderProvider.java @@ -2,7 +2,6 @@ package software.bernie.geckolib.animatable.client; import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; -/** Compatibility shim for item render-provider hooks used by the 1.21 source. */ public abstract class GeoRenderProvider { public abstract BlockEntityWithoutLevelRenderer getGeoItemRenderer(); } diff --git a/common-1.20.1/src/main/resources/antarchy-common.mixins.json b/common-1.20.1/src/main/resources/antarchy-common.mixins.json index 29b036a5..d27ad45e 100644 --- a/common-1.20.1/src/main/resources/antarchy-common.mixins.json +++ b/common-1.20.1/src/main/resources/antarchy-common.mixins.json @@ -1,152 +1,113 @@ { - "required": true, - "package": "com.craisinlord.antarchy.mixins", - "plugin": "com.craisinlord.antarchy.mixins.AntarchyMixinPlugin", - "refmap": "antarchy-forge.mixins.refmap.json", - "compatibilityLevel": "JAVA_17", - "mixins": [ - "AbstractMinecartMixin", - "AccessorFireBlock", - "AccessorRangedAttribute", - "AmericanFoodConsumeMixin", - "AmericanFoodNameMixin", - "BlockEntityTypeSignMixin", - "BloodglassMixin", - "DreamFireBlockMixin", - "DreamSandLowGravityMixin", - "DiodeBlockMixin", - "FarChunkSetBlockWarningMixin", - "FireVisualBaseFireBlockMixin", - "FireVisualEntityMixin", - "FlintAndSteelPortalIgnitionMixin", - "FrogSpawnVariantMixin", - "GlimmeringDamageImmunityMixin", - "GlimmeringPushableMixin", - "GlimmeringPushEntitiesMixin", - "GlowSquidLumenSpawnMixin", - "GlowVinesUnderLeavesMixin", - "GrindstoneMenuMixin", - "KingsTreeLocateCommandMixin", - "MantisClawWallClimbMixin", - "MilkBucketSizeResetMixin", - "MinecartItemMixin", - "GoopedStepSoundMixin", - "ExperimentalSettingsLevelSummaryMixin", - "NightmareSwordDamageMixin", - "NightmareArmorEffectImmunityMixin", - "PotionBrewingMixin", - "RedStoneWireBlockMixin", - "StinkyCrouchMixin", - "VillagerTradesMixin", - "WaterlilyLumenMixin", - "ServerPlayerGameModeMixin", - "SpongeAntiwaterMixin", - "SquidzookaMultishotMixin", - "TigerEyeCamouflageMixin", - "TigerEyeVisibilityMixin", - "gravity.AbstractArrowGravityMixin", - "gravity.BucketItemGravityMixin", - "gravity.ChunkMapAccessor", - "gravity.CrossbowItemGravityMixin", - "gravity.DirectionFacingMixin", - "gravity.EntityCollisionContextMixin", - "gravity.EntityGravityFrameMixin", - "gravity.EntityGravityMixin", - "gravity.EntityMoveMixin", - "gravity.ExplosionGravityMixin", - "gravity.FallingBlockEntityBlockDataMixin", - "gravity.FireworkRocketGravityMixin", - "gravity.GroundPathNavigationMixin", - "gravity.LivingEntityMixin", - "gravity.MobHurtMixin", - "gravity.PathNavigationAccessor", - "gravity.PathNavigationDebugMixin", - "gravity.PlayerAttackMixin", - "gravity.PlayerGravityMixin", - "gravity.PlayerSneakMixin", - "gravity.ProjectileGravityMixin", - "gravity.ServerChunkCacheAccessor", - "gravity.ServerEntityAccessor", - "gravity.ServerGamePacketListenerMixin", - "gravity.ServerPlayerGravityMixin", - "gravity.ThrowableProjectileGravityMixin", - "gravity.TrackedEntityAccessor", - "multipart.EntityMultipartLifecycleMixin", - "time.EntityDeltaMovementTimeDilationMixin", - "time.EntityMoveTimeDilationMixin", - "time.EntityTimeDilationStateMixin", - "time.EntityRotationTimeDilationMixin", - "time.LivingEntityKnockbackTimeDilationMixin", - "time.CreeperTimeDilationMixin", - "time.EndCrystalTimeDilationMixin", - "time.LivingEntityTimeDilationMixin", - "time.EntityCrouchTimeDilationMixin", - "time.LivingEntityTimeDilationCleanupMixin", - "time.LivingEntityAttackCooldownTimeDilationMixin", - "time.PlayerCooldownTimeDilationMixin", - "time.LivingEntityChronosphereEquipmentMixin", - "time.LookControlTimeDilationMixin", - "time.MeleeAttackGoalTimeDilationMixin", - "time.MobAttackTimeDilationMixin", - "time.PrimedTntTimeDilationMixin", - "time.AbstractArrowMovementTimeDilationMixin", - "time.ThrowableProjectileMovementTimeDilationMixin", - "time.HurtingProjectileMovementTimeDilationMixin", - "time.ProjectileTimeDilationMixin", - "time.GeckoLibAnimationControllerTimeDilationMixin", - "time.AbstractArrowActionTimeDilationMixin", - "time.RangedAttackGoalTimeDilationMixin", - "time.RangedBowAttackGoalTimeDilationMixin" - ], - "client": [ - "time.LivingEntityRendererAnimationTimeDilationMixin", - "time.ParticleTimeDilationMixin", - "time.PortalParticleTimeDilationMixin", - "time.ReversePortalParticleTimeDilationMixin", - "time.SoundEngineTimeDilationMixin", - "time.ItemEntityRotationTimeDilationMixin", - "time.ItemEntityRendererTimeDilationMixin", - "time.ParticlePositionAccessor" - ], - "client": [ - "client.EntityBoundSoundInstanceAccessor", - "client.AbstractMinecartRendererMixin", - "client.EntityLightProbeMixin", - "client.CustomBossBarMixin", - "client.CavarynSkyMixin", - "client.DimensionMusicMixin", - "client.CavarynHordeFogMixin", - "client.CavarynHordeLightTextureMixin", - "client.ElythiaSkyMixin", - "client.ElytraModelAccessor", - "client.FrogRendererElythiaMixin", - "client.ExperimentalSettingsPopupMixin", - "client.GlimmeringTranslucencyMixin", - "client.KrakensGraspChargePoseMixin", - "client.LightningBoltRendererMixin", - "client.ParalyzedMouseTurnMixin", - "client.ScreenEffectRendererFireVisualMixin", - "client.SplashManagerMixin", - "client.ThoraxisFogMixin", - "client.TigerEyeArmorHideMixin", - "client.TigerEyeNameTagHideMixin", - "client.MountedVehicleCameraMixin", - "client.WolfRendererGrimMixin", - "gravity.client.CameraGravityMixin", - "gravity.client.ClientPacketListenerGravityMixin", - "gravity.client.EntityRenderDispatcherGravityMixin", - "gravity.client.FallingBlockRendererBlockEntityMixin", - "time.LivingEntityRendererAnimationTimeDilationMixin", - "time.ParticleTimeDilationMixin", - "time.PortalParticleTimeDilationMixin", - "time.ReversePortalParticleTimeDilationMixin", - "time.SoundEngineTimeDilationMixin", - "time.ItemEntityRotationTimeDilationMixin", - "time.ItemEntityRendererTimeDilationMixin", - "time.ParticlePositionAccessor" - ], - "injectors": { - "defaultRequire": 1 - }, - "minVersion": "0.8" + "required": true, + "package": "com.craisinlord.antarchy.mixins", + "plugin": "com.craisinlord.antarchy.mixins.AntarchyMixinPlugin", + "refmap": "antarchy-forge.mixins.refmap.json", + "compatibilityLevel": "JAVA_17", + "mixins": [ + "AbstractMinecartMixin", + "AccessorFireBlock", + "AccessorRangedAttribute", + "AmericanFoodConsumeMixin", + "AmericanFoodNameMixin", + "BlockEntityTypeSignMixin", + "BloodCrystalKatanaDashPhaseMixin", + "BloodglassMixin", + "CommandedMobMixin", + "CreativeModeTabsEnchantmentOrderMixin", + "CriteriaTriggersAccessor", + "DiodeBlockMixin", + "DreamFireBlockMixin", + "EnchantmentApplicabilityMixin", + "EnchantmentTableApplicabilityMixin", + "ExperimentalSettingsLevelSummaryMixin", + "FarChunkSetBlockWarningMixin", + "FireVisualBaseFireBlockMixin", + "FireVisualEntityMixin", + "FlintAndSteelPortalIgnitionMixin", + "FrogSpawnVariantMixin", + "GlimmeringDamageImmunityMixin", + "GlimmeringPushEntitiesMixin", + "GlimmeringPushableMixin", + "GlowSquidLumenSpawnMixin", + "GlowVinesUnderLeavesMixin", + "GoopedStepSoundMixin", + "GrindstoneMenuMixin", + "JudgmentMarkEntityMixin", + "KingsTreeLocateCommandMixin", + "LivingEntityJumpingAccessor", + "LivingEntityRoyalEffectsMixin", + "MantisClawWallClimbMixin", + "MilkBucketSizeResetMixin", + "MinecartItemMixin", + "MobCommandedTargetMixin", + "NightmareArmorEffectImmunityMixin", + "NightmareSwordDamageMixin", + "PoiTypesAccessor", + "PoiTypesMixin", + "PortalGunItemEntityRemovalMixin", + "PortalGunZombieMixin", + "PotionBrewingInvoker", + "PotionBrewingMixin", + "ProjectileRoyalBoundaryMixin", + "RedStoneWireBlockMixin", + "RoyalBossMoveScanMixin", + "RoyalBoundaryOwnerCleanupMixin", + "RoyalGuardianPlayerAttackMixin", + "RoyalGuardianSwordCombatMixin", + "RoyalJudgmentCombatMixin", + "RoyalLootItemGlowMixin", + "RoyalNoRespiteMixin", + "ServerPlayerGameModeMixin", + "ServerPlayerRoyalBoundaryMixin", + "SpongeAntiwaterMixin", + "SquidzookaMultishotMixin", + "StinkyCrouchMixin", + "ThoraxisCeilingSpawnMixin", + "TigerEyeCamouflageMixin", + "TigerEyeVisibilityMixin", + "UndertrialSpawnPlacementsMixin", + "VillagerTradesMixin", + "WaterlilyLumenMixin", + "compat.biolith.MultiNoiseBiomeSourceNullGuardMixin", + "gravity.FallingBlockEntityBlockDataMixin", + "gravity.PlayerAttackMixin", + "gravity.ServerChunkCacheAccessor", + "time.PlayerTemporalTunerMixin" + ], + "client": [ + "compat.stellarview.StellarViewLunaDirectionMixin", + "client.AbstractMinecartRendererMixin", + "client.EntityLightProbeMixin", + "client.CustomBossBarMixin", + "client.DimensionMusicMixin", + "client.QueenMusicManagerMixin", + "client.CavarynSkyMixin", + "client.CavarynHordeFogMixin", + "client.CavarynHordeLightTextureMixin", + "client.ElythiaSkyMixin", + "client.ElytraModelAccessor", + "client.FrogRendererElythiaMixin", + "client.GameRendererSwingThroughGrassMixin", + "client.InventoryScreenRotationBypassMixin", + "client.ExperimentalSettingsPopupMixin", + "client.KrakensGraspChargePoseMixin", + "client.MountedVehicleCameraMixin", + "client.ParalyzedMouseTurnMixin", + "client.PortalGunZoomFovMixin", + "client.ScreenEffectRendererFireVisualMixin", + "client.GlimmeringTranslucencyMixin", + "client.HoverboardRiderPoseMixin", + "client.SplashManagerMixin", + "client.ThoraxisFogMixin", + "client.TigerEyeArmorHideMixin", + "client.TigerEyeNameTagHideMixin", + "client.TemporalContractionLivingRendererMixin", + "client.WolfRendererGrimMixin", + "gravity.client.FallingBlockRendererBlockEntityMixin" + ], + "injectors": { + "defaultRequire": 1 + }, + "minVersion": "0.8" } diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/cloud_shark.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/cloud_shark.animation.json deleted file mode 100644 index 7a3524e8..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/animations/cloud_shark.animation.json +++ /dev/null @@ -1,1692 +0,0 @@ -{ - "format_version": "1.8.0", - "animations": { - "idle": { - "loop": true, - "animation_length": 8, - "bones": { - "head": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, -9, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "5.0833": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "5.5833": { - "post": { - "vector": [9.05152, -14.71181, -2.33362] - }, - "lerp_mode": "catmullrom" - }, - "5.9167": { - "post": { - "vector": [8.59652, 23.13213, 3.14923] - }, - "lerp_mode": "catmullrom" - }, - "6.2083": { - "post": { - "vector": [12.67376, -21.70208, -2.75583] - }, - "lerp_mode": "catmullrom" - }, - "6.5": { - "post": { - "vector": [7.93597, -1.62811, -0.02639] - }, - "lerp_mode": "catmullrom" - }, - "7.0": { - "post": { - "vector": [7.00225, -12.68164, -1.3867] - }, - "lerp_mode": "catmullrom" - }, - "8.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "jaw": { - "rotation": { - "0.0": { - "post": { - "vector": [45, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.3333": { - "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "8.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_fin": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 7.5, -20] - }, - "lerp_mode": "catmullrom" - }, - "8.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_fin": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, -7.5, 20] - }, - "lerp_mode": "catmullrom" - }, - "8.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail": { - "rotation": { - "0.0": { - "post": { - "vector": [-17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 10, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "6.0": { - "post": { - "vector": [0, -10, 0] - }, - "lerp_mode": "catmullrom" - }, - "8.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail2": { - "rotation": { - "0.0": { - "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 21, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "6.0": { - "post": { - "vector": [0, -22.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "8.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "shark": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, 5] - }, - "lerp_mode": "catmullrom" - }, - "5.125": { - "post": { - "vector": [0, 0, 8.34] - }, - "lerp_mode": "catmullrom" - }, - "5.5417": { - "post": { - "vector": [0, 0, -9.4] - }, - "lerp_mode": "catmullrom" - }, - "6.0": { - "post": { - "vector": [0, 0, 7.28] - }, - "lerp_mode": "catmullrom" - }, - "6.4583": { - "post": { - "vector": [0, 0, -20.48] - }, - "lerp_mode": "catmullrom" - }, - "7.125": { - "post": { - "vector": [0, 0, 10.84] - }, - "lerp_mode": "catmullrom" - }, - "8.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 5, 0] - }, - "lerp_mode": "catmullrom" - }, - "8.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_wing": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -47.5] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, 60] - }, - "lerp_mode": "catmullrom" - }, - "8.0": { - "post": { - "vector": [0, 0, -47.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_wing2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -40] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, 50] - }, - "lerp_mode": "catmullrom" - }, - "8.0": { - "post": { - "vector": [0, 0, -40] - }, - "lerp_mode": "catmullrom" - } - } - }, - "halo": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "8.0": { - "post": { - "vector": [0, -360, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_wing": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 47.5] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, -60] - }, - "lerp_mode": "catmullrom" - }, - "8.0": { - "post": { - "vector": [0, 0, 47.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_wing2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 40] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, 50] - }, - "lerp_mode": "catmullrom" - }, - "8.0": { - "post": { - "vector": [0, 0, -40] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_wing_back": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -47.5] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, 60] - }, - "lerp_mode": "catmullrom" - }, - "8.0": { - "post": { - "vector": [0, 0, -47.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_wing_back2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -40] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, 50] - }, - "lerp_mode": "catmullrom" - }, - "8.0": { - "post": { - "vector": [0, 0, -40] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_wing_back": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 47.5] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, 60] - }, - "lerp_mode": "catmullrom" - }, - "8.0": { - "post": { - "vector": [0, 0, -47.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_wing_back2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 40] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, 50] - }, - "lerp_mode": "catmullrom" - }, - "8.0": { - "post": { - "vector": [0, 0, -40] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "swim": { - "loop": true, - "animation_length": 4, - "bones": { - "head": { - "rotation": { - "0.0": { - "post": { - "vector": [7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-24.99904, 0.15373, -0.04445] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "jaw": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.375": { - "post": { - "vector": [45, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.4583": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.1667": { - "post": { - "vector": [20.04, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_fin": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -7.5] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 10, -37.5] - }, - "lerp_mode": "catmullrom" - }, - "3.9583": { - "post": { - "vector": [0, 0, -7.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_fin": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, -10, 37.5] - }, - "lerp_mode": "catmullrom" - }, - "3.9583": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "torso": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail": { - "rotation": { - "0.0": { - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-15, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail2": { - "rotation": { - "0.0": { - "post": { - "vector": [15, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5417": { - "post": { - "vector": [-25, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [15, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "shark": { - "rotation": { - "0.0": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.2083": { - "post": { - "vector": [27.5, 0, 7.5] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [39.87576, -0.221, 0.70095] - }, - "lerp_mode": "catmullrom" - }, - "3.2083": { - "post": { - "vector": [8.10446, 0, -10.81866] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.125": { - "post": { - "vector": [0, -7, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.125": { - "post": { - "vector": [0, -3.07, -23] - }, - "lerp_mode": "catmullrom" - }, - "3.0833": { - "post": { - "vector": [0, 1.32, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_wing": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -67.5] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 82.5] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, -67.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_wing2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -20] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 55] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, -20] - }, - "lerp_mode": "catmullrom" - } - } - }, - "halo": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, -360, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_wing": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -67.5] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 82.5] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, -67.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_wing2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -20] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 55] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, -20] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_wing_back": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -67.5] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 82.5] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, -67.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_wing_back2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -20] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 55] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, -20] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_wing_back": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -67.5] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 82.5] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, -67.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_wing_back2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -20] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 55] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, -20] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "attack": { - "animation_length": 1, - "bones": { - "head": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-32.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4583": { - "post": { - "vector": [-32.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [-23.90662, 11.91236, 24.96938] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "jaw": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [72.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4583": { - "post": { - "vector": [72.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_fin": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [18.89595, 26.94622, 37.0662] - }, - "lerp_mode": "catmullrom" - }, - "0.4583": { - "post": { - "vector": [18.89595, 26.94622, 37.0662] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_fin": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [18.89595, -26.94622, -37.0662] - }, - "lerp_mode": "catmullrom" - }, - "0.4583": { - "post": { - "vector": [18.89595, -26.94622, -37.0662] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "torso": { - "position": { - "0.0": { - "vector": [0, 0, 0] - }, - "0.5417": { - "vector": [0.03742, 9.00972, 6.31059] - }, - "1.0": { - "vector": [0, 0, 0] - } - } - }, - "tail": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-30, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [-30, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4583": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [25, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [27.22644, -22.52101, -11.14843] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [-27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4583": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [29.87229, -22.01609, -12.15123] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "shark": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "vector": [15.00835, -0.0566, -0.1949] - }, - "0.2917": { - "vector": [15.00835, -0.0566, -0.1949] - }, - "0.5": { - "vector": [35.00835, -0.0566, -0.1949] - }, - "0.5833": { - "vector": [34.06837, -8.59433, 12.1853] - }, - "1.0": { - "pre": { - "vector": [0, 0, 0] - }, - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, -4, 8] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [0, -4, 8] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-1, -4, -9] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [0.44, -4, -10.06] - }, - "lerp_mode": "catmullrom" - }, - "0.4583": { - "post": { - "vector": [-1, -4, -9] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, -4, -9] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [0, -16, -9] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, -9, -9] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_wing": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -47.5] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-28.48347, -25.49671, -55.92684] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [-28.48347, -25.49671, -55.92684] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-26.25382, 27.79687, 25.89482] - }, - "lerp_mode": "catmullrom" - }, - "0.4583": { - "post": { - "vector": [-26.25382, 27.79687, 25.89482] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-22.40559, -30.89218, -68.73521] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [-22.40559, -30.89218, -68.73521] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -47.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_wing2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -40] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 0, 30] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [0, 0, 30] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, -55] - }, - "lerp_mode": "catmullrom" - }, - "0.4583": { - "post": { - "vector": [0, 0, -55] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -55] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [0, 0, 55] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -40] - }, - "lerp_mode": "catmullrom" - } - } - }, - "halo": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_wing": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -47.5] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-28.48347, -25.49671, -55.92684] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [-28.48347, -25.49671, -55.92684] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-26.25382, 27.79687, 25.89482] - }, - "lerp_mode": "catmullrom" - }, - "0.4583": { - "post": { - "vector": [-26.25382, 27.79687, 25.89482] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-22.40559, -30.89218, -68.73521] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [-22.40559, -30.89218, -68.73521] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -47.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_wing2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -40] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 0, 30] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [0, 0, 30] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, -55] - }, - "lerp_mode": "catmullrom" - }, - "0.4583": { - "post": { - "vector": [0, 0, -55] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -55] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [0, 0, 55] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -40] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_wing_back": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -47.5] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-28.48347, -25.49671, -55.92684] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [-28.48347, -25.49671, -55.92684] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-26.25382, 27.79687, 25.89482] - }, - "lerp_mode": "catmullrom" - }, - "0.4583": { - "post": { - "vector": [-26.25382, 27.79687, 25.89482] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-22.40559, -30.89218, -68.73521] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [-22.40559, -30.89218, -68.73521] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -47.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_wing_back2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -40] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 0, 30] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [0, 0, 30] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, -55] - }, - "lerp_mode": "catmullrom" - }, - "0.4583": { - "post": { - "vector": [0, 0, -55] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -55] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [0, 0, 55] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -40] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_wing_back": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -47.5] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-28.48347, -25.49671, -55.92684] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [-28.48347, -25.49671, -55.92684] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-26.25382, 27.79687, 25.89482] - }, - "lerp_mode": "catmullrom" - }, - "0.4583": { - "post": { - "vector": [-26.25382, 27.79687, 25.89482] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-22.40559, -30.89218, -68.73521] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [-22.40559, -30.89218, -68.73521] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -47.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_wing_back2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -40] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 0, 30] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [0, 0, 30] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, -55] - }, - "lerp_mode": "catmullrom" - }, - "0.4583": { - "post": { - "vector": [0, 0, -55] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -55] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [0, 0, 55] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -40] - }, - "lerp_mode": "catmullrom" - } - } - } - } - } - } -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/creeping_horror.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/creeping_horror.animation.json deleted file mode 100644 index f9736e11..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/animations/creeping_horror.animation.json +++ /dev/null @@ -1,2372 +0,0 @@ -{ - "format_version": "1.8.0", - "animations": { - "idle": { - "loop": true, - "animation_length": 5, - "bones": { - "rightjaw": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -10, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 10, 0] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [0, -10, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightfrontleg": { - "rotation": { - "0.0": { - "post": { - "vector": [15.3924, -26.5931, -20.1521] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightfrontknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightfrontfoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "root": { - "position": { - "0.0": { - "post": { - "vector": [0, 4, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "body": { - "rotation": { - "0.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.5": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tailbase": { - "rotation": { - "0.0": { - "post": { - "vector": [12.6866, -9.7606, -2.1856] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [12.6866, 9.7606, 2.1856] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [12.9264, -14.6364, -3.3192] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [12.6866, -9.7606, -2.1856] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tailmiddle": { - "rotation": { - "0.0": { - "post": { - "vector": [15.9153, -19.2911, -5.3815] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [15.9153, 19.2911, 5.3815] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [15.9153, -19.2911, -5.3815] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tailtip": { - "rotation": { - "0.0": { - "post": { - "vector": [18.5482, -19.0375, -6.246] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [19.5682, -26.1278, -8.8967] - }, - "lerp_mode": "catmullrom" - }, - "3.5": { - "post": { - "vector": [18.5482, 19.0375, 6.246] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [18.5482, -19.0375, -6.246] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftfrontleg": { - "rotation": { - "0.0": { - "post": { - "vector": [15.3924, 26.5931, 20.1521] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftfrontknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftfrontfoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightbackleg": { - "rotation": { - "0.0": { - "post": { - "vector": [-15.3924, 26.5931, -20.1521] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightbackknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightbackfoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftbackleg": { - "rotation": { - "0.0": { - "post": { - "vector": [-15.3924, -26.5931, 20.1521] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftbackknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftbackfoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftjaw": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 10, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, -10, 0] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [0, 10, 0] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "walk": { - "loop": true, - "animation_length": 1, - "bones": { - "rightjaw": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -10, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [0, 10, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [0, -10, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightfrontleg": { - "rotation": { - "0.0": { - "post": { - "vector": [15.3924, -26.5931, -20.1521] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [10.257, -28.8205, -9.1359] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-9.6179, -48.6127, -5.3962] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [7.6439, -48.8755, -28.2259] - }, - "lerp_mode": "catmullrom" - }, - "0.4375": { - "post": { - "vector": [7.6439, -48.8755, -28.2259] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [15.3924, -26.5931, -20.1521] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [10.257, -28.8205, -9.1359] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-9.6179, -48.6127, -5.3962] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [7.6439, -48.8755, -28.2259] - }, - "lerp_mode": "catmullrom" - }, - "0.9375": { - "post": { - "vector": [7.6439, -48.8755, -28.2259] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [15.3924, -26.5931, -20.1521] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 0, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [-1, 0, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-1, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-1, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-1, 0, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-1, 0, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-1, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [-1, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-1, 0, 1] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightfrontknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightfrontfoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "root": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0625": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1875": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3125": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4375": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5625": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6875": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.8125": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.9375": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 4, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0625": { - "post": { - "vector": [0, 3.75, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 4, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1875": { - "post": { - "vector": [0, 4, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 4, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3125": { - "post": { - "vector": [0, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 4, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4375": { - "post": { - "vector": [0, 4, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 4, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5625": { - "post": { - "vector": [0, 3.75, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 4, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6875": { - "post": { - "vector": [0, 4, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 4, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.8125": { - "post": { - "vector": [0, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [0, 4, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.9375": { - "post": { - "vector": [0, 4, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 4, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "body": { - "rotation": { - "0.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tailbase": { - "rotation": { - "0.0": { - "post": { - "vector": [12.6866, -9.7606, -2.1856] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [12.6866, 9.7606, 2.1856] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [12.9264, -14.6364, -3.3192] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [12.6866, -9.7606, -2.1856] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tailmiddle": { - "rotation": { - "0.0": { - "post": { - "vector": [15.9153, -19.2911, -5.3815] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [15.9153, 19.2911, 5.3815] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [15.9153, -19.2911, -5.3815] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tailtip": { - "rotation": { - "0.0": { - "post": { - "vector": [18.5482, -19.0375, -6.246] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [19.5682, -26.1278, -8.8967] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [18.5482, 19.0375, 6.246] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [18.5482, -19.0375, -6.246] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftfrontleg": { - "rotation": { - "0.0": { - "post": { - "vector": [10.257, 28.8205, 9.1359] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [-9.6179, 48.6127, 5.3962] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [7.6439, 48.8755, 28.2259] - }, - "lerp_mode": "catmullrom" - }, - "0.3125": { - "post": { - "vector": [7.6439, 48.8755, 28.2259] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [15.3924, 26.5931, 20.1521] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [10.257, 28.8205, 9.1359] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-9.6179, 48.6127, 5.3962] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [7.6439, 48.8755, 28.2259] - }, - "lerp_mode": "catmullrom" - }, - "0.8125": { - "post": { - "vector": [7.6439, 48.8755, 28.2259] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [15.3924, 26.5931, 20.1521] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [10.257, 28.8205, 9.1359] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [1, 0, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [1, 0, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [1, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [1, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [1, 0, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [1, 0, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [1, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [1, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftfrontknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 35] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, 7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [0, 0, 35] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftfrontfoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightbackleg": { - "rotation": { - "0.0": { - "post": { - "vector": [-10.257, 28.8205, -9.1359] - }, - "lerp_mode": "catmullrom" - }, - "0.0625": { - "post": { - "vector": [-10.257, 28.8205, -9.1359] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [-15.3924, 26.5931, -20.1521] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-7.6439, 48.8755, -28.2259] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [9.6179, 48.6127, -5.3962] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-10.257, 28.8205, -9.1359] - }, - "lerp_mode": "catmullrom" - }, - "0.5625": { - "post": { - "vector": [-10.257, 28.8205, -9.1359] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-15.3924, 26.5931, -20.1521] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-7.6439, 48.8755, -28.2259] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [9.6179, 48.6127, -5.3962] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-10.257, 28.8205, -9.1359] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightbackknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, -35] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, -7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, -35] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [0, 0, -7.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightbackfoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, -2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, -2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, -2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [0, 0, -2.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftbackleg": { - "rotation": { - "0.0": { - "post": { - "vector": [-15.3924, -26.5931, 20.1521] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [-7.6439, -48.8755, 28.2259] - }, - "lerp_mode": "catmullrom" - }, - "0.1875": { - "post": { - "vector": [-7.6439, -48.8755, 28.2259] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [9.6179, -48.6127, 5.3962] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-10.257, -28.8205, 9.1359] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-15.3924, -26.5931, 20.1521] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-7.6439, -48.8755, 28.2259] - }, - "lerp_mode": "catmullrom" - }, - "0.6875": { - "post": { - "vector": [-7.6439, -48.8755, 28.2259] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [9.6179, -48.6127, 5.3962] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [-10.257, -28.8205, 9.1359] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-15.3924, -26.5931, 20.1521] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftbackknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 35] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 35] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 35] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftbackfoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, -2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [0, 0, -2.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftjaw": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 10, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [0, -10, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [0, 10, 0] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "attack": { - "loop": true, - "animation_length": 1, - "bones": { - "rightjaw": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -10, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 25, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, -20, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, -20, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, -10, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, -10, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightfrontleg": { - "rotation": { - "0.0": { - "post": { - "vector": [15.3924, -26.5931, -20.1521] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [12.3553, -30.5717, -24.192] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-0.505, -4.5993, -32.7137] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-0.505, -4.5993, -32.7137] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [15.3924, -26.5931, -20.1521] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [15.3924, -26.5931, -20.1521] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [-1, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightfrontknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, -26.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -1.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, -1.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightfrontfoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, -29] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -40] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, -40] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "root": { - "position": { - "0.0": { - "post": { - "vector": [0, 4, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 6, 2] - }, - "lerp_mode": "catmullrom" - }, - "0.1875": { - "post": { - "vector": [0, 9.13, -4.06] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 6, -9] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 6, -9] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 4, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 4, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "body": { - "rotation": { - "0.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [12.14, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -1] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -1] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tailbase": { - "rotation": { - "0.0": { - "vector": [0, 0, 0] - }, - "0.125": { - "vector": [-5, 0, 0] - }, - "0.25": { - "pre": { - "vector": [17.5, 0, 0] - }, - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tailmiddle": { - "rotation": { - "0.0": { - "vector": [0, 0, 0] - }, - "0.125": { - "vector": [-5, 0, 0] - }, - "0.25": { - "pre": { - "vector": [20, 0, 0] - }, - "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tailtip": { - "rotation": { - "0.0": { - "vector": [0, 0, 0] - }, - "0.125": { - "vector": [-5, 0, 0] - }, - "0.25": { - "pre": { - "vector": [27.5, 0, 0] - }, - "post": { - "vector": [27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftfrontleg": { - "rotation": { - "0.0": { - "post": { - "vector": [15.3924, 26.5931, 20.1521] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [12.3553, 30.5717, 24.192] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-0.505, 4.5993, 32.7137] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-0.505, 4.5993, 32.7137] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [15.3924, 26.5931, 20.1521] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [15.3924, 26.5931, 20.1521] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [1, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftfrontknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 26.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 1.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 1.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftfrontfoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 29] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 40] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 40] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightbackleg": { - "rotation": { - "0.0": { - "post": { - "vector": [-15.3924, 26.5931, -20.1521] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [-13.8657, 21.5444, -24.5629] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-6.3454, 41.2302, -13.6458] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-6.3454, 41.2302, -13.6458] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-15.3924, 26.5931, -20.1521] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-15.3924, 26.5931, -20.1521] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightbackknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, -20] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -55] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, -55] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightbackfoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, -35] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, -2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftbackleg": { - "rotation": { - "0.0": { - "post": { - "vector": [-15.3924, -26.5931, 20.1521] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [-13.8657, -21.5444, 24.5629] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-6.3454, -41.2302, 13.6458] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-6.3454, -41.2302, 13.6458] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-15.3924, -26.5931, 20.1521] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-15.3924, -26.5931, 20.1521] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftbackknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 20] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 55] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 55] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftbackfoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 35] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftjaw": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 10, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, -25, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 20, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 20, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 10, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 10, 0] - }, - "lerp_mode": "catmullrom" - } - } - } - } - } - } -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/dimensional_tear.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/dimensional_tear.animation.json index 9f0d23a6..d47fcf55 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/animations/dimensional_tear.animation.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/dimensional_tear.animation.json @@ -687,6 +687,320 @@ } } } + }, + "idle2": { + "loop": true, + "animation_length": 4, + "bones": { + "content": { + "rotation": { + "vector": [0, 0, "math.cos(q.anim_time*90*2-50)*2"] + } + }, + "tear": { + "rotation": { + "vector": [0, 0, "math.cos(q.anim_time*90*2)*2"] + }, + "position": { + "vector": ["-math.cos(q.anim_time*90-30)*5", "math.cos(q.anim_time*90*2+50)*3", 0] + } + }, + "light_left": { + "scale": { + "vector": [0, 0, 0] + } + }, + "light_right": { + "scale": { + "vector": [0, 0, 0] + } + }, + "group": { + "rotation": { + "vector": [0, 0, "math.cos(q.anim_time*90)*math.random_integer(1,10)"] + } + } + } + }, + "opening": { + "animation_length": 1, + "bones": { + "content": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "pre": { + "vector": [0, 0, -55] + }, + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, -10.08] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, 2] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tear": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [0, 7.5, 282.5] + }, + "post": { + "vector": [0, 7.5, 282.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 360] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 360] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "vector": [0, 0, 360] + }, + "0.9583": { + "vector": [0, 0, 360] + }, + "1.0": { + "vector": [0, 0, 0] + } + }, + "scale": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "pre": { + "vector": [0.7, 0.7, 0.7] + }, + "post": { + "vector": [0.7, 0.7, 0.7] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "light_left": { + "scale": { + "vector": [0, 0, 0] + } + }, + "light_right": { + "scale": { + "vector": [0, 0, 0] + } + }, + "group": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "pre": { + "vector": [0, 0, -37.5] + }, + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, -8.59] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 2] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "closing": { + "animation_length": 0.5, + "bones": { + "content": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "pre": { + "vector": [0, 0, 12.5] + }, + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 13.89] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tear": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [0, 0, -42] + }, + "post": { + "vector": [0, 0, -42] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, -285] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, -360] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "pre": { + "vector": [0.9, 0.9, 0.9] + }, + "post": { + "vector": [0.9, 0.9, 0.9] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0.2, 0.2, 0.2] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + } + } + }, + "light_left": { + "scale": { + "vector": [0, 0, 0] + } + }, + "light_right": { + "scale": { + "vector": [0, 0, 0] + } + }, + "group": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "pre": { + "vector": [0, 0, 7.5] + }, + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "vector": [0, 0, 0] + } + } + } + } } } } \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/flying_squirrel.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/flying_squirrel.animation.json index f6192a76..689fc81e 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/animations/flying_squirrel.animation.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/flying_squirrel.animation.json @@ -77,337 +77,7 @@ } } }, - "climbing": { - "loop": true, - "animation_length": 1, - "bones": { - "squirrel": { - "rotation": { - "vector": [-90, 0, 0] - }, - "position": { - "vector": [0, 6.75, -5] - } - }, - "left_leg": { - "rotation": { - "0.25": { - "pre": { - "vector": [108.1133, 33.6443, 10.272] - }, - "post": { - "vector": [108.1133, 33.6443, 10.272] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [118.1133, 33.6443, 10.272] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [108.1133, 33.6443, 10.272] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [108.1133, 33.6443, 10.272] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.25": { - "pre": { - "vector": [0, 0, 0] - }, - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, -1, -2] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_arm": { - "rotation": { - "0.0": { - "post": { - "vector": [-90, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-110, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-90, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-90, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, -2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, -1.06031, 0.34202] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, -2.06, -0.66] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, -2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "head": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_flying_part": { - "scale": { - "vector": [0, 0, 0] - } - }, - "right_arm": { - "rotation": { - "0.25": { - "pre": { - "vector": [-90, 0, 0] - }, - "post": { - "vector": [-90, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-110, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-90, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-90, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.25": { - "pre": { - "vector": [0, -2, 0] - }, - "post": { - "vector": [0, -2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, -1.06031, 0.34202] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, -2.06, -0.66] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, -2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_flying_part": { - "scale": { - "vector": [0, 0, 0] - } - }, - "right_leg": { - "rotation": { - "0.0": { - "post": { - "vector": [108.1133, -33.6443, -10.272] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [118.1133, -33.6443, -10.272] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [108.1133, -33.6443, -10.272] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [108.1133, -33.6443, -10.272] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, -1, -2] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_cheeks": { - "scale": { - "vector": [0, 0, 0] - } - }, - "right_cheeks": { - "scale": { - "vector": [0, 0, 0] - } - } - } - }, - "walking": { + "walk": { "loop": true, "animation_length": 0.5, "bones": { @@ -415,51 +85,31 @@ "position": { "0.0": { "post": { - "vector": [ - 0, - 0, - 0 - ] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, "0.0833": { "post": { - "vector": [ - 0, - 2, - 0 - ] + "vector": [0, 2, 0] }, "lerp_mode": "catmullrom" }, "0.2083": { "post": { - "vector": [ - 0, - 2, - 0 - ] + "vector": [0, 2, 0] }, "lerp_mode": "catmullrom" }, "0.3333": { "post": { - "vector": [ - 0, - 0, - 0 - ] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - 0, - 0, - 0 - ] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" } @@ -468,230 +118,126 @@ "left_leg": { "rotation": { "0.0": { - "vector": [ - 0, - 0, - 0 - ] + "vector": [0, 0, 0] }, "0.0833": { "pre": { - "vector": [ - 40, - -5, - 0 - ] + "vector": [40, -5, 0] }, "post": { - "vector": [ - 40, - -5, - 0 - ] + "vector": [40, -5, 0] }, "lerp_mode": "catmullrom" }, "0.2083": { "post": { - "vector": [ - 47.5, - -15, - 0 - ] + "vector": [47.5, -15, 0] }, "lerp_mode": "catmullrom" }, "0.375": { "post": { - "vector": [ - -20, - -10, - -15 - ] + "vector": [-20, -10, -15] }, "lerp_mode": "catmullrom" }, "0.5": { - "vector": [ - 0, - 0, - 0 - ] + "vector": [0, 0, 0] } }, "position": { "0.0": { - "vector": [ - 0, - 0, - 0 - ] + "vector": [0, 0, 0] }, "0.125": { "pre": { - "vector": [ - 0, - 1, - 1 - ] + "vector": [0, 1, 1] }, "post": { - "vector": [ - 0, - 1, - 1 - ] + "vector": [0, 1, 1] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [ - 0, - 2.5, - -1.22 - ] + "vector": [0, 2.5, -1.22] }, "lerp_mode": "catmullrom" }, "0.375": { "post": { - "vector": [ - 0, - 1, - -0.58 - ] + "vector": [0, 1, -0.58] }, "lerp_mode": "catmullrom" }, "0.5": { - "vector": [ - 0, - 0, - 0 - ] + "vector": [0, 0, 0] } } }, "right_leg": { "rotation": { "0.0": { - "vector": [ - -11.39, - 2.41, - 5 - ] + "vector": [-11.39, 2.41, 5] }, "0.0417": { - "vector": [ - 0, - 0, - 0 - ] + "vector": [0, 0, 0] }, "0.125": { "pre": { - "vector": [ - 40, - 5, - 0 - ] + "vector": [40, 5, 0] }, "post": { - "vector": [ - 40, - 5, - 0 - ] + "vector": [40, 5, 0] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [ - 47.5, - 15, - 0 - ] + "vector": [47.5, 15, 0] }, "lerp_mode": "catmullrom" }, "0.4167": { "post": { - "vector": [ - -20, - 10, - 15 - ] + "vector": [-20, 10, 15] }, "lerp_mode": "catmullrom" }, "0.5": { - "vector": [ - -11.39, - 2.41, - 5 - ] + "vector": [-11.39, 2.41, 5] } }, "position": { "0.0": { - "vector": [ - 0, - 0.17, - -0.22 - ] + "vector": [0, 0.17, -0.22] }, "0.0417": { - "vector": [ - 0, - 0, - 0 - ] + "vector": [0, 0, 0] }, "0.1667": { "pre": { - "vector": [ - 0, - 1, - 1 - ] + "vector": [0, 1, 1] }, "post": { - "vector": [ - 0, - 1, - 1 - ] + "vector": [0, 1, 1] }, "lerp_mode": "catmullrom" }, "0.2917": { "post": { - "vector": [ - 0, - 2.5, - -1.22 - ] + "vector": [0, 2.5, -1.22] }, "lerp_mode": "catmullrom" }, "0.4167": { "post": { - "vector": [ - 0, - 1, - -0.58 - ] + "vector": [0, 1, -0.58] }, "lerp_mode": "catmullrom" }, "0.5": { - "vector": [ - 0, - 0.17, - -0.22 - ] + "vector": [0, 0.17, -0.22] } } }, @@ -699,41 +245,25 @@ "rotation": { "0.0": { "post": { - "vector": [ - -5, - 0, - 0 - ] + "vector": [-5, 0, 0] }, "lerp_mode": "catmullrom" }, "0.0833": { "post": { - "vector": [ - -10, - 0, - 0 - ] + "vector": [-10, 0, 0] }, "lerp_mode": "catmullrom" }, "0.2917": { "post": { - "vector": [ - 7.5, - 0, - 0 - ] + "vector": [7.5, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - -5, - 0, - 0 - ] + "vector": [-5, 0, 0] }, "lerp_mode": "catmullrom" } @@ -741,41 +271,25 @@ "position": { "0.0": { "post": { - "vector": [ - 0, - -0.71, - 0 - ] + "vector": [0, -0.71, 0] }, "lerp_mode": "catmullrom" }, "0.0833": { "post": { - "vector": [ - 0, - -1, - 0 - ] + "vector": [0, -1, 0] }, "lerp_mode": "catmullrom" }, "0.2917": { "post": { - "vector": [ - 0, - 0, - 0 - ] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - 0, - -0.71, - 0 - ] + "vector": [0, -0.71, 0] }, "lerp_mode": "catmullrom" } @@ -785,41 +299,25 @@ "rotation": { "0.0": { "post": { - "vector": [ - 10, - 0, - 0 - ] + "vector": [10, 0, 0] }, "lerp_mode": "catmullrom" }, "0.125": { "post": { - "vector": [ - 7.5, - 0, - 0 - ] + "vector": [7.5, 0, 0] }, "lerp_mode": "catmullrom" }, "0.2917": { "post": { - "vector": [ - -7.5, - 0, - 0 - ] + "vector": [-7.5, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - 10, - 0, - 0 - ] + "vector": [10, 0, 0] }, "lerp_mode": "catmullrom" } @@ -829,61 +327,37 @@ "rotation": { "0.0": { "post": { - "vector": [ - 0, - 0, - 37.5 - ] + "vector": [0, 0, 37.5] }, "lerp_mode": "catmullrom" }, "0.0833": { "post": { - "vector": [ - 0, - 0, - 55 - ] + "vector": [0, 0, 55] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [ - 0, - 0, - 7.5 - ] + "vector": [0, 0, 7.5] }, "lerp_mode": "catmullrom" }, "0.3333": { "post": { - "vector": [ - 0, - 0, - 7.5 - ] + "vector": [0, 0, 7.5] }, "lerp_mode": "catmullrom" }, "0.4167": { "post": { - "vector": [ - 0, - 0, - 17.5 - ] + "vector": [0, 0, 17.5] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - 0, - 0, - 37.5 - ] + "vector": [0, 0, 37.5] }, "lerp_mode": "catmullrom" } @@ -893,61 +367,37 @@ "rotation": { "0.0": { "post": { - "vector": [ - 0, - 0, - -37.5 - ] + "vector": [0, 0, -37.5] }, "lerp_mode": "catmullrom" }, "0.0833": { "post": { - "vector": [ - 0, - 0, - -55 - ] + "vector": [0, 0, -55] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [ - 0, - 0, - -7.5 - ] + "vector": [0, 0, -7.5] }, "lerp_mode": "catmullrom" }, "0.3333": { "post": { - "vector": [ - 0, - 0, - -7.5 - ] + "vector": [0, 0, -7.5] }, "lerp_mode": "catmullrom" }, "0.4167": { "post": { - "vector": [ - 0, - 0, - -17.5 - ] + "vector": [0, 0, -17.5] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - 0, - 0, - -37.5 - ] + "vector": [0, 0, -37.5] }, "lerp_mode": "catmullrom" } @@ -957,41 +407,25 @@ "rotation": { "0.0": { "post": { - "vector": [ - 5.56, - 0, - 0 - ] + "vector": [5.56, 0, 0] }, "lerp_mode": "catmullrom" }, "0.1667": { "post": { - "vector": [ - -10, - 0, - 0 - ] + "vector": [-10, 0, 0] }, "lerp_mode": "catmullrom" }, "0.4167": { "post": { - "vector": [ - 10, - 0, - 0 - ] + "vector": [10, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - 5.56, - 0, - 0 - ] + "vector": [5.56, 0, 0] }, "lerp_mode": "catmullrom" } @@ -1000,125 +434,73 @@ "left_arm": { "rotation": { "0.0": { - "vector": [ - 5, - -5, - 2.5 - ] + "vector": [5, -5, 2.5] }, "0.0833": { "pre": { - "vector": [ - 27.73, - -7.5, - 10 - ] + "vector": [27.73, -7.5, 10] }, "post": { - "vector": [ - 27.73, - -7.5, - 10 - ] + "vector": [27.73, -7.5, 10] }, "lerp_mode": "catmullrom" }, "0.2083": { "post": { - "vector": [ - -80, - -12.5, - 15 - ] + "vector": [-80, -12.5, 15] }, "lerp_mode": "catmullrom" }, "0.3333": { "post": { - "vector": [ - -35, - -7.5, - 10 - ] + "vector": [-35, -7.5, 10] }, "lerp_mode": "catmullrom" }, "0.4167": { "post": { - "vector": [ - -10, - 0, - 0 - ] + "vector": [-10, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { - "vector": [ - 5, - -5, - 2.5 - ] + "vector": [5, -5, 2.5] } }, "position": { "0.0": { "post": { - "vector": [ - 0.5, - 0, - 0 - ] + "vector": [0.5, 0, 0] }, "lerp_mode": "catmullrom" }, "0.0833": { "post": { - "vector": [ - 0.86, - 0, - 0 - ] + "vector": [0.86, 0, 0] }, "lerp_mode": "catmullrom" }, "0.2083": { "post": { - "vector": [ - 0.8, - 0, - 0 - ] + "vector": [0.8, 0, 0] }, "lerp_mode": "catmullrom" }, "0.3333": { "post": { - "vector": [ - 0.55, - 0, - 0 - ] + "vector": [0.55, 0, 0] }, "lerp_mode": "catmullrom" }, "0.4167": { "post": { - "vector": [ - 0, - 0, - 0 - ] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - 0.5, - 0, - 0 - ] + "vector": [0.5, 0, 0] }, "lerp_mode": "catmullrom" } @@ -1126,152 +508,88 @@ }, "left_flying_part": { "rotation": { - "vector": [ - 32.5, - 0, - 0 - ] + "vector": [32.5, 0, 0] } }, "right_arm": { "rotation": { "0.0": { - "vector": [ - -2.36, - 1.88, - -0.16 - ] + "vector": [-2.36, 1.88, -0.16] }, "0.0417": { - "vector": [ - 5, - 5, - -2.5 - ] + "vector": [5, 5, -2.5] }, "0.125": { "pre": { - "vector": [ - 27.73, - 7.5, - -10 - ] + "vector": [27.73, 7.5, -10] }, "post": { - "vector": [ - 27.73, - 7.5, - -10 - ] + "vector": [27.73, 7.5, -10] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [ - -80, - 12.5, - -15 - ] + "vector": [-80, 12.5, -15] }, "lerp_mode": "catmullrom" }, "0.375": { "post": { - "vector": [ - -35, - 7.5, - -10 - ] + "vector": [-35, 7.5, -10] }, "lerp_mode": "catmullrom" }, "0.4583": { "post": { - "vector": [ - -10, - 0, - 0 - ] + "vector": [-10, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { - "vector": [ - -2.36, - 1.88, - -0.16 - ] + "vector": [-2.36, 1.88, -0.16] } }, "position": { "0.0": { "post": { - "vector": [ - -0.19, - 0, - 0 - ] + "vector": [-0.19, 0, 0] }, "lerp_mode": "catmullrom" }, "0.0417": { "post": { - "vector": [ - -0.5, - 0, - 0 - ] + "vector": [-0.5, 0, 0] }, "lerp_mode": "catmullrom" }, "0.125": { "post": { - "vector": [ - -0.86, - 0, - 0 - ] + "vector": [-0.86, 0, 0] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [ - -0.8, - 0, - 0 - ] + "vector": [-0.8, 0, 0] }, "lerp_mode": "catmullrom" }, "0.375": { "post": { - "vector": [ - -0.55, - 0, - 0 - ] + "vector": [-0.55, 0, 0] }, "lerp_mode": "catmullrom" }, "0.4583": { "post": { - "vector": [ - 0, - 0, - 0 - ] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - -0.19, - 0, - 0 - ] + "vector": [-0.19, 0, 0] }, "lerp_mode": "catmullrom" } @@ -1279,16 +597,12 @@ }, "right_flying_part": { "rotation": { - "vector": [ - 32.5, - 0, - 0 - ] + "vector": [32.5, 0, 0] } } } }, - "gliding": { + "fly": { "loop": true, "animation_length": 1, "bones": { @@ -1296,102 +610,62 @@ "rotation": { "0.0": { "post": { - "vector": [ - 7.5, - 0, - -2.5 - ] + "vector": [7.5, 0, -2.5] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [ - 10, - 0, - 0 - ] + "vector": [10, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - 7.5, - 0, - 2.5 - ] + "vector": [7.5, 0, 2.5] }, "lerp_mode": "catmullrom" }, "0.75": { "post": { - "vector": [ - 5, - 0, - 0 - ] + "vector": [5, 0, 0] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [ - 7.5, - 0, - -2.5 - ] + "vector": [7.5, 0, -2.5] }, "lerp_mode": "catmullrom" } }, "position": { - "vector": [ - 0, - 0, - 0 - ] + "vector": [0, 0, 0] } }, "left_leg": { "rotation": { "0.0": { "post": { - "vector": [ - 92.5, - 12.5, - -15 - ] + "vector": [92.5, 12.5, -15] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [ - 85, - 12.5, - -15 - ] + "vector": [85, 12.5, -15] }, "lerp_mode": "catmullrom" }, "0.75": { "post": { - "vector": [ - 100, - 12.5, - -15 - ] + "vector": [100, 12.5, -15] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [ - 92.5, - 12.5, - -15 - ] + "vector": [92.5, 12.5, -15] }, "lerp_mode": "catmullrom" } @@ -1401,51 +675,31 @@ "rotation": { "0.0": { "post": { - "vector": [ - 95.83, - -12.5, - 15 - ] + "vector": [95.83, -12.5, 15] }, "lerp_mode": "catmullrom" }, "0.0833": { "post": { - "vector": [ - 92.5, - -12.5, - 15 - ] + "vector": [92.5, -12.5, 15] }, "lerp_mode": "catmullrom" }, "0.3333": { "post": { - "vector": [ - 85, - -12.5, - 15 - ] + "vector": [85, -12.5, 15] }, "lerp_mode": "catmullrom" }, "0.8333": { "post": { - "vector": [ - 100, - -12.5, - 15 - ] + "vector": [100, -12.5, 15] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [ - 95.83, - -12.5, - 15 - ] + "vector": [95.83, -12.5, 15] }, "lerp_mode": "catmullrom" } @@ -1455,41 +709,25 @@ "rotation": { "0.0": { "post": { - "vector": [ - -1.84, - 0, - 1.84 - ] + "vector": [-1.84, 0, 1.84] }, "lerp_mode": "catmullrom" }, "0.375": { "post": { - "vector": [ - 2.5, - 0, - -2.5 - ] + "vector": [2.5, 0, -2.5] }, "lerp_mode": "catmullrom" }, "0.875": { "post": { - "vector": [ - -2.5, - 0, - 2.5 - ] + "vector": [-2.5, 0, 2.5] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [ - -1.84, - 0, - 1.84 - ] + "vector": [-1.84, 0, 1.84] }, "lerp_mode": "catmullrom" } @@ -1499,102 +737,62 @@ "rotation": { "0.0": { "post": { - "vector": [ - -79.17, - 0, - 0 - ] + "vector": [-79.17, 0, 0] }, "lerp_mode": "catmullrom" }, "0.3333": { "post": { - "vector": [ - -67.5, - 0, - 0 - ] + "vector": [-67.5, 0, 0] }, "lerp_mode": "catmullrom" }, "0.8333": { "post": { - "vector": [ - -85, - 0, - 0 - ] + "vector": [-85, 0, 0] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [ - -79.17, - 0, - 0 - ] + "vector": [-79.17, 0, 0] }, "lerp_mode": "catmullrom" } }, "position": { - "vector": [ - 0, - 3, - 0 - ] + "vector": [0, 3, 0] } }, "left_arm": { "rotation": { "0.0": { "post": { - "vector": [ - -27.5, - 0, - -92.5 - ] + "vector": [-27.5, 0, -92.5] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [ - -27.5, - 0, - -90 - ] + "vector": [-27.5, 0, -90] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - -27.5, - 0, - -92.5 - ] + "vector": [-27.5, 0, -92.5] }, "lerp_mode": "catmullrom" }, "0.75": { "post": { - "vector": [ - -27.5, - 0, - -90 - ] + "vector": [-27.5, 0, -90] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [ - -27.5, - 0, - -92.5 - ] + "vector": [-27.5, 0, -92.5] }, "lerp_mode": "catmullrom" } @@ -1604,131 +802,79 @@ "rotation": { "0.0": { "post": { - "vector": [ - 27.5, - -5, - 0 - ] + "vector": [27.5, -5, 0] }, "lerp_mode": "catmullrom" }, "0.0833": { "post": { - "vector": [ - 27.5, - 5, - 0 - ] + "vector": [27.5, 5, 0] }, "lerp_mode": "catmullrom" }, "0.1667": { "post": { - "vector": [ - 27.5, - -5, - 0 - ] + "vector": [27.5, -5, 0] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [ - 27.5, - 5, - 0 - ] + "vector": [27.5, 5, 0] }, "lerp_mode": "catmullrom" }, "0.3333": { "post": { - "vector": [ - 27.5, - -5, - 0 - ] + "vector": [27.5, -5, 0] }, "lerp_mode": "catmullrom" }, "0.4167": { "post": { - "vector": [ - 27.5, - 5, - 0 - ] + "vector": [27.5, 5, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - 27.5, - -5, - 0 - ] + "vector": [27.5, -5, 0] }, "lerp_mode": "catmullrom" }, "0.5833": { "post": { - "vector": [ - 27.5, - 5, - 0 - ] + "vector": [27.5, 5, 0] }, "lerp_mode": "catmullrom" }, "0.6667": { "post": { - "vector": [ - 27.5, - -5, - 0 - ] + "vector": [27.5, -5, 0] }, "lerp_mode": "catmullrom" }, "0.75": { "post": { - "vector": [ - 27.5, - 5, - 0 - ] + "vector": [27.5, 5, 0] }, "lerp_mode": "catmullrom" }, "0.8333": { "post": { - "vector": [ - 27.5, - -5, - 0 - ] + "vector": [27.5, -5, 0] }, "lerp_mode": "catmullrom" }, "0.9167": { "post": { - "vector": [ - 27.5, - 5, - 0 - ] + "vector": [27.5, 5, 0] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [ - 27.5, - -5, - 0 - ] + "vector": [27.5, -5, 0] }, "lerp_mode": "catmullrom" } @@ -1738,51 +884,31 @@ "rotation": { "0.0": { "post": { - "vector": [ - -27.5, - 0, - 92.5 - ] + "vector": [-27.5, 0, 92.5] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [ - -27.5, - 0, - 90 - ] + "vector": [-27.5, 0, 90] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - -27.5, - 0, - 92.5 - ] + "vector": [-27.5, 0, 92.5] }, "lerp_mode": "catmullrom" }, "0.75": { "post": { - "vector": [ - -27.5, - 0, - 90 - ] + "vector": [-27.5, 0, 90] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [ - -27.5, - 0, - 92.5 - ] + "vector": [-27.5, 0, 92.5] }, "lerp_mode": "catmullrom" } @@ -1792,131 +918,79 @@ "rotation": { "0.0": { "post": { - "vector": [ - 27.5, - 5, - 0 - ] + "vector": [27.5, 5, 0] }, "lerp_mode": "catmullrom" }, "0.0833": { "post": { - "vector": [ - 27.5, - -5, - 0 - ] + "vector": [27.5, -5, 0] }, "lerp_mode": "catmullrom" }, "0.1667": { "post": { - "vector": [ - 27.5, - 5, - 0 - ] + "vector": [27.5, 5, 0] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [ - 27.5, - -5, - 0 - ] + "vector": [27.5, -5, 0] }, "lerp_mode": "catmullrom" }, "0.3333": { "post": { - "vector": [ - 27.5, - 5, - 0 - ] + "vector": [27.5, 5, 0] }, "lerp_mode": "catmullrom" }, "0.4167": { "post": { - "vector": [ - 27.5, - -5, - 0 - ] + "vector": [27.5, -5, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - 27.5, - 5, - 0 - ] + "vector": [27.5, 5, 0] }, "lerp_mode": "catmullrom" }, "0.5833": { "post": { - "vector": [ - 27.5, - -5, - 0 - ] + "vector": [27.5, -5, 0] }, "lerp_mode": "catmullrom" }, "0.6667": { "post": { - "vector": [ - 27.5, - 5, - 0 - ] + "vector": [27.5, 5, 0] }, "lerp_mode": "catmullrom" }, "0.75": { "post": { - "vector": [ - 27.5, - -5, - 0 - ] + "vector": [27.5, -5, 0] }, "lerp_mode": "catmullrom" }, "0.8333": { "post": { - "vector": [ - 27.5, - 5, - 0 - ] + "vector": [27.5, 5, 0] }, "lerp_mode": "catmullrom" }, "0.9167": { "post": { - "vector": [ - 27.5, - -5, - 0 - ] + "vector": [27.5, -5, 0] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [ - 27.5, - 5, - 0 - ] + "vector": [27.5, 5, 0] }, "lerp_mode": "catmullrom" } @@ -1924,306 +998,6 @@ } } }, - "item_pickup": { - "animation_length": 3, - "bones": { - "body": { - "rotation": { - "0.0": { - "post": { - "vector": [-65, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-15, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-65, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_arm": { - "rotation": { - "0.25": { - "pre": { - "vector": [0, 0, 0] - }, - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [-44.8924, 3.2116, 26.3342] - }, - "lerp_mode": "catmullrom" - }, - "1.375": { - "post": { - "vector": [-49.8924, 3.2116, 26.3342] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-42.3924, 3.2116, 26.3342] - }, - "lerp_mode": "catmullrom" - }, - "1.625": { - "post": { - "vector": [-44.8924, 3.2116, 26.3342] - }, - "lerp_mode": "catmullrom" - }, - "1.75": { - "post": { - "vector": [-49.8924, 3.2116, 26.3342] - }, - "lerp_mode": "catmullrom" - }, - "1.875": { - "post": { - "vector": [-42.3924, 3.2116, 26.3342] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-44.8924, 3.2116, 26.3342] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.25": { - "pre": { - "vector": [0, 0, 0] - }, - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail": { - "rotation": { - "0.0": { - "post": { - "vector": [42.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "head": { - "rotation": { - "0.0": { - "post": { - "vector": [60, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, -1.0425, -1.31366] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_flying_part": { - "scale": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_arm": { - "rotation": { - "0.25": { - "pre": { - "vector": [0, 0, 0] - }, - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [-44.8924, -3.2116, -26.3342] - }, - "lerp_mode": "catmullrom" - }, - "1.375": { - "post": { - "vector": [-49.8924, -3.2116, -26.3342] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-42.3924, -3.2116, -26.3342] - }, - "lerp_mode": "catmullrom" - }, - "1.625": { - "post": { - "vector": [-44.8924, -3.2116, -26.3342] - }, - "lerp_mode": "catmullrom" - }, - "1.75": { - "post": { - "vector": [-49.8924, -3.2116, -26.3342] - }, - "lerp_mode": "catmullrom" - }, - "1.875": { - "post": { - "vector": [-42.3924, -3.2116, -26.3342] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-44.8924, -3.2116, -26.3342] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.25": { - "pre": { - "vector": [0, 0, 0] - }, - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_flying_part": { - "scale": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_cheeks": { - "scale": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.125": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_cheeks": { - "scale": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.125": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "quirk1": { "animation_length": 2, "bones": { @@ -3371,13 +2145,13 @@ }, "0.5": { "post": { - "vector": ["85-math.clamp(math.cos(q.anim_time*90*10-80)*10,0,10)", "math.cos(q.anim_time*90*8)*20", "math.cos(q.anim_time*90*8-80)*10"] + "vector": [78, 14, 4] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": ["85-math.clamp(math.cos(q.anim_time*90*10-80)*10,0,10)", "math.cos(q.anim_time*90*8)*20", "math.cos(q.anim_time*90*8-80)*10"] + "vector": [78, 14, 4] }, "lerp_mode": "catmullrom" }, @@ -3966,6 +2740,635 @@ } } } + }, + "item_pickup": { + "animation_length": 3, + "bones": { + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-65, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.25": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-44.8924, 3.2116, 26.3342] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [-49.8924, 3.2116, 26.3342] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-42.3924, 3.2116, 26.3342] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [-44.8924, 3.2116, 26.3342] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [-49.8924, 3.2116, 26.3342] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [-42.3924, 3.2116, 26.3342] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-44.8924, 3.2116, 26.3342] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.25": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1.0425, -1.31366] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_flying_part": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm": { + "rotation": { + "0.25": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-44.8924, -3.2116, -26.3342] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [-49.8924, -3.2116, -26.3342] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-42.3924, -3.2116, -26.3342] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [-44.8924, -3.2116, -26.3342] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [-49.8924, -3.2116, -26.3342] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [-42.3924, -3.2116, -26.3342] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-44.8924, -3.2116, -26.3342] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.25": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_flying_part": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_cheeks": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_cheeks": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "climbing": { + "loop": true, + "animation_length": 1, + "bones": { + "left_leg": { + "rotation": { + "0.25": { + "pre": { + "vector": [108.1133, 33.6443, 10.272] + }, + "post": { + "vector": [108.1133, 33.6443, 10.272] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [118.1133, 33.6443, 10.272] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [108.1133, 33.6443, 10.272] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [108.1133, 33.6443, 10.272] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.25": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -1, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [108.1133, -33.6443, -10.272] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [118.1133, -33.6443, -10.272] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [108.1133, -33.6443, -10.272] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [108.1133, -33.6443, -10.272] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -1, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_cheeks": { + "scale": { + "vector": [0, 0, 0] + } + }, + "right_cheeks": { + "scale": { + "vector": [0, 0, 0] + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [-90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-110, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-90, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -1.06031, 0.34202] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -2.06, -0.66] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_flying_part": { + "scale": { + "vector": [0, 0, 0] + } + }, + "right_arm": { + "rotation": { + "0.25": { + "pre": { + "vector": [-90, 0, 0] + }, + "post": { + "vector": [-90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-110, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-90, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.25": { + "pre": { + "vector": [0, -2, 0] + }, + "post": { + "vector": [0, -2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -1.06031, 0.34202] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -2.06, -0.66] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_flying_part": { + "scale": { + "vector": [0, 0, 0] + } + }, + "squirrel": { + "rotation": { + "vector": [-90, 0, 0] + }, + "position": { + "vector": [0, 6.75, 7] + } + } + } } } -} \ No newline at end of file +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/jumpy_bug.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/jumpy_bug.animation.json deleted file mode 100644 index 210f6cab..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/animations/jumpy_bug.animation.json +++ /dev/null @@ -1,5790 +0,0 @@ -{ - "format_version": "1.8.0", - "animations": { - "idle": { - "loop": true, - "animation_length": 4.5, - "bones": { - "torso": { - "rotation": { - "0.0": { - "post": { - "vector": [-0.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-0.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.5": { - "post": { - "vector": [0.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.5": { - "post": { - "vector": [-0.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backRightThigh": { - "rotation": { - "0.0": { - "post": { - "vector": [7.1226, 29.2189, 14.3589] - }, - "lerp_mode": "catmullrom" - }, - "4.5": { - "post": { - "vector": [7.1226, 29.2189, 14.3589] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backRightKnee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - }, - "4.5": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backRightLeg": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - }, - "4.5": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backRightFoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "4.5": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightGrip": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 20, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0, 15, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.5": { - "post": { - "vector": [0, 20, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "body": { - "position": { - "0.0": { - "post": { - "vector": [0, -27.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.5": { - "post": { - "vector": [0, -27.5, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backLeftThigh": { - "rotation": { - "0.0": { - "post": { - "vector": [7.1226, -29.2189, -14.3589] - }, - "lerp_mode": "catmullrom" - }, - "4.5": { - "post": { - "vector": [7.1226, -29.2189, -14.3589] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backLeftKnee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - }, - "4.5": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backLeftLeg": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - }, - "4.5": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backLeftFoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "4.5": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontLeftThigh": { - "rotation": { - "0.0": { - "post": { - "vector": [-7.1226, 29.2189, -14.3589] - }, - "lerp_mode": "catmullrom" - }, - "4.5": { - "post": { - "vector": [-7.1226, 29.2189, -14.3589] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontLeftKnee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - }, - "4.5": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontLeftLeg": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - }, - "4.5": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontLeftFoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "4.5": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontRightThigh": { - "rotation": { - "0.0": { - "post": { - "vector": [-7.12, -29.22, 14.36] - }, - "lerp_mode": "catmullrom" - }, - "4.5": { - "post": { - "vector": [-7.1226, -29.2189, 14.3589] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontRightKnee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - }, - "4.5": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontRightLeg": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - }, - "4.5": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontRightFoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "4.5": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftGrip": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -20, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0, -15, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.5": { - "post": { - "vector": [0, -20, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightAntenna": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 60, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0, 55, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.5": { - "post": { - "vector": [0, 60, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightArm": { - "rotation": { - "0.0": { - "post": { - "vector": [5, 17.5, -5] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [7.5, 17.5, -5] - }, - "lerp_mode": "catmullrom" - }, - "4.5": { - "post": { - "vector": [5, 17.5, -5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightElbow": { - "rotation": { - "0.0": { - "post": { - "vector": [-30, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [-35, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.5": { - "post": { - "vector": [-30, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightClaw": { - "rotation": { - "0.0": { - "post": { - "vector": [40, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [50, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.5": { - "post": { - "vector": [40, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftAntenna": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -60, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0, -55, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.5": { - "post": { - "vector": [0, -60, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftArm": { - "rotation": { - "0.0": { - "post": { - "vector": [5, -17.5, 5] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [7.5, -17.5, 5] - }, - "lerp_mode": "catmullrom" - }, - "4.5": { - "post": { - "vector": [5, -17.5, 5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftElbow": { - "rotation": { - "0.0": { - "post": { - "vector": [-30, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [-35, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.5": { - "post": { - "vector": [-30, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftClaw": { - "rotation": { - "0.0": { - "post": { - "vector": [40, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [50, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.5": { - "post": { - "vector": [40, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "walk": { - "loop": true, - "animation_length": 1, - "bones": { - "backRightThigh": { - "rotation": { - "0.0": { - "post": { - "vector": [0.9, 25.37, 22.42] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-14.7966, -19.965, 19.6746] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-12.2252, -29.0774, 13.585] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [13.6745, 58.6061, 23.203] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0.9, 25.37, 22.42] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backRightKnee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 57.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backRightLeg": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 35] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -30] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 35] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backRightFoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -42.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -42.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightGrip": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 30, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, -30, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 30, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, -30, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 30, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "body": { - "rotation": { - "0.0": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [-4.9811, -0.4352, -4.9811] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0.0189, -0.4352, -4.9811] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [5.0189, -0.4352, -4.9811] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [4.9196, -1.0858, 2.4914] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [4.8066, -1.5099, 7.4746] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-0.1934, -1.5099, 7.4746] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [-5.1934, -1.5099, 7.4746] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, -31.1, -4] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [6, -34.72, -4] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [6, -32.3, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [4, -29.81, 8] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, -28.1, 8] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-6, -34.96, 4] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-6, -32.8, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [-6, -32.24, -6] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, -31.1, -4] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backLeftThigh": { - "rotation": { - "0.0": { - "post": { - "vector": [-14.7966, 19.965, -19.6746] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-12.2252, 29.0774, -13.585] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [13.6745, -58.6061, -23.203] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0.9, -25.37, -22.42] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-14.7966, 19.965, -19.6746] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backLeftKnee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -57.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -57.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backLeftLeg": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 30] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -35] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 30] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backLeftFoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 42.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontLeftThigh": { - "rotation": { - "0.0": { - "post": { - "vector": [5.1528, 57.991, -18.9213] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-7.1226, 29.2189, -14.3589] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-36.5714, 35.9552, -34.1778] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-23.5556, 44.8303, -14.2689] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [5.1528, 57.991, -18.9213] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontLeftKnee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -57.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontLeftLeg": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -35] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 30] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontLeftFoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 42.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontRightThigh": { - "rotation": { - "0.0": { - "post": { - "vector": [-7.1226, -29.2189, 14.3589] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-36.5714, -35.9552, 34.1778] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-23.5556, -44.8303, 14.2689] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [5.1528, -57.991, 18.9213] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-7.1226, -29.2189, 14.3589] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontRightKnee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 57.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontRightLeg": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 35] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -30] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontRightFoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -42.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftGrip": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -30, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 30, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, -30, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 30, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, -30, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightAntenna": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 70, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 50, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 70, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 50, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 70, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightArm": { - "rotation": { - "0.0": { - "post": { - "vector": [35, 17.5, -5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-5.3498, 1.8604, -13.9961] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [35, 17.5, -5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightElbow": { - "rotation": { - "0.0": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-1.25, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-62.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-52.19, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightClaw": { - "rotation": { - "0.0": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [50, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [55, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [1.87, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftAntenna": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -70, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, -50, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, -70, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, -50, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, -70, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftArm": { - "rotation": { - "0.0": { - "post": { - "vector": [-5.3498, -1.8604, 13.9961] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [35, -17.5, 5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-5.3498, -1.8604, 13.9961] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftElbow": { - "rotation": { - "0.0": { - "post": { - "vector": [-62.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-52.19, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-1.25, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-62.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftClaw": { - "rotation": { - "0.0": { - "post": { - "vector": [55, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [1.87, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [50, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [55, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "attack": { - "animation_length": 1, - "bones": { - "torso": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backRightThigh": { - "rotation": { - "0.0": { - "post": { - "vector": [7.1226, 29.2189, 14.3589] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [7.1226, 29.2189, 14.3589] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backRightKnee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backRightLeg": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backRightFoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightGrip": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -10, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 25, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, -20, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, -20, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, -10, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "body": { - "position": { - "0.0": { - "post": { - "vector": [0, -27.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, -27.5, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backLeftThigh": { - "rotation": { - "0.0": { - "post": { - "vector": [7.1226, -29.2189, -14.3589] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [7.1226, -29.2189, -14.3589] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backLeftKnee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backLeftLeg": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backLeftFoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontLeftThigh": { - "rotation": { - "0.0": { - "post": { - "vector": [-7.1226, 29.2189, -14.3589] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-7.1226, 29.2189, -14.3589] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontLeftKnee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontLeftLeg": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontLeftFoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontRightThigh": { - "rotation": { - "0.0": { - "post": { - "vector": [-7.1226, -29.2189, 14.3589] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-7.1226, -29.2189, 14.3589] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontRightKnee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontRightLeg": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontRightFoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftGrip": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 10, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, -25, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 20, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 20, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 10, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightAntenna": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 60, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 60, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightArm": { - "rotation": { - "0.0": { - "post": { - "vector": [5, 17.5, -5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [-25.3744, -0.9366, -25.6212] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [41.8878, 17.5, -5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [5, 17.5, -5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightElbow": { - "rotation": { - "0.0": { - "post": { - "vector": [-30, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-60, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [32.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-30, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightClaw": { - "rotation": { - "0.0": { - "post": { - "vector": [40, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-37.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [59.72, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [40, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -1] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftAntenna": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -60, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, -60, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftArm": { - "rotation": { - "0.0": { - "post": { - "vector": [5, -17.5, 5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [-25.3744, 0.9366, 25.6212] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [41.8878, -17.5, 5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [5, -17.5, 5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftElbow": { - "rotation": { - "0.0": { - "post": { - "vector": [-30, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-60, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [32.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-30, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftClaw": { - "rotation": { - "0.0": { - "post": { - "vector": [40, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-37.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [59.72, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [40, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -1] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "walk2": { - "loop": true, - "animation_length": 1, - "bones": { - "torso": { - "rotation": { - "0.0": { - "post": { - "vector": [5, -5, -2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-2.5, 2.5, -5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [5, 5, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-2.5, -2.5, 5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [5, -5, -2.5] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, -0.33, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 1, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [0, -1, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, -0.33, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0, 1, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.9167": { - "post": { - "vector": [0, -1, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, -0.33, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backRightThigh": { - "rotation": { - "0.0": { - "vector": [0.51, 55.12, 1.91] - }, - "0.0417": { - "vector": [-0.84, 56.48, -0.24] - }, - "0.0833": { - "vector": [-2.1902, 57.84, -2.3841] - }, - "0.125": { - "vector": [-5.39, 59.14, -6.72] - }, - "0.1667": { - "vector": [-7.0069, 60.4955, -9.1801] - }, - "0.2083": { - "vector": [-12.5271, 61.5058, -16.1362] - }, - "0.375": { - "pre": { - "vector": [9.8447, 60.1008, 12.6529] - }, - "post": { - "vector": [9.8447, 60.1008, 12.6529] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [15.5045, 44.0387, 23.0263] - }, - "lerp_mode": "catmullrom" - }, - "0.7083": { - "vector": [6.77, 46.22, 12.33] - }, - "0.75": { - "vector": [7.3232, 47.2763, 12.8944] - }, - "0.7917": { - "vector": [6.6433, 48.4639, 11.7564] - }, - "0.8333": { - "vector": [5.9013, 49.6755, 10.5073] - }, - "0.875": { - "vector": [4.56, 51.04, 8.36] - }, - "0.9167": { - "vector": [3.21, 52.4, 6.21] - }, - "0.9583": { - "vector": [1.86, 53.76, 4.06] - }, - "1.0": { - "vector": [0.51, 55.12, 1.91] - } - } - }, - "backRightKnee": { - "rotation": { - "0.0": { - "vector": [0, 0, 41.88] - }, - "0.2083": { - "vector": [0, 0, 70] - }, - "0.375": { - "pre": { - "vector": [0, 0, 57.5] - }, - "post": { - "vector": [0, 0, 57.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - }, - "0.7083": { - "vector": [0, 0, 2.5] - }, - "1.0": { - "vector": [0, 0, 41.88] - } - } - }, - "backRightLeg": { - "rotation": { - "0.0": { - "vector": [0, 0, -25.83] - }, - "0.2083": { - "vector": [0, 0, -55] - }, - "0.375": { - "pre": { - "vector": [0, 0, -47.5] - }, - "post": { - "vector": [0, 0, -47.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -1.26] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, 18.59] - }, - "lerp_mode": "catmullrom" - }, - "0.7083": { - "vector": [0, 0, 15] - }, - "1.0": { - "vector": [0, 0, -25.83] - } - } - }, - "backRightFoot": { - "rotation": { - "0.0": { - "vector": [0, 0, 25.42] - }, - "0.2083": { - "vector": [0, 0, 40] - }, - "0.375": { - "pre": { - "vector": [0, 0, 28.34] - }, - "post": { - "vector": [0, 0, 28.34] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [0, 0, -18.33] - }, - "lerp_mode": "catmullrom" - }, - "0.7083": { - "vector": [0, 0, 5] - }, - "1.0": { - "vector": [0, 0, 25.42] - } - } - }, - "rightGrip": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 20, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "body": { - "position": { - "vector": [0, -26, 0] - } - }, - "backLeftThigh": { - "rotation": { - "0.0": { - "post": { - "vector": [15.08, -49.85, -21.28] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [15.5045, -44.0387, -23.0263] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "vector": [6.77, -46.22, -12.33] - }, - "0.25": { - "vector": [7.3232, -47.2763, -12.8944] - }, - "0.2917": { - "vector": [6.6433, -48.4639, -11.7564] - }, - "0.3333": { - "vector": [5.9013, -49.6755, -10.5073] - }, - "0.375": { - "vector": [4.56, -51.04, -8.36] - }, - "0.4167": { - "vector": [3.21, -52.4, -6.21] - }, - "0.4583": { - "vector": [1.86, -53.76, -4.06] - }, - "0.5": { - "vector": [0.51, -55.12, -1.91] - }, - "0.5417": { - "vector": [-0.84, -56.48, 0.24] - }, - "0.5833": { - "vector": [-2.1902, -57.84, 2.3841] - }, - "0.625": { - "vector": [-5.39, -59.14, 6.72] - }, - "0.6667": { - "vector": [-7.0069, -60.4955, 9.1801] - }, - "0.7083": { - "vector": [-12.5271, -61.5058, 16.1362] - }, - "0.875": { - "pre": { - "vector": [9.8447, -60.1008, -12.6529] - }, - "post": { - "vector": [9.8447, -60.1008, -12.6529] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [15.08, -49.85, -21.28] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backLeftKnee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -19.88] - }, - "lerp_mode": "catmullrom" - }, - "0.0417": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "vector": [0, 0, -2.5] - }, - "0.5": { - "vector": [0, 0, -41.88] - }, - "0.7083": { - "vector": [0, 0, -70] - }, - "0.875": { - "pre": { - "vector": [0, 0, -57.5] - }, - "post": { - "vector": [0, 0, -57.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -19.88] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backLeftLeg": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 1.26] - }, - "lerp_mode": "catmullrom" - }, - "0.0417": { - "post": { - "vector": [0, 0, -6.09] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, -18.59] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "vector": [0, 0, -15] - }, - "0.5": { - "vector": [0, 0, 25.83] - }, - "0.7083": { - "vector": [0, 0, 55] - }, - "0.875": { - "pre": { - "vector": [0, 0, 47.5] - }, - "post": { - "vector": [0, 0, 47.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 1.26] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backLeftFoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 10.76] - }, - "lerp_mode": "catmullrom" - }, - "0.0417": { - "post": { - "vector": [0, 0, 18.33] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "vector": [0, 0, -5] - }, - "0.5": { - "vector": [0, 0, -25.42] - }, - "0.7083": { - "vector": [0, 0, -40] - }, - "0.875": { - "pre": { - "vector": [0, 0, -28.34] - }, - "post": { - "vector": [0, 0, -28.34] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 10.76] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontLeftThigh": { - "rotation": { - "0.0": { - "vector": [-6.77, 38.72, -12.33] - }, - "0.1667": { - "pre": { - "vector": [-17.3164, 41.1079, -35.1114] - }, - "post": { - "vector": [-17.3164, 41.1079, -35.1114] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [-27.6005, 58.8053, -33.9605] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "vector": [-6.77, 63.72, -12.33] - }, - "0.625": { - "vector": [-6.77, 59.35, -12.33] - }, - "0.75": { - "vector": [-6.77, 54.97, -12.33] - }, - "0.875": { - "vector": [-6.77, 49.35, -12.33] - }, - "1.0": { - "vector": [-6.77, 38.72, -12.33] - } - } - }, - "frontLeftKnee": { - "rotation": { - "0.0": { - "vector": [0, 0, -10] - }, - "0.1667": { - "pre": { - "vector": [0, 0, -0.83] - }, - "post": { - "vector": [0, 0, -0.83] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, -53] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "vector": [0, 0, -50] - }, - "1.0": { - "vector": [0, 0, -10] - } - } - }, - "frontLeftLeg": { - "rotation": { - "0.0": { - "vector": [0, 0, -12.5] - }, - "0.2083": { - "pre": { - "vector": [0, 0, -13.33] - }, - "post": { - "vector": [0, 0, -13.33] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 42.87] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "vector": [0, 0, 40] - }, - "0.75": { - "vector": [0, 0, 11.25] - }, - "1.0": { - "vector": [0, 0, -12.5] - } - } - }, - "frontLeftFoot": { - "rotation": { - "0.0": { - "vector": [0, 0, 17.5] - }, - "0.1667": { - "pre": { - "vector": [0, 0, 30.83] - }, - "post": { - "vector": [0, 0, 30.83] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, -12.77] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "vector": [0, 0, -17.5] - }, - "1.0": { - "vector": [0, 0, 17.5] - } - } - }, - "frontRightThigh": { - "rotation": { - "0.0": { - "vector": [-6.77, -63.72, 12.33] - }, - "0.125": { - "vector": [-6.77, -59.35, 12.33] - }, - "0.25": { - "vector": [-6.77, -54.97, 12.33] - }, - "0.375": { - "vector": [-6.77, -49.35, 12.33] - }, - "0.5": { - "vector": [-6.77, -38.72, 12.33] - }, - "0.6667": { - "pre": { - "vector": [-17.3164, -41.1079, 35.1114] - }, - "post": { - "vector": [-17.3164, -41.1079, 35.1114] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-27.6005, -58.8053, 33.9605] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "vector": [-6.7675, -63.7224, 12.3301] - } - } - }, - "frontRightKnee": { - "rotation": { - "0.0": { - "vector": [0, 0, 50] - }, - "0.5": { - "vector": [0, 0, 10] - }, - "0.6667": { - "pre": { - "vector": [0, 0, 0.83] - }, - "post": { - "vector": [0, 0, 0.83] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [0, 0, 53] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "vector": [0, 0, 50] - } - } - }, - "frontRightLeg": { - "rotation": { - "0.0": { - "vector": [0, 0, -40] - }, - "0.25": { - "vector": [0, 0, -11.25] - }, - "0.5": { - "vector": [0, 0, 12.5] - }, - "0.7083": { - "pre": { - "vector": [0, 0, 13.33] - }, - "post": { - "vector": [0, 0, 13.33] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [0, 0, -42.87] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "vector": [0, 0, -40] - } - } - }, - "frontRightFoot": { - "rotation": { - "0.0": { - "vector": [0, 0, 17.5] - }, - "0.5": { - "vector": [0, 0, -17.5] - }, - "0.6667": { - "pre": { - "vector": [0, 0, -30.83] - }, - "post": { - "vector": [0, 0, -30.83] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [0, 0, 12.77] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "vector": [0, 0, 17.5] - } - } - }, - "leftGrip": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -20, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightAntenna": { - "rotation": { - "vector": [0, 60, 0] - } - }, - "rightArm": { - "rotation": { - "0.0": { - "post": { - "vector": [5, 17.5, -5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightElbow": { - "rotation": { - "0.0": { - "post": { - "vector": [-30, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightClaw": { - "rotation": { - "0.0": { - "post": { - "vector": [40, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftAntenna": { - "rotation": { - "vector": [0, -60, 0] - } - }, - "leftArm": { - "rotation": { - "0.0": { - "post": { - "vector": [5, -17.5, 5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftElbow": { - "rotation": { - "0.0": { - "post": { - "vector": [-30, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftClaw": { - "rotation": { - "0.0": { - "post": { - "vector": [40, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "walktest": { - "loop": true, - "bones": { - "root": { - "position": { - "vector": [0, 0, "-q.anim_time*90*1.1"] - } - } - } - }, - "jump_start": { - "animation_length": 0.5, - "bones": { - "torso": { - "rotation": { - "0.0": { - "post": { - "vector": [-0.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0417": { - "post": { - "vector": [-5.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [4.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [-8, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backRightThigh": { - "rotation": { - "0.0": { - "post": { - "vector": [7.12, 29.22, 14.36] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [22.12, 19.22, 56.86] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [22.12, 19.22, 56.86] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 30, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 30, -17.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 30, -17.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backRightKnee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [0, 0, -7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 0, -7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, -10, 10] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 12.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 12.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backRightLeg": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [0, 0, -12.5] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 0, -12.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -12.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, -42.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -42.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backRightFoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [0, 0, -42.5] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 0, -42.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [0, 0, 35] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightGrip": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 20, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 62.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 30, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [0, 30, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "body": { - "position": { - "0.0": { - "post": { - "vector": [0, -27.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [0, -43.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, -44.25, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, -42.28, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [0, -36.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, -17.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [0, 33.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [0, 48.5, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backLeftThigh": { - "rotation": { - "0.0": { - "post": { - "vector": [7.12, -29.22, -14.36] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [22.12, -19.22, -56.86] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [22.12, -19.22, -56.86] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, -30, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, -30, 17.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, -30, 17.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backLeftKnee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [0, 0, 7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 0, 7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 10, -10] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, -12.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -12.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backLeftLeg": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [0, 0, 12.5] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 0, 12.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 12.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 42.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 42.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backLeftFoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [0, 0, 42.5] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 0, 42.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [0, 0, -35] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontLeftThigh": { - "rotation": { - "0.0": { - "post": { - "vector": [-7.12, 29.22, -14.36] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [-22.12, 19.22, -56.86] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-22.12, 19.22, -56.86] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 30, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 30, 17.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 30, 17.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontLeftKnee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [0, 0, 7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 0, 7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 10, -10] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, -12.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -12.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontLeftLeg": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [0, 0, 12.5] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 0, 12.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 12.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 42.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 42.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontLeftFoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [0, 0, 42.5] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 0, 42.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [0, 0, -35] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontRightThigh": { - "rotation": { - "0.0": { - "post": { - "vector": [-7.12, -29.22, 14.36] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [-22.12, -19.22, 56.86] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-22.12, -19.22, 56.86] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, -30, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, -30, -17.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, -30, -17.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontRightKnee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [0, 0, -7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 0, -7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, -10, 10] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 12.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 12.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontRightLeg": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [0, 0, -12.5] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 0, -12.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -12.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, -42.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -42.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontRightFoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [0, 0, -42.5] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 0, -42.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [0, 0, 35] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftGrip": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -20, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, -62.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, -30, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [0, -30, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightAntenna": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 60, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightArm": { - "rotation": { - "0.0": { - "post": { - "vector": [5, 17.5, -5] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [20, 17.5, -5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [50, 17.5, -5] - }, - "lerp_mode": "catmullrom" - }, - "0.4583": { - "post": { - "vector": [5, 17.5, -5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightElbow": { - "rotation": { - "0.0": { - "post": { - "vector": [-30, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [-55, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-30, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightClaw": { - "rotation": { - "0.0": { - "post": { - "vector": [40, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [57.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [40, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [40, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftAntenna": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -60, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftArm": { - "rotation": { - "0.0": { - "post": { - "vector": [5, -17.5, 5] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [20, -17.5, 5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [50, -17.5, 5] - }, - "lerp_mode": "catmullrom" - }, - "0.4583": { - "post": { - "vector": [5, -17.5, 5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftElbow": { - "rotation": { - "0.0": { - "post": { - "vector": [-30, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [-55, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-30, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftClaw": { - "rotation": { - "0.0": { - "post": { - "vector": [40, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [57.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [40, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [40, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "jump_loop": { - "loop": true, - "animation_length": 1, - "bones": { - "torso": { - "rotation": { - "0.0": { - "post": { - "vector": [-8, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backRightThigh": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 30, -9.17] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [0, 30, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [0, 30, -2.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 30, -9.17] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backRightKnee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 16.67] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 27.5] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 16.67] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backRightLeg": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -50] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [0, 0, -42.5] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0, 0, -52.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -50] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backRightFoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 50] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0, 0, 27.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightGrip": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 30, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "body": { - "rotation": { - "0.0": { - "vector": [0, 0, 0] - }, - "0.25": { - "pre": { - "vector": [-2.5, -2.5, -5] - }, - "post": { - "vector": [-2.5, -2.5, -5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [2.5, 2.5, -2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [5, 5, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 48.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 46.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 50.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 48.5, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backLeftThigh": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -30, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, -30, 9.17] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, -30, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, -30, 2.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backLeftKnee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -5.94] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 0, -16.67] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [0, 0, -27.5] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -5.94] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backLeftLeg": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 52.34] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 0, 50] - }, - "lerp_mode": "catmullrom" - }, - "0.4583": { - "post": { - "vector": [0, 0, 42.5] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [0, 0, 52.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 52.34] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backLeftFoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -30.31] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [0, 0, -50] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [0, 0, -27.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -30.31] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontLeftThigh": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 30, 8.61] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 30, 17.5] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [0, 30, 27.5] - }, - "lerp_mode": "catmullrom" - }, - "0.9167": { - "post": { - "vector": [0, 30, 7.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 30, 8.61] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontLeftKnee": { - "rotation": { - "0.0": { - "vector": [0, 0, -20.09] - }, - "0.0833": { - "vector": [0, 0, -22.5] - }, - "0.1667": { - "vector": [0, 0, -19.17] - }, - "0.5833": { - "pre": { - "vector": [0, 0, -2.5] - }, - "post": { - "vector": [0, 0, -2.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "vector": [0, 0, -20.09] - } - } - }, - "frontLeftLeg": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 50.83] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 0, 43.06] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [0, 0, 36.88] - }, - "lerp_mode": "catmullrom" - }, - "0.7917": { - "post": { - "vector": [0, 0, 57.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 50.83] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontLeftFoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -45.16] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 0, -51.53] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [0, 0, -55] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -45.16] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontRightThigh": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -30, -17.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, -30, -27.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, -30, -7.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, -30, -17.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontRightKnee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 19.17] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.9167": { - "vector": [0, 0, 22.5] - }, - "1.0": { - "vector": [0, 0, 19.17] - } - } - }, - "frontRightLeg": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -43.06] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 0, -36.88] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, -57.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -43.06] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontRightFoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 51.53] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 0, 55] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 51.53] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftGrip": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -30, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightAntenna": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 60, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightArm": { - "rotation": { - "0.0": { - "post": { - "vector": [5, 17.5, -5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [-2.5, 17.5, -5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [5, 17.5, -5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-2.5, 17.5, -5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [5, 17.5, -5] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-2.5, 17.5, -5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [5, 17.5, -5] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [-2.5, 17.5, -5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [5, 17.5, -5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightElbow": { - "rotation": { - "0.0": { - "post": { - "vector": [-30, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightClaw": { - "rotation": { - "0.0": { - "post": { - "vector": [40, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftAntenna": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -60, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftArm": { - "rotation": { - "0.0": { - "post": { - "vector": [5, -17.5, 5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [-2.5, -17.5, 5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [5, -17.5, 5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-2.5, -17.5, 5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [5, -17.5, 5] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-2.5, -17.5, 5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [5, -17.5, 5] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [-2.5, -17.5, 5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [5, -17.5, 5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftElbow": { - "rotation": { - "0.0": { - "post": { - "vector": [-30, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftClaw": { - "rotation": { - "0.0": { - "post": { - "vector": [40, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "jump_end": { - "animation_length": 0.625, - "bones": { - "torso": { - "rotation": { - "0.0": { - "post": { - "vector": [-8, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [-15.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [6.54, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-0.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backRightThigh": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 30, -17.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0.28, 17.47, -16.24] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [3.72, 22.56, 6.64] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [7.1226, 29.2189, 14.3589] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backRightKnee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 12.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 29.62] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backRightLeg": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -42.5] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [0, 15, 5] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 14.46, 12.92] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backRightFoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [0, -4.94, -10.51] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 2.79, -27.37] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightGrip": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 30, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "body": { - "rotation": { - "vector": [0, 0, 0] - }, - "position": { - "0.0": { - "post": { - "vector": [0, 48.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [0, -9.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [0, -20.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [0, -27.05, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, -31.72, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [0, -30.5, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backLeftThigh": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -30, 17.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0.28, -17.47, 16.24] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [3.72, -22.56, -6.64] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [7.1226, -29.2189, -14.3589] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backLeftKnee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -12.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, -29.62] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backLeftLeg": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 42.5] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [0, -15, -5] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, -14.46, -12.92] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backLeftFoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [0, 4.94, 10.51] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, -2.79, 27.37] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontLeftThigh": { - "rotation": { - "0.0": { - "post": { - "vector": [10, 30, 17.5] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [10, 30, 17.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-12.5, 30, -12.5] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-7.1226, 29.2189, -14.3589] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontLeftKnee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -12.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, -7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontLeftLeg": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 42.5] - }, - "lerp_mode": "catmullrom" - }, - "0.0417": { - "post": { - "vector": [0, 0, 17.5] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [0, 0, -17.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [0, 0, -14.69] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontLeftFoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.0417": { - "post": { - "vector": [0, 0, -15] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [0, 0, 15] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 17.5] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [0, 0, 17.5] - }, - "lerp_mode": "catmullrom" - }, - "0.4583": { - "post": { - "vector": [0, 0, 12.5] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontRightThigh": { - "rotation": { - "0.0": { - "post": { - "vector": [10, -30, -17.5] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [10, -30, -17.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-12.5, -30, 12.5] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-7.1226, -29.2189, 14.3589] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontRightKnee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 12.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontRightLeg": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -42.5] - }, - "lerp_mode": "catmullrom" - }, - "0.0417": { - "post": { - "vector": [0, 0, -17.5] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [0, 0, 17.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [0, 0, 14.69] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontRightFoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.0417": { - "post": { - "vector": [0, 0, 15] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [0, 0, -15] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, -17.5] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [0, 0, -17.5] - }, - "lerp_mode": "catmullrom" - }, - "0.4583": { - "post": { - "vector": [0, 0, -12.5] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftGrip": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -30, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightAntenna": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 60, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightArm": { - "rotation": { - "0.0": { - "post": { - "vector": [5, 17.5, -5] - }, - "lerp_mode": "catmullrom" - }, - "0.0417": { - "post": { - "vector": [-22.5, 17.5, -5] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [27.5, 17.5, -5] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [9.37, 17.5, -5] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [5, 17.5, -5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightElbow": { - "rotation": { - "0.0": { - "post": { - "vector": [-30, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightClaw": { - "rotation": { - "0.0": { - "post": { - "vector": [40, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftAntenna": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -60, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftArm": { - "rotation": { - "0.0": { - "post": { - "vector": [5, -17.5, 5] - }, - "lerp_mode": "catmullrom" - }, - "0.0417": { - "post": { - "vector": [-22.5, -17.5, 5] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [27.5, -17.5, 5] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [9.37, -17.5, 5] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [5, -17.5, 5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftElbow": { - "rotation": { - "0.0": { - "post": { - "vector": [-30, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftClaw": { - "rotation": { - "0.0": { - "post": { - "vector": [40, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "hanging": { - "loop": true, - "animation_length": 2, - "bones": { - "torso": { - "rotation": { - "0.0": { - "post": { - "vector": [-6.88, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.375": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-6.88, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "backRightThigh": { - "rotation": { - "vector": [35, 30, 57.5] - } - }, - "backRightKnee": { - "rotation": { - "vector": [0, 0, 12.5] - } - }, - "backRightLeg": { - "rotation": { - "vector": [0, 0, -45] - } - }, - "backRightFoot": { - "rotation": { - "vector": [0, 0, 45] - } - }, - "rightGrip": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 31.25, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 35, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.75": { - "post": { - "vector": [0, 20, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 31.25, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "body": { - "position": { - "vector": [0, -49, 0] - } - }, - "backLeftThigh": { - "rotation": { - "vector": [35, -30, -57.5] - } - }, - "backLeftKnee": { - "rotation": { - "vector": [0, 0, -12.5] - } - }, - "backLeftLeg": { - "rotation": { - "vector": [0, 0, 45] - } - }, - "backLeftFoot": { - "rotation": { - "vector": [0, 0, -45] - } - }, - "frontLeftThigh": { - "rotation": { - "vector": [-35, 30, -57.5] - } - }, - "frontLeftKnee": { - "rotation": { - "vector": [0, 0, -12.5] - } - }, - "frontLeftLeg": { - "rotation": { - "vector": [0, 0, 45] - } - }, - "frontLeftFoot": { - "rotation": { - "vector": [0, 0, -45] - } - }, - "frontRightThigh": { - "rotation": { - "vector": [-35, -30, 57.5] - } - }, - "frontRightKnee": { - "rotation": { - "vector": [0, 0, 12.5] - } - }, - "frontRightLeg": { - "rotation": { - "vector": [0, 0, -45] - } - }, - "frontRightFoot": { - "rotation": { - "vector": [0, 0, 45] - } - }, - "leftGrip": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -31.25, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, -35, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.75": { - "post": { - "vector": [0, -20, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, -31.25, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightAntenna": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 57.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 50, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 57.5, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightArm": { - "rotation": { - "0.0": { - "post": { - "vector": [7.5, 17.5, -20] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [2.5, 17.5, -20] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [12.5, 17.5, -20] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [7.5, 17.5, -20] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightElbow": { - "rotation": { - "0.0": { - "post": { - "vector": [-50, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-52.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.75": { - "vector": [-42.5, 0, 0] - }, - "2.0": { - "vector": [-50, 0, 0] - } - } - }, - "rightClaw": { - "rotation": { - "0.0": { - "post": { - "vector": [59.37, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [47.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.875": { - "vector": [60, 0, 0] - }, - "2.0": { - "vector": [59.37, 0, 0] - } - } - }, - "leftAntenna": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -57.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, -50, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, -57.5, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftArm": { - "rotation": { - "0.0": { - "post": { - "vector": [7.5, -17.5, 20] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [2.5, -17.5, 20] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [12.5, -17.5, 20] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [7.5, -17.5, 20] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftElbow": { - "rotation": { - "0.0": { - "post": { - "vector": [-50, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-52.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.75": { - "vector": [-42.5, 0, 0] - }, - "2.0": { - "vector": [-50, 0, 0] - } - } - }, - "leftClaw": { - "rotation": { - "0.0": { - "post": { - "vector": [59.37, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [47.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.875": { - "vector": [60, 0, 0] - }, - "2.0": { - "vector": [59.37, 0, 0] - } - } - } - } - } - } -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/lurking_terror.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/lurking_terror.animation.json deleted file mode 100644 index 8f8c3f13..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/animations/lurking_terror.animation.json +++ /dev/null @@ -1,6934 +0,0 @@ -{ - "format_version": "1.8.0", - "animations": { - "idle": { - "loop": true, - "animation_length": 5, - "bones": { - "upperRightJaw": { - "rotation": { - "0.0": { - "post": { - "vector": [-10, 10, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-25, 25, 0] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [-10, 10, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightfrontleg": { - "rotation": { - "0.0": { - "post": { - "vector": [15.3924, -26.5931, -20.1521] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightfrontknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightfrontfoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "root": { - "position": { - "0.0": { - "post": { - "vector": [0, 4, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "body": { - "rotation": { - "0.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.5": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tailbase": { - "rotation": { - "0.0": { - "post": { - "vector": [12.6866, -9.7606, -2.1856] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [12.6866, 9.7606, 2.1856] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [12.9264, -14.6364, -3.3192] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [12.6866, -9.7606, -2.1856] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tailmiddle": { - "rotation": { - "0.0": { - "post": { - "vector": [15.9153, -19.2911, -5.3815] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [15.9153, 19.2911, 5.3815] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [15.9153, -19.2911, -5.3815] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tailtip": { - "rotation": { - "0.0": { - "post": { - "vector": [18.5482, -19.0375, -6.246] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [19.5682, -26.1278, -8.8967] - }, - "lerp_mode": "catmullrom" - }, - "3.5": { - "post": { - "vector": [18.5482, 19.0375, 6.246] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [18.5482, -19.0375, -6.246] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftfrontleg": { - "rotation": { - "0.0": { - "post": { - "vector": [15.3924, 26.5931, 20.1521] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftfrontknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftfrontfoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightbackleg": { - "rotation": { - "0.0": { - "post": { - "vector": [-15.3924, 26.5931, -20.1521] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightbackknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightbackfoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftbackleg": { - "rotation": { - "0.0": { - "post": { - "vector": [-15.3924, -26.5931, 20.1521] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftbackknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftbackfoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "lowerRightJaw": { - "rotation": { - "0.0": { - "post": { - "vector": [10, 10, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [10, 30, 0] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [10, 10, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "upperLeftJaw": { - "rotation": { - "0.0": { - "post": { - "vector": [-10, -10, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-25, -25, 0] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [-10, -10, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "lowerLeftJaw": { - "rotation": { - "0.0": { - "post": { - "vector": [10, -10, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [10, -30, 0] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [10, -10, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftmiddleleg": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 17.6521] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftmiddleknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftmiddlefoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightmiddleleg": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -17.6521] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightmiddleknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightmiddlefoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftWing1": { - "rotation": { - "0.0": { - "post": { - "vector": [-38.9808, -3.1406, -63.2916] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightWing1": { - "rotation": { - "0.0": { - "post": { - "vector": [-38.9808, 3.1406, 63.2916] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftWing2": { - "rotation": { - "0.0": { - "post": { - "vector": [-47.3233, 8.7591, -67.0544] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightWing2": { - "rotation": { - "0.0": { - "post": { - "vector": [-47.3233, -8.7591, 67.0544] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "walk": { - "loop": true, - "animation_length": 1, - "bones": { - "upperRightJaw": { - "rotation": { - "0.0": { - "post": { - "vector": [-10, 10, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-25, 25, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-10, 10, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-25, 25, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-10, 10, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightfrontleg": { - "rotation": { - "0.0": { - "post": { - "vector": [15.3924, -26.5931, -20.1521] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [10.257, -28.8205, -9.1359] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-9.6179, -48.6127, -5.3962] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [7.6439, -48.8755, -28.2259] - }, - "lerp_mode": "catmullrom" - }, - "0.4375": { - "post": { - "vector": [7.6439, -48.8755, -28.2259] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [15.3924, -26.5931, -20.1521] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [10.257, -28.8205, -9.1359] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-9.6179, -48.6127, -5.3962] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [7.6439, -48.8755, -28.2259] - }, - "lerp_mode": "catmullrom" - }, - "0.9375": { - "post": { - "vector": [7.6439, -48.8755, -28.2259] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [15.3924, -26.5931, -20.1521] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 0, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [-1, 0, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-1, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-1, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-1, 0, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-1, 0, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-1, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [-1, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-1, 0, 1] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightfrontknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightfrontfoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "root": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0625": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1875": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3125": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4375": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5625": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6875": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.8125": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.9375": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 4, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0625": { - "post": { - "vector": [0, 3.75, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 4, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1875": { - "post": { - "vector": [0, 4, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 4, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3125": { - "post": { - "vector": [0, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 4, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4375": { - "post": { - "vector": [0, 4, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 4, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5625": { - "post": { - "vector": [0, 3.75, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 4, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6875": { - "post": { - "vector": [0, 4, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 4, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.8125": { - "post": { - "vector": [0, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [0, 4, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.9375": { - "post": { - "vector": [0, 4, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 4, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "body": { - "rotation": { - "0.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tailbase": { - "rotation": { - "0.0": { - "post": { - "vector": [12.6866, -9.7606, -2.1856] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [12.6866, 9.7606, 2.1856] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [12.9264, -14.6364, -3.3192] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [12.6866, -9.7606, -2.1856] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tailmiddle": { - "rotation": { - "0.0": { - "post": { - "vector": [15.9153, -19.2911, -5.3815] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [15.9153, 19.2911, 5.3815] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [15.9153, -19.2911, -5.3815] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tailtip": { - "rotation": { - "0.0": { - "post": { - "vector": [18.5482, -19.0375, -6.246] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [19.5682, -26.1278, -8.8967] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [18.5482, 19.0375, 6.246] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [18.5482, -19.0375, -6.246] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftfrontleg": { - "rotation": { - "0.0": { - "post": { - "vector": [10.257, 28.8205, 9.1359] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [-9.6179, 48.6127, 5.3962] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [7.6439, 48.8755, 28.2259] - }, - "lerp_mode": "catmullrom" - }, - "0.3125": { - "post": { - "vector": [7.6439, 48.8755, 28.2259] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [15.3924, 26.5931, 20.1521] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [10.257, 28.8205, 9.1359] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-9.6179, 48.6127, 5.3962] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [7.6439, 48.8755, 28.2259] - }, - "lerp_mode": "catmullrom" - }, - "0.8125": { - "post": { - "vector": [7.6439, 48.8755, 28.2259] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [15.3924, 26.5931, 20.1521] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [10.257, 28.8205, 9.1359] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [1, 0, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [1, 0, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [1, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [1, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [1, 0, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [1, 0, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [1, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [1, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftfrontknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 35] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, 7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [0, 0, 35] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftfrontfoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightbackleg": { - "rotation": { - "0.0": { - "post": { - "vector": [-10.257, 28.8205, -9.1359] - }, - "lerp_mode": "catmullrom" - }, - "0.0625": { - "post": { - "vector": [-10.257, 28.8205, -9.1359] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [-15.3924, 26.5931, -20.1521] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-7.6439, 48.8755, -28.2259] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [9.6179, 48.6127, -5.3962] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-10.257, 28.8205, -9.1359] - }, - "lerp_mode": "catmullrom" - }, - "0.5625": { - "post": { - "vector": [-10.257, 28.8205, -9.1359] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-15.3924, 26.5931, -20.1521] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-7.6439, 48.8755, -28.2259] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [9.6179, 48.6127, -5.3962] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-10.257, 28.8205, -9.1359] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightbackknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, -35] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, -7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, -35] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [0, 0, -7.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightbackfoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, -2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, -2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, -2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [0, 0, -2.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftbackleg": { - "rotation": { - "0.0": { - "post": { - "vector": [-15.3924, -26.5931, 20.1521] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [-7.6439, -48.8755, 28.2259] - }, - "lerp_mode": "catmullrom" - }, - "0.1875": { - "post": { - "vector": [-7.6439, -48.8755, 28.2259] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [9.6179, -48.6127, 5.3962] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-10.257, -28.8205, 9.1359] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-15.3924, -26.5931, 20.1521] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-7.6439, -48.8755, 28.2259] - }, - "lerp_mode": "catmullrom" - }, - "0.6875": { - "post": { - "vector": [-7.6439, -48.8755, 28.2259] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [9.6179, -48.6127, 5.3962] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [-10.257, -28.8205, 9.1359] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-15.3924, -26.5931, 20.1521] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftbackknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 35] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 35] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 35] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftbackfoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, -2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [0, 0, -2.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "lowerRightJaw": { - "rotation": { - "0.0": { - "post": { - "vector": [10, 10, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [15, 30, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [10, 10, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [15, 30, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [10, 10, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "upperLeftJaw": { - "rotation": { - "0.0": { - "post": { - "vector": [-10, -10, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-25, -25, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-10, -10, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-25, -25, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-10, -10, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "lowerLeftJaw": { - "rotation": { - "0.0": { - "post": { - "vector": [10, -10, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [15, -30, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [10, -10, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [15, -30, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [10, -10, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftmiddleleg": { - "rotation": { - "0.0": { - "post": { - "vector": [11.25, -16.6, 9.19] - }, - "lerp_mode": "catmullrom" - }, - "0.0625": { - "post": { - "vector": [8.9897, -3.2477, 3.637] - }, - "lerp_mode": "catmullrom" - }, - "0.1875": { - "post": { - "vector": [-6.3574, 3.99, 12.1976] - }, - "lerp_mode": "catmullrom" - }, - "0.3125": { - "post": { - "vector": [2.6844, 19.5763, 16.2625] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [3.7346, 16.9546, 18.7439] - }, - "lerp_mode": "catmullrom" - }, - "0.4375": { - "post": { - "vector": [12.4227, -23.6439, 15.3703] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [12.21, -16.44, 8.76] - }, - "lerp_mode": "catmullrom" - }, - "0.5625": { - "post": { - "vector": [8.9897, -3.2477, 3.637] - }, - "lerp_mode": "catmullrom" - }, - "0.6875": { - "post": { - "vector": [-6.3574, 3.99, 12.1976] - }, - "lerp_mode": "catmullrom" - }, - "0.8125": { - "post": { - "vector": [2.6844, 19.5763, 16.2625] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [3.7346, 16.9546, 18.7439] - }, - "lerp_mode": "catmullrom" - }, - "0.9375": { - "post": { - "vector": [12.4227, -23.6439, 15.3703] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [11.25, -16.6, 9.19] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 0, -0.06] - }, - "lerp_mode": "catmullrom" - }, - "0.0625": { - "post": { - "vector": [-1, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1875": { - "post": { - "vector": [-1, 0, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.3125": { - "post": { - "vector": [-1, 0, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.4375": { - "post": { - "vector": [-1, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-1, 0, -0.12] - }, - "lerp_mode": "catmullrom" - }, - "0.5625": { - "post": { - "vector": [-1, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6875": { - "post": { - "vector": [-1, 0, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.8125": { - "post": { - "vector": [-1, 0, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.9375": { - "post": { - "vector": [-1, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-1, 0, -0.06] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftmiddleknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 35] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, 7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [0, 0, 35] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftmiddlefoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightmiddleleg": { - "rotation": { - "0.0": { - "post": { - "vector": [12.21, 16.44, -8.76] - }, - "lerp_mode": "catmullrom" - }, - "0.0625": { - "post": { - "vector": [8.9897, 3.2477, -3.637] - }, - "lerp_mode": "catmullrom" - }, - "0.1875": { - "post": { - "vector": [-6.3574, -3.99, -12.1976] - }, - "lerp_mode": "catmullrom" - }, - "0.3125": { - "post": { - "vector": [2.6844, -19.5763, -16.2625] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [3.7346, -16.9546, -18.7439] - }, - "lerp_mode": "catmullrom" - }, - "0.4375": { - "post": { - "vector": [12.4227, 23.6439, -15.3703] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [12.21, 16.44, -8.76] - }, - "lerp_mode": "catmullrom" - }, - "0.5625": { - "post": { - "vector": [8.9897, 3.2477, -3.637] - }, - "lerp_mode": "catmullrom" - }, - "0.6875": { - "post": { - "vector": [-6.3574, -3.99, -12.1976] - }, - "lerp_mode": "catmullrom" - }, - "0.8125": { - "post": { - "vector": [2.6844, -19.5763, -16.2625] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [3.7346, -16.9546, -18.7439] - }, - "lerp_mode": "catmullrom" - }, - "0.9375": { - "post": { - "vector": [12.4227, 23.6439, -15.3703] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [11.25, 16.6, -9.19] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 0, -0.12] - }, - "lerp_mode": "catmullrom" - }, - "0.0625": { - "post": { - "vector": [1, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1875": { - "post": { - "vector": [1, 0, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.3125": { - "post": { - "vector": [1, 0, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.4375": { - "post": { - "vector": [1, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [1, 0, -0.12] - }, - "lerp_mode": "catmullrom" - }, - "0.5625": { - "post": { - "vector": [1, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6875": { - "post": { - "vector": [1, 0, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.8125": { - "post": { - "vector": [1, 0, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.9375": { - "post": { - "vector": [1, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [1, 0, -0.06] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightmiddleknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightmiddlefoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftWing1": { - "rotation": { - "0.0": { - "post": { - "vector": [-38.9808, -3.1406, -63.2916] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightWing1": { - "rotation": { - "0.0": { - "post": { - "vector": [-38.9808, 3.1406, 63.2916] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftWing2": { - "rotation": { - "0.0": { - "post": { - "vector": [-47.3233, 8.7591, -67.0544] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightWing2": { - "rotation": { - "0.0": { - "post": { - "vector": [-47.3233, -8.7591, 67.0544] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "attackland": { - "loop": true, - "animation_length": 1, - "bones": { - "upperRightJaw": { - "rotation": { - "0.0": { - "post": { - "vector": [-10, 10, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-15, 15, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "vector": [0, 0, 0] - }, - "0.5": { - "vector": [0, 0, 0] - }, - "1.0": { - "pre": { - "vector": [-10, 10, 0] - }, - "post": { - "vector": [-10, 10, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightfrontleg": { - "rotation": { - "0.0": { - "post": { - "vector": [15.3924, -26.5931, -20.1521] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [12.3553, -30.5717, -24.192] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-0.505, -4.5993, -32.7137] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-0.505, -4.5993, -32.7137] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [15.3924, -26.5931, -20.1521] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [15.3924, -26.5931, -20.1521] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [-1, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightfrontknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, -26.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -1.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, -1.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightfrontfoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, -29] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -40] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, -40] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "root": { - "position": { - "0.0": { - "post": { - "vector": [0, 4, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 6, 2] - }, - "lerp_mode": "catmullrom" - }, - "0.1875": { - "post": { - "vector": [0, 9.13, -4.06] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 6, -9] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 6, -9] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 4, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 4, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "body": { - "rotation": { - "0.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [12.14, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -1] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -1] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tailbase": { - "rotation": { - "0.0": { - "vector": [0, 0, 0] - }, - "0.125": { - "vector": [-5, 0, 0] - }, - "0.25": { - "pre": { - "vector": [10, 0, 0] - }, - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tailmiddle": { - "rotation": { - "0.0": { - "vector": [0, 0, 0] - }, - "0.125": { - "vector": [-5, 0, 0] - }, - "0.25": { - "pre": { - "vector": [5, 0, 0] - }, - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tailtip": { - "rotation": { - "0.0": { - "vector": [0, 0, 0] - }, - "0.125": { - "vector": [-5, 0, 0] - }, - "0.25": { - "pre": { - "vector": [10, 0, 0] - }, - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftfrontleg": { - "rotation": { - "0.0": { - "post": { - "vector": [15.3924, 26.5931, 20.1521] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [12.3553, 30.5717, 24.192] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-0.505, 4.5993, 32.7137] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-0.505, 4.5993, 32.7137] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [15.3924, 26.5931, 20.1521] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [15.3924, 26.5931, 20.1521] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [1, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftfrontknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 26.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 1.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 1.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftfrontfoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 29] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 40] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 40] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightbackleg": { - "rotation": { - "0.0": { - "post": { - "vector": [-15.3924, 26.5931, -20.1521] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [-13.8657, 21.5444, -24.5629] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-6.3454, 41.2302, -13.6458] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-6.3454, 41.2302, -13.6458] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-15.3924, 26.5931, -20.1521] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-15.3924, 26.5931, -20.1521] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightbackknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, -20] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -55] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, -55] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightbackfoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, -35] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, -2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftbackleg": { - "rotation": { - "0.0": { - "post": { - "vector": [-15.3924, -26.5931, 20.1521] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [-13.8657, -21.5444, 24.5629] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-6.3454, -41.2302, 13.6458] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-6.3454, -41.2302, 13.6458] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-15.3924, -26.5931, 20.1521] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-15.3924, -26.5931, 20.1521] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftbackknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 20] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 55] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 55] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftbackfoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 35] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "lowerRightJaw": { - "rotation": { - "0.0": { - "post": { - "vector": [10, 10, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [15, 15, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "vector": [0, 0, 0] - }, - "0.5": { - "vector": [0, 0, 0] - }, - "1.0": { - "pre": { - "vector": [10, 10, 0] - }, - "post": { - "vector": [10, 10, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "upperLeftJaw": { - "rotation": { - "0.0": { - "post": { - "vector": [-10, -10, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-15, -15, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "vector": [0, 0, 0] - }, - "0.5": { - "vector": [0, 0, 0] - }, - "1.0": { - "pre": { - "vector": [-10, -10, 0] - }, - "post": { - "vector": [-10, -10, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "lowerLeftJaw": { - "rotation": { - "0.0": { - "post": { - "vector": [10, -10, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [15, -15, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "vector": [0, 0, 0] - }, - "0.5": { - "vector": [0, 0, 0] - }, - "1.0": { - "pre": { - "vector": [10, -10, 0] - }, - "post": { - "vector": [10, -10, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftmiddleleg": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 17.6521] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 17.6521] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 17.6521] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 17.6521] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 17.6521] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 17.6521] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [1, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftmiddleknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftmiddlefoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightmiddleleg": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -17.6521] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [-2.5016, -3.2493, -22.6194] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 19.5, -17.6521] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 19.5, -17.6521] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -17.6521] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -17.6521] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [1, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightmiddleknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, -25] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -35] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, -35] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightmiddlefoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, -24.75] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftWing1": { - "rotation": { - "0.0": { - "post": { - "vector": [-38.9808, -3.1406, -63.2916] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightWing1": { - "rotation": { - "0.0": { - "post": { - "vector": [-38.9808, 3.1406, 63.2916] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftWing2": { - "rotation": { - "0.0": { - "post": { - "vector": [-47.3233, 8.7591, -67.0544] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightWing2": { - "rotation": { - "0.0": { - "post": { - "vector": [-47.3233, -8.7591, 67.0544] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "fly": { - "loop": true, - "animation_length": 5, - "bones": { - "upperRightJaw": { - "rotation": { - "0.0": { - "post": { - "vector": [-10, 10, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-25, 25, 0] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [-10, 10, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightfrontleg": { - "rotation": { - "0.0": { - "post": { - "vector": [28.9762, -9.77, -61.5239] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [29.3284, -8.552, -63.7354] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [28.9762, -9.77, -61.5239] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightfrontknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -65] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, -67.5] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [0, 0, -65] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightfrontfoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, 25] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "root": { - "position": { - "0.0": { - "post": { - "vector": [0, 4, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "body": { - "rotation": { - "0.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.5": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tailbase": { - "rotation": { - "0.0": { - "post": { - "vector": [-12.6866, -9.7606, -2.1856] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-12.6866, 9.7606, 2.1856] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [-12.9264, -14.6364, -3.3192] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [-12.6866, -9.7606, -2.1856] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tailmiddle": { - "rotation": { - "0.0": { - "post": { - "vector": [-15.9153, -19.2911, -5.3815] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-15.9153, 19.2911, 5.3815] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [-15.9153, -19.2911, -5.3815] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tailtip": { - "rotation": { - "0.0": { - "post": { - "vector": [-18.5482, -19.0375, -6.246] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-19.5682, -26.1278, -8.8967] - }, - "lerp_mode": "catmullrom" - }, - "3.5": { - "post": { - "vector": [-18.5482, 19.0375, 6.246] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [-18.5482, -19.0375, -6.246] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftfrontleg": { - "rotation": { - "0.0": { - "post": { - "vector": [28.9762, 9.77, 61.5239] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [29.3284, 8.552, 63.7354] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [28.9762, 9.77, 61.5239] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftfrontknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 65] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, 67.5] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [0, 0, 65] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftfrontfoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, -25] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightbackleg": { - "rotation": { - "0.0": { - "post": { - "vector": [-28.9762, 9.77, -61.5239] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-29.3284, 8.552, -63.7354] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [-28.9762, 9.77, -61.5239] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightbackknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -65] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, -67.5] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [0, 0, -65] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightbackfoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, 25] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftbackleg": { - "rotation": { - "0.0": { - "post": { - "vector": [-28.9762, -9.77, 61.5239] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-29.3284, -8.552, 63.7354] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [-28.9762, -9.77, 61.5239] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftbackknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 65] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, 67.5] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [0, 0, 65] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftbackfoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, -25] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "lowerRightJaw": { - "rotation": { - "0.0": { - "post": { - "vector": [10, 10, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [25, 25, 0] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [10, 10, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "upperLeftJaw": { - "rotation": { - "0.0": { - "post": { - "vector": [-10, -10, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-25, -25, 0] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [-10, -10, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "lowerLeftJaw": { - "rotation": { - "0.0": { - "post": { - "vector": [10, -10, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [25, -25, 0] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [10, -10, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftmiddleleg": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 55] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, 57.5] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [0, 0, 55] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftmiddleknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 65] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, 67.5] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [0, 0, 65] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftmiddlefoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, -25] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightmiddleleg": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -55] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, -57.5] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [0, 0, -55] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightmiddleknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -65] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, -67.5] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [0, 0, -65] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightmiddlefoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, 25] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftWing1": { - "rotation": { - "0.0": { - "post": { - "vector": [-15.0298, 1.1797, -43.4554] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [-25.0746, 0.9139, -76.0322] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-15.0298, 1.1797, -43.4554] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-25.0746, 0.9139, -76.0322] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [-15.0298, 1.1797, -43.4554] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-25.0746, 0.9139, -76.0322] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-15.0298, 1.1797, -43.4554] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [-25.0746, 0.9139, -76.0322] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-15.0298, 1.1797, -43.4554] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-25.0746, 0.9139, -76.0322] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-15.0298, 1.1797, -43.4554] - }, - "lerp_mode": "catmullrom" - }, - "0.9167": { - "post": { - "vector": [-25.0746, 0.9139, -76.0322] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-15.0298, 1.1797, -43.4554] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [-25.0746, 0.9139, -76.0322] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [-15.0298, 1.1797, -43.4554] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [-25.0746, 0.9139, -76.0322] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [-15.0298, 1.1797, -43.4554] - }, - "lerp_mode": "catmullrom" - }, - "1.4167": { - "post": { - "vector": [-25.0746, 0.9139, -76.0322] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-15.0298, 1.1797, -43.4554] - }, - "lerp_mode": "catmullrom" - }, - "1.5833": { - "post": { - "vector": [-25.0746, 0.9139, -76.0322] - }, - "lerp_mode": "catmullrom" - }, - "1.6667": { - "post": { - "vector": [-15.0298, 1.1797, -43.4554] - }, - "lerp_mode": "catmullrom" - }, - "1.75": { - "post": { - "vector": [-25.0746, 0.9139, -76.0322] - }, - "lerp_mode": "catmullrom" - }, - "1.8333": { - "post": { - "vector": [-15.0298, 1.1797, -43.4554] - }, - "lerp_mode": "catmullrom" - }, - "1.9167": { - "post": { - "vector": [-25.0746, 0.9139, -76.0322] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-15.0298, 1.1797, -43.4554] - }, - "lerp_mode": "catmullrom" - }, - "2.0833": { - "post": { - "vector": [-25.0746, 0.9139, -76.0322] - }, - "lerp_mode": "catmullrom" - }, - "2.1667": { - "post": { - "vector": [-15.0298, 1.1797, -43.4554] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [-25.0746, 0.9139, -76.0322] - }, - "lerp_mode": "catmullrom" - }, - "2.3333": { - "post": { - "vector": [-15.0298, 1.1797, -43.4554] - }, - "lerp_mode": "catmullrom" - }, - "2.4167": { - "post": { - "vector": [-25.0746, 0.9139, -76.0322] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-15.0298, 1.1797, -43.4554] - }, - "lerp_mode": "catmullrom" - }, - "2.5833": { - "post": { - "vector": [-25.0746, 0.9139, -76.0322] - }, - "lerp_mode": "catmullrom" - }, - "2.6667": { - "post": { - "vector": [-15.0298, 1.1797, -43.4554] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [-25.0746, 0.9139, -76.0322] - }, - "lerp_mode": "catmullrom" - }, - "2.8333": { - "post": { - "vector": [-15.0298, 1.1797, -43.4554] - }, - "lerp_mode": "catmullrom" - }, - "2.9167": { - "post": { - "vector": [-25.0746, 0.9139, -76.0322] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [-15.0298, 1.1797, -43.4554] - }, - "lerp_mode": "catmullrom" - }, - "3.0833": { - "post": { - "vector": [-25.0746, 0.9139, -76.0322] - }, - "lerp_mode": "catmullrom" - }, - "3.1667": { - "post": { - "vector": [-15.0298, 1.1797, -43.4554] - }, - "lerp_mode": "catmullrom" - }, - "3.25": { - "post": { - "vector": [-25.0746, 0.9139, -76.0322] - }, - "lerp_mode": "catmullrom" - }, - "3.3333": { - "post": { - "vector": [-15.0298, 1.1797, -43.4554] - }, - "lerp_mode": "catmullrom" - }, - "3.4167": { - "post": { - "vector": [-25.0746, 0.9139, -76.0322] - }, - "lerp_mode": "catmullrom" - }, - "3.5": { - "post": { - "vector": [-15.0298, 1.1797, -43.4554] - }, - "lerp_mode": "catmullrom" - }, - "3.5833": { - "post": { - "vector": [-25.0746, 0.9139, -76.0322] - }, - "lerp_mode": "catmullrom" - }, - "3.6667": { - "post": { - "vector": [-15.0298, 1.1797, -43.4554] - }, - "lerp_mode": "catmullrom" - }, - "3.75": { - "post": { - "vector": [-25.0746, 0.9139, -76.0322] - }, - "lerp_mode": "catmullrom" - }, - "3.8333": { - "post": { - "vector": [-15.0298, 1.1797, -43.4554] - }, - "lerp_mode": "catmullrom" - }, - "3.9167": { - "post": { - "vector": [-25.0746, 0.9139, -76.0322] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [-15.0298, 1.1797, -43.4554] - }, - "lerp_mode": "catmullrom" - }, - "4.0833": { - "post": { - "vector": [-25.0746, 0.9139, -76.0322] - }, - "lerp_mode": "catmullrom" - }, - "4.1667": { - "post": { - "vector": [-15.0298, 1.1797, -43.4554] - }, - "lerp_mode": "catmullrom" - }, - "4.25": { - "post": { - "vector": [-25.0746, 0.9139, -76.0322] - }, - "lerp_mode": "catmullrom" - }, - "4.3333": { - "post": { - "vector": [-15.0298, 1.1797, -43.4554] - }, - "lerp_mode": "catmullrom" - }, - "4.4167": { - "post": { - "vector": [-25.0746, 0.9139, -76.0322] - }, - "lerp_mode": "catmullrom" - }, - "4.5": { - "post": { - "vector": [-15.0298, 1.1797, -43.4554] - }, - "lerp_mode": "catmullrom" - }, - "4.5833": { - "post": { - "vector": [-25.0746, 0.9139, -76.0322] - }, - "lerp_mode": "catmullrom" - }, - "4.6667": { - "post": { - "vector": [-15.0298, 1.1797, -43.4554] - }, - "lerp_mode": "catmullrom" - }, - "4.75": { - "post": { - "vector": [-25.0746, 0.9139, -76.0322] - }, - "lerp_mode": "catmullrom" - }, - "4.8333": { - "post": { - "vector": [-15.0298, 1.1797, -43.4554] - }, - "lerp_mode": "catmullrom" - }, - "4.9167": { - "post": { - "vector": [-25.0746, 0.9139, -76.0322] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [-15.0298, 1.1797, -43.4554] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightWing1": { - "rotation": { - "0.0": { - "post": { - "vector": [-15.0298, -1.1797, 43.4554] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [-25.0746, -0.9139, 76.0322] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-15.0298, -1.1797, 43.4554] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-25.0746, -0.9139, 76.0322] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [-15.0298, -1.1797, 43.4554] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-25.0746, -0.9139, 76.0322] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-15.0298, -1.1797, 43.4554] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [-25.0746, -0.9139, 76.0322] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-15.0298, -1.1797, 43.4554] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-25.0746, -0.9139, 76.0322] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-15.0298, -1.1797, 43.4554] - }, - "lerp_mode": "catmullrom" - }, - "0.9167": { - "post": { - "vector": [-25.0746, -0.9139, 76.0322] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-15.0298, -1.1797, 43.4554] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [-25.0746, -0.9139, 76.0322] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [-15.0298, -1.1797, 43.4554] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [-25.0746, -0.9139, 76.0322] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [-15.0298, -1.1797, 43.4554] - }, - "lerp_mode": "catmullrom" - }, - "1.4167": { - "post": { - "vector": [-25.0746, -0.9139, 76.0322] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-15.0298, -1.1797, 43.4554] - }, - "lerp_mode": "catmullrom" - }, - "1.5833": { - "post": { - "vector": [-25.0746, -0.9139, 76.0322] - }, - "lerp_mode": "catmullrom" - }, - "1.6667": { - "post": { - "vector": [-15.0298, -1.1797, 43.4554] - }, - "lerp_mode": "catmullrom" - }, - "1.75": { - "post": { - "vector": [-25.0746, -0.9139, 76.0322] - }, - "lerp_mode": "catmullrom" - }, - "1.8333": { - "post": { - "vector": [-15.0298, -1.1797, 43.4554] - }, - "lerp_mode": "catmullrom" - }, - "1.9167": { - "post": { - "vector": [-25.0746, -0.9139, 76.0322] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-15.0298, -1.1797, 43.4554] - }, - "lerp_mode": "catmullrom" - }, - "2.0833": { - "post": { - "vector": [-25.0746, -0.9139, 76.0322] - }, - "lerp_mode": "catmullrom" - }, - "2.1667": { - "post": { - "vector": [-15.0298, -1.1797, 43.4554] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [-25.0746, -0.9139, 76.0322] - }, - "lerp_mode": "catmullrom" - }, - "2.3333": { - "post": { - "vector": [-15.0298, -1.1797, 43.4554] - }, - "lerp_mode": "catmullrom" - }, - "2.4167": { - "post": { - "vector": [-25.0746, -0.9139, 76.0322] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-15.0298, -1.1797, 43.4554] - }, - "lerp_mode": "catmullrom" - }, - "2.5833": { - "post": { - "vector": [-25.0746, -0.9139, 76.0322] - }, - "lerp_mode": "catmullrom" - }, - "2.6667": { - "post": { - "vector": [-15.0298, -1.1797, 43.4554] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [-25.0746, -0.9139, 76.0322] - }, - "lerp_mode": "catmullrom" - }, - "2.8333": { - "post": { - "vector": [-15.0298, -1.1797, 43.4554] - }, - "lerp_mode": "catmullrom" - }, - "2.9167": { - "post": { - "vector": [-25.0746, -0.9139, 76.0322] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [-15.0298, -1.1797, 43.4554] - }, - "lerp_mode": "catmullrom" - }, - "3.0833": { - "post": { - "vector": [-25.0746, -0.9139, 76.0322] - }, - "lerp_mode": "catmullrom" - }, - "3.1667": { - "post": { - "vector": [-15.0298, -1.1797, 43.4554] - }, - "lerp_mode": "catmullrom" - }, - "3.25": { - "post": { - "vector": [-25.0746, -0.9139, 76.0322] - }, - "lerp_mode": "catmullrom" - }, - "3.3333": { - "post": { - "vector": [-15.0298, -1.1797, 43.4554] - }, - "lerp_mode": "catmullrom" - }, - "3.4167": { - "post": { - "vector": [-25.0746, -0.9139, 76.0322] - }, - "lerp_mode": "catmullrom" - }, - "3.5": { - "post": { - "vector": [-15.0298, -1.1797, 43.4554] - }, - "lerp_mode": "catmullrom" - }, - "3.5833": { - "post": { - "vector": [-25.0746, -0.9139, 76.0322] - }, - "lerp_mode": "catmullrom" - }, - "3.6667": { - "post": { - "vector": [-15.0298, -1.1797, 43.4554] - }, - "lerp_mode": "catmullrom" - }, - "3.75": { - "post": { - "vector": [-25.0746, -0.9139, 76.0322] - }, - "lerp_mode": "catmullrom" - }, - "3.8333": { - "post": { - "vector": [-15.0298, -1.1797, 43.4554] - }, - "lerp_mode": "catmullrom" - }, - "3.9167": { - "post": { - "vector": [-25.0746, -0.9139, 76.0322] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [-15.0298, -1.1797, 43.4554] - }, - "lerp_mode": "catmullrom" - }, - "4.0833": { - "post": { - "vector": [-25.0746, -0.9139, 76.0322] - }, - "lerp_mode": "catmullrom" - }, - "4.1667": { - "post": { - "vector": [-15.0298, -1.1797, 43.4554] - }, - "lerp_mode": "catmullrom" - }, - "4.25": { - "post": { - "vector": [-25.0746, -0.9139, 76.0322] - }, - "lerp_mode": "catmullrom" - }, - "4.3333": { - "post": { - "vector": [-15.0298, -1.1797, 43.4554] - }, - "lerp_mode": "catmullrom" - }, - "4.4167": { - "post": { - "vector": [-25.0746, -0.9139, 76.0322] - }, - "lerp_mode": "catmullrom" - }, - "4.5": { - "post": { - "vector": [-15.0298, -1.1797, 43.4554] - }, - "lerp_mode": "catmullrom" - }, - "4.5833": { - "post": { - "vector": [-25.0746, -0.9139, 76.0322] - }, - "lerp_mode": "catmullrom" - }, - "4.6667": { - "post": { - "vector": [-15.0298, -1.1797, 43.4554] - }, - "lerp_mode": "catmullrom" - }, - "4.75": { - "post": { - "vector": [-25.0746, -0.9139, 76.0322] - }, - "lerp_mode": "catmullrom" - }, - "4.8333": { - "post": { - "vector": [-15.0298, -1.1797, 43.4554] - }, - "lerp_mode": "catmullrom" - }, - "4.9167": { - "post": { - "vector": [-25.0746, -0.9139, 76.0322] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [-15.0298, -1.1797, 43.4554] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftWing2": { - "rotation": { - "0.0": { - "post": { - "vector": [-25.1727, 5.6479, -39.0075] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [-37.0054, 5.8091, -78.4915] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-25.1727, 5.6479, -39.0075] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-37.0054, 5.8091, -78.4915] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [-25.1727, 5.6479, -39.0075] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-37.0054, 5.8091, -78.4915] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-25.1727, 5.6479, -39.0075] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [-37.0054, 5.8091, -78.4915] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-25.1727, 5.6479, -39.0075] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-37.0054, 5.8091, -78.4915] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-25.1727, 5.6479, -39.0075] - }, - "lerp_mode": "catmullrom" - }, - "0.9167": { - "post": { - "vector": [-37.0054, 5.8091, -78.4915] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-25.1727, 5.6479, -39.0075] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [-37.0054, 5.8091, -78.4915] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [-25.1727, 5.6479, -39.0075] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [-37.0054, 5.8091, -78.4915] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [-25.1727, 5.6479, -39.0075] - }, - "lerp_mode": "catmullrom" - }, - "1.4167": { - "post": { - "vector": [-37.0054, 5.8091, -78.4915] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-25.1727, 5.6479, -39.0075] - }, - "lerp_mode": "catmullrom" - }, - "1.5833": { - "post": { - "vector": [-37.0054, 5.8091, -78.4915] - }, - "lerp_mode": "catmullrom" - }, - "1.6667": { - "post": { - "vector": [-25.1727, 5.6479, -39.0075] - }, - "lerp_mode": "catmullrom" - }, - "1.75": { - "post": { - "vector": [-37.0054, 5.8091, -78.4915] - }, - "lerp_mode": "catmullrom" - }, - "1.8333": { - "post": { - "vector": [-25.1727, 5.6479, -39.0075] - }, - "lerp_mode": "catmullrom" - }, - "1.9167": { - "post": { - "vector": [-37.0054, 5.8091, -78.4915] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-25.1727, 5.6479, -39.0075] - }, - "lerp_mode": "catmullrom" - }, - "2.0833": { - "post": { - "vector": [-37.0054, 5.8091, -78.4915] - }, - "lerp_mode": "catmullrom" - }, - "2.1667": { - "post": { - "vector": [-25.1727, 5.6479, -39.0075] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [-37.0054, 5.8091, -78.4915] - }, - "lerp_mode": "catmullrom" - }, - "2.3333": { - "post": { - "vector": [-25.1727, 5.6479, -39.0075] - }, - "lerp_mode": "catmullrom" - }, - "2.4167": { - "post": { - "vector": [-37.0054, 5.8091, -78.4915] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-25.1727, 5.6479, -39.0075] - }, - "lerp_mode": "catmullrom" - }, - "2.5833": { - "post": { - "vector": [-37.0054, 5.8091, -78.4915] - }, - "lerp_mode": "catmullrom" - }, - "2.6667": { - "post": { - "vector": [-25.1727, 5.6479, -39.0075] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [-37.0054, 5.8091, -78.4915] - }, - "lerp_mode": "catmullrom" - }, - "2.8333": { - "post": { - "vector": [-25.1727, 5.6479, -39.0075] - }, - "lerp_mode": "catmullrom" - }, - "2.9167": { - "post": { - "vector": [-37.0054, 5.8091, -78.4915] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [-25.1727, 5.6479, -39.0075] - }, - "lerp_mode": "catmullrom" - }, - "3.0833": { - "post": { - "vector": [-37.0054, 5.8091, -78.4915] - }, - "lerp_mode": "catmullrom" - }, - "3.1667": { - "post": { - "vector": [-25.1727, 5.6479, -39.0075] - }, - "lerp_mode": "catmullrom" - }, - "3.25": { - "post": { - "vector": [-37.0054, 5.8091, -78.4915] - }, - "lerp_mode": "catmullrom" - }, - "3.3333": { - "post": { - "vector": [-25.1727, 5.6479, -39.0075] - }, - "lerp_mode": "catmullrom" - }, - "3.4167": { - "post": { - "vector": [-37.0054, 5.8091, -78.4915] - }, - "lerp_mode": "catmullrom" - }, - "3.5": { - "post": { - "vector": [-25.1727, 5.6479, -39.0075] - }, - "lerp_mode": "catmullrom" - }, - "3.5833": { - "post": { - "vector": [-37.0054, 5.8091, -78.4915] - }, - "lerp_mode": "catmullrom" - }, - "3.6667": { - "post": { - "vector": [-25.1727, 5.6479, -39.0075] - }, - "lerp_mode": "catmullrom" - }, - "3.75": { - "post": { - "vector": [-37.0054, 5.8091, -78.4915] - }, - "lerp_mode": "catmullrom" - }, - "3.8333": { - "post": { - "vector": [-25.1727, 5.6479, -39.0075] - }, - "lerp_mode": "catmullrom" - }, - "3.9167": { - "post": { - "vector": [-37.0054, 5.8091, -78.4915] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [-25.1727, 5.6479, -39.0075] - }, - "lerp_mode": "catmullrom" - }, - "4.0833": { - "post": { - "vector": [-37.0054, 5.8091, -78.4915] - }, - "lerp_mode": "catmullrom" - }, - "4.1667": { - "post": { - "vector": [-25.1727, 5.6479, -39.0075] - }, - "lerp_mode": "catmullrom" - }, - "4.25": { - "post": { - "vector": [-37.0054, 5.8091, -78.4915] - }, - "lerp_mode": "catmullrom" - }, - "4.3333": { - "post": { - "vector": [-25.1727, 5.6479, -39.0075] - }, - "lerp_mode": "catmullrom" - }, - "4.4167": { - "post": { - "vector": [-37.0054, 5.8091, -78.4915] - }, - "lerp_mode": "catmullrom" - }, - "4.5": { - "post": { - "vector": [-25.1727, 5.6479, -39.0075] - }, - "lerp_mode": "catmullrom" - }, - "4.5833": { - "post": { - "vector": [-37.0054, 5.8091, -78.4915] - }, - "lerp_mode": "catmullrom" - }, - "4.6667": { - "post": { - "vector": [-25.1727, 5.6479, -39.0075] - }, - "lerp_mode": "catmullrom" - }, - "4.75": { - "post": { - "vector": [-37.0054, 5.8091, -78.4915] - }, - "lerp_mode": "catmullrom" - }, - "4.8333": { - "post": { - "vector": [-25.1727, 5.6479, -39.0075] - }, - "lerp_mode": "catmullrom" - }, - "4.9167": { - "post": { - "vector": [-37.0054, 5.8091, -78.4915] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [-25.1727, 5.6479, -39.0075] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightWing2": { - "rotation": { - "0.0": { - "post": { - "vector": [-25.1727, -5.6479, 39.0075] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [-37.0054, -5.8091, 78.4915] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-25.1727, -5.6479, 39.0075] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-37.0054, -5.8091, 78.4915] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [-25.1727, -5.6479, 39.0075] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-37.0054, -5.8091, 78.4915] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-25.1727, -5.6479, 39.0075] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [-37.0054, -5.8091, 78.4915] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-25.1727, -5.6479, 39.0075] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-37.0054, -5.8091, 78.4915] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-25.1727, -5.6479, 39.0075] - }, - "lerp_mode": "catmullrom" - }, - "0.9167": { - "post": { - "vector": [-37.0054, -5.8091, 78.4915] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-25.1727, -5.6479, 39.0075] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [-37.0054, -5.8091, 78.4915] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [-25.1727, -5.6479, 39.0075] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [-37.0054, -5.8091, 78.4915] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [-25.1727, -5.6479, 39.0075] - }, - "lerp_mode": "catmullrom" - }, - "1.4167": { - "post": { - "vector": [-37.0054, -5.8091, 78.4915] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-25.1727, -5.6479, 39.0075] - }, - "lerp_mode": "catmullrom" - }, - "1.5833": { - "post": { - "vector": [-37.0054, -5.8091, 78.4915] - }, - "lerp_mode": "catmullrom" - }, - "1.6667": { - "post": { - "vector": [-25.1727, -5.6479, 39.0075] - }, - "lerp_mode": "catmullrom" - }, - "1.75": { - "post": { - "vector": [-37.0054, -5.8091, 78.4915] - }, - "lerp_mode": "catmullrom" - }, - "1.8333": { - "post": { - "vector": [-25.1727, -5.6479, 39.0075] - }, - "lerp_mode": "catmullrom" - }, - "1.9167": { - "post": { - "vector": [-37.0054, -5.8091, 78.4915] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-25.1727, -5.6479, 39.0075] - }, - "lerp_mode": "catmullrom" - }, - "2.0833": { - "post": { - "vector": [-37.0054, -5.8091, 78.4915] - }, - "lerp_mode": "catmullrom" - }, - "2.1667": { - "post": { - "vector": [-25.1727, -5.6479, 39.0075] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [-37.0054, -5.8091, 78.4915] - }, - "lerp_mode": "catmullrom" - }, - "2.3333": { - "post": { - "vector": [-25.1727, -5.6479, 39.0075] - }, - "lerp_mode": "catmullrom" - }, - "2.4167": { - "post": { - "vector": [-37.0054, -5.8091, 78.4915] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-25.1727, -5.6479, 39.0075] - }, - "lerp_mode": "catmullrom" - }, - "2.5833": { - "post": { - "vector": [-37.0054, -5.8091, 78.4915] - }, - "lerp_mode": "catmullrom" - }, - "2.6667": { - "post": { - "vector": [-25.1727, -5.6479, 39.0075] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [-37.0054, -5.8091, 78.4915] - }, - "lerp_mode": "catmullrom" - }, - "2.8333": { - "post": { - "vector": [-25.1727, -5.6479, 39.0075] - }, - "lerp_mode": "catmullrom" - }, - "2.9167": { - "post": { - "vector": [-37.0054, -5.8091, 78.4915] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [-25.1727, -5.6479, 39.0075] - }, - "lerp_mode": "catmullrom" - }, - "3.0833": { - "post": { - "vector": [-37.0054, -5.8091, 78.4915] - }, - "lerp_mode": "catmullrom" - }, - "3.1667": { - "post": { - "vector": [-25.1727, -5.6479, 39.0075] - }, - "lerp_mode": "catmullrom" - }, - "3.25": { - "post": { - "vector": [-37.0054, -5.8091, 78.4915] - }, - "lerp_mode": "catmullrom" - }, - "3.3333": { - "post": { - "vector": [-25.1727, -5.6479, 39.0075] - }, - "lerp_mode": "catmullrom" - }, - "3.4167": { - "post": { - "vector": [-37.0054, -5.8091, 78.4915] - }, - "lerp_mode": "catmullrom" - }, - "3.5": { - "post": { - "vector": [-25.1727, -5.6479, 39.0075] - }, - "lerp_mode": "catmullrom" - }, - "3.5833": { - "post": { - "vector": [-37.0054, -5.8091, 78.4915] - }, - "lerp_mode": "catmullrom" - }, - "3.6667": { - "post": { - "vector": [-25.1727, -5.6479, 39.0075] - }, - "lerp_mode": "catmullrom" - }, - "3.75": { - "post": { - "vector": [-37.0054, -5.8091, 78.4915] - }, - "lerp_mode": "catmullrom" - }, - "3.8333": { - "post": { - "vector": [-25.1727, -5.6479, 39.0075] - }, - "lerp_mode": "catmullrom" - }, - "3.9167": { - "post": { - "vector": [-37.0054, -5.8091, 78.4915] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [-25.1727, -5.6479, 39.0075] - }, - "lerp_mode": "catmullrom" - }, - "4.0833": { - "post": { - "vector": [-37.0054, -5.8091, 78.4915] - }, - "lerp_mode": "catmullrom" - }, - "4.1667": { - "post": { - "vector": [-25.1727, -5.6479, 39.0075] - }, - "lerp_mode": "catmullrom" - }, - "4.25": { - "post": { - "vector": [-37.0054, -5.8091, 78.4915] - }, - "lerp_mode": "catmullrom" - }, - "4.3333": { - "post": { - "vector": [-25.1727, -5.6479, 39.0075] - }, - "lerp_mode": "catmullrom" - }, - "4.4167": { - "post": { - "vector": [-37.0054, -5.8091, 78.4915] - }, - "lerp_mode": "catmullrom" - }, - "4.5": { - "post": { - "vector": [-25.1727, -5.6479, 39.0075] - }, - "lerp_mode": "catmullrom" - }, - "4.5833": { - "post": { - "vector": [-37.0054, -5.8091, 78.4915] - }, - "lerp_mode": "catmullrom" - }, - "4.6667": { - "post": { - "vector": [-25.1727, -5.6479, 39.0075] - }, - "lerp_mode": "catmullrom" - }, - "4.75": { - "post": { - "vector": [-37.0054, -5.8091, 78.4915] - }, - "lerp_mode": "catmullrom" - }, - "4.8333": { - "post": { - "vector": [-25.1727, -5.6479, 39.0075] - }, - "lerp_mode": "catmullrom" - }, - "4.9167": { - "post": { - "vector": [-37.0054, -5.8091, 78.4915] - }, - "lerp_mode": "catmullrom" - }, - "5.0": { - "post": { - "vector": [-25.1727, -5.6479, 39.0075] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "attackair": { - "loop": true, - "animation_length": 1, - "bones": { - "upperRightJaw": { - "rotation": { - "0.0": { - "post": { - "vector": [-10, 10, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-15, 15, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "vector": [0, 0, 0] - }, - "0.5": { - "vector": [0, 0, 0] - }, - "1.0": { - "pre": { - "vector": [-10, 10, 0] - }, - "post": { - "vector": [-10, 10, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightfrontleg": { - "rotation": { - "0.0": { - "post": { - "vector": [28.9762, -9.77, -61.5239] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [29.3284, -8.552, -63.7354] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [28.9762, -9.77, -61.5239] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightfrontknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -65] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, -10.39] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -90] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -67.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -65] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightfrontfoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, -44.61] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 45] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 25] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "root": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1875": { - "post": { - "vector": [12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-15, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6875": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 4, 3] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, -2, -2] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 3, -6] - }, - "lerp_mode": "catmullrom" - }, - "0.6875": { - "post": { - "vector": [0, 5, -3] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "body": { - "rotation": { - "0.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [12.14, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -1] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -1] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tailbase": { - "rotation": { - "0.0": { - "post": { - "vector": [-12.6866, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [-22.6866, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-12.6866, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tailmiddle": { - "rotation": { - "0.0": { - "post": { - "vector": [-15.9153, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [-30.9153, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-15.9153, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tailtip": { - "rotation": { - "0.0": { - "post": { - "vector": [-18.5482, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [-36.0482, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-18.5482, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftfrontleg": { - "rotation": { - "0.0": { - "post": { - "vector": [28.9762, 9.77, 61.5239] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [29.3284, 8.552, 63.7354] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [28.9762, 9.77, 61.5239] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftfrontknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 65] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 10.39] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 90] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 67.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 65] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftfrontfoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 44.61] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -45] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -25] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightbackleg": { - "rotation": { - "0.0": { - "post": { - "vector": [-28.9762, 9.77, -61.5239] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-29.3284, 8.552, -63.7354] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-28.9762, 9.77, -61.5239] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightbackknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -65] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, -10.39] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -90] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -67.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -65] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightbackfoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, -44.61] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 45] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 25] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftbackleg": { - "rotation": { - "0.0": { - "post": { - "vector": [-28.9762, -9.77, 61.5239] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-29.3284, -8.552, 63.7354] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-28.9762, -9.77, 61.5239] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftbackknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 65] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 10.39] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 90] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 67.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 65] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftbackfoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 44.61] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -45] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -25] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "lowerRightJaw": { - "rotation": { - "0.0": { - "post": { - "vector": [10, 10, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [15, 15, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "vector": [0, 0, 0] - }, - "0.5": { - "vector": [0, 0, 0] - }, - "1.0": { - "pre": { - "vector": [10, 10, 0] - }, - "post": { - "vector": [10, 10, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "upperLeftJaw": { - "rotation": { - "0.0": { - "post": { - "vector": [-10, -10, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-15, -15, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "vector": [0, 0, 0] - }, - "0.5": { - "vector": [0, 0, 0] - }, - "1.0": { - "pre": { - "vector": [-10, -10, 0] - }, - "post": { - "vector": [-10, -10, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "lowerLeftJaw": { - "rotation": { - "0.0": { - "post": { - "vector": [10, -10, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [15, -15, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "vector": [0, 0, 0] - }, - "0.5": { - "vector": [0, 0, 0] - }, - "1.0": { - "pre": { - "vector": [10, -10, 0] - }, - "post": { - "vector": [10, -10, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftmiddleleg": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 55] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 57.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 55] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftmiddleknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 65] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 10.39] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 90] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 67.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 65] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftmiddlefoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 44.61] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -45] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -25] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightmiddleleg": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -55] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -57.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -55] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightmiddleknee": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -65] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, -10.39] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -90] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -67.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -65] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightmiddlefoot": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, -44.61] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 45] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 25] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftWing1": { - "rotation": { - "0.0": { - "post": { - "vector": [-15.0298, 1.1797, -43.4554] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [-25.0746, 0.9139, -76.0322] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-15.0298, 1.1797, -43.4554] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-25.0746, 0.9139, -76.0322] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [-15.0298, 1.1797, -43.4554] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-25.0746, 0.9139, -76.0322] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-15.0298, 1.1797, -43.4554] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [-25.0746, 0.9139, -76.0322] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-15.0298, 1.1797, -43.4554] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-25.0746, 0.9139, -76.0322] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-15.0298, 1.1797, -43.4554] - }, - "lerp_mode": "catmullrom" - }, - "0.9167": { - "post": { - "vector": [-25.0746, 0.9139, -76.0322] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-15.0298, 1.1797, -43.4554] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightWing1": { - "rotation": { - "0.0": { - "post": { - "vector": [-15.0298, -1.1797, 43.4554] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [-25.0746, -0.9139, 76.0322] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-15.0298, -1.1797, 43.4554] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-25.0746, -0.9139, 76.0322] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [-15.0298, -1.1797, 43.4554] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-25.0746, -0.9139, 76.0322] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-15.0298, -1.1797, 43.4554] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [-25.0746, -0.9139, 76.0322] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-15.0298, -1.1797, 43.4554] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-25.0746, -0.9139, 76.0322] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-15.0298, -1.1797, 43.4554] - }, - "lerp_mode": "catmullrom" - }, - "0.9167": { - "post": { - "vector": [-25.0746, -0.9139, 76.0322] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-15.0298, -1.1797, 43.4554] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leftWing2": { - "rotation": { - "0.0": { - "post": { - "vector": [-25.1727, 5.6479, -39.0075] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [-37.0054, 5.8091, -78.4915] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-25.1727, 5.6479, -39.0075] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-37.0054, 5.8091, -78.4915] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [-25.1727, 5.6479, -39.0075] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-37.0054, 5.8091, -78.4915] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-25.1727, 5.6479, -39.0075] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [-37.0054, 5.8091, -78.4915] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-25.1727, 5.6479, -39.0075] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-37.0054, 5.8091, -78.4915] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-25.1727, 5.6479, -39.0075] - }, - "lerp_mode": "catmullrom" - }, - "0.9167": { - "post": { - "vector": [-37.0054, 5.8091, -78.4915] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-25.1727, 5.6479, -39.0075] - }, - "lerp_mode": "catmullrom" - } - } - }, - "rightWing2": { - "rotation": { - "0.0": { - "post": { - "vector": [-25.1727, -5.6479, 39.0075] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [-37.0054, -5.8091, 78.4915] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-25.1727, -5.6479, 39.0075] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-37.0054, -5.8091, 78.4915] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [-25.1727, -5.6479, 39.0075] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-37.0054, -5.8091, 78.4915] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-25.1727, -5.6479, 39.0075] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [-37.0054, -5.8091, 78.4915] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-25.1727, -5.6479, 39.0075] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-37.0054, -5.8091, 78.4915] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-25.1727, -5.6479, 39.0075] - }, - "lerp_mode": "catmullrom" - }, - "0.9167": { - "post": { - "vector": [-37.0054, -5.8091, 78.4915] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-25.1727, -5.6479, 39.0075] - }, - "lerp_mode": "catmullrom" - } - } - } - } - } - } -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/nightmare.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/nightmare.animation.json index 13782188..62ca5d85 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/animations/nightmare.animation.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/nightmare.animation.json @@ -528,6 +528,568 @@ "lerp_mode": "catmullrom" } } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + }, + "position": { + "vector": [0, -13, 0] + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + }, + "position": { + "vector": [0, -20, 0] + } + } + } + }, + "idle_P2": { + "loop": true, + "animation_length": 4, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-17, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [-13, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-15.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 6] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -3, 6] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 1, 6] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, -1, 6] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, -17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-32.5, -17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-17.5, -17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-20, -17.5, -5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-0.5, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_foot": { + "rotation": { + "vector": [-20, 0, 5] + } + }, + "Tail": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, -15, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [7.5, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [7.5, -15, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, -4.69, 1.87] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-7.5, -12.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [-7.5, 12.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-7.5, -4.69, 1.87] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, -0.83, 0.42] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [7.5, -10, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.9167": { + "post": { + "vector": [7.5, 10, -5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [7.5, -0.83, 0.42] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-32.5, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-17.5, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0.5, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_foot": { + "rotation": { + "vector": [-20, 0, -5] + } + }, + "L_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [12.5, 30, -5] + }, + "lerp_mode": "catmullrom" + }, + "3.25": { + "post": { + "vector": [12.5, 10, -5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, -42.5, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-17.5, -17.5, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [12.5, -30, 5] + }, + "lerp_mode": "catmullrom" + }, + "3.25": { + "post": { + "vector": [12.5, -10, 5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, 42.5, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-17.5, 17.5, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, -0.75, 1.75] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [0, 0, -0.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + } } } }, @@ -1358,6 +1920,868 @@ "lerp_mode": "catmullrom" } } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + }, + "position": { + "vector": [0, -13, 0] + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + }, + "position": { + "vector": [0, -20, 0] + } + } + } + }, + "walk_P2": { + "loop": true, + "animation_length": 2, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [15, 2.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [15, -2.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [15, -2.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [15, 2.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [15, 2.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "pre": { + "vector": [0, 7.5, 0] + }, + "post": { + "vector": [0, 7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-5, 3.87, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [8.73, -0.63, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 0, 0] + }, + "1.375": { + "pre": { + "vector": [0, -7.5, 0] + }, + "post": { + "vector": [0, -7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [-5, -3.87, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [8.73, 0.63, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 0, 0] + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "vector": [-2.5, 0, 0] + }, + "0.125": { + "pre": { + "vector": [0.68, -2.5, 0] + }, + "post": { + "vector": [0.68, -2.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-0.99, -4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-2.44, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [2.5, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-4.79, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "vector": [-2.5, 0, 0] + }, + "1.125": { + "pre": { + "vector": [0.68, 2.5, 0] + }, + "post": { + "vector": [0.68, 2.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-0.99, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [-2.44, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [2.5, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [-4.79, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 2, 5] + }, + "0.0833": { + "vector": [0, -1, 4.5] + }, + "0.1667": { + "vector": [0, 4, 4.25] + }, + "0.25": { + "vector": [0, 1, 4.75] + }, + "0.375": { + "vector": [0, 2, 6.5] + }, + "0.5417": { + "pre": { + "vector": [0, 3.83, 9] + }, + "post": { + "vector": [0, 3.83, 9] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 7, 9] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 7, 7] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 2, 5] + }, + "1.0833": { + "vector": [0, -1, 4.5] + }, + "1.1667": { + "vector": [0, 4, 4.25] + }, + "1.25": { + "vector": [0, 1, 4.75] + }, + "1.375": { + "vector": [0, 2, 6.5] + }, + "1.5417": { + "pre": { + "vector": [0, 3.83, 9] + }, + "post": { + "vector": [0, 3.83, 9] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 7, 9] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [0, 7, 7] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 2, 5] + } + } + }, + "L_Tight": { + "rotation": { + "0.0": { + "vector": [20, -5, 0] + }, + "0.5": { + "pre": { + "vector": [15.94, -5, 0] + }, + "post": { + "vector": [15.94, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [-17.5, -5, 0] + }, + "2.0": { + "vector": [20, -5, 0] + } + }, + "position": { + "0.0": { + "vector": [0, -3.75, 5] + }, + "0.2917": { + "pre": { + "vector": [0, -1.73, 2.79] + }, + "post": { + "vector": [0, -1.73, 2.79] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 4.96, -5.58] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 4.96, -5.58] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, -0.25, -6] + }, + "1.0417": { + "vector": [0, -2.14, -5.54] + }, + "1.0833": { + "vector": [0, 0.96, -5.08] + }, + "1.1667": { + "vector": [0, -0.93, -4.12] + }, + "1.25": { + "vector": [0, -0.12, -3.25] + }, + "1.375": { + "vector": [0, 0.03, -1.87] + }, + "1.5": { + "vector": [0, -0.33, -0.5] + }, + "1.625": { + "vector": [0, -0.93, 0.88] + }, + "1.75": { + "vector": [0, -2.04, 2.25] + }, + "1.875": { + "vector": [0, -2.64, 3.63] + }, + "2.0": { + "vector": [0, -3.75, 5] + } + } + }, + "L_leg": { + "rotation": { + "0.0": { + "vector": [22.5, 0, 0] + }, + "0.5": { + "pre": { + "vector": [62.5, 0, 0] + }, + "post": { + "vector": [62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [7.5, 0, 0] + }, + "2.0": { + "vector": [22.5, 0, 0] + } + } + }, + "L_foot": { + "rotation": { + "0.0": { + "vector": [-42.5, 0, 0] + }, + "0.2917": { + "pre": { + "vector": [-37.19, 0, 0] + }, + "post": { + "vector": [-37.19, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-28.85, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-20.35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-20.35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [10, 0, 0] + }, + "2.0": { + "vector": [-42.5, 0, 0] + } + } + }, + "Tail": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -12.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -3.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -3.33, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Tight": { + "rotation": { + "0.0": { + "vector": [-17.5, 5, 0] + }, + "1.0": { + "vector": [20, 5, 0] + }, + "1.5": { + "pre": { + "vector": [15.94, 5, 0] + }, + "post": { + "vector": [15.94, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [-17.5, 5, 0] + } + }, + "position": { + "0.0": { + "vector": [0, -0.25, -6] + }, + "0.0417": { + "vector": [0, -2.14, -5.54] + }, + "0.0833": { + "vector": [0, 0.96, -5.08] + }, + "0.1667": { + "vector": [0, -0.93, -4.12] + }, + "0.25": { + "vector": [0, -0.12, -3.25] + }, + "0.375": { + "vector": [0, 0.03, -1.87] + }, + "0.5": { + "vector": [0, -0.33, -0.5] + }, + "0.625": { + "vector": [0, -0.93, 0.88] + }, + "0.75": { + "vector": [0, -2.04, 2.25] + }, + "0.875": { + "vector": [0, -2.64, 3.63] + }, + "1.0": { + "vector": [0, -3.75, 5] + }, + "1.2917": { + "pre": { + "vector": [0, -1.73, 2.79] + }, + "post": { + "vector": [0, -1.73, 2.79] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 4.96, -5.58] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [0, 4.96, -5.58] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, -0.25, -6] + } + } + }, + "R_leg": { + "rotation": { + "0.0": { + "vector": [7.5, 0, 0] + }, + "1.0": { + "vector": [22.5, 0, 0] + }, + "1.5": { + "pre": { + "vector": [62.5, 0, 0] + }, + "post": { + "vector": [62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [7.5, 0, 0] + } + } + }, + "R_foot": { + "rotation": { + "0.0": { + "vector": [10, 0, 0] + }, + "1.0": { + "vector": [-42.5, 0, 0] + }, + "1.2917": { + "pre": { + "vector": [-37.19, 0, 0] + }, + "post": { + "vector": [-37.19, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [-28.85, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [-20.35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [-20.35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [10, 0, 0] + } + } + }, + "L_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, 15, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, 30, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [10, 15, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [12.5, 5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-1.88, -21.88, 21.26] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, -20, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-5, -25, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -20, 21.67] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, -20, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [-5, -25, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-1.88, -21.88, 21.26] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, -30, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, -15, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, -5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [10, -15, -5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [12.5, -30, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 20, -21.67] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 20, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-5, 25, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 20, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [-5, 25, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 20, -21.67] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + } } } }, @@ -1527,7 +2951,7 @@ }, "0.7917": { "post": { - "vector": [27.5, 0, 0] + "vector": [-17.5, 0, 0] }, "lerp_mode": "catmullrom" }, @@ -1846,6 +3270,526 @@ "lerp_mode": "catmullrom" } } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + }, + "position": { + "vector": [0, -20, 0] + } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + }, + "position": { + "vector": [0, -13, 0] + } + } + } + }, + "fly_P2": { + "loop": true, + "animation_length": 1, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [10, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [9.31, -4.68, 2.04] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [20, -7.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-18.06, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-18.06, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "vector": [0, -1, -3] + } + }, + "L_leg": { + "rotation": { + "vector": [47.5, 0, 0] + } + }, + "L_foot": { + "rotation": { + "vector": [122.5, 0, 0] + } + }, + "Tail": { + "rotation": { + "0.0": { + "vector": [15, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [-30, 0, 0] + }, + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "vector": [-22.86, 0, 0] + }, + "0.7083": { + "pre": { + "vector": [27.5, 0, 0] + }, + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [15, 0, 0] + } + } + }, + "Tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [5.58, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "vector": [0, -1, -3] + } + }, + "R_leg": { + "rotation": { + "vector": [47.5, 0, 0] + } + }, + "R_foot": { + "rotation": { + "vector": [122.5, 0, 0] + } + }, + "L_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [-22.5, 20, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-30, 40, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [25, 27.5, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-22.5, 20, -40] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [22.5, -30, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -45, 40] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-2.67, -13.15, 55.66] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [-22.5, -20, 40] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-30, -40, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [25, -27.5, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 57.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-22.5, -20, 40] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [22.5, 30, 40] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 45, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-2.67, 13.15, -55.66] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [10, 0, 2.5] + }, + "post": { + "vector": [10, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [2.5, 5, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-7.5, 5, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 14, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 11.68, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, -7, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + } } } }, @@ -2438,6 +4382,630 @@ "lerp_mode": "catmullrom" } } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + }, + "position": { + "vector": [0, -13, 0] + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + }, + "position": { + "vector": [0, -20, 0] + } + } + } + }, + "attack_P2": { + "animation_length": 1, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [10.78, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-28, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-37.01, 0, 16.84] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "vector": [-33, 0, 15] + }, + "0.6667": { + "vector": [-5, 0, 0] + }, + "0.7083": { + "pre": { + "vector": [2.5, 0, 0] + }, + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-10.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 6] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, -17.5, -5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_foot": { + "rotation": { + "vector": [-20, 0, 5] + } + }, + "Tail": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [7.5, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [7.5, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [7.5, 7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-7.5, -4.26, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-7.5, -21.89, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-7.5, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-7.5, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [7.5, -6.9, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [7.5, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [7.5, -18.28, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [7.5, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-1.25, 17.5, 11.25] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-17.5, 17.5, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [2.25, 0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [3, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "vector": [0, -4, 0] + }, + "0.7083": { + "vector": [0, 0, 0] + }, + "0.7917": { + "vector": [0, -2, 0] + }, + "0.9167": { + "pre": { + "vector": [0, -1, 0] + }, + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_foot": { + "rotation": { + "vector": [-20, 0, -5] + } + }, + "L_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [12.5, 30, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [12.5, 7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [12.5, 13.88, -3.19] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, -10, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-12.66, -23.37, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [12.5, -30, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [12.5, -7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [12.5, -13.88, 3.19] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, 10, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-12.66, 23.37, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + } } } }, @@ -3197,6 +5765,797 @@ "lerp_mode": "catmullrom" } } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + }, + "position": { + "vector": [0, -13, 0] + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + }, + "position": { + "vector": [0, -20, 0] + } + } + } + }, + "attack2_P2": { + "animation_length": 1, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "vector": [0, -1, -3] + } + }, + "L_leg": { + "rotation": { + "0.0": { + "vector": [47.5, 0, 0] + }, + "0.2083": { + "pre": { + "vector": [45, 0, 0] + }, + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [26.56, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [47.5, 0, 0] + } + } + }, + "L_foot": { + "rotation": { + "0.0": { + "vector": [122.5, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [94.12, 0, 0] + }, + "post": { + "vector": [94.12, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [122.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail": { + "rotation": { + "0.0": { + "vector": [15, 0, 0] + }, + "0.125": { + "pre": { + "vector": [-27.5, 0, 0] + }, + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [15, 0, 0] + } + } + }, + "Tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "vector": [0, -1, -3] + } + }, + "R_leg": { + "rotation": { + "0.0": { + "vector": [47.5, 0, 0] + }, + "0.2083": { + "pre": { + "vector": [45, 0, 0] + }, + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [26.56, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [47.5, 0, 0] + } + } + }, + "R_foot": { + "rotation": { + "0.0": { + "vector": [122.5, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [94.12, 0, 0] + }, + "post": { + "vector": [94.12, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [122.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [-22.5, 20, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [40, 37.5, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-72.5, -22.5, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-72.5, -47.5, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-17.5, 35, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-17.5, 35, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-22.5, 20, -40] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, -60] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -50] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 23.75] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [-22.5, -20, 40] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [40, -37.5, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-72.5, 22.5, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-72.5, 47.5, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-17.5, -35, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-17.5, -35, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-22.5, -20, 40] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 60] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 50] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -23.75] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "pre": { + "vector": [-5, 0, 0] + }, + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 25, 14] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 17, 21] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, -5, -41] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 1.75, -23.95] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 4.44, -5.56] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + } } } }, @@ -3636,8 +6995,4945 @@ "lerp_mode": "catmullrom" } } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + }, + "position": { + "vector": [0, -13, 0] + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + }, + "position": { + "vector": [0, -20, 0] + } + } + } + }, + "roar_P2": { + "animation_length": 1.5, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-25.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [1.71, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [-11.46, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-15.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 6] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, -17.5, -5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_foot": { + "rotation": { + "vector": [-20, 0, 5] + } + }, + "Tail": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_foot": { + "rotation": { + "vector": [-20, 0, -5] + } + }, + "L_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [12.5, 37.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [12.5, -12.5, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [12.5, -17.5, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-12.5, -55, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [12.5, -37.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [12.5, 12.5, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [12.5, 17.5, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-12.5, 55, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [26.09, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + } + } + } + }, + "phase2": { + "animation_length": 4, + "bones": { + "head": { + "rotation": { + "0.0": { + "vector": [15, 0, 0] + }, + "0.125": { + "pre": { + "vector": [-7.5, 0, 0] + }, + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [15, 0, 0] + }, + "0.625": { + "pre": { + "vector": [-7.5, 0, 0] + }, + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [15, 0, 0] + }, + "1.125": { + "pre": { + "vector": [-7.5, 0, 0] + }, + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.1667": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.375": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.7083": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "vector": [15, 0, 0] + } + } + }, + "neck": { + "rotation": { + "0.0": { + "vector": [12.5, 0, 0] + }, + "0.0417": { + "vector": [17.59, 0, 0] + }, + "0.125": { + "pre": { + "vector": [-12.5, 0, 0] + }, + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-9.54, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [12.5, 0, 0] + }, + "0.5417": { + "vector": [17.59, 0, 0] + }, + "0.625": { + "pre": { + "vector": [-12.5, 0, 0] + }, + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-9.54, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [12.5, 0, 0] + }, + "1.0417": { + "vector": [17.59, 0, 0] + }, + "1.125": { + "pre": { + "vector": [-12.5, 0, 0] + }, + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [-9.54, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [5.69, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0417": { + "post": { + "vector": [-3.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0.08, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [12.53, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [-17.47, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.9583": { + "post": { + "vector": [-17.47, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.25": { + "post": { + "vector": [20.03, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.75": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "vector": [12.5, 0, 0] + } + } + }, + "torso": { + "rotation": { + "0.0": { + "vector": [-17.5, 0, 0] + }, + "0.0833": { + "pre": { + "vector": [-30, -2.5, 10] + }, + "post": { + "vector": [-30, -2.5, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [-17.5, 0, 7.5] + }, + "0.5833": { + "pre": { + "vector": [-30, -2.5, 10] + }, + "post": { + "vector": [-30, -2.5, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [-17.5, 0, 7.5] + }, + "1.0833": { + "pre": { + "vector": [-30, -2.5, 10] + }, + "post": { + "vector": [-30, -2.5, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [1.25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [-1.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [-12.81, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5417": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.9583": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.125": { + "post": { + "vector": [3.86, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.25": { + "post": { + "vector": [-8.24, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.4583": { + "post": { + "vector": [-15.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.6667": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "vector": [-17.5, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, -1, 6] + }, + "0.125": { + "pre": { + "vector": [0, 4, 6] + }, + "post": { + "vector": [0, 4, 6] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 4, 6] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, "-1+math.cos(q.anim_time*90*32)*2", 6] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, -1, 6] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [0, -1, 6] + }, + "0.625": { + "pre": { + "vector": [0, 4, 6] + }, + "post": { + "vector": [0, 4, 6] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 4, 6] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, "-1+math.cos(q.anim_time*90*32)*2", 6] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, -1, 6] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, -1, 6] + }, + "1.125": { + "pre": { + "vector": [0, 4, 6] + }, + "post": { + "vector": [0, 4, 6] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 4, 6] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [0, "-1+math.cos(q.anim_time*90*32)*2", 6] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [0, -3, 6] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, -1, 6] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [0, 1, 6] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 1, 6] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [0, 0, 6] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [0, 0, 6] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, -2, 6] + }, + "lerp_mode": "catmullrom" + }, + "2.8333": { + "post": { + "vector": [0, -2.5, 6] + }, + "lerp_mode": "catmullrom" + }, + "3.2083": { + "post": { + "vector": [0, -2.5, 6] + }, + "lerp_mode": "catmullrom" + }, + "3.5833": { + "post": { + "vector": [0, -1, 6] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "vector": [0, -1, 6] + } + } + }, + "L_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, -17.5, -5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_foot": { + "rotation": { + "vector": [-20, 0, 5] + } + }, + "Tail": { + "rotation": { + "vector": [-10, 0, 0] + } + }, + "Tail2": { + "rotation": { + "vector": [5, 0, 0] + } + }, + "Tail3": { + "rotation": { + "vector": [12.5, 0, 0] + } + }, + "R_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [-13.15, 13.8, 10.19] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-47.5, 5, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-47.5, 5, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-13.15, 13.8, 10.19] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-47.5, 5, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-47.5, 5, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [-13.15, 13.8, 10.19] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-47.5, 5, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [-47.5, 5, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "vector": [-10, 17.5, 5] + }, + "2.6667": { + "vector": [-20, 17.5, 5] + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [3, 4, -4] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [3, 7, -7] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-1, -1, -6] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-1, -1, -6] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [3, 4, -4] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [3, 7, -7] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-1, -1, -6] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-1, -1, -6] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [3, 4, -4] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [3, 7, -7] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-1, -1, -6] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-1, -1, -6] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-1, -1, -6] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [-1, -1, -6] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [-0.5, 4, -3] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "vector": [0, -1, 0] + } + } + }, + "R_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [80, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [40, 15, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [80, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [40, 15, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [80, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [40, 15, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_foot": { + "rotation": { + "0.0": { + "vector": [-20, 0, -5] + }, + "0.0417": { + "pre": { + "vector": [-42.5, 0, -5] + }, + "post": { + "vector": [-42.5, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-20, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [-20, 0, -5] + }, + "0.5": { + "vector": [-20, 0, -5] + }, + "0.5417": { + "pre": { + "vector": [-42.5, 0, -5] + }, + "post": { + "vector": [-42.5, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-20, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "vector": [-20, 0, -5] + }, + "1.0": { + "vector": [-20, 0, -5] + }, + "1.0417": { + "pre": { + "vector": [-42.5, 0, -5] + }, + "post": { + "vector": [-42.5, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-20, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "vector": [-20, 0, -5] + } + } + }, + "L_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [5, 7.5, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [10, 12.5, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [10, 12.5, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [5, 7.5, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [10, 12.5, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [10, 12.5, 20] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [5, 7.5, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [10, 12.5, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [17.5, 17.5, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [25, 32.5, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [25, 32.5, 25] + }, + "lerp_mode": "catmullrom" + }, + "2.3333": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [12.5, 17.5, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.7917": { + "post": { + "vector": [15, 35, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [17.5, 40, 15] + }, + "lerp_mode": "catmullrom" + }, + "3.125": { + "post": { + "vector": [17.5, 40, 15] + }, + "lerp_mode": "catmullrom" + }, + "3.5417": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [-30, -60, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-12.5, -20, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, -57.5, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-30, -60, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-12.5, -20, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, -57.5, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [-30, -60, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-12.5, -20, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, -57.5, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, -82.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [-2.5, -87.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [-2.5, -87.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [-10, -30, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.8333": { + "post": { + "vector": [0, -2.5, -15] + }, + "lerp_mode": "catmullrom" + }, + "3.125": { + "post": { + "vector": [0, -2.5, -15] + }, + "lerp_mode": "catmullrom" + }, + "3.5417": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [5, -7.5, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [10, -12.5, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [10, -12.5, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [5, -7.5, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [10, -12.5, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [10, -12.5, -20] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [5, -7.5, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [10, -12.5, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [17.5, -17.5, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [25, -32.5, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [25, -32.5, -25] + }, + "lerp_mode": "catmullrom" + }, + "2.3333": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [12.5, -17.5, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.7917": { + "post": { + "vector": [15, -35, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [17.5, -40, -15] + }, + "lerp_mode": "catmullrom" + }, + "3.125": { + "post": { + "vector": [17.5, -40, -15] + }, + "lerp_mode": "catmullrom" + }, + "3.5417": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [-30, 60, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-12.5, 20, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 57.5, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-30, 60, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-12.5, 20, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 57.5, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [-30, 60, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-12.5, 20, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 57.5, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 82.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [-2.5, 87.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [-2.5, 87.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [-10, 30, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.8333": { + "post": { + "vector": [0, 2.5, 15] + }, + "lerp_mode": "catmullrom" + }, + "3.125": { + "post": { + "vector": [0, 2.5, 15] + }, + "lerp_mode": "catmullrom" + }, + "3.5417": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [2.5, 0, 0] + }, + "0.2917": { + "pre": { + "vector": [10, 0, 0] + }, + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [5, 0, 0] + }, + "0.625": { + "vector": [5, 0, 0] + }, + "0.7917": { + "pre": { + "vector": [10, 0, 0] + }, + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [5, 0, 0] + }, + "1.125": { + "vector": [2.5, 0, 0] + }, + "1.2917": { + "pre": { + "vector": [10, 0, 0] + }, + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": ["13-math.cos(query.anim_time*90*16-50)*1.5", 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": ["13-math.cos(query.anim_time*90*16-50)*1.5", 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.125": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.8333": { + "vector": [2.5, 0, 0] + } + } + }, + "spike2": { + "rotation": { + "0.0": { + "vector": [22.5, 0, 0] + }, + "2.625": { + "vector": [22.5, 0, 0] + }, + "2.7083": { + "vector": [0, 0, 0] + }, + "2.7917": { + "pre": { + "vector": [22.5, 0, 0] + }, + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.9583": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, -13, 0] + }, + "2.6667": { + "vector": [0, -13, 0] + }, + "2.75": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "spike": { + "rotation": { + "0.0": { + "vector": [-22.5, 0, 0] + }, + "2.6667": { + "vector": [-22.5, 0, 0] + }, + "2.75": { + "vector": [0, 0, 0] + }, + "2.8333": { + "pre": { + "vector": [-22.5, 0, 0] + }, + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, -20, 0] + }, + "2.7083": { + "vector": [0, -20, 0] + }, + "2.7917": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.9583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "pose": { + "animation_length": 0.0417, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 6] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, -17.5, -5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_foot": { + "rotation": { + "vector": [-20, 0, 5] + } + }, + "Tail": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_foot": { + "rotation": { + "vector": [-20, 0, -5] + } + }, + "L_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "vector": [0, 0, 0] + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + }, + "position": { + "vector": [0, -13, 0] + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + }, + "position": { + "vector": [0, -20, 0] + } + } + } + }, + "portal_enter": { + "animation_length": 1.75, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-6.4, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-20.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-57.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-77.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [-55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 6] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, -17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [25, -17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [45, -17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [52.5, -7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [80.98, -6.9, 0.3] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-5, -7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [-32.5, -7.5, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, -6, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [40, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [40, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [57.5, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_foot": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [37.5, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [47.5, 0, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [14.25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [24.43, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [34.86, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [36.98, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [1.22, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [2.82, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [32.84, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [14.39, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [25, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [45, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [52.5, 7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [80.98, 6.9, -0.3] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-5, 7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [-32.5, 7.5, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, -6, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [40, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [40, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [57.5, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_foot": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [37.5, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [47.5, 0, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [55, -30, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [55, -30, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 42.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-17.5, -70, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, -22.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, -22.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [2.5, -87.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [55, 30, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [55, 30, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, -42.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-17.5, 70, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 22.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 22.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [2.5, 87.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-85, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-127.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-167.14, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-190, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-222.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [-255, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-327.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [-345, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [-345, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 16.59, -67.19] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 49, -88] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 95, -91] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 135, -65] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 153, -18] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 148, 17] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 129.74, 40.11] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 105, 54.44] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 77.49, 57.29] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [0, 39, 37] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [0, 25.59, -18.71] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 22, -63] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [0, 22, -63] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "1.3333": { + "vector": [1, 1, 1] + }, + "1.4583": { + "pre": { + "vector": [0.8, 0.8, 1.4] + }, + "post": { + "vector": [0.8, 0.8, 1.4] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + } + } + } + }, + "portal_out": { + "animation_length": 1.125, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 6] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [25, -17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [33.76, -17.98, -5.24] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-37.5, -17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-45, -17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [12.5, -17.5, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [5, -17.5, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-20, -17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-20, -17.5, -5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [13.32, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-2.57, 0.42, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_foot": { + "rotation": { + "0.0": { + "vector": [-20, 0, 5] + }, + "0.0417": { + "pre": { + "vector": [70, 0, 5] + }, + "post": { + "vector": [70, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [21.57, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-17.24, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [43.95, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [5.26, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-20, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-20, 0, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-36.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-39.69, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [33.76, 17.98, 5.24] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-37.5, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-45, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [12.5, 17.5, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [5, 17.5, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [57.5, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [13.32, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-2.57, -0.42, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_foot": { + "rotation": { + "0.0": { + "vector": [-20, 0, -5] + }, + "0.0417": { + "pre": { + "vector": [70, 0, -5] + }, + "post": { + "vector": [70, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [21.57, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-17.24, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [43.95, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [5.26, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-20, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-20, 0, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-32.5, 60, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-24.38, 41.8, 1.1] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, -12.5, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 20, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [2.5, -87.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [2.5, -45, -47.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [2.5, -2.5, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [2.5, -30, 62.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [2.5, 0, 62.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [3.75, -7.03, 29.22] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [2.5, -32.5, -45] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [5, -30, -20] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-32.5, -60, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-24.38, -41.8, -1.1] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 12.5, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -20, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [2.5, 87.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [2.5, 45, 47.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [2.5, 2.5, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [2.5, 30, -62.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [2.5, 0, -62.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [3.75, 7.03, -29.22] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [2.5, 32.5, 45] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [5, 30, 20] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [19.17, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [6.02, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 22, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 24, -107] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 47, -87] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 58, -68] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 63, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 64, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 44.06, -19.06] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, 5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0.75, 0.75, 1.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + } + } + } + }, + "death": { + "animation_length": 1, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [7.15656, 2.24944, -17.35932] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [22.01816, 4.75113, -11.57518] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "vector": [-90, 0, 0] + }, + "0.4167": { + "vector": [-65, 0, 0] + }, + "0.5417": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-27.5, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-27.5, -37.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-27.5, -37.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [55.06424, 30.58184, -17.91705] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [37.5, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [36.39498, -17.72091, -24.60981] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [53.55239, -54.46865, -30.64234] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-27.5, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-80, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-80, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [44.19476, -22.13991, 4.11405] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_foot": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [40, 0, 0] + }, + "0.4167": { + "vector": [40, 0, 0] + } + } + }, + "L_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.56152, 6.42053, -28.46504] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-2.56152, 6.42053, 16.53496] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -17.5, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [16.24074, -6.60796, -60.94387] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [2.14498, 17.78381, 79.71688] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-5.14352, -8.08642, 3.86612] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-6.15491, -16.41371, 35.88852] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [16.63598, -5.01987, 94.75926] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-2.83416, 4.94206, -18.16209] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.56152, -6.42053, 28.46504] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-2.56152, -6.42053, -16.53496] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 17.5, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [16.24074, 6.60796, 60.94387] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [2.14498, -17.78381, -79.71688] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-5.14352, 8.08642, -3.86612] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-6.15491, 16.41371, -35.88852] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [16.63598, 5.01987, -94.75926] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-2.83416, -4.94206, 18.16209] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [43.931, 4.14085, 0.75952] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Nightmare": { + "rotation": { + "vector": [0, 0, 0] + }, + "position": { + "0.0": { + "post": { + "vector": [0, -0.5, -6] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -0.5, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, -10.5, -21] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, -8.5, -21] + }, + "lerp_mode": "catmullrom" + } + } } } } } -} \ No newline at end of file +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/nightmare_portal.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/nightmare_portal.animation.json index 56931263..32eba673 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/animations/nightmare_portal.animation.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/nightmare_portal.animation.json @@ -69,55 +69,55 @@ "scale": { "0.0": { "post": { - "vector": [1, 1, 1] + "vector": [0.92, 0.92, 1] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [0.9, 0.9, 1] + "vector": [1.0, 1.0, 1] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [1, 1, 1] + "vector": [1.06, 1.06, 1] }, "lerp_mode": "catmullrom" }, "0.75": { "post": { - "vector": [0.9, 0.9, 1] + "vector": [1.0, 1.0, 1] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [1, 1, 1] + "vector": [0.92, 0.92, 1] }, "lerp_mode": "catmullrom" }, "1.25": { "post": { - "vector": [0.9, 0.9, 1] + "vector": [1.0, 1.0, 1] }, "lerp_mode": "catmullrom" }, "1.5": { "post": { - "vector": [1, 1, 1] + "vector": [1.06, 1.06, 1] }, "lerp_mode": "catmullrom" }, "1.75": { "post": { - "vector": [0.9, 0.9, 1] + "vector": [1.0, 1.0, 1] }, "lerp_mode": "catmullrom" }, "2.0": { "post": { - "vector": [1, 1, 1] + "vector": [0.92, 0.92, 1] }, "lerp_mode": "catmullrom" } @@ -407,7 +407,7 @@ } }, "close": { - "loop": true, + "loop": false, "animation_length": 2, "bones": { "Portal_Layer": { @@ -790,7 +790,7 @@ } }, "open": { - "loop": true, + "loop": false, "animation_length": 2, "bones": { "Portal_Layer": { @@ -1173,4 +1173,4 @@ } } } -} \ No newline at end of file +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/portal_gun_portal.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/portal_gun_portal.animation.json deleted file mode 100644 index 02c2cc9f..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/animations/portal_gun_portal.animation.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "format_version": "1.8.0", - "animations": { - "idle": { - "loop": true, - "animation_length": 4.0, - "bones": {} - }, - "open": { - "loop": false, - "animation_length": 0.5, - "bones": { - "Root": { - "scale": { - "0.0": {"vector": [0, 0, 0]}, - "0.35": {"vector": [1.15, 1.15, 1.15]}, - "0.5": {"vector": [1, 1, 1]} - } - } - } - }, - "close": { - "loop": false, - "animation_length": 0.4, - "bones": { - "Root": { - "scale": { - "0.0": {"vector": [1, 1, 1]}, - "0.4": {"vector": [0, 0, 0]} - } - } - } - } - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/prince.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/prince.animation.json index 24799b15..e1be90e5 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/animations/prince.animation.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/prince.animation.json @@ -3062,7 +3062,6 @@ } }, "bite": { - "loop": true, "animation_length": 0.5, "bones": { "torso": { @@ -4180,7 +4179,6 @@ } }, "fly_bite": { - "loop": true, "animation_length": 0.7917, "bones": { "neck": { @@ -4922,7 +4920,6 @@ } }, "fly_shoot": { - "loop": true, "animation_length": 0.7917, "bones": { "neck": { diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/princess.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/princess.animation.json index 1f4d2bb0..89f934bb 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/animations/princess.animation.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/princess.animation.json @@ -3344,7 +3344,6 @@ } }, "bite": { - "loop": true, "animation_length": 0.5, "bones": { "torso": { @@ -4538,7 +4537,6 @@ } }, "fly_bite": { - "loop": true, "animation_length": 0.7917, "bones": { "neck": { @@ -5280,7 +5278,6 @@ } }, "fly_shoot": { - "loop": true, "animation_length": 0.7917, "bones": { "neck": { diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/triffid.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/triffid.animation.json deleted file mode 100644 index 1f68650e..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/animations/triffid.animation.json +++ /dev/null @@ -1,2744 +0,0 @@ -{ - "format_version": "1.8.0", - "animations": { - "dormant": { - "loop": true, - "animation_length": 4, - "bones": { - "stemLower": { - "rotation": { - "0.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.9167": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "stemMiddle": { - "rotation": { - "0.0": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "stemUpper": { - "rotation": { - "0.0": { - "post": { - "vector": [-7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.2083": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [-7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "head": { - "rotation": { - "0.0": { - "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5417": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leafRight": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 40] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [0, 0, 55] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, 40] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tongueBase": { - "rotation": { - "0.0": { - "post": { - "vector": [-7.5, 0, 15] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [-7.5, 0, 15] - }, - "lerp_mode": "catmullrom" - } - }, - "scale": { - "0.0": { - "post": { - "vector": [1, 0, 1] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [1, 0, 1] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tongueMiddle": { - "rotation": { - "0.0": { - "post": { - "vector": [9.9161, 1.2988, -7.3873] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [9.9161, 1.2988, -7.3873] - }, - "lerp_mode": "catmullrom" - } - }, - "scale": { - "0.0": { - "post": { - "vector": [1, 0, 1] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [1, 0, 1] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tongueTip": { - "rotation": { - "0.0": { - "post": { - "vector": [14.7822, 2.576, -9.6658] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [14.7822, 2.576, -9.6658] - }, - "lerp_mode": "catmullrom" - } - }, - "scale": { - "0.0": { - "post": { - "vector": [1, 0, 1] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [1, 0, 1] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leafTipRight": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -72.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -72.5] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [0, 0, -92.5] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, -72.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leafLeft": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -40] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, -55] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, -40] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leafTipLeft": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 72.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 72.5] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [0, 0, 92.5] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, 72.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leafTipFront": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 67.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 67.5] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [0, 0, 77.5] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, 67.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leafFront": { - "rotation": { - "0.0": { - "post": { - "vector": [-90, -22.5, -90] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-90, -35, -90] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [-90, -22.5, -90] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leafBack": { - "rotation": { - "0.0": { - "post": { - "vector": [-90, 40, -90] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-90, 50, -90] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [-90, 40, -90] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leafTipBack": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -95] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -95] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [0, 0, -110] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, -95] - }, - "lerp_mode": "catmullrom" - } - } - }, - "saliva_L": { - "scale": { - "vector": [0, 0, 0] - } - }, - "saliva_L2": { - "scale": { - "vector": [0, 0, 0] - } - }, - "saliva_R": { - "scale": { - "vector": [0, 0, 0] - } - }, - "saliva_R2": { - "scale": { - "vector": [0, 0, 0] - } - } - } - }, - "idle": { - "loop": true, - "animation_length": 4, - "bones": { - "stemLower": { - "rotation": { - "0.0": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "stemMiddle": { - "rotation": { - "0.0": { - "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "stemUpper": { - "rotation": { - "0.0": { - "post": { - "vector": [35, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [45, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [35, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "head": { - "rotation": { - "0.0": { - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leafRight": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 40] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 55] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, 40] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tongueBase": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.8333": { - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tongueMiddle": { - "rotation": { - "0.0": { - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.1667": { - "post": { - "vector": [35, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tongueTip": { - "rotation": { - "0.0": { - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.1667": { - "post": { - "vector": [30, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "petal_L": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 45] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, 45] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leafTipRight": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -72.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -72.5] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [0, 0, -92.5] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, -72.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leafLeft": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -40] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, -55] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, -40] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leafTipLeft": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 72.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 72.5] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [0, 0, 92.5] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, 72.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leafTipFront": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 67.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 67.5] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [0, 0, 77.5] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, 67.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leafFront": { - "rotation": { - "0.0": { - "post": { - "vector": [-90, -22.5, -90] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-90, -35, -90] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [-90, -22.5, -90] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leafBack": { - "rotation": { - "0.0": { - "post": { - "vector": [-90, 40, -90] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-90, 50, -90] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [-90, 40, -90] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leafTipBack": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -95] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -95] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [0, 0, -110] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, -95] - }, - "lerp_mode": "catmullrom" - } - } - }, - "petal_R": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -45] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, -45] - }, - "lerp_mode": "catmullrom" - } - } - }, - "saliva_L": { - "scale": { - "0.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [1, 1, 1.8] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - } - } - }, - "saliva_L2": { - "scale": { - "0.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [1, 1, 1.6] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - } - } - }, - "saliva_R": { - "scale": { - "0.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [1, 1, 1.8] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "grab": { - "loop": true, - "animation_length": 1.125, - "bones": { - "base": { - "rotation": { - "0.0": { - "vector": [0, 0, 0] - }, - "0.3333": { - "vector": [-17.5, 0, 0] - }, - "0.5": { - "vector": [0, 0, 0] - }, - "0.5833": { - "vector": [-17.5, 0, 0] - }, - "0.625": { - "vector": [0, 0, 0] - }, - "1.125": { - "vector": [0, 0, 0] - } - } - }, - "stemLower": { - "rotation": { - "0.0": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-37.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-37.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [37.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "stemMiddle": { - "rotation": { - "0.0": { - "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [37.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [37.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [47.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [40, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "stemUpper": { - "rotation": { - "0.0": { - "post": { - "vector": [35, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "head": { - "rotation": { - "0.0": { - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "vector": [0, 0, 0] - }, - "0.8333": { - "vector": [0, 0, 0] - }, - "0.875": { - "vector": [0, 1.0822, 4.88148] - }, - "0.9167": { - "vector": [0, 0, 0] - } - } - }, - "leafRight": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 40] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 62.5] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [0, 0, 62.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [0, 0, -2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -2.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 20] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tongueBase": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-25, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-25, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "scale": { - "0.0": { - "vector": [1, 1, 1] - }, - "0.375": { - "vector": [1, 1, 1] - }, - "0.5": { - "vector": [1, 1.6, 1] - }, - "0.75": { - "vector": [1, 1.6, 1] - }, - "1.0": { - "pre": { - "vector": [1, 0.6, 1] - }, - "post": { - "vector": [1, 0.6, 1] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tongueMiddle": { - "rotation": { - "0.0": { - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "scale": { - "0.0": { - "vector": [1, 1, 1] - }, - "0.75": { - "pre": { - "vector": [1, 1.1813, 1] - }, - "post": { - "vector": [1, 1.1813, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [1, 0.6, 1] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tongueTip": { - "rotation": { - "0.0": { - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-35, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-35, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "scale": { - "0.0": { - "vector": [1, 1, 1] - }, - "0.75": { - "pre": { - "vector": [1, 1.0609, 1] - }, - "post": { - "vector": [1, 1.0609, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [1, 0.7, 1] - }, - "lerp_mode": "catmullrom" - } - } - }, - "petal_L": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 45] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 94.72] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 45] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [0, 0, 7.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0417": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leafTipRight": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -72.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -27.5] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [0, 0, -27.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [0, 0, 20] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 20] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -47.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leafLeft": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -40] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -62.5] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [0, 0, -62.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -20] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leafTipLeft": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 72.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 50] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [0, 0, 50] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [0, 0, -20] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -20] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 47.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leafTipFront": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 67.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 45] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [0, 0, 45] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 20] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 65] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leafFront": { - "rotation": { - "0.0": { - "post": { - "vector": [-90, -22.5, -90] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-90, -67.5, -90] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [-90, -67.5, -90] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [90, -27.5, 90] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [89.99996, -5, 89.99996] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-89.99999, -17.5, -89.99999] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leafBack": { - "rotation": { - "0.0": { - "post": { - "vector": [-90, 40, -90] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [-90.00001, 12.5, -89.99999] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-90.00001, 12.5, -89.99999] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-90, 35, -90] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leafTipBack": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -95] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -50] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [0, 0, -50] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [0, 0, 25] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 25] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -65] - }, - "lerp_mode": "catmullrom" - } - } - }, - "petal_R": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -45] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -94.72] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -45] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [0, 0, -7.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0417": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "saliva_L": { - "scale": { - "0.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - } - } - }, - "saliva_L2": { - "scale": { - "0.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - } - } - }, - "saliva_R": { - "scale": { - "0.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "death": { - "loop": true, - "animation_length": 1, - "bones": { - "stemLower": { - "rotation": { - "0.0": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [-25, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [-25, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [0, -65, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "scale": { - "0.0": { - "vector": [1, 1, 1] - }, - "0.6667": { - "vector": [1, 0.6, 1] - }, - "0.8333": { - "vector": [0, 0, 0] - } - } - }, - "stemMiddle": { - "rotation": { - "0.0": { - "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [-30, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [-30, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "stemUpper": { - "rotation": { - "0.0": { - "post": { - "vector": [35, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [-32.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [-32.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [19.02384, 6.61911, -4.99615] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-0.98, 6.62, -5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "head": { - "rotation": { - "0.0": { - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-2.94354, -33.87151, 0.23773] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leafRight": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 40] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [0, 0, -20] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tongueBase": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [-45, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [-45, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [45, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tongueMiddle": { - "rotation": { - "0.0": { - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [-27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [-27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tongueTip": { - "rotation": { - "0.0": { - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [-27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [-27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [40, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "petal_L": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 45] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [0, 0, 90] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [0, 0, 90] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0, 0, 90] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "scale": { - "0.6667": { - "pre": { - "vector": [1, 1, 1] - }, - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leafTipRight": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -72.5] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [0, 0, 17.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leafLeft": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -40] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leafTipLeft": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 72.5] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [0, 0, -25] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leafTipFront": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 67.5] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [0, 0, -17.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leafFront": { - "rotation": { - "0.0": { - "post": { - "vector": [-90, -22.5, -90] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [90, -20, 90] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leafBack": { - "rotation": { - "0.0": { - "post": { - "vector": [-90, 40, -90] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [90.00001, 20, -270.00001] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leafTipBack": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -95] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [0, 0, 17.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "petal_R": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -45] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [0, 0, -90] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [0, 0, -90] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0, 0, -90] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "scale": { - "0.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "saliva_L": { - "scale": { - "0.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - } - } - }, - "saliva_L2": { - "scale": { - "0.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - } - } - }, - "saliva_R": { - "scale": { - "0.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "attack": { - "loop": true, - "animation_length": 1, - "bones": { - "base": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7083": { - "post": { - "vector": [-17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [0, 0, 4] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [0, 0, 4] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [0, 0, -6] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "stemLower": { - "rotation": { - "0.0": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [-8.21888, -5.71617, -34.58897] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [-8.21888, -5.71617, -34.58897] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [79.10661, -20.70481, -22.20765] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [79.10661, -20.70481, -22.20765] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "stemMiddle": { - "rotation": { - "0.0": { - "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [-23.42053, 4.20854, -24.66569] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [-23.42053, 4.20854, -24.66569] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [8.06989, -41.56076, 30.78973] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [8.06989, -41.56076, 30.78973] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "stemUpper": { - "rotation": { - "0.0": { - "post": { - "vector": [35, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [-32.06488, -10.58927, -30.90686] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [-32.06488, -10.58927, -30.90686] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [31.65996, -17.26588, 21.741] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [31.65996, -17.26588, 21.741] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [35, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "head": { - "rotation": { - "0.0": { - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [16.59918, -2.86544, 34.89743] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leafRight": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 40] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [-28.22015, -26.49841, 37.56914] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 40] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tongueBase": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "scale": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tongueMiddle": { - "rotation": { - "0.0": { - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tongueTip": { - "rotation": { - "0.0": { - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "scale": { - "0.0": { - "post": { - "vector": [1, 0.9, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [1, 0.9, 1] - }, - "lerp_mode": "catmullrom" - } - } - }, - "petal_L": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leafTipRight": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -72.5] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [11.57417, 9.54195, -51.44258] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -72.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leafLeft": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -40] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [-1.78487, 2.7794, -25.4094] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [15.54307, -27.69337, -33.62515] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -40] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leafTipLeft": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 72.5] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [-2.03375, -7.33834, 38.44322] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 72.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leafTipFront": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 67.5] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 67.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leafFront": { - "rotation": { - "0.0": { - "post": { - "vector": [-90, -22.5, -90] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [-90, -32.5, -90] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-90, -22.5, -90] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leafBack": { - "rotation": { - "0.0": { - "post": { - "vector": [-90, 40, -90] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [-90, 15, -90] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-63.78, 53.90614, -124.44928] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-90, 40, -90] - }, - "lerp_mode": "catmullrom" - } - } - }, - "leafTipBack": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -95] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [0, 0, -60] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -95] - }, - "lerp_mode": "catmullrom" - } - } - }, - "petal_R": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "saliva_L": { - "scale": { - "0.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - } - } - }, - "saliva_L2": { - "scale": { - "0.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - } - } - }, - "saliva_R": { - "scale": { - "0.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - } - } - } - } - } - } -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ant_trap.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ant_trap.json new file mode 100644 index 00000000..48f6872d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ant_trap.json @@ -0,0 +1 @@ +{"variants":{"":{"model":"antarchy:block/ant_trap"}}} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/creeping_horror_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/creeping_horror_egg.json deleted file mode 100644 index 8611d9f0..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/creeping_horror_egg.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "variants": { - "eggs=1,hatch=0": [ - { "model": "antarchy:block/creeping_horror_egg_1" }, - { "model": "antarchy:block/creeping_horror_egg_1", "y": 90 }, - { "model": "antarchy:block/creeping_horror_egg_1", "y": 180 }, - { "model": "antarchy:block/creeping_horror_egg_1", "y": 270 } - ], - "eggs=1,hatch=1": [ - { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_1" }, - { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_1", "y": 90 }, - { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_1", "y": 180 }, - { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_1", "y": 270 } - ], - "eggs=1,hatch=2": [ - { "model": "antarchy:block/very_cracked_creeping_horror_egg_1" }, - { "model": "antarchy:block/very_cracked_creeping_horror_egg_1", "y": 90 }, - { "model": "antarchy:block/very_cracked_creeping_horror_egg_1", "y": 180 }, - { "model": "antarchy:block/very_cracked_creeping_horror_egg_1", "y": 270 } - ], - "eggs=2,hatch=0": [ - { "model": "antarchy:block/creeping_horror_egg_2" }, - { "model": "antarchy:block/creeping_horror_egg_2", "y": 90 }, - { "model": "antarchy:block/creeping_horror_egg_2", "y": 180 }, - { "model": "antarchy:block/creeping_horror_egg_2", "y": 270 } - ], - "eggs=2,hatch=1": [ - { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_2" }, - { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_2", "y": 90 }, - { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_2", "y": 180 }, - { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_2", "y": 270 } - ], - "eggs=2,hatch=2": [ - { "model": "antarchy:block/very_cracked_creeping_horror_egg_2" }, - { "model": "antarchy:block/very_cracked_creeping_horror_egg_2", "y": 90 }, - { "model": "antarchy:block/very_cracked_creeping_horror_egg_2", "y": 180 }, - { "model": "antarchy:block/very_cracked_creeping_horror_egg_2", "y": 270 } - ], - "eggs=3,hatch=0": [ - { "model": "antarchy:block/creeping_horror_egg_3" }, - { "model": "antarchy:block/creeping_horror_egg_3", "y": 90 }, - { "model": "antarchy:block/creeping_horror_egg_3", "y": 180 }, - { "model": "antarchy:block/creeping_horror_egg_3", "y": 270 } - ], - "eggs=3,hatch=1": [ - { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_3" }, - { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_3", "y": 90 }, - { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_3", "y": 180 }, - { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_3", "y": 270 } - ], - "eggs=3,hatch=2": [ - { "model": "antarchy:block/very_cracked_creeping_horror_egg_3" }, - { "model": "antarchy:block/very_cracked_creeping_horror_egg_3", "y": 90 }, - { "model": "antarchy:block/very_cracked_creeping_horror_egg_3", "y": 180 }, - { "model": "antarchy:block/very_cracked_creeping_horror_egg_3", "y": 270 } - ], - "eggs=4,hatch=0": [ - { "model": "antarchy:block/creeping_horror_egg_4" }, - { "model": "antarchy:block/creeping_horror_egg_4", "y": 90 }, - { "model": "antarchy:block/creeping_horror_egg_4", "y": 180 }, - { "model": "antarchy:block/creeping_horror_egg_4", "y": 270 } - ], - "eggs=4,hatch=1": [ - { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_4" }, - { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_4", "y": 90 }, - { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_4", "y": 180 }, - { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_4", "y": 270 } - ], - "eggs=4,hatch=2": [ - { "model": "antarchy:block/very_cracked_creeping_horror_egg_4" }, - { "model": "antarchy:block/very_cracked_creeping_horror_egg_4", "y": 90 }, - { "model": "antarchy:block/very_cracked_creeping_horror_egg_4", "y": 180 }, - { "model": "antarchy:block/very_cracked_creeping_horror_egg_4", "y": 270 } - ] - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cut_titanium_wall.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cut_titanium_wall.json deleted file mode 100644 index 182e05d8..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cut_titanium_wall.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "multipart": [ - { - "when": { "up": "true" }, - "apply": { "model": "antarchy:block/cut_titanium_wall_post" } - }, - { - "when": { "north": "low" }, - "apply": { "model": "antarchy:block/cut_titanium_wall_side", "uvlock": true } - }, - { - "when": { "east": "low" }, - "apply": { "model": "antarchy:block/cut_titanium_wall_side", "y": 90, "uvlock": true } - }, - { - "when": { "south": "low" }, - "apply": { "model": "antarchy:block/cut_titanium_wall_side", "y": 180, "uvlock": true } - }, - { - "when": { "west": "low" }, - "apply": { "model": "antarchy:block/cut_titanium_wall_side", "y": 270, "uvlock": true } - }, - { - "when": { "north": "tall" }, - "apply": { "model": "antarchy:block/cut_titanium_wall_side_tall", "uvlock": true } - }, - { - "when": { "east": "tall" }, - "apply": { "model": "antarchy:block/cut_titanium_wall_side_tall", "y": 90, "uvlock": true } - }, - { - "when": { "south": "tall" }, - "apply": { "model": "antarchy:block/cut_titanium_wall_side_tall", "y": 180, "uvlock": true } - }, - { - "when": { "west": "tall" }, - "apply": { "model": "antarchy:block/cut_titanium_wall_side_tall", "y": 270, "uvlock": true } - } - ] -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cut_uranium_wall.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cut_uranium_wall.json deleted file mode 100644 index c1083213..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cut_uranium_wall.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "multipart": [ - { - "when": { "up": "true" }, - "apply": { "model": "antarchy:block/cut_uranium_wall_post" } - }, - { - "when": { "north": "low" }, - "apply": { "model": "antarchy:block/cut_uranium_wall_side", "uvlock": true } - }, - { - "when": { "east": "low" }, - "apply": { "model": "antarchy:block/cut_uranium_wall_side", "y": 90, "uvlock": true } - }, - { - "when": { "south": "low" }, - "apply": { "model": "antarchy:block/cut_uranium_wall_side", "y": 180, "uvlock": true } - }, - { - "when": { "west": "low" }, - "apply": { "model": "antarchy:block/cut_uranium_wall_side", "y": 270, "uvlock": true } - }, - { - "when": { "north": "tall" }, - "apply": { "model": "antarchy:block/cut_uranium_wall_side_tall", "uvlock": true } - }, - { - "when": { "east": "tall" }, - "apply": { "model": "antarchy:block/cut_uranium_wall_side_tall", "y": 90, "uvlock": true } - }, - { - "when": { "south": "tall" }, - "apply": { "model": "antarchy:block/cut_uranium_wall_side_tall", "y": 180, "uvlock": true } - }, - { - "when": { "west": "tall" }, - "apply": { "model": "antarchy:block/cut_uranium_wall_side_tall", "y": 270, "uvlock": true } - } - ] -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dream_sandstone.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dream_sandstone.json index 84332ed9..04643cb6 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dream_sandstone.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dream_sandstone.json @@ -1,7 +1,11 @@ { "variants": { - "": { + "vertical_direction=up": { "model": "antarchy:block/dream_sandstone" + }, + "vertical_direction=down": { + "model": "antarchy:block/dream_sandstone", + "x": 180 } } } diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/jumpy_bug_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/jumpy_bug_egg.json deleted file mode 100644 index 90df0736..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/jumpy_bug_egg.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "variants": { - "hanging=false,rotated=false": { - "model": "antarchy:block/jumpy_bug_egg" - }, - "hanging=false,rotated=true": { - "model": "antarchy:block/jumpy_bug_egg", - "y": 90 - }, - "hanging=true,rotated=false": { - "model": "antarchy:block/jumpy_bug_egg", - "x": 180 - }, - "hanging=true,rotated=true": { - "model": "antarchy:block/jumpy_bug_egg", - "x": 180, - "y": 90 - } - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/lurking_terror_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/lurking_terror_egg.json deleted file mode 100644 index dce79841..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/lurking_terror_egg.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "variants": { - "eggs=1,hatch=0": [ - { "model": "antarchy:block/lurking_terror_egg_1" }, - { "model": "antarchy:block/lurking_terror_egg_1", "y": 90 }, - { "model": "antarchy:block/lurking_terror_egg_1", "y": 180 }, - { "model": "antarchy:block/lurking_terror_egg_1", "y": 270 } - ], - "eggs=1,hatch=1": [ - { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_1" }, - { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_1", "y": 90 }, - { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_1", "y": 180 }, - { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_1", "y": 270 } - ], - "eggs=1,hatch=2": [ - { "model": "antarchy:block/very_cracked_lurking_terror_egg_1" }, - { "model": "antarchy:block/very_cracked_lurking_terror_egg_1", "y": 90 }, - { "model": "antarchy:block/very_cracked_lurking_terror_egg_1", "y": 180 }, - { "model": "antarchy:block/very_cracked_lurking_terror_egg_1", "y": 270 } - ], - "eggs=2,hatch=0": [ - { "model": "antarchy:block/lurking_terror_egg_2" }, - { "model": "antarchy:block/lurking_terror_egg_2", "y": 90 }, - { "model": "antarchy:block/lurking_terror_egg_2", "y": 180 }, - { "model": "antarchy:block/lurking_terror_egg_2", "y": 270 } - ], - "eggs=2,hatch=1": [ - { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_2" }, - { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_2", "y": 90 }, - { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_2", "y": 180 }, - { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_2", "y": 270 } - ], - "eggs=2,hatch=2": [ - { "model": "antarchy:block/very_cracked_lurking_terror_egg_2" }, - { "model": "antarchy:block/very_cracked_lurking_terror_egg_2", "y": 90 }, - { "model": "antarchy:block/very_cracked_lurking_terror_egg_2", "y": 180 }, - { "model": "antarchy:block/very_cracked_lurking_terror_egg_2", "y": 270 } - ], - "eggs=3,hatch=0": [ - { "model": "antarchy:block/lurking_terror_egg_3" }, - { "model": "antarchy:block/lurking_terror_egg_3", "y": 90 }, - { "model": "antarchy:block/lurking_terror_egg_3", "y": 180 }, - { "model": "antarchy:block/lurking_terror_egg_3", "y": 270 } - ], - "eggs=3,hatch=1": [ - { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_3" }, - { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_3", "y": 90 }, - { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_3", "y": 180 }, - { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_3", "y": 270 } - ], - "eggs=3,hatch=2": [ - { "model": "antarchy:block/very_cracked_lurking_terror_egg_3" }, - { "model": "antarchy:block/very_cracked_lurking_terror_egg_3", "y": 90 }, - { "model": "antarchy:block/very_cracked_lurking_terror_egg_3", "y": 180 }, - { "model": "antarchy:block/very_cracked_lurking_terror_egg_3", "y": 270 } - ], - "eggs=4,hatch=0": [ - { "model": "antarchy:block/lurking_terror_egg_4" }, - { "model": "antarchy:block/lurking_terror_egg_4", "y": 90 }, - { "model": "antarchy:block/lurking_terror_egg_4", "y": 180 }, - { "model": "antarchy:block/lurking_terror_egg_4", "y": 270 } - ], - "eggs=4,hatch=1": [ - { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_4" }, - { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_4", "y": 90 }, - { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_4", "y": 180 }, - { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_4", "y": 270 } - ], - "eggs=4,hatch=2": [ - { "model": "antarchy:block/very_cracked_lurking_terror_egg_4" }, - { "model": "antarchy:block/very_cracked_lurking_terror_egg_4", "y": 90 }, - { "model": "antarchy:block/very_cracked_lurking_terror_egg_4", "y": 180 }, - { "model": "antarchy:block/very_cracked_lurking_terror_egg_4", "y": 270 } - ] - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/prince_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/prince_egg.json index ab78d2c4..97c01ebe 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/prince_egg.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/prince_egg.json @@ -1,13 +1,25 @@ { "variants": { - "hatch=0": { + "hatch=0,inverted=false": { "model": "antarchy:block/prince_egg" }, - "hatch=1": { + "hatch=1,inverted=false": { "model": "antarchy:block/prince_egg" }, - "hatch=2": { + "hatch=2,inverted=false": { "model": "antarchy:block/prince_egg" + }, + "hatch=0,inverted=true": { + "model": "antarchy:block/prince_egg", + "x": 180 + }, + "hatch=1,inverted=true": { + "model": "antarchy:block/prince_egg", + "x": 180 + }, + "hatch=2,inverted=true": { + "model": "antarchy:block/prince_egg", + "x": 180 } } } diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/princess_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/princess_egg.json index 54582800..44b3d210 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/princess_egg.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/princess_egg.json @@ -1,13 +1,25 @@ { "variants": { - "hatch=0": { + "hatch=0,inverted=false": { "model": "antarchy:block/princess_egg" }, - "hatch=1": { + "hatch=1,inverted=false": { "model": "antarchy:block/princess_egg" }, - "hatch=2": { + "hatch=2,inverted=false": { "model": "antarchy:block/princess_egg" + }, + "hatch=0,inverted=true": { + "model": "antarchy:block/princess_egg", + "x": 180 + }, + "hatch=1,inverted=true": { + "model": "antarchy:block/princess_egg", + "x": 180 + }, + "hatch=2,inverted=true": { + "model": "antarchy:block/princess_egg", + "x": 180 } } } diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/triffid_goo_block.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/triffid_goo_block.json deleted file mode 100644 index b6d986b6..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/triffid_goo_block.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "antarchy:block/triffid_goo_block" - } - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/typhonite_spike.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/typhonite_spike.json index b22e8a99..ea955bca 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/typhonite_spike.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/typhonite_spike.json @@ -2,40 +2,35 @@ "variants": { "thickness=base,vertical_direction=down": { "model": "antarchy:block/typhonite_spike_down_base", - "x": 180, - "uvlock": true + "x": 180 }, "thickness=base,vertical_direction=up": { "model": "antarchy:block/typhonite_spike_up_base" }, "thickness=frustum,vertical_direction=down": { "model": "antarchy:block/typhonite_spike_down_frustum", - "x": 180, - "uvlock": true + "x": 180 }, "thickness=frustum,vertical_direction=up": { "model": "antarchy:block/typhonite_spike_up_frustum" }, "thickness=middle,vertical_direction=down": { "model": "antarchy:block/typhonite_spike_down_middle", - "x": 180, - "uvlock": true + "x": 180 }, "thickness=middle,vertical_direction=up": { "model": "antarchy:block/typhonite_spike_up_middle" }, "thickness=tip,vertical_direction=down": { "model": "antarchy:block/typhonite_spike_down_tip", - "x": 180, - "uvlock": true + "x": 180 }, "thickness=tip,vertical_direction=up": { "model": "antarchy:block/typhonite_spike_up_tip" }, "thickness=tip_merge,vertical_direction=down": { "model": "antarchy:block/typhonite_spike_down_tip_merge", - "x": 180, - "uvlock": true + "x": 180 }, "thickness=tip_merge,vertical_direction=up": { "model": "antarchy:block/typhonite_spike_up_tip_merge" diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/undertrial_spawner.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/undertrial_spawner.json index 649a83cc..c4bf50c8 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/undertrial_spawner.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/undertrial_spawner.json @@ -1,8 +1,10 @@ { "variants": { - "active=false,ominous=false": {"model": "antarchy:block/undertrial_spawner_inactive", "x": 180}, - "active=false,ominous=true": {"model": "antarchy:block/undertrial_spawner_inactive", "x": 180}, - "active=true,ominous=false": {"model": "antarchy:block/undertrial_spawner_active", "x": 180}, - "active=true,ominous=true": {"model": "antarchy:block/undertrial_spawner_active", "x": 180} + "trial_spawner_state=inactive": {"model": "antarchy:block/undertrial_spawner_inactive", "x": 180}, + "trial_spawner_state=waiting_for_players": {"model": "antarchy:block/undertrial_spawner_inactive", "x": 180}, + "trial_spawner_state=active": {"model": "antarchy:block/undertrial_spawner_active", "x": 180}, + "trial_spawner_state=waiting_for_reward_ejection": {"model": "antarchy:block/undertrial_spawner_active", "x": 180}, + "trial_spawner_state=ejecting_reward": {"model": "antarchy:block/undertrial_spawner_ejecting_reward", "x": 180}, + "trial_spawner_state=cooldown": {"model": "antarchy:block/undertrial_spawner_inactive", "x": 180} } } diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/undervault.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/undervault.json index 93e588a9..e538517b 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/undervault.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/undervault.json @@ -1,16 +1,28 @@ { "variants": { - "active=false,facing=down": {"model": "antarchy:block/undervault_off", "x": 180}, - "active=false,facing=up": {"model": "antarchy:block/undervault_off", "x": 270}, - "active=false,facing=north": {"model": "antarchy:block/undervault_off"}, - "active=false,facing=south": {"model": "antarchy:block/undervault_off", "y": 180}, - "active=false,facing=east": {"model": "antarchy:block/undervault_off", "y": 90}, - "active=false,facing=west": {"model": "antarchy:block/undervault_off", "y": 270}, - "active=true,facing=down": {"model": "antarchy:block/undervault_on", "x": 180}, - "active=true,facing=up": {"model": "antarchy:block/undervault_on", "x": 270}, - "active=true,facing=north": {"model": "antarchy:block/undervault_on"}, - "active=true,facing=south": {"model": "antarchy:block/undervault_on", "y": 180}, - "active=true,facing=east": {"model": "antarchy:block/undervault_on", "y": 90}, - "active=true,facing=west": {"model": "antarchy:block/undervault_on", "y": 270} + "vault_state=inactive,under_facing=north": {"model": "antarchy:block/undervault_off"}, + "vault_state=inactive,under_facing=south": {"model": "antarchy:block/undervault_off", "y": 180}, + "vault_state=inactive,under_facing=east": {"model": "antarchy:block/undervault_off", "y": 90}, + "vault_state=inactive,under_facing=west": {"model": "antarchy:block/undervault_off", "y": 270}, + "vault_state=inactive,under_facing=up": {"model": "antarchy:block/undervault_off", "x": 270}, + "vault_state=inactive,under_facing=down": {"model": "antarchy:block/undervault_off", "x": 180}, + "vault_state=active,under_facing=north": {"model": "antarchy:block/undervault_on"}, + "vault_state=active,under_facing=south": {"model": "antarchy:block/undervault_on", "y": 180}, + "vault_state=active,under_facing=east": {"model": "antarchy:block/undervault_on", "y": 90}, + "vault_state=active,under_facing=west": {"model": "antarchy:block/undervault_on", "y": 270}, + "vault_state=active,under_facing=up": {"model": "antarchy:block/undervault_on", "x": 270}, + "vault_state=active,under_facing=down": {"model": "antarchy:block/undervault_on", "x": 180}, + "vault_state=unlocking,under_facing=north": {"model": "antarchy:block/undervault_on"}, + "vault_state=unlocking,under_facing=south": {"model": "antarchy:block/undervault_on", "y": 180}, + "vault_state=unlocking,under_facing=east": {"model": "antarchy:block/undervault_on", "y": 90}, + "vault_state=unlocking,under_facing=west": {"model": "antarchy:block/undervault_on", "y": 270}, + "vault_state=unlocking,under_facing=up": {"model": "antarchy:block/undervault_on", "x": 270}, + "vault_state=unlocking,under_facing=down": {"model": "antarchy:block/undervault_on", "x": 180}, + "vault_state=ejecting,under_facing=north": {"model": "antarchy:block/undervault_ejecting"}, + "vault_state=ejecting,under_facing=south": {"model": "antarchy:block/undervault_ejecting", "y": 180}, + "vault_state=ejecting,under_facing=east": {"model": "antarchy:block/undervault_ejecting", "y": 90}, + "vault_state=ejecting,under_facing=west": {"model": "antarchy:block/undervault_ejecting", "y": 270}, + "vault_state=ejecting,under_facing=up": {"model": "antarchy:block/undervault_ejecting", "x": 270}, + "vault_state=ejecting,under_facing=down": {"model": "antarchy:block/undervault_ejecting", "x": 180} } } diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/cloud_shark.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/cloud_shark.geo.json deleted file mode 100644 index aa4ba54b..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/geo/cloud_shark.geo.json +++ /dev/null @@ -1,171 +0,0 @@ -{ - "format_version": "1.12.0", - "minecraft:geometry": [ - { - "description": { - "identifier": "geometry.unknown", - "texture_width": 128, - "texture_height": 128, - "visible_bounds_width": 6, - "visible_bounds_height": 5, - "visible_bounds_offset": [0, 1.5, 0] - }, - "bones": [ - { - "name": "shark", - "pivot": [0, 9.5, -9.5] - }, - { - "name": "torso", - "parent": "shark", - "pivot": [0, 9.5, -9.5], - "cubes": [ - {"origin": [-6.5, 3, -22], "size": [13, 13, 25], "inflate": 0.01, "uv": [0, 0]}, - {"origin": [-1, 16, -12], "size": [2, 5, 9], "inflate": 0.01, "uv": [0, 0]}, - {"origin": [-1, 21, -9], "size": [2, 7, 6], "inflate": 0.01, "uv": [51, 0]} - ] - }, - { - "name": "tail", - "parent": "torso", - "pivot": [0, 8.90533, 0.125], - "cubes": [ - {"origin": [-5, 3, 0], "size": [10, 12, 14], "uv": [0, 39]} - ] - }, - { - "name": "tail2", - "parent": "tail", - "pivot": [0, 8.87377, 10.83333], - "cubes": [ - {"origin": [-3, 4, 11], "size": [6, 9, 17], "uv": [44, 59]}, - {"origin": [-1.5, 9.5, 23], "size": [3, 7, 13], "pivot": [0.5, 13, 28], "rotation": [45, 0, 0], "uv": [0, 78]}, - {"origin": [-1.5, -0.5, 22], "size": [3, 7, 13], "inflate": 0.01, "pivot": [0.5, 3, 30], "rotation": [-45, 0, 0], "uv": [31, 85]} - ] - }, - { - "name": "head", - "parent": "torso", - "pivot": [0, 8.92857, -22], - "cubes": [ - {"origin": [-7, 7, -33], "size": [14, 9, 11], "uv": [48, 39]}, - {"origin": [-5.5, 7, -41], "size": [11, 9, 8], "uv": [76, 0]}, - {"origin": [-4.5, 5.75, -40], "size": [9, 2, 0], "uv": [87, 38]}, - {"origin": [-4.5, 5.75, -40], "size": [0, 2, 10], "uv": [76, 26]}, - {"origin": [4.5, 5, -40], "size": [0, 2, 10], "uv": [87, 30], "mirror": true}, - {"origin": [-4.5, 10, -49], "size": [9, 6, 8], "uv": [63, 85]} - ] - }, - { - "name": "left_wing", - "parent": "head", - "pivot": [8, 16, -27.5], - "cubes": [ - {"origin": [8, 16, -33], "size": [16, 0, 15], "uv": [48, 99], "mirror": true} - ] - }, - { - "name": "left_wing2", - "parent": "left_wing", - "pivot": [24, 16, -27.5], - "cubes": [ - {"origin": [24, 16, -35], "size": [16, 0, 17], "uv": [-17, 105], "mirror": true} - ] - }, - { - "name": "left_wing_back", - "parent": "head", - "pivot": [8, 16, -2.5], - "cubes": [ - {"origin": [8, 16, -8], "size": [16, 0, 15], "uv": [48, 99], "mirror": true} - ] - }, - { - "name": "left_wing_back2", - "parent": "left_wing_back", - "pivot": [24, 16, -2.5], - "cubes": [ - {"origin": [24, 16, -10], "size": [16, 0, 17], "uv": [-17, 105], "mirror": true} - ] - }, - { - "name": "right_wing_back", - "parent": "head", - "pivot": [-8, 16, -2.5], - "cubes": [ - {"origin": [-24, 16, -8], "size": [16, 0, 15], "uv": [48, 99]} - ] - }, - { - "name": "right_wing_back2", - "parent": "right_wing_back", - "pivot": [-24, 16, -2.5], - "cubes": [ - {"origin": [-40, 16, -10], "size": [16, 0, 17], "uv": [-17, 105]} - ] - }, - { - "name": "right_wing", - "parent": "head", - "pivot": [-8, 16, -27.5], - "cubes": [ - {"origin": [-24, 16, -33], "size": [16, 0, 15], "uv": [48, 99]} - ] - }, - { - "name": "right_wing2", - "parent": "right_wing", - "pivot": [-24, 16, -27.5], - "cubes": [ - {"origin": [-40, 16, -35], "size": [16, 0, 17], "uv": [-17, 105]} - ] - }, - { - "name": "halo", - "parent": "head", - "pivot": [0, 17.5, -37], - "cubes": [ - {"origin": [-4, 17, -41], "size": [1, 2, 8], "uv": [32, 105]}, - {"origin": [-3, 17, -41], "size": [6, 2, 1], "uv": [42, 105]}, - {"origin": [-3, 17, -34], "size": [6, 2, 1], "uv": [42, 115]}, - {"origin": [3, 17, -41], "size": [1, 2, 8], "uv": [32, 115]} - ] - }, - { - "name": "jaw", - "parent": "head", - "pivot": [0, 7, -22], - "cubes": [ - {"origin": [-5, 7.5, -29], "size": [0, 3, 7], "uv": [70, -7]}, - {"origin": [-5, 7.5, -29], "size": [2, 3, 0], "uv": [80, 21]}, - {"origin": [-3, 7.5, -37], "size": [0, 3, 8], "uv": [76, 22]}, - {"origin": [5, 7.5, -29], "size": [0, 3, 7], "uv": [70, -7], "mirror": true}, - {"origin": [3, 7.5, -29], "size": [2, 3, 0], "uv": [80, 21], "mirror": true}, - {"origin": [-3, 7.5, -37], "size": [6, 3, 0], "uv": [76, 33], "mirror": true}, - {"origin": [3, 7.5, -37], "size": [0, 3, 8], "uv": [76, 22], "mirror": true}, - {"origin": [-6, 4, -30], "size": [12, 4, 8], "uv": [76, 17]}, - {"origin": [-4, 4, -38], "size": [8, 4, 8], "uv": [73, 59]} - ] - }, - { - "name": "right_fin", - "parent": "torso", - "pivot": [-4.25, 5.5, -11.25], - "cubes": [ - {"origin": [-16.5, 4, -17], "size": [12, 3, 10], "inflate": 0.01, "uv": [0, 65]}, - {"origin": [-23.5, 4, -14], "size": [7, 3, 7], "inflate": 0.01, "uv": [90, 73]} - ] - }, - { - "name": "left_fin", - "parent": "torso", - "pivot": [4.25, 5.5, -11.25], - "cubes": [ - {"origin": [4.5, 4, -17], "size": [12, 3, 10], "inflate": 0.01, "uv": [0, 65], "mirror": true}, - {"origin": [16.5, 4, -14], "size": [7, 3, 7], "inflate": 0.01, "uv": [90, 73], "mirror": true} - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/creeping_horror.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/creeping_horror.geo.json deleted file mode 100644 index 22d0bcdf..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/geo/creeping_horror.geo.json +++ /dev/null @@ -1,194 +0,0 @@ -{ - "format_version": "1.12.0", - "minecraft:geometry": [ - { - "description": { - "identifier": "geometry.creepinghorror", - "texture_width": 256, - "texture_height": 256, - "visible_bounds_width": 9, - "visible_bounds_height": 2.5, - "visible_bounds_offset": [0, 0.75, 0] - }, - "bones": [ - { - "name": "root", - "pivot": [0, 0, 0] - }, - { - "name": "body", - "parent": "root", - "pivot": [0, 0, 0], - "cubes": [ - {"origin": [-6, 0, -7], "size": [12, 12, 14], "uv": [0, 0]}, - {"origin": [-4, 2, -11], "size": [1, 2, 5], "pivot": [-3.5, 3, -7], "rotation": [24.14867, 20.70481, 9.00717], "uv": [0, 0]}, - {"origin": [3, 2, -11], "size": [1, 2, 5], "pivot": [3.5, 3, -7], "rotation": [24.14867, -20.70481, -9.00717], "uv": [0, 0], "mirror": true}, - {"origin": [-4, 8, -11], "size": [1, 2, 5], "pivot": [-3.5, 9, -7], "rotation": [-24.14867, 20.70481, -9.00717], "uv": [0, 0]}, - {"origin": [3, 8, -11], "size": [1, 2, 5], "pivot": [3.5, 9, -7], "rotation": [-24.14867, -20.70481, 9.00717], "uv": [0, 0], "mirror": true}, - {"origin": [-4, 2, -7], "size": [8, 8, 2], "uv": [104, 12]}, - {"origin": [-6, 0, -7], "size": [12, 0, 5], "pivot": [0, 0, -7], "rotation": [30, 0, -180], "uv": [100, 84]}, - {"origin": [-6, 0, -5], "size": [12, 0, 6], "pivot": [0, 0, -5], "rotation": [25, 0, -180], "uv": [100, 54]}, - {"origin": [-6, 0, -2], "size": [12, 0, 7], "pivot": [0, 0, -2], "rotation": [15, 0, -180], "uv": [100, 43]}, - {"origin": [-6, 0, 2], "size": [12, 0, 8], "pivot": [0, 0, 2], "rotation": [10, 0, -180], "uv": [92, 35]}, - {"origin": [-6, 0, 7], "size": [12, 0, 9], "pivot": [0, 0, 7], "rotation": [0, 0, 180], "uv": [92, 26]}, - {"origin": [-12, 6, -2], "size": [12, 0, 7], "pivot": [-6, 6, -2], "rotation": [20, 0, -90], "uv": [100, 43], "mirror": true}, - {"origin": [-12, 6, 2], "size": [12, 0, 8], "pivot": [-6, 6, 2], "rotation": [10, 0, -90], "uv": [92, 35], "mirror": true}, - {"origin": [-12, 6, 7], "size": [12, 0, 9], "pivot": [-6, 6, 7], "rotation": [5, 0, -90], "uv": [92, 26], "mirror": true}, - {"origin": [0, 6, 2], "size": [12, 0, 8], "pivot": [6, 6, 2], "rotation": [10, 0, 90], "uv": [92, 35]}, - {"origin": [0, 6, 7], "size": [12, 0, 9], "pivot": [6, 6, 7], "rotation": [5, 0, 90], "uv": [92, 26]}, - {"origin": [0, 6, -2], "size": [12, 0, 7], "pivot": [6, 6, -2], "rotation": [20, 0, 90], "uv": [100, 43]} - ] - }, - { - "name": "bone", - "parent": "body", - "pivot": [0, 6, -7], - "cubes": [ - {"origin": [-6, 9.85673, -2.40373], "size": [12, 0, 5], "pivot": [0, 6, -7], "rotation": [50, 0, 0], "uv": [100, 84]}, - {"origin": [-6, 10.24264, -0.75736], "size": [12, 0, 6], "pivot": [0, 6, -5], "rotation": [45, 0, 0], "uv": [100, 54]}, - {"origin": [-6, 11.19615, 1], "size": [12, 0, 7], "pivot": [0, 6, -2], "rotation": [30, 0, 0], "uv": [100, 43]}, - {"origin": [-6, 11.43785, 4.53571], "size": [12, 0, 8], "pivot": [0, 6, 2], "rotation": [25, 0, 0], "uv": [92, 35]}, - {"origin": [-6, 11.79555, 8.55291], "size": [12, 0, 9], "pivot": [0, 6, 7], "rotation": [15, 0, 0], "uv": [92, 26]} - ] - }, - { - "name": "rightjaw", - "parent": "body", - "pivot": [-6, 6, -7], - "cubes": [ - {"origin": [-6, 3, -13], "size": [4, 6, 6], "uv": [104, 0]} - ] - }, - { - "name": "leftjaw", - "parent": "body", - "pivot": [6, 6, -7], - "cubes": [ - {"origin": [2, 3, -13], "size": [4, 6, 6], "uv": [104, 0], "mirror": true} - ] - }, - { - "name": "tailbase", - "parent": "body", - "pivot": [0, 6, 7], - "cubes": [ - {"origin": [-5, 1, 7], "size": [10, 10, 14], "uv": [52, 46]} - ] - }, - { - "name": "tailmiddle", - "parent": "tailbase", - "pivot": [0, 6, 21], - "cubes": [ - {"origin": [-3.5, 2.5, 21], "size": [7, 7, 14], "uv": [48, 94]} - ] - }, - { - "name": "tailtip", - "parent": "tailmiddle", - "pivot": [0, 6, 35], - "cubes": [ - {"origin": [-1.5, 4.5, 35], "size": [3, 3, 14], "uv": [58, 26]}, - {"origin": [-4.5, 6, 39], "size": [9, 0, 20], "uv": [0, 26]} - ] - }, - { - "name": "rightfrontleg", - "parent": "root", - "pivot": [-6, 8, -3], - "cubes": [ - {"origin": [-18, 6, -6], "size": [12, 4, 4], "uv": [100, 60]} - ] - }, - { - "name": "rightfrontknee", - "parent": "rightfrontleg", - "pivot": [-18, 6, -4], - "cubes": [ - {"origin": [-18, 6, -5], "size": [3, 16, 2], "uv": [42, 115]} - ] - }, - { - "name": "rightfrontfoot", - "parent": "rightfrontknee", - "pivot": [-18, 18, -4], - "cubes": [ - {"origin": [-35, 18, -4], "size": [20, 4, 0], "uv": [100, 50]} - ] - }, - { - "name": "rightbackleg", - "parent": "root", - "pivot": [-6, 8, 4], - "cubes": [ - {"origin": [-18, 6, 3], "size": [12, 4, 4], "uv": [100, 60]} - ] - }, - { - "name": "rightbackknee", - "parent": "rightbackleg", - "pivot": [-18, 6, 5], - "cubes": [ - {"origin": [-18, 6, 4], "size": [3, 16, 2], "uv": [42, 115]} - ] - }, - { - "name": "rightbackfoot", - "parent": "rightbackknee", - "pivot": [-18, 18, 5], - "cubes": [ - {"origin": [-35, 18, 5], "size": [20, 4, 0], "uv": [100, 50]} - ] - }, - { - "name": "leftfrontleg", - "parent": "root", - "pivot": [6, 8, -3], - "cubes": [ - {"origin": [6, 6, -6], "size": [12, 4, 4], "uv": [100, 60], "mirror": true} - ] - }, - { - "name": "leftfrontknee", - "parent": "leftfrontleg", - "pivot": [18, 6, -4], - "cubes": [ - {"origin": [15, 6, -5], "size": [3, 16, 2], "uv": [42, 115], "mirror": true} - ] - }, - { - "name": "leftfrontfoot", - "parent": "leftfrontknee", - "pivot": [18, 18, -4], - "cubes": [ - {"origin": [15, 18, -4], "size": [20, 4, 0], "uv": [100, 50], "mirror": true} - ] - }, - { - "name": "leftbackleg", - "parent": "root", - "pivot": [6, 8, 4], - "cubes": [ - {"origin": [6, 6, 3], "size": [12, 4, 4], "uv": [100, 60], "mirror": true} - ] - }, - { - "name": "leftbackknee", - "parent": "leftbackleg", - "pivot": [18, 6, 5], - "cubes": [ - {"origin": [15, 6, 4], "size": [3, 16, 2], "uv": [42, 115], "mirror": true} - ] - }, - { - "name": "leftbackfoot", - "parent": "leftbackknee", - "pivot": [18, 18, 5], - "cubes": [ - {"origin": [15, 18, 5], "size": [20, 4, 0], "uv": [100, 50], "mirror": true} - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/flying_squirrel.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/flying_squirrel.geo.json index b7ce482a..b6d48118 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/geo/flying_squirrel.geo.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/flying_squirrel.geo.json @@ -13,37 +13,56 @@ "bones": [ { "name": "squirrel", - "pivot": [0, 1, 0] + "pivot": [0, 0, 0] + }, + { + "name": "body", + "parent": "squirrel", + "pivot": [0, 6, 0] }, { "name": "left_leg", - "parent": "squirrel", + "parent": "body", "pivot": [3, 5, 3.25], "cubes": [ - {"origin": [2, 0, 1.25], "size": [2, 5, 4], "uv": [0, 30]}, + {"origin": [2, 0, 1.25], "size": [2, 5, 4], "uv": [0, 30]} + ] + }, + { + "name": "left_leg2", + "parent": "left_leg", + "pivot": [3, 0, 1.25], + "cubes": [ {"origin": [2, 0, -0.75], "size": [2, 1, 2], "uv": [35, 8]} ] }, { "name": "right_leg", - "parent": "squirrel", + "parent": "body", "pivot": [-3, 5, 3.25], "cubes": [ - {"origin": [-4, 0, 1.25], "size": [2, 5, 4], "uv": [0, 30], "mirror": true}, + {"origin": [-4, 0, 1.25], "size": [2, 5, 4], "uv": [0, 30], "mirror": true} + ] + }, + { + "name": "right_leg2", + "parent": "right_leg", + "pivot": [-3, 0, 1.25], + "cubes": [ {"origin": [-4, 0, -0.75], "size": [2, 1, 2], "uv": [35, 8], "mirror": true} ] }, { - "name": "body", - "parent": "squirrel", - "pivot": [0, 4, 2], + "name": "torso", + "parent": "body", + "pivot": [0, 4, 3], "cubes": [ {"origin": [0, 8.5, -6], "size": [0, 3, 11], "uv": [23, 30]} ] }, { "name": "body_2", - "parent": "body", + "parent": "torso", "pivot": [0, 6, -0.5], "cubes": [ {"origin": [-3, 3.5, -6], "size": [6, 5, 11], "uv": [0, 0]}, @@ -52,7 +71,7 @@ }, { "name": "head", - "parent": "body", + "parent": "torso", "pivot": [0, 7.33333, -5.91667], "cubes": [ {"origin": [-2, 4.5, -11], "size": [4, 5, 5], "uv": [17, 17]}, @@ -78,7 +97,7 @@ { "name": "left_ear", "parent": "head", - "pivot": [1, 9.5, -6.5], + "pivot": [1, 9.5, -7], "cubes": [ {"origin": [1, 9.5, -7], "size": [2, 2, 0], "uv": [36, 13]} ] @@ -86,14 +105,14 @@ { "name": "right_ear", "parent": "head", - "pivot": [-1, 9.5, -6.5], + "pivot": [-1, 9.5, -7], "cubes": [ {"origin": [-3, 9.5, -7], "size": [2, 2, 0], "uv": [36, 13], "mirror": true} ] }, { "name": "tail", - "parent": "body", + "parent": "torso", "pivot": [0, 6, 5], "cubes": [ {"origin": [-1.5, 5, 5], "size": [3, 11, 3], "uv": [14, 27]}, @@ -103,7 +122,7 @@ }, { "name": "left_arm", - "parent": "body", + "parent": "torso", "pivot": [3, 5, -4.5], "cubes": [ {"origin": [2, 0, -5.5], "size": [2, 5, 2], "uv": [35, 0]} @@ -112,14 +131,14 @@ { "name": "left_flying_part", "parent": "left_arm", - "pivot": [3, 5, -1], + "pivot": [3, 1, -3.5], "cubes": [ {"origin": [3, 0, -3.5], "size": [0, 5, 5], "inflate": 0.01, "uv": [26, 22]} ] }, { "name": "right_arm", - "parent": "body", + "parent": "torso", "pivot": [-3, 5, -4.5], "cubes": [ {"origin": [-4, 0, -5.5], "size": [2, 5, 2], "uv": [35, 0], "mirror": true} @@ -128,7 +147,7 @@ { "name": "right_flying_part", "parent": "right_arm", - "pivot": [-3, 5, -1], + "pivot": [-3, 1, -3.5], "cubes": [ {"origin": [-3, 0, -3.5], "size": [0, 5, 5], "inflate": 0.01, "uv": [26, 22], "mirror": true} ] diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/giant_frying_pan.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/giant_frying_pan.geo.json new file mode 100644 index 00000000..5c932bef --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/giant_frying_pan.geo.json @@ -0,0 +1,110 @@ +{ + "format_version": "1.21.110", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 128, + "texture_height": 128, + "visible_bounds_width": 4, + "visible_bounds_height": 6, + "visible_bounds_offset": [0, 2, 0] + }, + "bones": [ + { + "name": "giant_frying_pan", + "pivot": [0, -2, 0], + "cubes": [ + {"origin": [-1, 0, -1], "size": [2, 20, 2], "uv": [16, 0]} + ] + }, + { + "name": "handle", + "parent": "giant_frying_pan", + "pivot": [0, -2, 0], + "cubes": [ + { + "origin": [-2, -16, -2], + "size": [4, 16, 4], + "uv": { + "north": {"uv": [4, 4], "uv_size": [4, 16]}, + "east": {"uv": [8, 4], "uv_size": [-4, 16]}, + "south": {"uv": [4, 4], "uv_size": [4, 16]}, + "west": {"uv": [8, 4], "uv_size": [-4, 16]}, + "up": {"uv": [4, 0], "uv_size": [4, 4]}, + "down": {"uv": [8, 4], "uv_size": [4, -4]} + } + } + ] + }, + { + "name": "pan_base", + "parent": "giant_frying_pan", + "pivot": [0, 38, 0], + "cubes": [ + { + "origin": [-18, 22, 1], + "size": [36, 36, 2], + "uv": { + "north": {"uv": [0, 22], "uv_size": [36, 36]}, + "east": {"uv": [26, 66], "uv_size": [2, 36]}, + "south": {"uv": [36, 0], "uv_size": [36, 36]}, + "west": {"uv": [28, 66], "uv_size": [2, 36]}, + "up": {"uv": [102, 64], "uv_size": [-36, -2]}, + "down": {"uv": [102, 66], "uv_size": [-36, -2]} + } + }, + { + "origin": [18, 22, -3], + "size": [2, 36, 6], + "uv": { + "north": {"uv": [64, 62], "uv_size": [2, 36]}, + "east": {"uv": [0, 58], "uv_size": [6, 36]}, + "south": {"uv": [24, 66], "uv_size": [2, 36]}, + "west": {"uv": [38, 54], "uv_size": [36, -6], "uv_rotation": 90}, + "up": {"uv": [26, 10], "uv_size": [-2, -6]}, + "down": {"uv": [26, 16], "uv_size": [-2, -6]} + } + }, + { + "origin": [-20, 20, -3], + "size": [40, 2, 6], + "uv": { + "north": {"uv": [24, 60], "uv_size": [40, 2]}, + "east": {"uv": [74, 48], "uv_size": [2, 6], "uv_rotation": 90}, + "south": {"uv": [24, 62], "uv_size": [40, 2]}, + "west": {"uv": [38, 54], "uv_size": [-2, -6], "uv_rotation": 90}, + "up": {"uv": [76, 42], "uv_size": [-40, -6]}, + "down": {"uv": [76, 48], "uv_size": [-40, 6]} + } + }, + { + "origin": [-20, 22, -3], + "size": [2, 36, 6], + "uv": { + "north": {"uv": [30, 66], "uv_size": [2, 36]}, + "east": {"uv": [38, 48], "uv_size": [36, 6], "uv_rotation": 90}, + "south": {"uv": [32, 66], "uv_size": [2, 36]}, + "west": {"uv": [18, 58], "uv_size": [6, 36]}, + "up": {"uv": [26, 22], "uv_size": [-2, -6]}, + "down": {"uv": [28, 10], "uv_size": [-2, -6]} + } + }, + { + "origin": [-20, 58, -3], + "size": [40, 2, 6], + "uv": { + "north": {"uv": [24, 64], "uv_size": [40, 2]}, + "east": {"uv": [36, 48], "uv_size": [2, 6], "uv_rotation": 90}, + "south": {"uv": [64, 60], "uv_size": [40, 2]}, + "west": {"uv": [36, 54], "uv_size": [2, -6], "uv_rotation": 90}, + "up": {"uv": [76, 54], "uv_size": [-40, -6]}, + "down": {"uv": [76, 60], "uv_size": [-40, -6]} + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/jumpy_bug.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/jumpy_bug.geo.json deleted file mode 100644 index f6a76b20..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/geo/jumpy_bug.geo.json +++ /dev/null @@ -1,287 +0,0 @@ -{ - "format_version": "1.12.0", - "minecraft:geometry": [ - { - "description": { - "identifier": "geometry.jumpybug", - "texture_width": 512, - "texture_height": 512, - "visible_bounds_width": 10, - "visible_bounds_height": 9.5, - "visible_bounds_offset": [0, 4.25, 0] - }, - "bones": [ - { - "name": "root", - "pivot": [0, 0, 0] - }, - { - "name": "body", - "parent": "root", - "pivot": [0, 69, 0] - }, - { - "name": "torso", - "parent": "body", - "pivot": [0, 61, 0], - "cubes": [ - {"origin": [-10, 65, -18], "size": [20, 32, 36], "uv": [0, 164]}, - {"origin": [-12, 97, -46], "size": [24, 12, 80], "uv": [0, 0]}, - {"origin": [-10, 81, 18], "size": [20, 16, 16], "uv": [224, 152]}, - {"origin": [-8, 97, -78], "size": [16, 12, 32], "uv": [176, 92]}, - {"origin": [-2.5, 85, -78], "size": [5, 12, 8], "uv": [129, 0]}, - {"origin": [0, 73, -78], "size": [0, 18, 15], "uv": [200, -15]}, - {"origin": [0, 91, -78], "size": [0, 6, 60], "uv": [268, -60]}, - {"origin": [0, 65, -74], "size": [0, 6, 56], "uv": [268, -50]}, - {"origin": [-18, 67, -16], "size": [8, 24, 32], "uv": [208, 0]}, - {"origin": [10, 67, -16], "size": [8, 24, 32], "uv": [208, 0], "mirror": true}, - {"origin": [-12, 57, -42], "size": [24, 8, 64], "uv": [0, 92]}, - {"origin": [-8, 57, -74], "size": [16, 8, 32], "uv": [192, 212]} - ] - }, - { - "name": "right_eye", - "parent": "torso", - "pivot": [-18.32132, 90.25, -12.53553], - "cubes": [ - {"origin": [-22.7, 83.25, -17], "size": [5, 14, 14], "pivot": [-16.2, 90.25, -9], "rotation": [0, -45, 0], "uv": [0, 0]} - ] - }, - { - "name": "left_eye", - "parent": "torso", - "pivot": [18.32132, 90.25, -12.53553], - "cubes": [ - {"origin": [17.7, 83.25, -17], "size": [5, 14, 14], "pivot": [16.2, 90.25, -9], "rotation": [0, 45, 0], "uv": [0, 0], "mirror": true} - ] - }, - { - "name": "rightGrip", - "parent": "torso", - "pivot": [-18, 78, -16], - "cubes": [ - {"origin": [-22, 76, -28], "size": [8, 4, 12], "uv": [268, 268]} - ] - }, - { - "name": "leftGrip", - "parent": "torso", - "pivot": [18, 78, -16], - "cubes": [ - {"origin": [14, 76, -28], "size": [8, 4, 12], "uv": [268, 268], "mirror": true} - ] - }, - { - "name": "rightAntenna", - "parent": "torso", - "pivot": [-10, 95, 14], - "cubes": [ - {"origin": [-42, 93, 14], "size": [32, 4, 4], "uv": [208, 77]} - ] - }, - { - "name": "leftAntenna", - "parent": "torso", - "pivot": [10, 95, 14], - "cubes": [ - {"origin": [10, 93, 14], "size": [32, 4, 4], "uv": [208, 77], "mirror": true} - ] - }, - { - "name": "rightArm", - "parent": "torso", - "pivot": [-12, 93, -17], - "cubes": [ - {"origin": [-14, 91, -35], "size": [4, 4, 20], "uv": [64, 232]} - ] - }, - { - "name": "rightElbow", - "parent": "rightArm", - "pivot": [-12, 95, -29], - "cubes": [ - {"origin": [-15, 91, -35], "size": [6, 32, 6], "uv": [204, 268]} - ] - }, - { - "name": "rightClaw", - "parent": "rightElbow", - "pivot": [-12, 123, -35], - "cubes": [ - {"origin": [-14, 115, -51], "size": [4, 8, 16], "uv": [164, 268]}, - {"origin": [-12, 115, -83], "size": [0, 8, 32], "uv": [0, 232]} - ] - }, - { - "name": "leftArm", - "parent": "torso", - "pivot": [12, 93, -17], - "cubes": [ - {"origin": [10, 91, -35], "size": [4, 4, 20], "uv": [64, 232], "mirror": true} - ] - }, - { - "name": "leftElbow", - "parent": "leftArm", - "pivot": [12, 95, -29], - "cubes": [ - {"origin": [9, 91, -35], "size": [6, 32, 6], "uv": [204, 268], "mirror": true} - ] - }, - { - "name": "leftClaw", - "parent": "leftElbow", - "pivot": [12, 123, -35], - "cubes": [ - {"origin": [10, 115, -51], "size": [4, 8, 16], "uv": [164, 268], "mirror": true}, - {"origin": [12, 115, -83], "size": [0, 8, 32], "uv": [0, 232], "mirror": true} - ] - }, - { - "name": "backRightThigh", - "parent": "body", - "pivot": [-12, 65, 14], - "cubes": [ - {"origin": [-28, 57, 10], "size": [16, 8, 8], "uv": [116, 268]} - ] - }, - { - "name": "backRightKnee", - "parent": "backRightThigh", - "pivot": [-28, 65, 14], - "rotation": [0, 0, -90], - "cubes": [ - {"origin": [-60, 55, 9], "size": [32, 11, 10], "inflate": 0.025, "uv": [208, 56]} - ] - }, - { - "name": "backRightLeg", - "parent": "backRightKnee", - "pivot": [-60, 57, 14], - "rotation": [0, 0, 90], - "cubes": [ - {"origin": [-108, 57, 10], "size": [48, 8, 8], "uv": [176, 136]} - ] - }, - { - "name": "backRightFoot", - "parent": "backRightLeg", - "pivot": [-108, 64, 14], - "rotation": [0, 0, -90], - "cubes": [ - {"origin": [-132, 60, 12], "size": [24, 4, 4], "inflate": 0.025, "uv": [224, 200]}, - {"origin": [-148, 60, 14], "size": [16, 4, 0], "uv": [208, 85]} - ] - }, - { - "name": "backLeftThigh", - "parent": "body", - "pivot": [12, 65, 14], - "cubes": [ - {"origin": [12, 57, 10], "size": [16, 8, 8], "uv": [116, 268], "mirror": true} - ] - }, - { - "name": "backLeftKnee", - "parent": "backLeftThigh", - "pivot": [28, 65, 14], - "rotation": [0, 0, 90], - "cubes": [ - {"origin": [28, 55, 9], "size": [32, 11, 10], "inflate": 0.025, "uv": [208, 56], "mirror": true} - ] - }, - { - "name": "backLeftLeg", - "parent": "backLeftKnee", - "pivot": [60, 57, 14], - "rotation": [0, 0, -90], - "cubes": [ - {"origin": [60, 57, 10], "size": [48, 8, 8], "uv": [176, 136], "mirror": true} - ] - }, - { - "name": "backLeftFoot", - "parent": "backLeftLeg", - "pivot": [108, 64, 14], - "rotation": [0, 0, 90], - "cubes": [ - {"origin": [108, 60, 12], "size": [24, 4, 4], "inflate": 0.025, "uv": [224, 200], "mirror": true}, - {"origin": [132, 60, 14], "size": [16, 4, 0], "uv": [208, 85], "mirror": true} - ] - }, - { - "name": "frontLeftThigh", - "parent": "body", - "pivot": [12, 65, -14], - "cubes": [ - {"origin": [12, 57, -18], "size": [16, 8, 8], "uv": [116, 268], "mirror": true} - ] - }, - { - "name": "frontLeftKnee", - "parent": "frontLeftThigh", - "pivot": [28, 65, -14], - "rotation": [0, 0, 90], - "cubes": [ - {"origin": [28, 56, -19], "size": [32, 11, 10], "inflate": 0.025, "uv": [208, 56], "mirror": true} - ] - }, - { - "name": "frontLeftLeg", - "parent": "frontLeftKnee", - "pivot": [60, 57, -14], - "rotation": [0, 0, -90], - "cubes": [ - {"origin": [60, 57, -18], "size": [48, 8, 8], "uv": [176, 136], "mirror": true} - ] - }, - { - "name": "frontLeftFoot", - "parent": "frontLeftLeg", - "pivot": [108, 64, -14], - "rotation": [0, 0, 90], - "cubes": [ - {"origin": [108, 60, -16], "size": [24, 4, 4], "inflate": 0.025, "uv": [224, 200], "mirror": true}, - {"origin": [132, 60, -14], "size": [16, 4, 0], "uv": [208, 85], "mirror": true} - ] - }, - { - "name": "frontRightThigh", - "parent": "body", - "pivot": [-12, 65, -14], - "cubes": [ - {"origin": [-28, 57, -18], "size": [16, 8, 8], "uv": [116, 268]} - ] - }, - { - "name": "frontRightKnee", - "parent": "frontRightThigh", - "pivot": [-28, 65, -14], - "rotation": [0, 0, -90], - "cubes": [ - {"origin": [-60, 55, -19], "size": [32, 11, 10], "inflate": 0.025, "uv": [208, 56]} - ] - }, - { - "name": "frontRightLeg", - "parent": "frontRightKnee", - "pivot": [-60, 57, -14], - "rotation": [0, 0, 90], - "cubes": [ - {"origin": [-108, 57, -18], "size": [48, 8, 8], "uv": [176, 136]} - ] - }, - { - "name": "frontRightFoot", - "parent": "frontRightLeg", - "pivot": [-108, 64, -14], - "rotation": [0, 0, -90], - "cubes": [ - {"origin": [-132, 60, -16], "size": [24, 4, 4], "inflate": 0.025, "uv": [224, 200]}, - {"origin": [-148, 60, -14], "size": [16, 4, 0], "uv": [208, 85]} - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/king.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/king.geo.json index 427e095e..df0acd9d 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/geo/king.geo.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/king.geo.json @@ -494,8 +494,23 @@ {"origin": [19, 0, 13], "size": [5, 6, 7], "uv": [466, 173], "mirror": true}, {"origin": [24, 0, 9], "size": [6, 10, 13], "inflate": 0.01, "uv": [38, 249], "mirror": true} ] + }, + { + "name": "beam_anchor_center", + "parent": "head", + "pivot": [0, 91.5, -219] + }, + { + "name": "beam_anchor_left", + "parent": "L_head", + "pivot": [21, 82.5, -219] + }, + { + "name": "beam_anchor_right", + "parent": "R_head", + "pivot": [-21, 82.5, -219] } ] } ] -} \ No newline at end of file +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/lurking_terror.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/lurking_terror.geo.json deleted file mode 100644 index d42c4716..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/geo/lurking_terror.geo.json +++ /dev/null @@ -1,281 +0,0 @@ -{ - "format_version": "1.12.0", - "minecraft:geometry": [ - { - "description": { - "identifier": "geometry.lurkingterror", - "texture_width": 128, - "texture_height": 128, - "visible_bounds_width": 8, - "visible_bounds_height": 4.5, - "visible_bounds_offset": [0, 1.75, 0] - }, - "bones": [ - { - "name": "root", - "pivot": [0, 0, 0] - }, - { - "name": "body", - "parent": "root", - "pivot": [0, 0, 0], - "cubes": [ - {"origin": [-6, 0, -7], "size": [12, 12, 14], "uv": [0, 0]} - ] - }, - { - "name": "upperRightJaw", - "parent": "body", - "pivot": [0, 6, -7], - "cubes": [ - {"origin": [4.5, 13.5, -21], "size": [4, 3, 14], "pivot": [4, 5.5, -14], "rotation": [0, 0, -90], "uv": [0, 50]}, - {"origin": [5.5, 16.5, -21], "size": [3, 3, 14], "pivot": [4, 8.5, -14], "rotation": [0, 0, -90], "uv": [0, 85]}, - {"origin": [8.5, 15.5, -21], "size": [3, 4, 14], "pivot": [7, 8.5, -14], "rotation": [0, 0, -90], "uv": [64, 47]}, - {"origin": [4.5, 15.5, -21], "size": [4, 4, 2], "pivot": [7, 8.5, -14], "rotation": [0, 0, -90], "uv": [34, 68]}, - {"origin": [8.5, -1.5, -20], "size": [6, 1, 13], "pivot": [11, 9.5, -14], "rotation": [0, 0, 90], "uv": [64, 65]}, - {"origin": [14.5, -7.5, -20], "size": [1, 6, 13], "pivot": [11, 9.5, -14], "rotation": [0, 0, 90], "uv": [34, 87]} - ] - }, - { - "name": "upperLeftJaw", - "parent": "body", - "pivot": [0, 6, -7], - "cubes": [ - {"origin": [-8.5, 13.5, -21], "size": [4, 3, 14], "pivot": [-4, 5.5, -14], "rotation": [0, 0, 90], "uv": [0, 50]}, - {"origin": [-8.5, 16.5, -21], "size": [3, 3, 14], "pivot": [-4, 8.5, -14], "rotation": [0, 0, 90], "uv": [0, 85]}, - {"origin": [-11.5, 15.5, -21], "size": [3, 4, 14], "pivot": [-7, 8.5, -14], "rotation": [0, 0, 90], "uv": [0, 67]}, - {"origin": [-8.5, 15.5, -21], "size": [4, 4, 2], "pivot": [-7, 8.5, -14], "rotation": [0, 0, 90], "uv": [34, 68]}, - {"origin": [-14.5, -1.5, -20], "size": [6, 1, 13], "pivot": [-11, 9.5, -14], "rotation": [0, 0, -90], "uv": [64, 79]}, - {"origin": [-15.5, -7.5, -20], "size": [1, 6, 13], "pivot": [-11, 9.5, -14], "rotation": [0, 0, -90], "uv": [88, 0]} - ] - }, - { - "name": "lowerRightJaw", - "parent": "body", - "pivot": [0, 6, -7], - "cubes": [ - {"origin": [4.5, -4.5, -21], "size": [4, 3, 14], "pivot": [4, 6.5, -14], "rotation": [0, 0, 90], "uv": [52, 0]}, - {"origin": [5.5, -7.5, -21], "size": [3, 3, 14], "pivot": [4, 3.5, -14], "rotation": [0, 0, 90], "uv": [0, 85]}, - {"origin": [8.5, -7.5, -21], "size": [3, 4, 14], "pivot": [7, 3.5, -14], "rotation": [0, 0, 90], "uv": [64, 47]}, - {"origin": [4.5, -7.5, -21], "size": [4, 4, 2], "pivot": [7, 3.5, -14], "rotation": [0, 0, 90], "uv": [34, 68]}, - {"origin": [8.5, -7.5, -20], "size": [6, 1, 13], "pivot": [11, 3.5, -14], "rotation": [0, 0, 90], "uv": [64, 79]}, - {"origin": [14.5, -6.5, -20], "size": [1, 6, 13], "pivot": [11, 10.5, -14], "rotation": [0, 0, 90], "uv": [88, 0]} - ] - }, - { - "name": "lowerLeftJaw", - "parent": "body", - "pivot": [0, 6, -7], - "cubes": [ - {"origin": [-8.5, -4.5, -21], "size": [4, 3, 14], "pivot": [-4, 6.5, -14], "rotation": [0, 0, -90], "uv": [52, 0]}, - {"origin": [-8.5, -7.5, -21], "size": [3, 3, 14], "pivot": [-4, 3.5, -14], "rotation": [0, 0, -90], "uv": [0, 85]}, - {"origin": [-11.5, -7.5, -21], "size": [3, 4, 14], "pivot": [-7, 3.5, -14], "rotation": [0, 0, -90], "uv": [0, 67]}, - {"origin": [-8.5, -7.5, -21], "size": [4, 4, 2], "pivot": [-7, 3.5, -14], "rotation": [0, 0, -90], "uv": [34, 68]}, - {"origin": [-14.5, -7.5, -20], "size": [6, 1, 13], "pivot": [-11, 3.5, -14], "rotation": [0, 0, -90], "uv": [64, 65]}, - {"origin": [-15.5, -6.5, -20], "size": [1, 6, 13], "pivot": [-11, 10.5, -14], "rotation": [0, 0, -90], "uv": [34, 87]} - ] - }, - { - "name": "tailbase", - "parent": "body", - "pivot": [0, 6, 7], - "cubes": [ - {"origin": [-5, 1, 7], "size": [10, 10, 14], "uv": [0, 26]} - ] - }, - { - "name": "tailmiddle", - "parent": "tailbase", - "pivot": [0, 6, 21], - "cubes": [ - {"origin": [-3.5, 2.5, 21], "size": [7, 7, 14], "uv": [48, 26]} - ] - }, - { - "name": "tailtip", - "parent": "tailmiddle", - "pivot": [0, 6, 35], - "cubes": [ - {"origin": [-5, 1, 35], "size": [10, 10, 14], "uv": [49, 95]} - ] - }, - { - "name": "leftWing1", - "parent": "body", - "pivot": [-2, 12, -7], - "cubes": [ - {"origin": [-2, 12, -7], "size": [0, 32, 8], "uv": [48, 47]} - ] - }, - { - "name": "leftWing2", - "parent": "body", - "pivot": [-3, 12, 0], - "cubes": [ - {"origin": [-3, 12, 0], "size": [0, 27, 8], "uv": [48, 47]} - ] - }, - { - "name": "rightWing1", - "parent": "body", - "pivot": [2, 12, -7], - "cubes": [ - {"origin": [2, 12, -7], "size": [0, 32, 8], "uv": [48, 47], "mirror": true} - ] - }, - { - "name": "rightWing2", - "parent": "body", - "pivot": [3, 12, 0], - "cubes": [ - {"origin": [3, 12, 0], "size": [0, 27, 8], "uv": [48, 47], "mirror": true} - ] - }, - { - "name": "rightfrontleg", - "parent": "root", - "pivot": [-6, 8, -3], - "cubes": [ - {"origin": [-18, 6, -6], "size": [12, 4, 4], "uv": [90, 23]} - ] - }, - { - "name": "rightfrontknee", - "parent": "rightfrontleg", - "pivot": [-18, 6, -4], - "cubes": [ - {"origin": [-18, 6, -5], "size": [3, 16, 2], "uv": [36, 50]} - ] - }, - { - "name": "rightfrontfoot", - "parent": "rightfrontknee", - "pivot": [-18, 18, -4], - "cubes": [ - {"origin": [-35, 18, -4], "size": [20, 4, 0], "uv": [52, 19]} - ] - }, - { - "name": "rightbackleg", - "parent": "root", - "pivot": [-6, 8, 4], - "cubes": [ - {"origin": [-18, 6, 3], "size": [12, 4, 4], "uv": [90, 23]} - ] - }, - { - "name": "rightbackknee", - "parent": "rightbackleg", - "pivot": [-18, 6, 5], - "cubes": [ - {"origin": [-18, 6, 4], "size": [3, 16, 2], "uv": [36, 50]} - ] - }, - { - "name": "rightbackfoot", - "parent": "rightbackknee", - "pivot": [-18, 18, 5], - "cubes": [ - {"origin": [-35, 18, 5], "size": [20, 4, 0], "uv": [52, 19]} - ] - }, - { - "name": "leftfrontleg", - "parent": "root", - "pivot": [6, 8, -3], - "cubes": [ - {"origin": [6, 6, -6], "size": [12, 4, 4], "uv": [90, 23], "mirror": true} - ] - }, - { - "name": "leftfrontknee", - "parent": "leftfrontleg", - "pivot": [18, 6, -4], - "cubes": [ - {"origin": [15, 6, -5], "size": [3, 16, 2], "uv": [36, 50], "mirror": true} - ] - }, - { - "name": "leftfrontfoot", - "parent": "leftfrontknee", - "pivot": [18, 18, -4], - "cubes": [ - {"origin": [15, 18, -4], "size": [20, 4, 0], "uv": [52, 19], "mirror": true} - ] - }, - { - "name": "leftmiddleleg", - "parent": "root", - "pivot": [6, 8, 1.5], - "cubes": [ - {"origin": [6, 6, -1.5], "size": [12, 4, 4], "uv": [90, 23], "mirror": true} - ] - }, - { - "name": "leftmiddleknee", - "parent": "leftmiddleleg", - "pivot": [18, 6, 0.5], - "cubes": [ - {"origin": [15, 6, -0.5], "size": [3, 16, 2], "uv": [36, 50], "mirror": true} - ] - }, - { - "name": "leftmiddlefoot", - "parent": "leftmiddleknee", - "pivot": [18, 18, 0.5], - "cubes": [ - {"origin": [15, 18, 0.5], "size": [20, 4, 0], "uv": [52, 19], "mirror": true} - ] - }, - { - "name": "rightmiddleleg", - "parent": "root", - "pivot": [-6, 8, 1.5], - "cubes": [ - {"origin": [-18, 6, -1.5], "size": [12, 4, 4], "uv": [90, 23]} - ] - }, - { - "name": "rightmiddleknee", - "parent": "rightmiddleleg", - "pivot": [-18, 6, 0.5], - "cubes": [ - {"origin": [-18, 6, -0.5], "size": [3, 16, 2], "uv": [36, 50]} - ] - }, - { - "name": "rightmiddlefoot", - "parent": "rightmiddleknee", - "pivot": [-18, 18, 0.5], - "cubes": [ - {"origin": [-35, 18, 0.5], "size": [20, 4, 0], "uv": [52, 19]} - ] - }, - { - "name": "leftbackleg", - "parent": "root", - "pivot": [6, 8, 4], - "cubes": [ - {"origin": [6, 6, 3], "size": [12, 4, 4], "uv": [90, 23], "mirror": true} - ] - }, - { - "name": "leftbackknee", - "parent": "leftbackleg", - "pivot": [18, 6, 5], - "cubes": [ - {"origin": [15, 6, 4], "size": [3, 16, 2], "uv": [36, 50], "mirror": true} - ] - }, - { - "name": "leftbackfoot", - "parent": "leftbackknee", - "pivot": [18, 18, 5], - "cubes": [ - {"origin": [15, 18, 5], "size": [20, 4, 0], "uv": [52, 19], "mirror": true} - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/nightmare.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/nightmare.geo.json index f724110b..47b39246 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/geo/nightmare.geo.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/nightmare.geo.json @@ -105,6 +105,14 @@ {"origin": [-3, 30, 56], "size": [6, 7, 21], "uv": [70, 0]} ] }, + { + "name": "spike", + "parent": "torso", + "pivot": [0, 39, 2.5], + "cubes": [ + {"origin": [-3.5, 29, -3], "size": [7, 20, 11], "uv": [148, 128]} + ] + }, { "name": "neck", "parent": "torso", @@ -113,6 +121,14 @@ {"origin": [-9, 13, -24], "size": [18, 19, 16], "uv": [0, 42]} ] }, + { + "name": "spike2", + "parent": "neck", + "pivot": [0, 30, -14.5], + "cubes": [ + {"origin": [-3.5, 30, -19], "size": [7, 14, 9], "uv": [129, 49]} + ] + }, { "name": "head", "parent": "neck", @@ -123,11 +139,13 @@ {"origin": [-8, 22, -42], "size": [16, 5, 19], "uv": [0, 0]}, {"origin": [0, 27, -42], "size": [0, 13, 9], "uv": [0, 75]}, {"origin": [0, 27, -52], "size": [0, 4, 9], "uv": [0, 70]}, + {"origin": [-11, 28, -36], "size": [0, 4, 9], "uv": [0, 70]}, + {"origin": [11, 28, -36], "size": [0, 4, 9], "uv": [0, 70], "mirror": true}, {"origin": [-15, 24, -36], "size": [9, 4, 12], "uv": [0, 202]}, {"origin": [6, 24, -36], "size": [9, 4, 12], "uv": [0, 202], "mirror": true}, {"origin": [-6, 18, -54], "size": [12, 5, 12], "inflate": 0.1, "uv": [68, 179]}, {"origin": [-6, 21, -54], "size": [12, 6, 12], "uv": [0, 24]}, - {"origin": [-3, 27, -55], "size": [6, 6, 0], "uv": [53, 51]} + {"origin": [-3, 27, -53.75], "size": [6, 6, 0], "uv": [53, 51]} ] }, { diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/portal_gun_portal.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/portal_gun_portal.geo.json deleted file mode 100644 index 386019dc..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/geo/portal_gun_portal.geo.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "format_version": "1.12.0", - "minecraft:geometry": [ - { - "description": { - "identifier": "geometry.portal_gun_portal", - "texture_width": 64, - "texture_height": 64, - "visible_bounds_width": 4, - "visible_bounds_height": 4, - "visible_bounds_offset": [0, 0, 0] - }, - "bones": [ - { - "name": "Root", - "pivot": [0, 0, 0] - }, - { - "name": "Portal_Layer", - "parent": "Root", - "pivot": [0, 0, -0.4], - "cubes": [ - { - "origin": [-8, -16, -0.4], - "size": [16, 32, 0], - "uv": { - "north": {"uv": [0, 0], "uv_size": [64, 64]}, - "south": {"uv": [0, 0], "uv_size": [64, 64]} - } - } - ] - }, - { - "name": "Portal_Layer2", - "parent": "Root", - "pivot": [0, 0, 0.4], - "cubes": [ - { - "origin": [-8, -16, 0.4], - "size": [16, 32, 0], - "uv": { - "north": {"uv": [0, 0], "uv_size": [64, 64]}, - "south": {"uv": [0, 0], "uv_size": [64, 64]} - } - } - ] - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/queen.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/queen.geo.json index b9561118..ff218308 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/geo/queen.geo.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/queen.geo.json @@ -473,8 +473,23 @@ {"origin": [19, 0, 13], "size": [5, 6, 7], "uv": [466, 173], "mirror": true}, {"origin": [24, 0, 9], "size": [6, 10, 13], "inflate": 0.01, "uv": [38, 249], "mirror": true} ] + }, + { + "name": "beam_anchor_center", + "parent": "head", + "pivot": [0, 91.5, -219] + }, + { + "name": "beam_anchor_left", + "parent": "L_head", + "pivot": [21, 82.5, -219] + }, + { + "name": "beam_anchor_right", + "parent": "R_head", + "pivot": [-21, 82.5, -219] } ] } ] -} \ No newline at end of file +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/triffid.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/triffid.geo.json deleted file mode 100644 index 696e0a31..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/geo/triffid.geo.json +++ /dev/null @@ -1,210 +0,0 @@ -{ - "format_version": "1.12.0", - "minecraft:geometry": [ - { - "description": { - "identifier": "geometry.triffid", - "texture_width": 256, - "texture_height": 256, - "visible_bounds_width": 8, - "visible_bounds_height": 7.5, - "visible_bounds_offset": [0, 3.25, 0] - }, - "bones": [ - { - "name": "root", - "pivot": [0, 0, 0], - "cubes": [ - {"origin": [-16, 0, -16], "size": [32, 0, 32], "inflate": 0.01, "uv": [26, 2]} - ] - }, - { - "name": "base", - "parent": "root", - "pivot": [0, 0, 0], - "cubes": [ - {"origin": [-8, 0, -8], "size": [16, 8, 16], "uv": [32, 61]} - ] - }, - { - "name": "stemLower", - "parent": "base", - "pivot": [0, 6, 0], - "cubes": [ - {"origin": [-4, 6, -4], "size": [8, 17, 8], "inflate": 0.05, "uv": [1, 18]} - ] - }, - { - "name": "stemMiddle", - "parent": "stemLower", - "pivot": [0, 23, 0], - "cubes": [ - {"origin": [-4, 23, -4], "size": [8, 17, 8], "inflate": 0.025, "uv": [0, 43]} - ] - }, - { - "name": "stemUpper", - "parent": "stemMiddle", - "pivot": [0, 40, 0], - "cubes": [ - {"origin": [-4, 40, -4], "size": [8, 17, 8], "uv": [0, 68]} - ] - }, - { - "name": "head", - "parent": "stemUpper", - "pivot": [0, 57, 0], - "cubes": [ - {"origin": [-8, 57, -8], "size": [16, 5, 16], "uv": [0, 93]}, - {"origin": [-8, 57, -8], "size": [16, 5, 16], "inflate": 0.5, "uv": [0, 114]} - ] - }, - { - "name": "petal_L", - "parent": "head", - "pivot": [0, 61, 0], - "cubes": [ - {"origin": [0, 61, -14], "size": [12, 24, 28], "uv": [64, 85], "mirror": true}, - {"origin": [-8, 61, -14], "size": [8, 24, 0], "pivot": [0, 73, -14], "rotation": [0, -22.5, 0], "uv": [32, 53], "mirror": true}, - {"origin": [-8, 61, 14], "size": [8, 24, 0], "pivot": [0, 73, 14], "rotation": [0, 22.5, 0], "uv": [32, 53], "mirror": true}, - {"origin": [-11, 85, -14], "size": [11, 0, 28], "pivot": [0, 85, 0], "rotation": [0, 0, 45], "uv": [5, 24], "mirror": true} - ] - }, - { - "name": "saliva_L", - "parent": "petal_L", - "pivot": [0, 75.5, -13], - "cubes": [ - {"origin": [0, 75, -20], "size": [0, 1, 7], "inflate": 0.01, "uv": [35, 13], "mirror": true} - ] - }, - { - "name": "saliva_L2", - "parent": "petal_L", - "pivot": [0, 80.5, -13], - "cubes": [ - {"origin": [0, 80, -24], "size": [0, 1, 11], "inflate": 0.01, "uv": [31, 10], "mirror": true} - ] - }, - { - "name": "petal_R", - "parent": "head", - "pivot": [0, 61, 0], - "cubes": [ - {"origin": [-12, 61, -14], "size": [12, 24, 28], "uv": [64, 85]}, - {"origin": [0, 61, -14], "size": [8, 24, 0], "pivot": [0, 73, -14], "rotation": [0, 22.5, 0], "uv": [32, 53]}, - {"origin": [0, 61, 14], "size": [8, 24, 0], "pivot": [0, 73, 14], "rotation": [0, -22.5, 0], "uv": [32, 53]}, - {"origin": [0, 85, -14], "size": [11, 0, 28], "pivot": [0, 85, 0], "rotation": [0, 0, -45], "uv": [5, 24]} - ] - }, - { - "name": "saliva_R", - "parent": "petal_R", - "pivot": [0, 75.5, -13], - "cubes": [ - {"origin": [0, 75, -20], "size": [0, 1, 7], "inflate": 0.01, "uv": [35, 13]} - ] - }, - { - "name": "saliva_R2", - "parent": "petal_R", - "pivot": [0, 80.5, -13], - "cubes": [ - {"origin": [0, 80, -24], "size": [0, 1, 11], "inflate": 0.01, "uv": [31, 10]} - ] - }, - { - "name": "tongueBase", - "parent": "head", - "pivot": [0, 61, 0], - "cubes": [ - {"origin": [-2, 61, -2], "size": [4, 8, 4], "uv": [12, 0]} - ] - }, - { - "name": "tongueMiddle", - "parent": "tongueBase", - "pivot": [0, 69, 0], - "cubes": [ - {"origin": [-1, 69, -1], "size": [2, 16, 2], "uv": [0, 0]} - ] - }, - { - "name": "tongueTip", - "parent": "tongueMiddle", - "pivot": [0, 85, 0], - "cubes": [ - {"origin": [0, 85, -1], "size": [0, 16, 2], "uv": [8, 0]}, - {"origin": [-1, 101, -1], "size": [2, 2, 2], "uv": [32, 6]} - ] - }, - { - "name": "leafRight", - "parent": "base", - "pivot": [-8, 8, 0], - "cubes": [ - {"origin": [-28, 8, -12], "size": [20, 0, 24], "uv": [72, 61]} - ] - }, - { - "name": "leafTipRight", - "parent": "leafRight", - "pivot": [-28, 8, 0], - "cubes": [ - {"origin": [-56, 8, -12], "size": [28, 0, 24], "uv": [31, 37]} - ] - }, - { - "name": "leafLeft", - "parent": "base", - "pivot": [8, 8, 0], - "cubes": [ - {"origin": [8, 8, -12], "size": [20, 0, 24], "uv": [72, 61], "mirror": true} - ] - }, - { - "name": "leafTipLeft", - "parent": "leafLeft", - "pivot": [28, 8, 0], - "cubes": [ - {"origin": [28, 8, -12], "size": [28, 0, 24], "uv": [31, 37], "mirror": true} - ] - }, - { - "name": "leafFront", - "parent": "base", - "pivot": [0, 8, -8], - "rotation": [0, 90, 0], - "cubes": [ - {"origin": [0, 8, -20], "size": [20, 0, 24], "uv": [72, 61], "mirror": true} - ] - }, - { - "name": "leafTipFront", - "parent": "leafFront", - "pivot": [20, 8, -8], - "cubes": [ - {"origin": [20, 8, -20], "size": [28, 0, 24], "uv": [31, 37], "mirror": true} - ] - }, - { - "name": "leafBack", - "parent": "base", - "pivot": [0, 8, 8], - "rotation": [0, -90, 0], - "cubes": [ - {"origin": [0, 8, -4], "size": [20, 0, 24], "uv": [72, 61], "mirror": true} - ] - }, - { - "name": "leafTipBack", - "parent": "leafBack", - "pivot": [20, 8, 8], - "cubes": [ - {"origin": [20, 8, -4], "size": [28, 0, 24], "uv": [31, 37], "mirror": true} - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/items/blood_gods_blade.json b/common-1.20.1/src/main/resources/assets/antarchy/items/blood_gods_blade.json new file mode 100644 index 00000000..382f6094 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/items/blood_gods_blade.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "antarchy:item/blood_gods_blade" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/lang/de_de.json b/common-1.20.1/src/main/resources/assets/antarchy/lang/de_de.json index 737410dc..45fb7005 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/lang/de_de.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/lang/de_de.json @@ -526,10 +526,7 @@ "effect.antarchy.dread.description": "Verursacht visuelle und akustische Halluzinationen.", "effect.antarchy.paralyzed": "Gelähmt", "effect.antarchy.paralyzed.description": "Verhindert, dass sich Ziele bewegen.", - "effect.antarchy.inverted": "Umgekehrt", - "effect.antarchy.inverted.description": "Kehrt die Schwerkraft des Ziels um.", "effect.antarchy.commanded.description": "Kämpft für den Spieler, der das Ziel kommandiert hat.", - "effect.antarchy.dilated.description": "Verlangsamt den Zeitablauf für das betroffene Wesen.", "effect.antarchy.stinky": "Stinkend", "effect.antarchy.stinky.description": "Vertreibt passive und neutrale Kreaturen und zieht Gliederfüßer an.", "effect.antarchy.gooped.description": "Verlangsamt Bewegung und Angriffsgeschwindigkeit.", @@ -958,5 +955,11 @@ "advancements.antarchy.beetle_buddies.title": "Käferkumpel", "advancements.antarchy.beetle_buddies.description": "Zähme einen Herkuleskäfer.", "advancements.antarchy.herculean_task.title": "Herkulesaufgabe", - "advancements.antarchy.herculean_task.description": "Erschlage einen Herkuleskäfer." + "advancements.antarchy.herculean_task.description": "Erschlage einen Herkuleskäfer.", + "subtitles.antarchy.hoverboard_mount": "Hoverboard startet", + "subtitles.antarchy.hoverboard_dismount": "Hoverboard stoppt", + "subtitles.antarchy.hoverboard_idle": "Hoverboard summt" +, + "entity.antarchy.portal_gun_portal": "Portalgun-Portal", + "attribute.antarchy.entity_interaction_range": "Objekt‐Interaktionsweite" } diff --git a/common-1.20.1/src/main/resources/assets/antarchy/lang/en_us.json b/common-1.20.1/src/main/resources/assets/antarchy/lang/en_us.json index 7b1c83d4..501837a7 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/lang/en_us.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/lang/en_us.json @@ -321,6 +321,12 @@ "subtitles.antarchy.mantis_attack": "Mantis snaps", "subtitles.antarchy.mantis_fly_loop": "Mantis wings buzz", "item.antarchy.big_bertha": "Big Bertha", + "item.antarchy.giant_frying_pan": "Giant Frying Pan", + "tooltip.antarchy.giant_frying_pan.insert": "Right-click with food in your other hand, or right-click food onto it in your inventory, to add it.", + "tooltip.antarchy.giant_frying_pan.gui": "Shift-right-click to open the cooking slots.", + "tooltip.antarchy.giant_frying_pan.campfire": "Cooks campfire recipes without fuel.", + "tooltip.antarchy.giant_frying_pan.dig": "Digs shovel blocks in a 5x5 area.", + "tooltip.antarchy.giant_frying_pan.launch": "Hits launch enemies into the air.", "item.antarchy.bluestone": "Bluestone Dust", "item.antarchy.wasp_nest": "Wasp Nest", "item.antarchy.stink_bug": "Stink Bug", @@ -388,6 +394,12 @@ "item.antarchy.nightmare_scale": "Nightmare Scale", "item.antarchy.music_disc_underside": "Music Disc", "jukebox_song.antarchy.underside": "docshrekbot - underside", + "item.antarchy.music_disc_the_queen": "Music Disc", + "jukebox_song.antarchy.the_queen": "Karlljp - The Queen", + "item.antarchy.music_disc_verdance": "Music Disc", + "jukebox_song.antarchy.verdance": "Hewo - Verdance", + "item.antarchy.music_disc_grotesque": "Music Disc", + "jukebox_song.antarchy.grotesque": "DocShrekBot - Grotesque", "item.antarchy.nightmare_helmet": "Nightmare Helmet", "item.antarchy.nightmare_chestplate": "Nightmare Chestplate", "item.antarchy.nightmare_leggings": "Nightmare Leggings", @@ -524,6 +536,11 @@ "item.antarchy.blood_crystal_shard": "Blood Crystal Shard", "item.antarchy.blood_crystal_apple": "Blood Crystal Apple", "item.antarchy.blood_crystal_katana": "Blood Crystal Katana", + "item.antarchy.blood_gods_blade": "Blood God’s Blade", + "tooltip.antarchy.blood_gods_blade.bleeding": "Hits inflict Bleeding", + "tooltip.antarchy.blood_gods_blade.blood_moon": "Right-click: Summon Blood Moon", + "effect.antarchy.bleeding": "Bleeding", + "effect.antarchy.blood_moon": "Blood Moon", "item.antarchy.blood_crystal_helmet": "Blood Crystal Helmet", "item.antarchy.blood_crystal_chestplate": "Blood Crystal Chestplate", "item.antarchy.blood_crystal_leggings": "Blood Crystal Leggings", @@ -543,6 +560,17 @@ "item.antarchy.royal_guardian_boots": "Royal Guardian Boots", "item.antarchy.royal_guardian_sword": "Royal Guardian Sword", "item.antarchy.royal_guardian_shield": "Royal Guardian Shield", + "tooltip.antarchy.royal_guardian_sword.mode": "Mode: %s", + "tooltip.antarchy.royal_guardian_sword.mode.none": "None", + "tooltip.antarchy.royal_guardian_sword.mode.fire": "Fire", + "tooltip.antarchy.royal_guardian_sword.mode.frost": "Frost", + "tooltip.antarchy.royal_guardian_sword.mode.storm": "Storm", + "tooltip.antarchy.royal_guardian_sword.none": "Fully charged hits use the sword's normal damage without an elemental discharge.", + "tooltip.antarchy.royal_guardian_sword.fire": "Fully charged hits erupt in royal flame, burning the target and nearby enemies.", + "tooltip.antarchy.royal_guardian_sword.frost": "Fully charged hits freeze the target and raise a fan of royal ice spikes.", + "tooltip.antarchy.royal_guardian_sword.storm": "Fully charged hits call royal lightning that chains between nearby enemies.", + "tooltip.antarchy.royal_guardian_sword.controls": "Sneak-use to cycle modes. Fully charged hits unleash the selected element (%s-second cooldown).", + "message.antarchy.royal_guardian_sword.mode": "Royal Guardian Mode: %s", "item.antarchy.royal_assailant_helmet": "Royal Assailant Helmet", "item.antarchy.royal_assailant_chestplate": "Royal Assailant Chestplate", "item.antarchy.royal_assailant_leggings": "Royal Assailant Leggings", @@ -552,16 +580,29 @@ "tooltip.antarchy.royal_assailant_staff": "Opens paired tears that summon four allied Manticores for 30 seconds.", "tooltip.antarchy.royal_assailant_battleaxe.black_hole": "Use to create a Black Hole", "tooltip.antarchy.royal_assailant_battleaxe.dilation": "Hits apply Temporal Dilation", - "tooltip.antarchy.royal_guardian_shield.command": "Use to command the nearest mob", + "tooltip.antarchy.royal_guardian_shield.command": "Sneak-use to command nearby mobs to fight for you, empowering their offense, speed, and resilience.", + "tooltip.antarchy.royal_guardian_helmet.judgment": "Marked for Judgment: +%s%% damage against marked targets", + "tooltip.antarchy.royal_guardian_chestplate.judgment": "Marked for Judgment: +%s%% damage against marked targets", + "tooltip.antarchy.royal_guardian_chestplate.boundary": "Royal Boundary Key: Freezes incoming hostile projectiles and grants Strength to allies.", + "tooltip.antarchy.royal_guardian_leggings.judgment": "Marked for Judgment: +%s%% damage against marked targets", + "tooltip.antarchy.royal_guardian_boots.judgment": "Marked for Judgment: +%s%% damage against marked targets", "tooltip.antarchy.royal_assailant_chestplate.invert": "Press the inversion key to toggle inverted gravity on and off.", "tooltip.antarchy.royal_assailant_boots.fall": "Cancels fall damage while falling upward.", "item.antarchy.mantis_claw": "Mantis Claw", "tooltip.antarchy.mantis_claw.wall_cling": "Dual wield to cling to walls and jump upward.", "item.antarchy.king_scale": "King Scale", "item.antarchy.queen_scale": "Queen Scale", + "item.antarchy.temporal_tuner": "Temporal Tuner", + "tooltip.antarchy.temporal_tuner.description": "Adjusts your personal time dilation.", + "tooltip.antarchy.temporal_tuner.speed": "Current speed: %s%%", + "tooltip.antarchy.temporal_tuner.controls": "Shift + scroll: %s%% to %s%% speed", + "tooltip.antarchy.temporal_tuner.availability": "Resets when removed from your hotbar and offhand.", "item.antarchy.jerry_nucleus": "Jerry Nucleus", "tooltip.antarchy.jerry_nucleus.hatch": "While holding, interact with any bug egg or turtle egg to hatch it instantly.", "key.antarchy.mount_special": "Mount: Special / Charge", + "key.antarchy.royal_boundary": "Royal Boundary", + "message.antarchy.royal_boundary.activated": "Royal Boundary raised", + "message.antarchy.royal_boundary.recharging": "Royal Boundary is recharging", "key.antarchy.mount_flight_toggle": "Mount: Toggle Flight", "item.antarchy.springbug_leg": "Springbug Leg", "item.antarchy.springy_boots": "Springy Boots", @@ -632,6 +673,10 @@ "tooltip.antarchy.reverie_bottle.release": "Right click to release the Reverie.", "item.antarchy.gravity_gun": "Gravity Gun", "item.antarchy.portal_gun": "Portal Gun", + "item.antarchy.portal_gun_atlas": "Atlas Portal Gun", + "item.antarchy.portal_gun_p_body": "P-body Portal Gun", + "item.antarchy.portal_gun_craisin": "Craisin Portal Gun", + "item.antarchy.portal_gun_laynce": "Laynce Portal Gun", "item.antarchy.diamond_minecart": "The Diamond Minecart", "item.antarchy.cogwheel_pet": "Cogwheel Pet", "item.antarchy.fire_dragon_pet": "Fire Dragon Pet", @@ -728,6 +773,7 @@ "message.antarchy.rainbow_ant_failed_dimension_create": "Failed to create dimension. This likely means something is wrong in your infinity config. Restart/Relog and try again.", "message.antarchy.rainbow_ant_infinity_missing": "Infinity must be installed for rainbow ant dimensions to work.", "message.antarchy.rainbow_ant_needs_reagent": "This rainbow ant needs a reagent before it can open a dimension.", + "message.antarchy.teleport_arrival_failed": "No safe arrival spot was found. Teleportation was canceled.", "message.antarchy.red_ant_activated": "The red ant is ready to open its destination.", "message.antarchy.red_ant_needs_reagent": "This red ant needs a reagent before it can open its destination.", "message.antarchy.termite_activated": "The termite is ready to open its destination.", @@ -754,14 +800,8 @@ "effect.antarchy.dread.description": "Gives visual and audio hallucinations.", "effect.antarchy.paralyzed": "Paralyzed", "effect.antarchy.paralyzed.description": "Prevents targets from moving.", - "effect.antarchy.inverted": "Inverted", - "effect.antarchy.inverted.description": "Inverts the target's gravity.", "effect.antarchy.commanded": "Commanded", "effect.antarchy.commanded.description": "Fights for the player who commanded it.", - "effect.antarchy.dilated": "Temporal Dilation", - "effect.antarchy.dilated.description": "Slows the passage of time for the affected entity.", - "effect.antarchy.contracted": "Temporal Contraction", - "effect.antarchy.contracted.description": "Speeds the passage of time for the affected entity.", "effect.antarchy.stinky": "Stinky", "effect.antarchy.stinky.description": "Repels passive and neutral mobs, attracts arthropods.", "effect.antarchy.gooped": "Gooped", @@ -797,8 +837,17 @@ "tooltip.antarchy.gravity_gun.secondary": "Usage: pull in an entity or a valid block.", "tooltip.antarchy.gravity_gun.scroll": "Hold Ctrl and scroll to move the held target closer or farther away.", "tooltip.antarchy.gravity_gun.blacklist": "Does not affect blacklisted blocks or entities.", - "tooltip.antarchy.portal_gun.primary": "Attack: fire a blue portal.", - "tooltip.antarchy.portal_gun.secondary": "Use: fire an orange portal.", + "tooltip.antarchy.portal_gun.primary": "Attack: fire a %s portal.", + "tooltip.antarchy.portal_gun.secondary": "Use: fire a %s portal.", + "commands.antarchy.portalgun.clear.all": "Cleared %s portal gun portals", + "commands.antarchy.portalgun.clear.owners": "Cleared %s portal gun portals owned by %s players", + "tooltip.antarchy.portal_gun.color.blue": "blue", + "tooltip.antarchy.portal_gun.color.orange": "orange", + "tooltip.antarchy.portal_gun.color.purple": "purple", + "tooltip.antarchy.portal_gun.color.yellow": "yellow", + "tooltip.antarchy.portal_gun.color.red": "red", + "tooltip.antarchy.portal_gun.color.gold": "gold", + "tooltip.antarchy.portal_gun.color.green": "green", "tooltip.antarchy.portal_gun.reset": "Sneak + use: fizzle your active portals.", "tooltip.antarchy.antimetal_inversion": "Inverts entites directly below it", "tooltip.antarchy.diamond_minecart.forward": "Will be implemented later.", @@ -848,6 +897,8 @@ "advancements.antarchy.ultimate_armor.description": "Collect the full set of Ultimate Armor.", "advancements.antarchy.ultimate_bow.title": "Bowhemian Rhapsody", "advancements.antarchy.ultimate_bow.description": "Obtain an Ultimate Bow.", + "advancements.antarchy.sizzling_dedication.title": "Sizzling Dedication", + "advancements.antarchy.sizzling_dedication.description": "Obtain a Giant Frying Pan.", "advancements.antarchy.brutalfly.title": "Float Like a Brutalfly, Sting Like a Bee", "advancements.antarchy.brutalfly.description": "Obtain a Brutalfly Elytra.", "advancements.antarchy.royal_assailant_staff.title": "Fly my pretties!", @@ -860,12 +911,18 @@ "advancements.antarchy.water_cannon_craft.description": "Obtain a Water Cannon.", "advancements.antarchy.kill_toreterror.title": "More like Tore-Terrible Aim!", "advancements.antarchy.kill_toreterror.description": "Defeat the Toreterror.", + "advancements.antarchy.down_with_the_king.title": "Down with the King", + "advancements.antarchy.down_with_the_king.description": "Defeat the King.", + "advancements.antarchy.down_with_the_queen.title": "Down with the Queen", + "advancements.antarchy.down_with_the_queen.description": "Defeat the Queen.", "advancements.antarchy.challenge_games.title": "Challenge Games!", "advancements.antarchy.challenge_games.description": "Enter the Ruined Arena.", "advancements.antarchy.bugged_out.title": "Bugged Out", "advancements.antarchy.bugged_out.description": "Defeat the Alpha Mantis.", "death.attack.bed_bug_bite": "%1$s got bit by the bed bugs", "death.attack.bed_bug_bite.player": "%1$s got bit by the bed bugs while fighting %2$s", + "death.attack.moon_vacuum": "%1$s was pulled into the vacuum of space", + "death.attack.moon_vacuum.player": "%1$s was pulled into the vacuum of space by %2$s", "message.antarchy.dread_too_scared_to_sleep": "You are too scared to sleep.", "death.attack.kraken_mauling": "%1$s was dragged under by the Kraken", "death.attack.kraken_mauling.player": "%1$s was dragged under by the Kraken while fighting %2$s", @@ -900,6 +957,7 @@ "tooltip.antarchy.lucid_pearl": "Throws an inverted-gravity projectile.", "tooltip.antarchy.lucid_pearl.detail": "Teleports you to where it lands and applies Inverted.", "subtitles.antarchy.squidzooka_fire": "Squidzooka fires", + "subtitles.antarchy.undertrial_detect_player": "Undertrial spawner detects player", "subtitles.antarchy.size_ray_charge": "Size Ray charges", "subtitles.antarchy.size_ray_fire": "Size Ray fires", "subtitles.antarchy.ant_ambient": "Ants chirp", @@ -976,6 +1034,9 @@ "subtitles.antarchy.portal_open_blue": "Blue portal opens", "subtitles.antarchy.portal_open_orange": "Orange portal opens", "subtitles.antarchy.portal_fizzle": "Portal fizzles", + "subtitles.antarchy.portal_ambient": "Portal hums", + "subtitles.antarchy.portal_enter": "Entity enters a portal", + "subtitles.antarchy.portal_exit": "Entity exits a portal", "subtitles.antarchy.bed_bug_ambient": "Bed Bug chirps", "subtitles.antarchy.bed_bug_hurt": "Bed Bug hurts", "subtitles.antarchy.bed_bug_attack": "Bed Bug bites", @@ -1195,6 +1256,8 @@ "advancements.antarchy.duct_tape.title": "I sawed this boat in half!", "advancements.antarchy.duct_tape.description": "and fixed it with the power of duct tape!", "key.categories.antarchy": "Antarchy", + "key.antarchy.portal_gun_zoom": "Portal Gun Zoom", + "key.antarchy.portal_gun_reset": "Portal Gun Reset", "key.antarchy.brutalfly_flap": "Brutalfly Elytra: Flap", "advancements.antarchy.shrink_ray_craft.title": "Honey, I Shrunk the Mobs", "advancements.antarchy.shrink_ray_craft.description": "Craft a Shrink Ray.", @@ -1239,6 +1302,10 @@ "entity.antarchy.princess": "Princess", "entity.antarchy.king": "The King", "entity.antarchy.queen": "The Queen", + "boss.antarchy.king.phase_two": "THE LAW TIGHTENS", + "boss.antarchy.king.phase_three": "ROYAL JUDGMENT", + "boss.antarchy.queen.phase_two": "GRAVITY DOMINION", + "boss.antarchy.queen.phase_three": "TEMPORAL COLLAPSE", "entity.antarchy.manticore": "Manticore", "entity.antarchy.royal_black_hole": "Singularity", "entity.antarchy.royal_bolt": "Royal Bolt", @@ -1413,103 +1480,194 @@ ,"decree.antarchy.kneel": "KNEEL" ,"decree.antarchy.kneel.subtitle": "Crouch within five seconds." ,"decree.antarchy.close_quarters": "CLOSE QUARTERS" - ,"decree.antarchy.close_quarters.subtitle": "Projectiles are forbidden." + ,"decree.antarchy.close_quarters.subtitle": "Reach the King's 16-block circle within 6 seconds. Projectiles are forbidden." + ,"decree.antarchy.violated": "DECREE VIOLATED" + ,"decree.antarchy.violated.subtitle": "Your hearts are halved for 30. Face the King's judgment." + ,"effect.antarchy.royal_vitality_penalty": "Royal Vitality Diminished" ,"decree.antarchy.come_no_closer": "COME NO CLOSER" ,"decree.antarchy.come_no_closer.subtitle": "Keep out of the King's inner radius." ,"decree.antarchy.fight_me_coward": "FIGHT ME, COWARD!" ,"decree.antarchy.fight_me_coward.subtitle": "Approach the King." ,"decree.antarchy.no_respite": "NO RESPITE" ,"decree.antarchy.no_respite.subtitle": "Healing is sealed." - ,"decree.antarchy.no_retreat": "NO RETREAT" - ,"decree.antarchy.no_retreat.subtitle": "Do not flee the King's presence." - ,"decree.antarchy.keep_your_distance": "KEEP YOUR DISTANCE" - ,"decree.antarchy.keep_your_distance.subtitle": "Stay out of the King's reach." ,"decree.antarchy.stand_tall": "STAND TALL" ,"decree.antarchy.stand_tall.subtitle": "Do not crouch before the King." ,"decree.antarchy.stand_your_ground": "STAND YOUR GROUND" ,"decree.antarchy.stand_your_ground.subtitle": "Do not stray from where you stand." ,"decree.antarchy.hands_off_the_crown": "HANDS OFF THE CROWN" ,"decree.antarchy.hands_off_the_crown.subtitle": "Strike the King and be judged." - ,"decree.antarchy.advance": "ADVANCE" - ,"decree.antarchy.advance.subtitle": "Close on the King or be judged." ,"decree.antarchy.show_no_mercy": "SHOW NO MERCY" ,"decree.antarchy.show_no_mercy.subtitle": "Keep dealing damage." ,"menu.antarchy.royal_judgment": "Royal Judgment" ,"enchantment.antarchy.feather_rising": "Feather Rising" ,"enchantment.antarchy.chronosphere": "Chronosphere" - ,"block.antarchy.computer": "Computer" - ,"item.antarchy.computer": "Computer" - ,"item.antarchy.floppy_disk": "Floppy Disk" - ,"item.antarchy.floppy_disk.tooltip": "Put in a computer to find out more" - ,"screen.antarchy.computer": "ANTINTOSH OS" + ,"entity.minecraft.villager.antarchy.computer_scientist": "Game Developer" + ,"entity.minecraft.villager.computer_scientist": "Game Developer" + ,"block.antarchy.ant_trap": "Ant Trap" + ,"item.antarchy.bug_spray": "Bug Spray" + ,"entity.minecraft.villager.antarchy.pest_control": "Pest Control" + ,"entity.minecraft.villager.pest_control": "Pest Control" ,"guide.antarchy.category.general": "GENERAL" ,"guide.antarchy.category.elythia": "ELYTHIA" ,"guide.antarchy.category.thoraxis": "THORAXIS" ,"guide.antarchy.category.cavaryn": "CAVARYN" ,"guide.antarchy.missing_title": "CORRUPTED FILE" ,"guide.antarchy.missing_disk_title": "UNREADABLE DISK" - ,"guide.antarchy.disk.introduction.title": "INITIAL BOOT NOTES" - ,"guide.antarchy.disk.chronosphere.title": "CHRONOSPHERE DATA" ,"guide.antarchy.disk.toreterror_arena.title": "TORETERROR ARENA DATA" ,"guide.antarchy.disk.high_fructose_corn_syrup.title": "CORN SYRUP DATA" ,"guide.antarchy.disk.elythia.title": "ELYTHIA ACCESS RECORD" ,"guide.antarchy.disk.flying_squirrel.title": "FLYING SQUIRREL FIELD NOTES" + ,"guide.antarchy.disk.basilisk_game.title": "BASILISK.EXE" + ,"guide.antarchy.disk.antman_game.title": "ANTMAN.EXE" ,"guide.antarchy.disk.cavaryn.title": "CAVARYN ACCESS RECORD" ,"guide.antarchy.disk.thoraxis.title": "THORAXIS ACCESS RECORD" - ,"guide.antarchy.disk.temporal_fields.title": "TEMPORAL FIELDS MANUAL" + ,"guide.antarchy.disk.temporal_fields.title": "TEMPORAL MANIPULATION" ,"guide.antarchy.disk.bloodglass.title": "BLOODGLASS SURVIVAL NOTES" - ,"guide.antarchy.disk.vortex.title": "VORTEX CONTROL NOTES" - ,"guide.antarchy.entry.introduction.title": "SYSTEM INITIALIZED" - ,"guide.antarchy.entry.introduction.subtitle": "A machine for remembering what should have stayed forgotten." - ,"guide.antarchy.entry.introduction.description": "Insert recovered floppy disks to expand this archive. The machine remembers. The machine does not forgive." - ,"guide.antarchy.entry.chronosphere.title": "Chronosphere" - ,"guide.antarchy.entry.chronosphere.subtitle": "Temporal equipment record" - ,"guide.antarchy.entry.chronosphere.description": "A record for the Chronosphere enchantment will be expanded here. Further data is pending." - ,"guide.antarchy.entry.toreterror_arena.title": "Toreterror Arena" - ,"guide.antarchy.entry.toreterror_arena.subtitle": "Structure location fragment" - ,"guide.antarchy.entry.toreterror_arena.description": "The nearest arena is rumored to lie beyond the current horizon. Directional analysis is pending in this prototype." - ,"guide.antarchy.entry.elythia.title": "Elythia" - ,"guide.antarchy.entry.elythia.subtitle": "Dimension and portal access record" - ,"guide.antarchy.entry.elythia.description": "Elythia is reached through an Elythia portal made with a valid frame. A sacrificed Brown Ant activates the portal. The dimension contains oceans, meadows, forests, coral spikes, and other surface biomes." + ,"guide.antarchy.disk.vortex.title": "VORTEX" + ,"guide.antarchy.entry.toreterror.title": "Toreterror" + ,"guide.antarchy.entry.toreterror_arena.subtitle": "Elythia Ocean boss record" + ,"guide.antarchy.entry.toreterror_arena.description": "A powerful creature of the Testudines taxonomic order. It dwells in a coliseum somewhere in an Elythia Ocean; this archive can trace the nearest one for you, and its coordinates are listed below." + ,"guide.antarchy.entry.toreterror_arena.description2": "Extremely territorial. A cannon mounted in its shell fires water at extremely high pressure, which makes it considerably dangerous to approach." + ,"guide.antarchy.disk.hercules_beetle.title": "HERCULES BEETLE FIELD NOTES" + ,"guide.antarchy.entry.hercules_beetle.title": "Hercules Beetle" + ,"guide.antarchy.entry.hercules_beetle.subtitle": "Cavaryn megafauna record" + ,"guide.antarchy.entry.hercules_beetle.description": "An enormous insect dwelling in Cavaryn. It is capable of a very powerful charge that can, and will, displace terrain." + ,"guide.antarchy.entry.hercules_beetle.description2": "Aggressive on sight and omnivorous." + ,"guide.antarchy.entry.hercules_beetle.description3": "Once injured in combat, the beast can be pacified with Broodfruit. When pacified, it bonds with the one who fed it, almost as if it respects them after the battle." + ,"guide.antarchy.entry.brown_ant.title": "Brown Ant" + ,"guide.antarchy.entry.brown_ant.subtitle": "The way to Elythia" + ,"guide.antarchy.entry.brown_ant.description": "Right-click a Brown Ant and it carries you to Elythia. Sacrifice one inside a Mossy Ouranwood frame and you get a portal that stays lit for good." + ,"guide.antarchy.entry.brown_ant.description2": "Their nests turn up in Overworld forests, taigas and plains, and in Elythia. Brown Ants are harmless, and they breed with sugar." + ,"guide.antarchy.entry.brown_ant.description3": "Cloud Sea only forms high in the sky, and only in about one region in five. Toreterror Arenas are out in the Elythia Ocean." + ,"guide.antarchy.entry.termite.title": "Termite" + ,"guide.antarchy.entry.termite.subtitle": "The way to Cavaryn" + ,"guide.antarchy.entry.termite.description": "Right-click a Termite to travel to Cavaryn, or sacrifice one inside a Myrmite frame to light a permanent portal." + ,"guide.antarchy.entry.termite.description2": "Termites nest in Overworld forests, taigas and plains, and in Cavaryn itself. They strip and eat wood near them, so keep them away from wooden builds. They back away from torchlight and breed with wood." + ,"guide.antarchy.entry.termite.description3": "In Cavaryn, staying in one spot, killing hostiles or breaking eggs draws attention. Push it far enough and a swarm finds you. Moving on lets the area cool down." + ,"guide.antarchy.entry.termite.description4": "Glowcap, Biowart, Moleworm, Wormy and Brooding Tunnel regions escalate differently. In most of them the last wave of a swarm brings a Hercules Beetle." + ,"guide.antarchy.entry.red_ant.title": "Red Ant" + ,"guide.antarchy.entry.red_ant.subtitle": "The way to Thoraxis" + ,"guide.antarchy.entry.red_ant.description": "Right-click a Red Ant to travel to Thoraxis, or sacrifice one inside a Nyxite frame to light a permanent portal. They nest in the Nether and attack on sight. Fire doesn't hurt them, and they can walk across lava." + ,"guide.antarchy.entry.red_ant.description2": "Thoraxis doesn't follow Nether rules. Beds fail but respawn anchors work, the sky never lightens, and gravity flips once you go far enough below the middle." + ,"guide.antarchy.entry.red_ant.description3": "Bluestone is wired like Redstone but reacts the opposite way. Antimetal blocks reverse gravity nearby and have their own rails." + ,"guide.antarchy.entry.red_ant.description4": "Lower down, the land tends to run Dream Dunes, Umbral Hills, Lucid Pools, then Nadir Forest. It's a tendency, not a fixed order." + ,"guide.antarchy.entry.red_ant.description5": "Dimensional tears come in linked pairs. Step into one and you come out of its twin with your gravity flipped for a while." + ,"guide.antarchy.gallery.elythia": "Seen in Elythia" + ,"guide.antarchy.gallery.cavaryn": "Seen in Cavaryn" + ,"guide.antarchy.gallery.thoraxis": "Seen in Thoraxis" + ,"guide.antarchy.gallery.drops": "Drops" ,"guide.antarchy.entry.flying_squirrel.title": "Flying Squirrel" ,"guide.antarchy.entry.flying_squirrel.subtitle": "Elythia companion record" - ,"guide.antarchy.entry.flying_squirrel.description": "You wanna get nuts? Let’s get nuts. Flying squirrels like nuts, trees, and making a dramatic exit. Feed one to befriend it, then give it plenty of canopy to climb through. If you tell it to, it will perch on top of your head. If it falls, do not panic. It may be gliding. If you fall, you have my permission to panic." - ,"guide.antarchy.entry.cavaryn.title": "Cavaryn" - ,"guide.antarchy.entry.cavaryn.subtitle": "Dimension and portal access record" - ,"guide.antarchy.entry.cavaryn.description": "Cavaryn is reached through a Cavaryn portal made with a valid frame. A sacrificed Termite activates the portal. The dimension is a deep network of caves, including Glowcap, Biowart, Moleworm, Wormy, and Brooding Tunnel regions." - ,"guide.antarchy.entry.thoraxis.title": "Thoraxis" - ,"guide.antarchy.entry.thoraxis.subtitle": "Dimension and portal access record" - ,"guide.antarchy.entry.thoraxis.description": "Thoraxis is reached through a Thoraxis portal made with a valid frame. A sacrificed Red Ant activates the portal. Its vertical progression includes Dream Dunes, Umbral Hills, Lucid Pools, and Nadir Forest." - ,"guide.antarchy.entry.temporal_fields.title": "Temporal Fields" - ,"guide.antarchy.entry.temporal_fields.subtitle": "Time dilation and Chronosphere reference" - ,"guide.antarchy.entry.temporal_fields.description": "Time Dilation and Time Contraction alter the rate of affected entities. Chronosphere armor creates a player-centered field at 35 percent rate; higher levels expand its radius." + ,"guide.antarchy.entry.flying_squirrel.description": "You wanna get nuts? Let’s get nuts." + ,"guide.antarchy.entry.flying_squirrel.description2": "Flying squirrels like nuts, trees, and dramatic exits. Feed one to befriend it, then give it plenty of canopy to climb through." + ,"guide.antarchy.entry.flying_squirrel.description3": "It may perch on top of your head. This is adorable, but it does make looking upward needlessly complicated." + ,"guide.antarchy.entry.flying_squirrel.description4": "If it falls, do not panic. It may be gliding. If you fall, you have my permission to panic." + ,"guide.antarchy.disk.glimmer.title": "GLIMMER FIELD GUIDE" + ,"guide.antarchy.entry.glimmer.title": "Glimmer" + ,"guide.antarchy.entry.glimmer.subtitle": "Bottled companion and variant record" + ,"guide.antarchy.entry.glimmer.description": "Glimmers are common around Elythia's Glimmering Pools, and rarely appear after dark in Ouranwood Forest, the Elythia Meadow, and the Peach Forest. A wild one caught in daylight away from a pool fades out." + ,"guide.antarchy.entry.glimmer.description2": "Feed a wild Glimmer a Spirit Apple to tame it. An empty-handed right-click cycles it between following, wandering, and sitting." + ,"guide.antarchy.entry.glimmer.description3": "A tamed Glimmer can be bottled: right-click it with an empty glass bottle to capture it, cooldowns and all. Right-click the bottle again anywhere to release it." + ,"guide.antarchy.entry.glimmer.description4": "Variant depends on where it was born. Glimmering Pools produce Frogs, Ouranwood Deer, and Apple Cows. Ouranwood Forest produces Frogs and Deer. The Elythia Meadow produces Apple Cows, and the Peach Forest produces Elkas. The Ant variant is not tied to any habitat; it only appears on a random roll." + ,"guide.antarchy.entry.glimmer.description5": "Apple Cow: hunger drains 25 percent slower, and it grants a burst of Saturation and Regeneration when your food runs low. Ouranwood Deer: Speed I, and it knocks back hostile mobs you sprint into." + ,"guide.antarchy.entry.glimmer.description6": "Frog: Jump Boost I, and it can devour a nearby hostile mob, growing bigger and stronger for a while. Ant: slightly longer attack reach, and a solid hit on something large grants a burst of Strength II." + ,"guide.antarchy.entry.glimmer.description7": "Elka: Bloodglass Ward II. When one of those ward hearts breaks, it shatters into a shockwave around you." + ,"guide.antarchy.entry.temporal_fields.title": "Temporal Manipulation" + ,"guide.antarchy.entry.temporal_fields.subtitle": "Time dilation, contraction, and Chronosphere reference" + ,"guide.antarchy.entry.temporal_fields.description": "Time Dilation and Time Contraction change how fast affected entities experience the world." + ,"guide.antarchy.entry.temporal_fields.description2": "A worn Chronosphere creates a permanent field around you at 35 percent speed. Field radius is 1.5 blocks at level 1, 2.5 at level 2, and 3.5 at level 3+; entities are affected out to twice that radius." + ,"guide.antarchy.entry.temporal_fields.description3": "The effect reaches living entities, projectiles, and dropped items, and anything fired from inside a field keeps that field's speed. Overlapping fields do not stack; the slower or faster rule wins. Kings and Queens are immune to it." ,"guide.antarchy.entry.bloodglass.title": "Bloodglass" ,"guide.antarchy.entry.bloodglass.subtitle": "Reactive protection system" - ,"guide.antarchy.entry.bloodglass.description": "Blood Crystal armor grants Bloodglass Hearts that block an incoming hit, shatter, and recharge. Blood Crystal Apples grant temporary Bloodglass Ward, and the Katana provides launch, dash, and crimson-trail mobility." - ,"guide.antarchy.entry.vortex.title": "Vortex Systems" + ,"guide.antarchy.entry.bloodglass.description": "Blood Crystal armor grants Bloodglass Hearts that absorb one hit, shatter, and recharge." + ,"guide.antarchy.entry.bloodglass.description2": "Each equipped piece adds one heart, and every heart recharges on its own 30-second timer. A Blood Crystal Apple grants two temporary charges lasting 2 minutes, on top of the armor's hearts." + ,"guide.antarchy.entry.bloodglass.description3": "The Katana has a longer reach than it looks, a brief hit-immunity window right after each dash, and a short cooldown before it can dash again." + ,"guide.antarchy.entry.vortex.title": "Vortex" ,"guide.antarchy.entry.vortex.subtitle": "Vortex Lens and Eye of the Storm reference" - ,"guide.antarchy.entry.vortex.description": "Redstone power pulls entities into a Vortex Lens beam while Bluestone power blasts them away. The Eye of the Storm launches an updraft and can hurl a homing tornado that carries foes." + ,"guide.antarchy.entry.vortex.description": "The Vortex Lens pulls or pushes depending on signal: Redstone pulls, Bluestone pushes." + ,"guide.antarchy.entry.vortex.description2": "Signal strength scales its size: a 1.5 to 10-block pull radius, with height from 3 to 20 blocks. It deals no damage on its own." + ,"guide.antarchy.entry.vortex.description3": "The Eye of the Storm launches an updraft and a homing tornado on its own trigger, unlike the Lens's signal-controlled field." ,"guide.antarchy.entry.nightmare.title": "Nightmare" ,"guide.antarchy.entry.nightmare.subtitle": "Thoraxis hostile entity record" - ,"guide.antarchy.entry.nightmare.description": "A hostile entity recorded in the deepest Thoraxis regions. The recovered model is presented in monochrome archive mode." + ,"guide.antarchy.entry.nightmare.description": "Recorded in the deepest Thoraxis regions." + ,"guide.antarchy.entry.nightmare.description2": "Its attacks hit harder the lower your health is, so a bad fight gets worse fast." + ,"guide.antarchy.entry.nightmare.description3": "Past half health it takes to the air and opens a pair of portals, stepping through one to teleport behind you and strike. Watch both portals, not just the one it disappears into." ,"guide.antarchy.entry.high_fructose_corn_syrup.title": "High Fructose Corn Syrup" - ,"guide.antarchy.entry.high_fructose_corn_syrup.subtitle": "Nutritional and operational notes" - ,"guide.antarchy.entry.high_fructose_corn_syrup.description": "A sweet substance of uncertain strategic value. Doctoral enthusiasm surrounding it is statistically suspicious." - ,"screen.antarchy.computer.first_use.title": "INITIAL PASSWORD SETUP" - ,"screen.antarchy.computer.first_use.prompt": "CREATE A PASSWORD TO CONTINUE" - ,"screen.antarchy.computer.first_use.confirm": "CONFIRM PASSWORD" - ,"screen.antarchy.computer.busy": "COMPUTER IN USE" - ,"screen.antarchy.computer.eject_denied": "ACCESS DENIED: SETTINGS REQUIRED" - ,"screen.antarchy.computer.ejected": "DISK EJECTED" - ,"antintosh.antarchy.desktop.archive": "ARCHIVE" - ,"antintosh.antarchy.desktop.settings": "SETTINGS" - ,"antintosh.antarchy.desktop.terminal": "TERMINAL" - ,"antintosh.antarchy.desktop.antpaint": "ANTPAINT" - ,"antintosh.antarchy.desktop.antmail": "ANTMAIL" - ,"antintosh.antarchy.desktop.text_editor": "TEXT EDITOR" - ,"antintosh.antarchy.antmail.compose": "COMPOSE MESSAGE" - ,"antintosh.antarchy.antmail.attach_text": "ATTACH TEXT FILE" - ,"antintosh.antarchy.antmail.attach_image": "ATTACH ANTPAINT IMAGE" - ,"antintosh.antarchy.antmail.save_attachment": "SAVE ATTACHMENT" - ,"antintosh.antarchy.antmail.address": "COMPUTER ADDRESS" + ,"guide.antarchy.entry.high_fructose_corn_syrup.subtitle": "Field notes on a suspiciously popular bottle" + ,"guide.antarchy.entry.high_fructose_corn_syrup.description": "Brew it by adding Corn, found wild or grown as a crop, to a Water Bottle." + ,"guide.antarchy.entry.high_fructose_corn_syrup.description2": "Drunk on its own, it causes four seconds of Nausea. A doctor would not recommend it." + ,"guide.antarchy.entry.high_fructose_corn_syrup.description3": "Used on any food in a crafting grid, it Americanizes it: extra nutrition, extra saturation, and a burst of Regeneration." + ,"guide.antarchy.entry.rainbow_ant.title": "Rainbow Ant" + ,"guide.antarchy.entry.rainbow_ant.subtitle": "Dimensional gateway record" + ,"guide.antarchy.entry.rainbow_ant.description": "A Rainbow Ant. It's your average dimensional ant... or so I thought at first. The Rainbow Ant doesn't lead to any dimension unless it is fed Rainbow Sugar." + ,"guide.antarchy.entry.rainbow_ant.description2": "I visited the dimension of the Rainbow Ant and returned, intending to note what I saw. When I went back to the ant's dimension later, I found it was a different dimension." + ,"guide.antarchy.entry.rainbow_ant.description3": "My previous notes on the Rainbow Ant have unfortunately been discarded, as I now know the dimension is different every time. For all I know, there could be millions of dimensions this fascinating creature acts as a gateway to." + ,"guide.antarchy.disk.rainbow_ant.title": "RAINBOW ANT FIELD NOTES" + ,"guide.antarchy.disk.brutalfly.title": "BRUTALFLY FIELD NOTES" + ,"guide.antarchy.entry.brutalfly.title": "Brutalfly" + ,"guide.antarchy.entry.brutalfly.subtitle": "Elythia hostile record" + ,"guide.antarchy.entry.brutalfly.description": "An oversized Elythian butterfly. Unlike its smaller counterparts, it is incredibly aggressive once out of its cocoon." + ,"guide.antarchy.entry.brutalfly.description2": "Like any butterfly, a Brutalfly begins in a cocoon. It is relatively safe to be near the cocoon as long as it remains undamaged." + ,"guide.antarchy.entry.brutalfly.description3": "If the Brutalfly is on the assault, all you can do is dispose of it." + ,"guide.antarchy.entry.brutalfly.description4": "Brutaflies are found in Elythia's wooded areas. Look for their cocoons hanging beneath the canopy." + ,"guide.antarchy.entry.easter_bunny.title": "Easter Bunny" + ,"guide.antarchy.entry.easter_bunny.subtitle": "Entity record" + ,"guide.antarchy.entry.easter_bunny.description": "The Easter Bunny lays spawn eggs for all sorts of creatures! Life is like an easter egg, you never know what you're gonna get." + ,"guide.antarchy.entry.easter_bunny.description2": "Feed them carrots, golden carrots, or dandelions." + ,"guide.antarchy.entry.duplicator_tree.title": "Duplicator Tree" + ,"guide.antarchy.entry.duplicator_tree.subtitle": "Block record" + ,"guide.antarchy.entry.duplicator_tree.description": "A mature Duplicator Tree copies a nearby solid block into an empty, supported space next to it." + ,"guide.antarchy.entry.duplicator_tree.description2": "Fluids, block entities, and other Duplicator Tree blocks will not copy, and duplication happens occasionally, not on a fixed timer." + ,"guide.antarchy.disk.kraken.title": "KRAKEN SIGHTING NOTES" + ,"guide.antarchy.entry.kraken.title": "Kraken" + ,"guide.antarchy.entry.kraken.subtitle": "Guardian of the sea record" + ,"guide.antarchy.entry.kraken.description": "An absurdly huge squid acting as a guardian of the sea. It holds almost complete control over the weather and the sea, and commands other cephalopods with great ease." + ,"guide.antarchy.entry.kraken.description2": "If you're feeling unlucky, whatever you do, do not attack its younger cousins. Killing a Squid while under Bad Omen may summon a Kraken where it died. Each level of Bad Omen raises the odds, about one percent per level." + ,"guide.antarchy.entry.kraken.description3": "It rises from nearby water, so pick your fight at sea. On very rare occasions, a single slain Squid calls ten of them at once." + ,"guide.antarchy.entry.kraken.description4": "A creature of mass destruction that will stop at NOTHING to finish off those who aggravated it." + ,"guide.antarchy.disk.king.title": "KING'S TREE FIELD NOTES" + ,"guide.antarchy.entry.king.title": "King" + ,"guide.antarchy.entry.king.subtitle": "Elythia royal record" + ,"guide.antarchy.entry.king.description": "The King once ruled Elythia alongside his other half, until one day he struck her down and banished her. Since that day he has remained alone at their royal tree, found at the coordinates below." + ,"guide.antarchy.entry.king.description2": "Rule and order are all he has left, and he clings to them. He has grown dull and bitter, and the only thing that brings him any semblance of joy is the torment of others. He's aggressive, he's egotistical, he's sadistic, and he's powerful." + ,"guide.antarchy.entry.king.description3": "He will attack you on sight, and he will toy with you. Mid-battle he issues Decrees: KNEEL, DO NOT RUN, COME NO CLOSER, SHOW NO MERCY. His word is law, and he expects it obeyed at once." + ,"guide.antarchy.entry.king.description4": "Break a Decree and your hearts are halved for thirty seconds while you face his judgment. He harnesses the elements of thunder, frost, and flame to deliver it." + ,"guide.antarchy.entry.king.description5": "He is not as powerful as his other half, but if you aren't properly prepared for him, he will tear you apart." + ,"guide.antarchy.disk.queen.title": "QUEEN HAVOC TRAIL NOTES" + ,"guide.antarchy.entry.queen.title": "Queen" + ,"guide.antarchy.entry.queen.subtitle": "Thoraxis royal record" + ,"guide.antarchy.entry.queen.description": "No longer seen by the side of her other half, she has grown bitter and angry. She was thrown from Elythia, and her trip through the dimensions seems to have imbued her with dimensional capabilities." + ,"guide.antarchy.entry.queen.description2": "She's powerful and aggressive. Do not approach her unless you're absolutely sure. The Queen holds no grudge against any human, but if you're in her way, she will wipe you from this life." + ,"guide.antarchy.entry.queen.description3": "Once the Queen is through with you, she will let her loyal Manticores have the rest." + ,"guide.antarchy.entry.queen.description4": "She can be found in the underside of Thoraxis, at the coordinates below. Good luck." + ,"guide.antarchy.entry.queen.description5": "She fights with gravity: a ground stomp with an expanding shockwave, black holes that pull you toward their center, and a crushing field that pins you along the current gravity direction." + ,"guide.antarchy.entry.queen.description6": "In her final phase she also casts her own time dilation field, slowing anyone caught inside it." + ,"guide.antarchy.entry.prince.title": "Prince" + ,"guide.antarchy.entry.prince.subtitle": "Royal mount record" + ,"guide.antarchy.entry.prince.description": "Prince Eggs hatch into small Princes that grow when fed golden items." + ,"guide.antarchy.entry.prince.description2": "A grown Prince can be tamed and saddled for flight, fires elemental bolts at your enemies, and can command nearby hostile mobs. Feed responsibly; you are raising a small flying warlord." + ,"guide.antarchy.entry.princess.title": "Princess" + ,"guide.antarchy.entry.princess.subtitle": "Royal mount record" + ,"guide.antarchy.entry.princess.description": "Princess Eggs hatch into small Princesses that grow when fed golden items." + ,"guide.antarchy.entry.princess.description2": "A grown Princess can be tamed and saddled for flight, fires elemental bolts, and creates time-dilation fields around enemies." + ,"subtitles.antarchy.hoverboard_mount": "Hoverboard starts" + ,"subtitles.antarchy.hoverboard_dismount": "Hoverboard stops" + ,"subtitles.antarchy.hoverboard_idle": "Hoverboard hums" +, + "advancements.antarchy.through_the_throat.title": "Mind the Gap", + "advancements.antarchy.through_the_throat.description": "Fall through a gravity throat into the Underside.", + "advancements.antarchy.underside_castle.title": "Castle Upside Down", + "advancements.antarchy.underside_castle.description": "Find the castle hanging in the Underside.", + "advancements.antarchy.hive_awakened.title": "Rude Awakening", + "advancements.antarchy.hive_awakened.description": "Wake a Cavaryn horde.", + "advancements.antarchy.survived_the_horde.title": "The Hive Remembers", + "advancements.antarchy.survived_the_horde.description": "Survive a Cavaryn horde to its final wave and break it.", + "advancements.antarchy.glimmer_keeper.title": "Glimmer Keeper", + "advancements.antarchy.glimmer_keeper.description": "Tame every kind of Glimmer.", + "entity.antarchy.portal_gun_portal": "Portal Gun Portal", + "item.antarchy.music_disc_underside.desc": "docshrekbot - underside", + "item.antarchy.music_disc_the_queen.desc": "Karlljp - The Queen", + "item.antarchy.music_disc_verdance.desc": "Hewo - Verdance", + "item.antarchy.music_disc_grotesque.desc": "DocShrekBot - Grotesque", + "attribute.antarchy.entity_interaction_range": "Entity Interaction Range" } diff --git a/common-1.20.1/src/main/resources/assets/antarchy/lang/es_es.json b/common-1.20.1/src/main/resources/assets/antarchy/lang/es_es.json index 34305034..0850ea36 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/lang/es_es.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/lang/es_es.json @@ -526,10 +526,7 @@ "effect.antarchy.dread.description": "Provoca alucinaciones visuales y auditivas.", "effect.antarchy.paralyzed": "Paralizado", "effect.antarchy.paralyzed.description": "Impide que los objetivos se muevan.", - "effect.antarchy.inverted": "Invertido", - "effect.antarchy.inverted.description": "Invierte la gravedad del objetivo.", "effect.antarchy.commanded.description": "Lucha por el jugador que lo comandó.", - "effect.antarchy.dilated.description": "Ralentiza el paso del tiempo para la criatura afectada.", "effect.antarchy.stinky": "Apestoso", "effect.antarchy.stinky.description": "Ahuyenta a las criaturas pasivas y neutrales, y atrae a los artrópodos.", "effect.antarchy.gooped.description": "Reduce la velocidad de movimiento y de ataque.", @@ -959,4 +956,7 @@ "advancements.antarchy.beetle_buddies.description": "Domestica un escarabajo hércules.", "advancements.antarchy.herculean_task.title": "Tarea hercúlea", "advancements.antarchy.herculean_task.description": "Abate a un escarabajo hércules." +, + "entity.antarchy.portal_gun_portal": "Portal del arma de portales", + "attribute.antarchy.entity_interaction_range": "Rango de interacción con entidades" } diff --git a/common-1.20.1/src/main/resources/assets/antarchy/lang/fr_fr.json b/common-1.20.1/src/main/resources/assets/antarchy/lang/fr_fr.json index 0a7b39e0..4a8625e7 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/lang/fr_fr.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/lang/fr_fr.json @@ -526,10 +526,7 @@ "effect.antarchy.dread.description": "Provoque des hallucinations visuelles et sonores.", "effect.antarchy.paralyzed": "Paralysé", "effect.antarchy.paralyzed.description": "Empêche les cibles de se déplacer.", - "effect.antarchy.inverted": "Inversé", - "effect.antarchy.inverted.description": "Inverse la gravité de la cible.", "effect.antarchy.commanded.description": "Combat pour le joueur qui l’a commandé.", - "effect.antarchy.dilated.description": "Ralentit le passage du temps pour l’entité affectée.", "effect.antarchy.stinky": "Puant", "effect.antarchy.stinky.description": "Repousse les créatures passives et neutres, et attire les arthropodes.", "effect.antarchy.gooped.description": "Ralentit la vitesse de déplacement et d'attaque.", @@ -959,4 +956,7 @@ "advancements.antarchy.beetle_buddies.description": "Apprivoisez un scarabée Hercule.", "advancements.antarchy.herculean_task.title": "Travail herculéen", "advancements.antarchy.herculean_task.description": "Terrassez un scarabée Hercule." +, + "entity.antarchy.portal_gun_portal": "Portail du pistolet à portails", + "attribute.antarchy.entity_interaction_range": "portée d'interaction avec les entités" } diff --git a/common-1.20.1/src/main/resources/assets/antarchy/lang/it_it.json b/common-1.20.1/src/main/resources/assets/antarchy/lang/it_it.json index 69fa31ce..46a76f73 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/lang/it_it.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/lang/it_it.json @@ -526,10 +526,7 @@ "effect.antarchy.dread.description": "Provoca allucinazioni visive e sonore.", "effect.antarchy.paralyzed": "Paralizzato", "effect.antarchy.paralyzed.description": "Impedisce ai bersagli di muoversi.", - "effect.antarchy.inverted": "Invertito", - "effect.antarchy.inverted.description": "Inverte la gravità del bersaglio.", "effect.antarchy.commanded.description": "Combatte per il giocatore che lo ha comandato.", - "effect.antarchy.dilated.description": "Rallenta il passare del tempo per l’entità colpita.", "effect.antarchy.stinky": "Puzzolente", "effect.antarchy.stinky.description": "Respinge le creature passive e neutrali e attira gli artropodi.", "effect.antarchy.gooped.description": "Riduce la velocità di movimento e di attacco.", @@ -959,4 +956,7 @@ "advancements.antarchy.beetle_buddies.description": "Addomestica uno Scarabeo Ercole.", "advancements.antarchy.herculean_task.title": "Impresa erculea", "advancements.antarchy.herculean_task.description": "Uccidi uno Scarabeo Ercole." +, + "entity.antarchy.portal_gun_portal": "Portale della Portal Gun", + "attribute.antarchy.entity_interaction_range": "Raggio d'interazione con le entità" } diff --git a/common-1.20.1/src/main/resources/assets/antarchy/lang/ja_jp.json b/common-1.20.1/src/main/resources/assets/antarchy/lang/ja_jp.json index 1d17dbc3..58d8c476 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/lang/ja_jp.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/lang/ja_jp.json @@ -526,10 +526,7 @@ "effect.antarchy.dread.description": "視覚と聴覚の幻覚を引き起こします。", "effect.antarchy.paralyzed": "麻痺", "effect.antarchy.paralyzed.description": "対象が動けなくなります。", - "effect.antarchy.inverted": "重力反転", - "effect.antarchy.inverted.description": "対象の重力を反転させます。", "effect.antarchy.commanded.description": "命令したプレイヤーのために戦います。", - "effect.antarchy.dilated.description": "影響を受けたエンティティの時間の流れを遅くします。", "effect.antarchy.stinky": "悪臭", "effect.antarchy.stinky.description": "友好的および中立のMobを遠ざけ、節足動物を引き寄せます。", "effect.antarchy.gooped.description": "移動速度と攻撃速度を低下させます。", @@ -959,4 +956,7 @@ "advancements.antarchy.beetle_buddies.description": "ヘラクレスオオカブトを手懐ける。", "advancements.antarchy.herculean_task.title": "ヘラクレス級の難題", "advancements.antarchy.herculean_task.description": "ヘラクレスオオカブトを討伐する。" +, + "entity.antarchy.portal_gun_portal": "ポータルガンのポータル", + "attribute.antarchy.entity_interaction_range": "エンティティ操作範囲" } diff --git a/common-1.20.1/src/main/resources/assets/antarchy/lang/ko_kr.json b/common-1.20.1/src/main/resources/assets/antarchy/lang/ko_kr.json index 7fc4ee1e..030e42ac 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/lang/ko_kr.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/lang/ko_kr.json @@ -526,10 +526,7 @@ "effect.antarchy.dread.description": "시각 및 청각 환각을 일으킵니다.", "effect.antarchy.paralyzed": "마비", "effect.antarchy.paralyzed.description": "대상이 움직이지 못하게 합니다.", - "effect.antarchy.inverted": "반전", - "effect.antarchy.inverted.description": "대상의 중력을 반전시킵니다.", "effect.antarchy.commanded.description": "명령한 플레이어를 위해 싸웁니다.", - "effect.antarchy.dilated.description": "영향받은 개체의 시간 흐름을 늦춥니다.", "effect.antarchy.stinky": "악취", "effect.antarchy.stinky.description": "수동적 및 중립적 몹을 쫓아내고 절지동물을 끌어들입니다.", "effect.antarchy.gooped.description": "이동 속도와 공격 속도를 늦춥니다.", @@ -959,4 +956,7 @@ "advancements.antarchy.beetle_buddies.description": "헤라클레스장수풍뎅이를 길들이세요.", "advancements.antarchy.herculean_task.title": "헤라클레스의 과업", "advancements.antarchy.herculean_task.description": "헤라클레스장수풍뎅이를 처치하세요." +, + "entity.antarchy.portal_gun_portal": "포털 건 포털", + "attribute.antarchy.entity_interaction_range": "개체 상호 작용 범위" } diff --git a/common-1.20.1/src/main/resources/assets/antarchy/lang/pt_br.json b/common-1.20.1/src/main/resources/assets/antarchy/lang/pt_br.json index 3ae07a99..62f2f944 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/lang/pt_br.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/lang/pt_br.json @@ -526,10 +526,7 @@ "effect.antarchy.dread.description": "Provoca alucinações visuais e auditivas.", "effect.antarchy.paralyzed": "Paralisado", "effect.antarchy.paralyzed.description": "Impede que os alvos se movam.", - "effect.antarchy.inverted": "Invertido", - "effect.antarchy.inverted.description": "Inverte a gravidade do alvo.", "effect.antarchy.commanded.description": "Luta pelo jogador que o comandou.", - "effect.antarchy.dilated.description": "Diminui a passagem do tempo para a entidade afetada.", "effect.antarchy.stinky": "Fedido", "effect.antarchy.stinky.description": "Afasta mobs passivos e neutros e atrai artrópodes.", "effect.antarchy.gooped.description": "Reduz a velocidade de movimento e de ataque.", @@ -959,4 +956,7 @@ "advancements.antarchy.beetle_buddies.description": "Domestique um besouro-hércules.", "advancements.antarchy.herculean_task.title": "Tarefa Hercúlea", "advancements.antarchy.herculean_task.description": "Abata um besouro-hércules." +, + "entity.antarchy.portal_gun_portal": "Portal da arma de portais", + "attribute.antarchy.entity_interaction_range": "Alcance de Interação com Entidades" } diff --git a/common-1.20.1/src/main/resources/assets/antarchy/lang/ru_ru.json b/common-1.20.1/src/main/resources/assets/antarchy/lang/ru_ru.json index fb7a6071..b6259002 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/lang/ru_ru.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/lang/ru_ru.json @@ -497,10 +497,7 @@ "effect.antarchy.dread.description": "Вызывает зрительные и звуковые галлюцинации.", "effect.antarchy.paralyzed": "Паралич", "effect.antarchy.paralyzed.description": "Не дает целям двигаться.", - "effect.antarchy.inverted": "Инверсия", - "effect.antarchy.inverted.description": "Инвертирует гравитацию цели.", "effect.antarchy.commanded.description": "Сражается за игрока, который им командует.", - "effect.antarchy.dilated.description": "Замедляет течение времени для существа под действием эффекта.", "effect.antarchy.stinky": "Вонючесть", "effect.antarchy.stinky.description": "Отпугивает мирных и нейтральных мобов, но притягивает членистоногих.", "effect.antarchy.gooped.description": "Замедляет движение и скорость атаки.", @@ -837,4 +834,7 @@ "advancements.antarchy.squidzooka_craft.description": "Создайте сквидзуку.", "advancements.antarchy.gravity_gun_craft.title": "Мастер притяжения", "advancements.antarchy.gravity_gun_craft.description": "Создайте гравитационную пушку." +, + "entity.antarchy.portal_gun_portal": "Портал портальной пушки", + "attribute.antarchy.entity_interaction_range": "Дальность взаимодействия с сущностями" } diff --git a/common-1.20.1/src/main/resources/assets/antarchy/lang/zh_cn.json b/common-1.20.1/src/main/resources/assets/antarchy/lang/zh_cn.json index e3acfc40..643d8f0e 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/lang/zh_cn.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/lang/zh_cn.json @@ -526,10 +526,7 @@ "effect.antarchy.dread.description": "会产生视觉和听觉幻觉。", "effect.antarchy.paralyzed": "麻痹", "effect.antarchy.paralyzed.description": "阻止目标移动。", - "effect.antarchy.inverted": "反转", - "effect.antarchy.inverted.description": "反转目标的重力。", "effect.antarchy.commanded.description": "为命令它的玩家而战。", - "effect.antarchy.dilated.description": "减缓受影响生物的时间流逝。", "effect.antarchy.stinky": "臭气", "effect.antarchy.stinky.description": "驱赶被动和中立生物,吸引节肢生物。", "effect.antarchy.gooped.description": "减缓移动速度和攻击速度。", @@ -959,4 +956,7 @@ "advancements.antarchy.beetle_buddies.description": "驯服一只赫拉克勒斯甲虫。", "advancements.antarchy.herculean_task.title": "赫拉克勒斯之业", "advancements.antarchy.herculean_task.description": "斩杀一只赫拉克勒斯甲虫。" +, + "entity.antarchy.portal_gun_portal": "传送门枪传送门", + "attribute.antarchy.entity_interaction_range": "实体交互距离" } diff --git a/common-1.20.1/src/main/resources/assets/antarchy/lang/zh_tw.json b/common-1.20.1/src/main/resources/assets/antarchy/lang/zh_tw.json index 971be7e9..246f582c 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/lang/zh_tw.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/lang/zh_tw.json @@ -526,10 +526,7 @@ "effect.antarchy.dread.description": "會產生視覺與聽覺幻覺。", "effect.antarchy.paralyzed": "麻痺", "effect.antarchy.paralyzed.description": "阻止目標移動。", - "effect.antarchy.inverted": "反轉", - "effect.antarchy.inverted.description": "反轉目標的重力。", "effect.antarchy.commanded.description": "為命令它的玩家而戰。", - "effect.antarchy.dilated.description": "減緩受影響生物的時間流逝。", "effect.antarchy.stinky": "臭氣", "effect.antarchy.stinky.description": "驅趕被動與中立生物,吸引節肢生物。", "effect.antarchy.gooped.description": "降低移動速度與攻擊速度。", @@ -959,4 +956,7 @@ "advancements.antarchy.beetle_buddies.description": "馴服一隻赫拉克勒斯甲蟲。", "advancements.antarchy.herculean_task.title": "赫拉克勒斯之業", "advancements.antarchy.herculean_task.description": "斬殺一隻赫拉克勒斯甲蟲。" +, + "entity.antarchy.portal_gun_portal": "傳送門槍傳送門", + "attribute.antarchy.entity_interaction_range": "實體互動距離" } diff --git a/common-1.20.1/src/main/resources/assets/antarchy/licenses/aperture_innovations_mit.txt b/common-1.20.1/src/main/resources/assets/antarchy/licenses/aperture_innovations_mit.txt new file mode 100644 index 00000000..bf7da1e1 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/licenses/aperture_innovations_mit.txt @@ -0,0 +1,25 @@ +Crosshair texture, portal vortex textures, and portal audio adapted from Aperture Innovations by MisterSecret312. +Source: https://github.com/mistersecret312/ApertureInnovations +The Aperture Innovations mod metadata declares the MIT License. + +MIT License + +Copyright (c) MisterSecret312 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ant_trap.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ant_trap.json new file mode 100644 index 00000000..c98a1c83 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ant_trap.json @@ -0,0 +1,77 @@ +{ + "format_version": "1.9.0", + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "0": "antarchy:block/ant_trap", + "particle": "antarchy:block/ant_trap" + }, + "elements": [ + { + "from": [3, 0, 3], + "to": [13, 1, 13], + "faces": { + "north": {"uv": [9, 6, 14, 6.5], "texture": "#0"}, + "east": {"uv": [9, 6.5, 14, 7], "texture": "#0"}, + "south": {"uv": [9, 7, 14, 7.5], "texture": "#0"}, + "west": {"uv": [9, 7.5, 14, 8], "texture": "#0"}, + "up": {"uv": [5, 5, 0, 0], "texture": "#0"}, + "down": {"uv": [5, 5, 0, 10], "texture": "#0"} + } + }, + { + "from": [4, 1, 4], + "to": [12, 5, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 1, 0]}, + "faces": { + "north": {"uv": [5, 8, 9, 10], "texture": "#0"}, + "east": {"uv": [9, 0, 13, 2], "texture": "#0"}, + "south": {"uv": [9, 2, 13, 4], "texture": "#0"}, + "west": {"uv": [9, 4, 13, 6], "texture": "#0"}, + "up": {"uv": [9, 4, 5, 0], "texture": "#0"}, + "down": {"uv": [9, 4, 5, 8], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "translation": [0, 4, 0], + "scale": [0.5, 0.5, 0.5] + }, + "thirdperson_lefthand": { + "translation": [0, 4, 0], + "scale": [0.5, 0.5, 0.5] + }, + "firstperson_righthand": { + "translation": [0, 6, 0], + "scale": [0.8, 0.8, 0.8] + }, + "firstperson_lefthand": { + "translation": [0, 6, 0], + "scale": [0.8, 0.8, 0.8] + }, + "ground": { + "translation": [0, 1.5, 0], + "scale": [0.4, 0.4, 0.4] + }, + "gui": { + "rotation": [35, -130, 0], + "translation": [0, 3.5, 0] + }, + "head": { + "translation": [0, 14.5, 0] + }, + "fixed": { + "translation": [0, 4, 0] + } + }, + "groups": [ + { + "name": "anttrap", + "origin": [0, 0, 0], + "scope": 0, + "color": 0, + "children": [0, 1] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_1.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_1.json deleted file mode 100644 index f4187644..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_1.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_turtle_egg", - "textures": { - "all": "antarchy:block/creeping_horror_egg/creeping_horror_egg" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_2.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_2.json deleted file mode 100644 index d2f9f14d..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_2.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_two_turtle_eggs", - "textures": { - "all": "antarchy:block/creeping_horror_egg/creeping_horror_egg" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_3.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_3.json deleted file mode 100644 index ef956bbe..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_3.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_three_turtle_eggs", - "textures": { - "all": "antarchy:block/creeping_horror_egg/creeping_horror_egg" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_4.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_4.json deleted file mode 100644 index e5ba6281..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_4.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/template_four_turtle_eggs", - "textures": { - "all": "antarchy:block/creeping_horror_egg/creeping_horror_egg", - "particle": "antarchy:block/creeping_horror_egg/creeping_horror_egg" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_inventory.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_inventory.json deleted file mode 100644 index 91807bc1..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_inventory.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_inventory", - "textures": { - "wall": "antarchy:block/titanium/titanium_block" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_post.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_post.json deleted file mode 100644 index fefb11fe..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_post.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_post", - "textures": { - "wall": "antarchy:block/titanium/titanium_block" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_side.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_side.json deleted file mode 100644 index 6c784c47..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_side.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_side", - "textures": { - "wall": "antarchy:block/titanium/titanium_block" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_side_tall.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_side_tall.json deleted file mode 100644 index bcddc58e..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_side_tall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_side_tall", - "textures": { - "wall": "antarchy:block/titanium/titanium_block" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_inventory.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_inventory.json deleted file mode 100644 index 68cb60c7..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_inventory.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_inventory", - "textures": { - "wall": "antarchy:block/uranium/uranium_block" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_post.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_post.json deleted file mode 100644 index 8ac993de..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_post.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_post", - "textures": { - "wall": "antarchy:block/uranium/uranium_block" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_side.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_side.json deleted file mode 100644 index e95dcf78..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_side.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_side", - "textures": { - "wall": "antarchy:block/uranium/uranium_block" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_side_tall.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_side_tall.json deleted file mode 100644 index 363da0fb..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_side_tall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_side_tall", - "textures": { - "wall": "antarchy:block/uranium/uranium_block" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/jumpy_bug_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/jumpy_bug_egg.json deleted file mode 100644 index 9e31e7c0..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/block/jumpy_bug_egg.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "format_version": "1.21.11", - "credit": "Made with Blockbench", - "texture_size": [64, 64], - "textures": { - "0": "antarchy:block/jumpy_bug_egg", - "particle": "antarchy:block/jumpy_bug_egg" - }, - "elements": [ - { - "from": [1, 0, 2], - "to": [15, 16, 14], - "faces": { - "north": {"uv": [0, 0, 3.5, 4], "texture": "#0"}, - "east": {"uv": [0, 4, 3, 8], "texture": "#0"}, - "south": {"uv": [0, 0, 3.5, 4], "texture": "#0"}, - "west": {"uv": [0, 4, 3, 8], "texture": "#0"}, - "up": {"uv": [9.5, 7, 6, 4], "texture": "#0", "cullface": "up"}, - "down": {"uv": [10.5, 0, 7, 3], "texture": "#0", "cullface": "down"} - } - }, - { - "from": [2, 0.1, 3], - "to": [14, 14.1, 13], - "rotation": {"angle": 0, "axis": "y", "origin": [0, 0.1, 0]}, - "faces": { - "north": {"uv": [0, 8, 3, 11.5], "texture": "#0"}, - "east": {"uv": [3, 8, 5.5, 11.5], "texture": "#0"}, - "south": {"uv": [0, 8, 3, 11.5], "texture": "#0"}, - "west": {"uv": [3, 8, 5.5, 11.5], "texture": "#0"}, - "up": {"uv": [12.5, 5.5, 9.5, 3], "texture": "#0", "cullface": "up"}, - "down": {"uv": [13.5, 0, 10.5, 2.5], "texture": "#0", "cullface": "down"} - } - } - ], - "display": { - "thirdperson_righthand": { - "rotation": [75, 45, 0], - "translation": [0, 2.5, 0], - "scale": [0.375, 0.375, 0.375] - }, - "thirdperson_lefthand": { - "rotation": [0, 90, -55], - "translation": [0, 4, 0.5], - "scale": [0.85, 0.85, 0.85] - }, - "firstperson_righthand": { - "rotation": [0, 45, 0], - "scale": [0.4, 0.4, 0.4] - }, - "firstperson_lefthand": { - "rotation": [0, -135, 0], - "scale": [0.4, 0.4, 0.4] - }, - "ground": { - "translation": [0, 3, 0], - "scale": [0.25, 0.25, 0.25] - }, - "gui": { - "rotation": [30, -135, 0], - "scale": [0.625, 0.625, 0.625] - }, - "fixed": { - "scale": [0.5, 0.5, 0.5] - } - }, - "groups": [ - { - "name": "jumpy_bug_egg", - "origin": [0, 0.1, 0], - "scope": 0, - "color": 0, - "children": [ - 0, - { - "name": "inside", - "origin": [0, 0.1, 0], - "scope": 0, - "color": 0, - "children": [1] - } - ] - } - ] -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/loam.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/loam.json index c98d6285..e412b9b0 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/block/loam.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/loam.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/cube_all", "textures": { - "all": "antarchy:block/loam" + "all": "antarchy:block/loam/loam" } } diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/lurking_terror_egg_1.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/lurking_terror_egg_1.json deleted file mode 100644 index a63af561..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/block/lurking_terror_egg_1.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_turtle_egg", - "textures": { - "all": "antarchy:block/lurking_terror_egg/lurking_terror_egg" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/lurking_terror_egg_2.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/lurking_terror_egg_2.json deleted file mode 100644 index 71eec9e4..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/block/lurking_terror_egg_2.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_two_turtle_eggs", - "textures": { - "all": "antarchy:block/lurking_terror_egg/lurking_terror_egg" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/lurking_terror_egg_3.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/lurking_terror_egg_3.json deleted file mode 100644 index 7e5d23e4..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/block/lurking_terror_egg_3.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_three_turtle_eggs", - "textures": { - "all": "antarchy:block/lurking_terror_egg/lurking_terror_egg" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/lurking_terror_egg_4.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/lurking_terror_egg_4.json deleted file mode 100644 index 30d35294..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/block/lurking_terror_egg_4.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/template_four_turtle_eggs", - "textures": { - "all": "antarchy:block/lurking_terror_egg/lurking_terror_egg", - "particle": "antarchy:block/lurking_terror_egg/lurking_terror_egg" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/myrmite.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/myrmite.json index 1c17e6da..85bbe759 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/block/myrmite.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/myrmite.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/cube_all", "textures": { - "all": "antarchy:block/myrmite" + "all": "antarchy:block/myrmite/myrmite" } } diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/myrmite_coal_ore.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/myrmite_coal_ore.json index 47ee96fb..3a95e257 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/block/myrmite_coal_ore.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/myrmite_coal_ore.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/cube_all", "textures": { - "all": "antarchy:block/myrmite_coal_ore" + "all": "antarchy:block/myrmite/myrmite_coal_ore" } } diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_1.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_1.json deleted file mode 100644 index 20b6a8ae..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_1.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_turtle_egg", - "textures": { - "all": "antarchy:block/creeping_horror_egg/creeping_horror_egg_slightly_cracked" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_2.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_2.json deleted file mode 100644 index cbfa51e2..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_2.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_two_turtle_eggs", - "textures": { - "all": "antarchy:block/creeping_horror_egg/creeping_horror_egg_slightly_cracked" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_3.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_3.json deleted file mode 100644 index 03be473f..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_3.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_three_turtle_eggs", - "textures": { - "all": "antarchy:block/creeping_horror_egg/creeping_horror_egg_slightly_cracked" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_4.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_4.json deleted file mode 100644 index a3863d21..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_4.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/template_four_turtle_eggs", - "textures": { - "all": "antarchy:block/creeping_horror_egg/creeping_horror_egg_slightly_cracked", - "particle": "antarchy:block/creeping_horror_egg/creeping_horror_egg_slightly_cracked" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_egg_1.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_egg_1.json deleted file mode 100644 index 7c3dc843..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_egg_1.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_turtle_egg", - "textures": { - "all": "antarchy:block/lurking_terror_egg/lurking_terror_egg_slightly_cracked" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_egg_2.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_egg_2.json deleted file mode 100644 index 5e296fad..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_egg_2.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_two_turtle_eggs", - "textures": { - "all": "antarchy:block/lurking_terror_egg/lurking_terror_egg_slightly_cracked" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_egg_3.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_egg_3.json deleted file mode 100644 index 7f1c780e..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_egg_3.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_three_turtle_eggs", - "textures": { - "all": "antarchy:block/lurking_terror_egg/lurking_terror_egg_slightly_cracked" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_egg_4.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_egg_4.json deleted file mode 100644 index 884cc982..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_egg_4.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/template_four_turtle_eggs", - "textures": { - "all": "antarchy:block/lurking_terror_egg/lurking_terror_egg_slightly_cracked", - "particle": "antarchy:block/lurking_terror_egg/lurking_terror_egg_slightly_cracked" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/triffid_goo_block.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/triffid_goo_block.json deleted file mode 100644 index 514540a6..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/block/triffid_goo_block.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "parent": "minecraft:block/block", - "textures": { - "particle": "antarchy:block/triffid_goo_block", - "outer": "antarchy:block/triffid_goo_block", - "inner": "antarchy:block/triffid_goo_block" - }, - "display": { - "gui": { - "rotation": [30, 225, 0], - "translation": [0, 0, 0], - "scale": [0.625, 0.625, 0.625] - }, - "ground": { - "rotation": [0, 0, 0], - "translation": [0, 3, 0], - "scale": [0.25, 0.25, 0.25] - }, - "fixed": { - "rotation": [0, 0, 0], - "translation": [0, 0, 0], - "scale": [0.5, 0.5, 0.5] - }, - "thirdperson_righthand": { - "rotation": [75, 45, 0], - "translation": [0, 2.5, 0], - "scale": [0.375, 0.375, 0.375] - }, - "thirdperson_lefthand": { - "rotation": [75, 45, 0], - "translation": [0, 2.5, 0], - "scale": [0.375, 0.375, 0.375] - }, - "firstperson_righthand": { - "rotation": [0, 45, 0], - "translation": [0, 0, 0], - "scale": [0.4, 0.4, 0.4] - }, - "firstperson_lefthand": { - "rotation": [0, 225, 0], - "translation": [0, 0, 0], - "scale": [0.4, 0.4, 0.4] - } - }, - "elements": [ - { - "from": [0, 0, 0], - "to": [16, 16, 16], - "faces": { - "down": { "texture": "#outer" }, - "up": { "texture": "#outer" }, - "north": { "texture": "#outer" }, - "south": { "texture": "#outer" }, - "west": { "texture": "#outer" }, - "east": { "texture": "#outer" } - } - }, - { - "from": [2, 2, 2], - "to": [14, 14, 14], - "faces": { - "down": { "texture": "#inner" }, - "up": { "texture": "#inner" }, - "north": { "texture": "#inner" }, - "south": { "texture": "#inner" }, - "west": { "texture": "#inner" }, - "east": { "texture": "#inner" } - } - } - ] -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/verdant_nyxium.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/verdant_nyxium.json index da4f5fb3..09e697b8 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/block/verdant_nyxium.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/verdant_nyxium.json @@ -1,7 +1,7 @@ { "parent": "minecraft:block/cube_bottom_top", "textures": { - "bottom": "antarchy:block/nyxite", + "bottom": "antarchy:block/typhonite/typhonite", "side": "antarchy:block/verdant_nyxium", "top": "antarchy:block/verdant_nyxium_top" } diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_1.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_1.json deleted file mode 100644 index 4ccfd5ca..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_1.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_turtle_egg", - "textures": { - "all": "antarchy:block/creeping_horror_egg/creeping_horror_egg_very_cracked" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_2.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_2.json deleted file mode 100644 index 37334cc9..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_2.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_two_turtle_eggs", - "textures": { - "all": "antarchy:block/creeping_horror_egg/creeping_horror_egg_very_cracked" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_3.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_3.json deleted file mode 100644 index 824df80f..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_3.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_three_turtle_eggs", - "textures": { - "all": "antarchy:block/creeping_horror_egg/creeping_horror_egg_very_cracked" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_4.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_4.json deleted file mode 100644 index 71494d84..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_4.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/template_four_turtle_eggs", - "textures": { - "all": "antarchy:block/creeping_horror_egg/creeping_horror_egg_very_cracked", - "particle": "antarchy:block/creeping_horror_egg/creeping_horror_egg_very_cracked" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_egg_1.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_egg_1.json deleted file mode 100644 index 248b4d18..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_egg_1.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_turtle_egg", - "textures": { - "all": "antarchy:block/lurking_terror_egg/lurking_terror_egg_very_cracked" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_egg_2.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_egg_2.json deleted file mode 100644 index 0ac42d62..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_egg_2.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_two_turtle_eggs", - "textures": { - "all": "antarchy:block/lurking_terror_egg/lurking_terror_egg_very_cracked" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_egg_3.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_egg_3.json deleted file mode 100644 index 40a9f01b..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_egg_3.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_three_turtle_eggs", - "textures": { - "all": "antarchy:block/lurking_terror_egg/lurking_terror_egg_very_cracked" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_egg_4.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_egg_4.json deleted file mode 100644 index c4e1dca5..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_egg_4.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/template_four_turtle_eggs", - "textures": { - "all": "antarchy:block/lurking_terror_egg/lurking_terror_egg_very_cracked", - "particle": "antarchy:block/lurking_terror_egg/lurking_terror_egg_very_cracked" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ant_trap.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ant_trap.json new file mode 100644 index 00000000..c6bf80c0 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ant_trap.json @@ -0,0 +1 @@ +{"parent":"antarchy:block/ant_trap"} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/antiwater_bucket.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/antiwater_bucket.json deleted file mode 100644 index fbc1ddec..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/item/antiwater_bucket.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "antarchy:item/antiwater_bucket" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/attitude_adjuster.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/attitude_adjuster.json deleted file mode 100644 index b4e824ad..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/item/attitude_adjuster.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "antarchy:item/attitude_adjuster_gui" -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/battle_axe.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/battle_axe.json deleted file mode 100644 index 20b3907e..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/item/battle_axe.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "antarchy:item/battle_axe_gui" -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/big_bertha.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/big_bertha.json deleted file mode 100644 index b32b7ec9..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/item/big_bertha.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "antarchy:item/big_bertha_gui" -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/bile_bucket.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/bile_bucket.json deleted file mode 100644 index 30a26675..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/item/bile_bucket.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "antarchy:item/bile_bucket" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/blood_gods_blade.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/blood_gods_blade.json new file mode 100644 index 00000000..e39c9b24 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/blood_gods_blade.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "antarchy:item/blood_gods_blade" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/bug_spray.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/bug_spray.json new file mode 100644 index 00000000..2c57a55e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/bug_spray.json @@ -0,0 +1 @@ +{"parent":"minecraft:item/generated","textures":{"layer0":"antarchy:item/bug_spray"},"overrides":[{"predicate":{"minecraft:using_item":1},"model":"antarchy:item/bug_spray_spraying"}]} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/bug_spray_spraying.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/bug_spray_spraying.json new file mode 100644 index 00000000..54c1e225 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/bug_spray_spraying.json @@ -0,0 +1 @@ +{"parent":"minecraft:item/generated","textures":{"layer0":"antarchy:item/bug_spray_spraying"}} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/cloud_shark_fin.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cloud_shark_fin.json deleted file mode 100644 index 69ceebda..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/item/cloud_shark_fin.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "antarchy:item/cloud_shark_fin" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/cloud_shark_fin_soup.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cloud_shark_fin_soup.json deleted file mode 100644 index bec6b015..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/item/cloud_shark_fin_soup.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "antarchy:item/cloud_shark_fin_soup" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/cloud_shark_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cloud_shark_spawn_egg.json deleted file mode 100644 index ddd15597..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/item/cloud_shark_spawn_egg.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "minecraft:item/template_spawn_egg" -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/creeping_horror_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/creeping_horror_egg.json deleted file mode 100644 index 09dddc04..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/item/creeping_horror_egg.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "antarchy:item/creeping_horror_egg" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/creeping_horror_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/creeping_horror_spawn_egg.json deleted file mode 100644 index ddd15597..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/item/creeping_horror_spawn_egg.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "minecraft:item/template_spawn_egg" -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/cut_titanium_wall.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cut_titanium_wall.json deleted file mode 100644 index c3db6023..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/item/cut_titanium_wall.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "antarchy:block/cut_titanium_wall_inventory" -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/cut_uranium_wall.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cut_uranium_wall.json deleted file mode 100644 index 3bdb1efd..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/item/cut_uranium_wall.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "antarchy:block/cut_uranium_wall_inventory" -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/giant_frying_pan_gui.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/giant_frying_pan_gui.json new file mode 100644 index 00000000..0eb2284a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/giant_frying_pan_gui.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "gui_light": "front", + "textures": { + "layer0": "antarchy:item/giant_frying_pan/giant_frying_pan_in_hand" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/giant_frying_pan_held.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/giant_frying_pan_held.json new file mode 100644 index 00000000..dc68f4ad --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/giant_frying_pan_held.json @@ -0,0 +1,90 @@ +{ + "credit": "Made with Blockbench", + "parent": "builtin/entity", + "texture_size": [ + 128, + 128 + ], + "display": { + "thirdperson_righthand": { + "rotation": [ + -25, + -180, + 0 + ], + "translation": [ + 0, + -4, + 3 + ], + "scale": [ + 1.2, + 1.2, + 1.2 + ] + }, + "thirdperson_lefthand": { + "rotation": [ + -25, + -180, + 0 + ], + "translation": [ + 0, + -4, + 3 + ], + "scale": [ + 1.2, + 1.2, + 1.2 + ] + }, + "firstperson_righthand": { + "rotation": [ + -75, + -180, + 15 + ], + "translation": [ + 10, + -5, + 10 + ], + "scale": [ + 0.68, + 0.68, + 0.68 + ] + }, + "firstperson_lefthand": { + "rotation": [ + -75, + -180, + 15 + ], + "translation": [ + 10, + -5, + 10 + ], + "scale": [ + 0.68, + 0.68, + 0.68 + ] + }, + "ground": { + "translation": [ + 0, + 2, + 0 + ], + "scale": [ + 0.2, + 0.2, + 0.2 + ] + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/gravity_gun.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/gravity_gun.json deleted file mode 100644 index 878fe7bc..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/item/gravity_gun.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "antarchy:item/gravity_gun_gui" -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/growth_ray.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/growth_ray.json deleted file mode 100644 index 62d18ca9..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/item/growth_ray.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "gui_light": "front", - "textures": { - "layer0": "antarchy:item/growth_ray_item" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ichor_bucket.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ichor_bucket.json deleted file mode 100644 index c0eafeb0..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ichor_bucket.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "antarchy:item/ichor_bucket" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/jumpy_boots.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/jumpy_boots.json deleted file mode 100644 index c7c80c03..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/item/jumpy_boots.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "antarchy:item/jumpy_boots" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/jumpy_bug_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/jumpy_bug_egg.json deleted file mode 100644 index 9d3bd18e..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/item/jumpy_bug_egg.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "antarchy:item/jumpy_bug_egg_item" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/jumpy_bug_leg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/jumpy_bug_leg.json deleted file mode 100644 index df0ed22b..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/item/jumpy_bug_leg.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "antarchy:item/jumpy_bug_leg" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/jumpy_bug_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/jumpy_bug_spawn_egg.json deleted file mode 100644 index ddd15597..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/item/jumpy_bug_spawn_egg.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "minecraft:item/template_spawn_egg" -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/krakens_grasp.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/krakens_grasp.json deleted file mode 100644 index 4d8724c4..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/item/krakens_grasp.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "antarchy:item/krakens_grasp_gui" -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/lumen_bucket.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/lumen_bucket.json deleted file mode 100644 index 5b384dbc..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/item/lumen_bucket.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "antarchy:item/lumen_bucket" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/lurking_terror_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/lurking_terror_egg.json deleted file mode 100644 index 42cebd01..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/item/lurking_terror_egg.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "antarchy:item/lurking_terror_egg" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/lurking_terror_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/lurking_terror_spawn_egg.json deleted file mode 100644 index ddd15597..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/item/lurking_terror_spawn_egg.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "minecraft:item/template_spawn_egg" -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/music_disc_grotesque.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/music_disc_grotesque.json new file mode 100644 index 00000000..2e6dd435 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/music_disc_grotesque.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/music_disc_grotesque" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/music_disc_the_queen.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/music_disc_the_queen.json new file mode 100644 index 00000000..f6043afb --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/music_disc_the_queen.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/music_disc_the_queen" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/music_disc_verdance.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/music_disc_verdance.json new file mode 100644 index 00000000..1a0aa650 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/music_disc_verdance.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/music_disc_verdance" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun_atlas_gui.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun_atlas_gui.json new file mode 100644 index 00000000..aa681381 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun_atlas_gui.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "gui_light": "front", + "textures": { + "layer0": "antarchy:item/portal_gun/portal_gun_atlas_item" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun_craisin_gui.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun_craisin_gui.json new file mode 100644 index 00000000..bb2d31f2 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun_craisin_gui.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "gui_light": "front", + "textures": { + "layer0": "antarchy:item/portal_gun/portal_gun_craisin_item" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun_laynce_gui.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun_laynce_gui.json new file mode 100644 index 00000000..28c83731 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun_laynce_gui.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "gui_light": "front", + "textures": { + "layer0": "antarchy:item/portal_gun/portal_gun_laynce_item" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun_p_body_gui.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun_p_body_gui.json new file mode 100644 index 00000000..b3b54a1c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun_p_body_gui.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "gui_light": "front", + "textures": { + "layer0": "antarchy:item/portal_gun/portal_gun_p_body_item" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/rpo_launcher.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/rpo_launcher.json deleted file mode 100644 index f5320061..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/item/rpo_launcher.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "antarchy:item/rpo_launcher_gui" -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/shrink_ray.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/shrink_ray.json deleted file mode 100644 index 3fea735a..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/item/shrink_ray.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "antarchy:item/shrink_ray_gui" -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/squidzooka.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/squidzooka.json deleted file mode 100644 index 5370df2a..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/item/squidzooka.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "antarchy:item/squidzooka_gui" -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/temporal_tuner.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/temporal_tuner.json new file mode 100644 index 00000000..81289b2f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/temporal_tuner.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/temporal_tuner" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/triffid_goo.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/triffid_goo.json deleted file mode 100644 index fd896a63..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/item/triffid_goo.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "antarchy:item/triffid_goo" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/triffid_goo_block.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/triffid_goo_block.json deleted file mode 100644 index 2651ef66..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/item/triffid_goo_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "antarchy:block/triffid_goo_block" -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/triffid_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/triffid_spawn_egg.json deleted file mode 100644 index ddd15597..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/item/triffid_spawn_egg.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "minecraft:item/template_spawn_egg" -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/vortex_eye.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/vortex_eye.json deleted file mode 100644 index c27e160e..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/item/vortex_eye.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "antarchy:item/vortex_eye" - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/water_cannon.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/water_cannon.json deleted file mode 100644 index 3ed815ff..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/item/water_cannon.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "antarchy:item/water_cannon_gui" -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/particles/bug_spray.json b/common-1.20.1/src/main/resources/assets/antarchy/particles/bug_spray.json new file mode 100644 index 00000000..ba25042c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/particles/bug_spray.json @@ -0,0 +1 @@ +{"textures":["antarchy:bug_spray/bug_spray_particle1","antarchy:bug_spray/bug_spray_particle2","antarchy:bug_spray/bug_spray_particle3","antarchy:bug_spray/bug_spray_particle4"]} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds.json b/common-1.20.1/src/main/resources/assets/antarchy/sounds.json index dd7b67a2..2b69ba53 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/sounds.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/sounds.json @@ -17,6 +17,18 @@ { "name": "antarchy:thoraxis_lucid_pools_additions", "type": "event" } ] }, + "undertrial_detect_player1": { + "subtitle": "subtitles.antarchy.undertrial_detect_player", + "sounds": [ + { "name": "antarchy:block/undertrial/undertrial_detect_player1" } + ] + }, + "undertrial_detect_player2": { + "subtitle": "subtitles.antarchy.undertrial_detect_player", + "sounds": [ + { "name": "antarchy:block/undertrial/undertrial_detect_player2" } + ] + }, "squidzooka_fire": { "subtitle": "subtitles.antarchy.squidzooka_fire", "sounds": [ @@ -1053,6 +1065,30 @@ } ] }, + "the_queen": { + "sounds": [ + { + "name": "antarchy:music/game/thoraxis/the_queen", + "stream": true + } + ] + }, + "music_disc_verdance": { + "sounds": [ + { + "name": "antarchy:records/verdance", + "stream": true + } + ] + }, + "music_disc_grotesque": { + "sounds": [ + { + "name": "antarchy:records/grotesque", + "stream": true + } + ] + }, "lucid_lullaby": { "sounds": [ { @@ -1085,6 +1121,14 @@ } ] }, + "inverted_inferno": { + "sounds": [ + { + "name": "antarchy:music/game/thoraxis/inverted_inferno", + "stream": true + } + ] + }, "music.game.thoraxis": { "sounds": [ { @@ -1108,7 +1152,8 @@ "stream": true }, { - "name": "antarchy:music/game/thoraxis/assimilation", + "name": "antarchy:inverted_inferno", + "type": "event", "stream": true } ] @@ -1714,13 +1759,13 @@ "subtitle": "subtitles.antarchy.portal_gun_fire_blue", "sounds": [ { - "name": "antarchy:item/portalgun/wpn_portal_gun_fire_blue_01" + "name": "antarchy:portal_aperture/portal_gun_fire_primary_1" }, { - "name": "antarchy:item/portalgun/wpn_portal_gun_fire_blue_02" + "name": "antarchy:portal_aperture/portal_gun_fire_primary_2" }, { - "name": "antarchy:item/portalgun/wpn_portal_gun_fire_blue_03" + "name": "antarchy:portal_aperture/portal_gun_fire_primary_3" } ] }, @@ -1728,13 +1773,13 @@ "subtitle": "subtitles.antarchy.portal_gun_fire_orange", "sounds": [ { - "name": "antarchy:item/portalgun/wpn_portal_gun_fire_red_01" + "name": "antarchy:portal_aperture/portal_gun_fire_secondary_1" }, { - "name": "antarchy:item/portalgun/wpn_portal_gun_fire_red_02" + "name": "antarchy:portal_aperture/portal_gun_fire_secondary_2" }, { - "name": "antarchy:item/portalgun/wpn_portal_gun_fire_red_03" + "name": "antarchy:portal_aperture/portal_gun_fire_secondary_3" } ] }, @@ -1742,19 +1787,16 @@ "subtitle": "subtitles.antarchy.portal_gun_invalid_surface", "sounds": [ { - "name": "antarchy:item/portalgun/portal_invalid_surface_swt_01" + "name": "antarchy:portal_aperture/portal_invalid_surface_1" }, { - "name": "antarchy:portal/portal_invalid_surface_01" + "name": "antarchy:portal_aperture/portal_invalid_surface_2" }, { - "name": "antarchy:portal/portal_invalid_surface_02" + "name": "antarchy:portal_aperture/portal_invalid_surface_3" }, { - "name": "antarchy:portal/portal_invalid_surface_03" - }, - { - "name": "antarchy:portal/portal_invalid_surface_04" + "name": "antarchy:portal_aperture/portal_invalid_surface_4" } ] }, @@ -1762,7 +1804,7 @@ "subtitle": "subtitles.antarchy.portal_open_blue", "sounds": [ { - "name": "antarchy:portal/portal_open_blue_01" + "name": "antarchy:portal_aperture/portal_open_primary_1" } ] }, @@ -1770,7 +1812,10 @@ "subtitle": "subtitles.antarchy.portal_open_orange", "sounds": [ { - "name": "antarchy:portal/portal_open_red_01" + "name": "antarchy:portal_aperture/portal_open_secondary_1" + }, + { + "name": "antarchy:portal_aperture/portal_open_secondary_2" } ] }, @@ -1778,10 +1823,10 @@ "subtitle": "subtitles.antarchy.portal_fizzle", "sounds": [ { - "name": "antarchy:portal/portal_fizzle_01" + "name": "antarchy:portal_aperture/portal_fizzle_1" }, { - "name": "antarchy:portal/portal_fizzle_02" + "name": "antarchy:portal_aperture/portal_fizzle_2" } ] }, @@ -1789,13 +1834,13 @@ "subtitle": "subtitles.antarchy.portal_enter", "sounds": [ { - "name": "antarchy:portal/portal_enter_01" + "name": "antarchy:portal_aperture/portal_enter_1" }, { - "name": "antarchy:portal/portal_enter_02" + "name": "antarchy:portal_aperture/portal_enter_2" }, { - "name": "antarchy:portal/portal_enter_03" + "name": "antarchy:portal_aperture/portal_enter_3" } ] }, @@ -1803,10 +1848,13 @@ "subtitle": "subtitles.antarchy.portal_exit", "sounds": [ { - "name": "antarchy:portal/portal_exit_01" + "name": "antarchy:portal_aperture/portal_enter_1" }, { - "name": "antarchy:portal/portal_exit_02" + "name": "antarchy:portal_aperture/portal_enter_2" + }, + { + "name": "antarchy:portal_aperture/portal_enter_3" } ] }, @@ -1814,7 +1862,7 @@ "subtitle": "subtitles.antarchy.portal_ambient", "sounds": [ { - "name": "antarchy:portal/wpn_portal_ambient_lp_01" + "name": "antarchy:portal_aperture/portal_ambient" } ] }, @@ -3103,6 +3151,27 @@ { "name": "antarchy:mob/princess/fly6" } ] }, + "hoverboard_mount": { + "subtitle": "subtitles.antarchy.hoverboard_mount", + "sounds": [ + { "name": "antarchy:hoverboard/mount1" }, + { "name": "antarchy:hoverboard/mount2" }, + { "name": "antarchy:hoverboard/mount3" }, + { "name": "antarchy:hoverboard/mount4" } + ] + }, + "hoverboard_dismount": { + "subtitle": "subtitles.antarchy.hoverboard_dismount", + "sounds": [ + { "name": "antarchy:hoverboard/dismount1" }, + { "name": "antarchy:hoverboard/dismount2" }, + { "name": "antarchy:hoverboard/dismount3" } + ] + }, + "hoverboard_idle": { + "subtitle": "subtitles.antarchy.hoverboard_idle", + "sounds": [ { "name": "antarchy:hoverboard/idle1" } ] + }, "princess_step": { "subtitle": "subtitles.antarchy.princess_step", "sounds": [ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest1.ogg index c982f935..dc09d105 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest1.ogg and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest2.ogg index 6ed074ec..248c6c10 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest2.ogg and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest3.ogg index b81cc221..36a29a6c 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest3.ogg and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest4.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest4.ogg index 20079552..b726beee 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest4.ogg and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest4.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest5.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest5.ogg index 44c1df3f..3da17c91 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest5.ogg and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest5.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest6.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest6.ogg index 85bd20e3..a336da31 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest6.ogg and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest6.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/undertrial/undertrial_detect_player1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/undertrial/undertrial_detect_player1.ogg new file mode 100644 index 00000000..878d3d22 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/undertrial/undertrial_detect_player1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/undertrial/undertrial_detect_player2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/undertrial/undertrial_detect_player2.ogg new file mode 100644 index 00000000..81fe573e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/undertrial/undertrial_detect_player2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/gravity_gun/gravity_gun_drop.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/gravity_gun/gravity_gun_drop.ogg deleted file mode 100644 index daa4b7d5..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/gravity_gun/gravity_gun_drop.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/gravity_gun/gravity_gun_dryfire.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/gravity_gun/gravity_gun_dryfire.ogg deleted file mode 100644 index e8a23b91..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/gravity_gun/gravity_gun_dryfire.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/gravity_gun/gravity_gun_hold_loop.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/gravity_gun/gravity_gun_hold_loop.ogg deleted file mode 100644 index 2ff3f3cb..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/gravity_gun/gravity_gun_hold_loop.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/gravity_gun/gravity_gun_launch1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/gravity_gun/gravity_gun_launch1.ogg deleted file mode 100644 index 71fca081..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/gravity_gun/gravity_gun_launch1.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/gravity_gun/gravity_gun_launch2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/gravity_gun/gravity_gun_launch2.ogg deleted file mode 100644 index 601f54ad..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/gravity_gun/gravity_gun_launch2.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/gravity_gun/gravity_gun_launch3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/gravity_gun/gravity_gun_launch3.ogg deleted file mode 100644 index 6f6b9876..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/gravity_gun/gravity_gun_launch3.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/gravity_gun/gravity_gun_launch4.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/gravity_gun/gravity_gun_launch4.ogg deleted file mode 100644 index 50b2c4b1..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/gravity_gun/gravity_gun_launch4.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/gravity_gun/gravity_gun_pickup.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/gravity_gun/gravity_gun_pickup.ogg deleted file mode 100644 index 36cffa73..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/gravity_gun/gravity_gun_pickup.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/hoverboard/dismount1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/hoverboard/dismount1.ogg new file mode 100644 index 00000000..e15e221b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/hoverboard/dismount1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/hoverboard/dismount2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/hoverboard/dismount2.ogg new file mode 100644 index 00000000..271c9f9c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/hoverboard/dismount2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/hoverboard/dismount3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/hoverboard/dismount3.ogg new file mode 100644 index 00000000..969f68d2 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/hoverboard/dismount3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/hoverboard/idle1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/hoverboard/idle1.ogg new file mode 100644 index 00000000..d9c060aa Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/hoverboard/idle1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/hoverboard/mount1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/hoverboard/mount1.ogg new file mode 100644 index 00000000..752656ba Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/hoverboard/mount1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/hoverboard/mount2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/hoverboard/mount2.ogg new file mode 100644 index 00000000..4372ee0d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/hoverboard/mount2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/hoverboard/mount3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/hoverboard/mount3.ogg new file mode 100644 index 00000000..1deea65c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/hoverboard/mount3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/hoverboard/mount4.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/hoverboard/mount4.ogg new file mode 100644 index 00000000..85b87c54 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/hoverboard/mount4.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bomber/knock1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bomber/knock1.ogg index 4086db9d..269e9d17 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bomber/knock1.ogg and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bomber/knock1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bomber/knock2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bomber/knock2.ogg index dd5fd457..b1c9e21e 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bomber/knock2.ogg and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bomber/knock2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bomber/knock3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bomber/knock3.ogg index 5174c62b..320c756e 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bomber/knock3.ogg and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bomber/knock3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bomber/knock4.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bomber/knock4.ogg index 3837027f..1e0c1dab 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bomber/knock4.ogg and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bomber/knock4.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bomber/knock5.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bomber/knock5.ogg index 39ab66d1..fb54fa2e 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bomber/knock5.ogg and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bomber/knock5.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/cloud_shark/cloud_shark_bite.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/cloud_shark/cloud_shark_bite.ogg deleted file mode 100644 index c8857578..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/cloud_shark/cloud_shark_bite.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/cloud_shark/cloud_shark_death.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/cloud_shark/cloud_shark_death.ogg deleted file mode 100644 index 569c17de..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/cloud_shark/cloud_shark_death.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/cloud_shark/cloud_shark_fly1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/cloud_shark/cloud_shark_fly1.ogg deleted file mode 100644 index 76920276..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/cloud_shark/cloud_shark_fly1.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/cloud_shark/cloud_shark_hurt.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/cloud_shark/cloud_shark_hurt.ogg deleted file mode 100644 index 7afa99cf..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/cloud_shark/cloud_shark_hurt.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/cloud_shark/cloud_shark_idle1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/cloud_shark/cloud_shark_idle1.ogg deleted file mode 100644 index 7c97457d..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/cloud_shark/cloud_shark_idle1.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/cloud_shark/cloud_shark_idle2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/cloud_shark/cloud_shark_idle2.ogg deleted file mode 100644 index c6f6ea1d..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/cloud_shark/cloud_shark_idle2.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/cloud_shark/cloud_shark_idle3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/cloud_shark/cloud_shark_idle3.ogg deleted file mode 100644 index 381b77c3..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/cloud_shark/cloud_shark_idle3.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/cloud_shark/cloud_shark_idle4.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/cloud_shark/cloud_shark_idle4.ogg deleted file mode 100644 index e4896b6b..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/cloud_shark/cloud_shark_idle4.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_bite1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_bite1.ogg deleted file mode 100644 index fd89b048..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_bite1.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_bite2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_bite2.ogg deleted file mode 100644 index 1993fb69..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_bite2.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_bite3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_bite3.ogg deleted file mode 100644 index 1f44cc93..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_bite3.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_bite4.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_bite4.ogg deleted file mode 100644 index 3fa77eaa..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_bite4.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_growl1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_growl1.ogg deleted file mode 100644 index 746f4f3a..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_growl1.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_growl2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_growl2.ogg deleted file mode 100644 index a60677ea..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_growl2.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_hurt1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_hurt1.ogg deleted file mode 100644 index 1ad6f0ec..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_hurt1.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_hurt2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_hurt2.ogg deleted file mode 100644 index e1f10239..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_hurt2.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jumpy_bug/hurt1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jumpy_bug/hurt1.ogg deleted file mode 100644 index 1ad6f0ec..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jumpy_bug/hurt1.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jumpy_bug/hurt2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jumpy_bug/hurt2.ogg deleted file mode 100644 index e1f10239..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jumpy_bug/hurt2.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jumpy_bug/idle1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jumpy_bug/idle1.ogg deleted file mode 100644 index 4bfd3c19..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jumpy_bug/idle1.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jumpy_bug/idle2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jumpy_bug/idle2.ogg deleted file mode 100644 index 6585e6a3..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jumpy_bug/idle2.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jumpy_bug/idle3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jumpy_bug/idle3.ogg deleted file mode 100644 index 1e110266..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jumpy_bug/idle3.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jumpy_bug/idle4.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jumpy_bug/idle4.ogg deleted file mode 100644 index 95df5d7f..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jumpy_bug/idle4.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jumpy_bug/jump1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jumpy_bug/jump1.ogg deleted file mode 100644 index 168605ab..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jumpy_bug/jump1.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jumpy_bug/jump2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jumpy_bug/jump2.ogg deleted file mode 100644 index 5e130d7e..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jumpy_bug/jump2.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jumpy_bug/jump3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jumpy_bug/jump3.ogg deleted file mode 100644 index 12d986e3..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jumpy_bug/jump3.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/king/death.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/king/death.ogg index d3a7526a..fd337098 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/king/death.ogg and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/king/death.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/king/decree.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/king/decree.ogg index 9329727b..d8087f6f 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/king/decree.ogg and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/king/decree.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/king/fireball_shoot.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/king/fireball_shoot.ogg index 8a3cd9d3..d0899b53 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/king/fireball_shoot.ogg and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/king/fireball_shoot.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/king/success.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/king/success.ogg index f477e84f..b5740ab2 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/king/success.ogg and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/king/success.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_bite1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_bite1.ogg deleted file mode 100644 index a72b530e..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_bite1.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_fly_loop.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_fly_loop.ogg deleted file mode 100644 index 7204c176..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_fly_loop.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_hurt1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_hurt1.ogg deleted file mode 100644 index 1ad6f0ec..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_hurt1.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_hurt2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_hurt2.ogg deleted file mode 100644 index e1f10239..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_hurt2.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_snarl1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_snarl1.ogg deleted file mode 100644 index 669bbdc8..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_snarl1.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_snarl2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_snarl2.ogg deleted file mode 100644 index 1305bb04..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_snarl2.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/jump_land1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/jump_land1.ogg index 55a6aacc..78f3e534 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/jump_land1.ogg and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/jump_land1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/jump_land2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/jump_land2.ogg index dcea190a..4303fbe8 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/jump_land2.ogg and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/jump_land2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/jump_up1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/jump_up1.ogg index d2ec4575..158d43eb 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/jump_up1.ogg and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/jump_up1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/jump_up2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/jump_up2.ogg index 17dc6058..aeb50c87 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/jump_up2.ogg and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/jump_up2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/richochet1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/richochet1.ogg index 0edf0d91..3ae108a5 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/richochet1.ogg and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/richochet1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/richochet2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/richochet2.ogg index 07adebac..141f48fb 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/richochet2.ogg and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/richochet2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/richochet3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/richochet3.ogg index 330d217e..ef7e61e8 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/richochet3.ogg and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/richochet3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/spin.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/spin.ogg index 6a40acf4..f4793efa 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/spin.ogg and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/spin.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/water_cannon1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/water_cannon1.ogg index e67b59bf..194b56bc 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/water_cannon1.ogg and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/water_cannon1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/water_cannon2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/water_cannon2.ogg index 8d815b66..5334ce55 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/water_cannon2.ogg and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/water_cannon2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/water_cannon3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/water_cannon3.ogg index ece40272..a5eb979e 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/water_cannon3.ogg and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/water_cannon3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/water_cannon4.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/water_cannon4.ogg index 922db688..adf119e6 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/water_cannon4.ogg and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/water_cannon4.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/triffid/triffid_attack1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/triffid/triffid_attack1.ogg deleted file mode 100644 index 6674f8ef..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/triffid/triffid_attack1.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/triffid/triffid_grab1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/triffid/triffid_grab1.ogg deleted file mode 100644 index b18d0e34..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/triffid/triffid_grab1.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/triffid/triffid_growl1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/triffid/triffid_growl1.ogg deleted file mode 100644 index ba078a20..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/triffid/triffid_growl1.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/triffid/triffid_growl2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/triffid/triffid_growl2.ogg deleted file mode 100644 index 4191a285..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/triffid/triffid_growl2.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/triffid/triffid_hiss1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/triffid/triffid_hiss1.ogg deleted file mode 100644 index 0cdeb61d..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/triffid/triffid_hiss1.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/triffid/triffid_hurt1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/triffid/triffid_hurt1.ogg deleted file mode 100644 index f5a311d8..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/triffid/triffid_hurt1.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/triffid/triffid_hurt2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/triffid/triffid_hurt2.ogg deleted file mode 100644 index 3b823754..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/triffid/triffid_hurt2.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/triffid/triffid_hurt3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/triffid/triffid_hurt3.ogg deleted file mode 100644 index 0b347842..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/triffid/triffid_hurt3.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/death1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/death1.ogg index e17cf7d4..409a9d3c 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/death1.ogg and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/death1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/death2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/death2.ogg index 974a0662..d100cde1 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/death2.ogg and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/death2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/hurt1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/hurt1.ogg index 6d5d0a04..079349b7 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/hurt1.ogg and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/hurt1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/hurt2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/hurt2.ogg index 8559f964..8d29b11d 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/hurt2.ogg and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/hurt2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/hurt3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/hurt3.ogg index b779d8ce..5fb92301 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/hurt3.ogg and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/hurt3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/music/game/thoraxis/inverted_inferno.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/music/game/thoraxis/inverted_inferno.ogg new file mode 100644 index 00000000..fcb7556b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/music/game/thoraxis/inverted_inferno.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/music/game/thoraxis/the_queen.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/music/game/thoraxis/the_queen.ogg new file mode 100644 index 00000000..ffdcf8b5 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/music/game/thoraxis/the_queen.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_ambient.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_ambient.ogg new file mode 100644 index 00000000..fad34aee Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_ambient.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_enter_1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_enter_1.ogg new file mode 100644 index 00000000..51a32878 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_enter_1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_enter_2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_enter_2.ogg new file mode 100644 index 00000000..41bb433a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_enter_2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_enter_3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_enter_3.ogg new file mode 100644 index 00000000..f84196be Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_enter_3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_fizzle_1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_fizzle_1.ogg new file mode 100644 index 00000000..f4d1ccd4 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_fizzle_1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_fizzle_2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_fizzle_2.ogg new file mode 100644 index 00000000..596618ab Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_fizzle_2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_gun_fire_primary_1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_gun_fire_primary_1.ogg new file mode 100644 index 00000000..ca20531e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_gun_fire_primary_1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_gun_fire_primary_2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_gun_fire_primary_2.ogg new file mode 100644 index 00000000..afc71c1a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_gun_fire_primary_2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_gun_fire_primary_3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_gun_fire_primary_3.ogg new file mode 100644 index 00000000..3866132b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_gun_fire_primary_3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_gun_fire_secondary_1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_gun_fire_secondary_1.ogg new file mode 100644 index 00000000..d3e7f87d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_gun_fire_secondary_1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_gun_fire_secondary_2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_gun_fire_secondary_2.ogg new file mode 100644 index 00000000..115b191d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_gun_fire_secondary_2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_gun_fire_secondary_3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_gun_fire_secondary_3.ogg new file mode 100644 index 00000000..8bd4cbce Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_gun_fire_secondary_3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_invalid_surface_1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_invalid_surface_1.ogg new file mode 100644 index 00000000..21cf038e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_invalid_surface_1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_invalid_surface_2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_invalid_surface_2.ogg new file mode 100644 index 00000000..e35ea762 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_invalid_surface_2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_invalid_surface_3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_invalid_surface_3.ogg new file mode 100644 index 00000000..7c941cfe Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_invalid_surface_3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_invalid_surface_4.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_invalid_surface_4.ogg new file mode 100644 index 00000000..e54bab20 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_invalid_surface_4.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_open_primary_1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_open_primary_1.ogg new file mode 100644 index 00000000..86af3d84 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_open_primary_1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_open_secondary_1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_open_secondary_1.ogg new file mode 100644 index 00000000..5c46e7ce Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_open_secondary_1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_open_secondary_2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_open_secondary_2.ogg new file mode 100644 index 00000000..85136fad Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/portal_aperture/portal_open_secondary_2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/records/grotesque.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/records/grotesque.ogg new file mode 100644 index 00000000..2cbc7a7d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/records/grotesque.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/records/verdance.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/records/verdance.ogg new file mode 100644 index 00000000..134b2cef Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/records/verdance.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/critshot1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/critshot1.ogg deleted file mode 100644 index 14de0b37..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/critshot1.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/critshot2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/critshot2.ogg deleted file mode 100644 index 253a27a5..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/critshot2.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/critshot3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/critshot3.ogg deleted file mode 100644 index 28c64d62..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/critshot3.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/growraycharge.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/growraycharge.ogg deleted file mode 100644 index 26141c45..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/growraycharge.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/growrayloop.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/growrayloop.ogg deleted file mode 100644 index 16f54232..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/growrayloop.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/growth_ray.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/growth_ray.ogg deleted file mode 100644 index 32add080..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/growth_ray.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/mediumshot1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/mediumshot1.ogg deleted file mode 100644 index 34d0456a..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/mediumshot1.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/mediumshot2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/mediumshot2.ogg deleted file mode 100644 index a1920058..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/mediumshot2.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/mediumshot3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/mediumshot3.ogg deleted file mode 100644 index 037e4a8d..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/mediumshot3.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/shrink_ray.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/shrink_ray.ogg deleted file mode 100644 index 58828e75..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/shrink_ray.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/shrinkraycharge.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/shrinkraycharge.ogg deleted file mode 100644 index 9534da3a..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/shrinkraycharge.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/shrinkrayloop.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/shrinkrayloop.ogg deleted file mode 100644 index 8fe2682a..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/shrinkrayloop.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/size_ray_charge.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/size_ray_charge.ogg deleted file mode 100644 index 2ff3f3cb..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/size_ray_charge.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/weakshot1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/weakshot1.ogg deleted file mode 100644 index 15740ce5..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/weakshot1.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/weakshot2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/weakshot2.ogg deleted file mode 100644 index ee2023a3..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/weakshot2.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/weakshot3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/weakshot3.ogg deleted file mode 100644 index 3fdcbffa..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/weakshot3.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/squidzooka/squizooka1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/squidzooka/squizooka1.ogg deleted file mode 100644 index 21ef89d4..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/squidzooka/squizooka1.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/squidzooka/squizooka2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/squidzooka/squizooka2.ogg deleted file mode 100644 index e4e60fda..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/squidzooka/squizooka2.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/squidzooka/squizooka3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/squidzooka/squizooka3.ogg deleted file mode 100644 index 15a12ac9..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/squidzooka/squizooka3.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/squidzooka/squizooka4.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/squidzooka/squizooka4.ogg deleted file mode 100644 index 6f93376b..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/sounds/squidzooka/squizooka4.ogg and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ant_trap.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ant_trap.png new file mode 100644 index 00000000..f3dd846e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ant_trap.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/computer/computer.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/computer/computer.animation.json deleted file mode 100644 index 062e648c..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/computer/computer.animation.json +++ /dev/null @@ -1,158 +0,0 @@ -{ - "format_version": "1.8.0", - "animations": { - "on_state": { - "loop": true, - "bones": { - "on": { - "scale": { - "vector": [1, 1, 1] - } - }, - "white_flash": { - "scale": { - "vector": [0, 0, 0] - } - }, - "off": { - "scale": { - "vector": [0, 0, 0] - } - }, - "computer_on": { - "scale": { - "vector": [1, 1, 1] - } - } - } - }, - "off_state": { - "loop": true, - "bones": { - "on": { - "scale": { - "vector": [0, 0, 0] - } - }, - "white_flash": { - "scale": { - "vector": [0, 0, 0] - } - }, - "off": { - "scale": { - "vector": [1, 1, 1] - } - }, - "computer_on": { - "scale": { - "vector": [0, 0, 0] - } - } - } - }, - "turn_on": { - "loop": "hold_on_last_frame", - "animation_length": 0.4583, - "bones": { - "on": { - "scale": { - "0.0": { - "vector": [1, 0, 0] - }, - "0.125": { - "vector": [1, 0, 0] - }, - "0.2917": { - "vector": [1, 1, 1], - "easing": "easeInOutCubic" - } - } - }, - "white_flash": { - "scale": { - "0.0": { - "vector": [1, 0, 0] - }, - "0.0417": { - "vector": [1, 0.2, 0.2] - }, - "0.2083": { - "vector": [1, 1, 1], - "easing": "easeInOutQuint" - } - } - }, - "off": { - "scale": { - "vector": [1, 1, 1] - } - }, - "computer_on": { - "scale": { - "0.0": { - "vector": [0, 0, 0] - }, - "0.0417": { - "vector": [1, 1, 1] - } - } - } - } - }, - "turn_off": { - "loop": "hold_on_last_frame", - "animation_length": 0.4583, - "bones": { - "on": { - "scale": { - "0.0": { - "vector": [1, 1, 1] - }, - "0.25": { - "vector": [1, 0, 1], - "easing": "easeInOutQuint" - } - } - }, - "white_flash": { - "scale": { - "0.0": { - "vector": [1, 1, 0] - }, - "0.125": { - "vector": [1, 1, 0] - }, - "0.375": { - "vector": [1, 0, 0], - "easing": "easeInOutQuart" - } - } - }, - "off": { - "scale": { - "0.0": { - "vector": [0, 0, 0] - }, - "0.0417": { - "vector": [1, 1, 1] - } - } - }, - "computer_on": { - "scale": { - "0.0": { - "vector": [1, 1, 1] - }, - "0.25": { - "vector": [1, 1, 1] - }, - "0.2917": { - "vector": [0, 0, 0] - } - } - } - } - } - } -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/computer/computer.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/computer/computer.png deleted file mode 100644 index e24c294c..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/computer/computer.png and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/computer/computer.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/computer/computer.png.mcmeta deleted file mode 100644 index 68df5399..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/computer/computer.png.mcmeta +++ /dev/null @@ -1,5 +0,0 @@ -{ - "animation": { - "frametime": 5 - } -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/creeping_horror_egg/creeping_horror_egg.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/creeping_horror_egg/creeping_horror_egg.png deleted file mode 100644 index 905c49c9..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/creeping_horror_egg/creeping_horror_egg.png and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/creeping_horror_egg/creeping_horror_egg_slightly_cracked.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/creeping_horror_egg/creeping_horror_egg_slightly_cracked.png deleted file mode 100644 index 0a4765be..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/creeping_horror_egg/creeping_horror_egg_slightly_cracked.png and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/creeping_horror_egg/creeping_horror_egg_very_cracked.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/creeping_horror_egg/creeping_horror_egg_very_cracked.png deleted file mode 100644 index 9040f255..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/creeping_horror_egg/creeping_horror_egg_very_cracked.png and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ichor/ichor_flowing.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ichor/ichor_flowing.png new file mode 100644 index 00000000..47096841 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ichor/ichor_flowing.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ichor/ichor_flowing.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ichor/ichor_flowing.png.mcmeta new file mode 100644 index 00000000..76bf944f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ichor/ichor_flowing.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "frametime": 5, + "interpolate": true + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ichor/ichor_still.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ichor/ichor_still.png new file mode 100644 index 00000000..98347bf6 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ichor/ichor_still.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ichor/ichor_still.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ichor/ichor_still.png.mcmeta new file mode 100644 index 00000000..76bf944f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ichor/ichor_still.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "frametime": 5, + "interpolate": true + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/jumpy_bug_egg.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/jumpy_bug_egg.png deleted file mode 100644 index 18f0f294..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/jumpy_bug_egg.png and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/jumpy_bug_egg.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/jumpy_bug_egg.png.mcmeta deleted file mode 100644 index 4a8bdc48..00000000 --- a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/jumpy_bug_egg.png.mcmeta +++ /dev/null @@ -1,12 +0,0 @@ -{ - "animation": { - "frametime": 140, - "interpolate": true, - "frames": [ - 0, - 1, - 0, - 2 - ] - } -} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/loam.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/loam.png deleted file mode 100644 index 3bfd1130..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/loam.png and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lurking_terror_egg/lurking_terror_egg.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lurking_terror_egg/lurking_terror_egg.png deleted file mode 100644 index 10089a41..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lurking_terror_egg/lurking_terror_egg.png and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lurking_terror_egg/lurking_terror_egg_slightly_cracked.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lurking_terror_egg/lurking_terror_egg_slightly_cracked.png deleted file mode 100644 index ac965ebb..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lurking_terror_egg/lurking_terror_egg_slightly_cracked.png and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lurking_terror_egg/lurking_terror_egg_very_cracked.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lurking_terror_egg/lurking_terror_egg_very_cracked.png deleted file mode 100644 index 10cf9dd9..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lurking_terror_egg/lurking_terror_egg_very_cracked.png and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/myrmite.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/myrmite.png deleted file mode 100644 index 1a74738a..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/myrmite.png and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/myrmite_coal_ore.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/myrmite_coal_ore.png deleted file mode 100644 index a2c6baed..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/myrmite_coal_ore.png and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_planks.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_planks.png index d5951e95..e2b59b98 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_planks.png and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_planks.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_sapling.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_sapling.png index 2a5f6933..7eeea170 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_sapling.png and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_sapling.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nadir/stripped_nadir_log.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nadir/stripped_nadir_log.png index 9683447a..f592cc1a 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nadir/stripped_nadir_log.png and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nadir/stripped_nadir_log.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_down_base.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_down_base.png index a3fa35a5..e16428ad 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_down_base.png and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_down_base.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_down_frustum.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_down_frustum.png index 4872f6ca..44b57a64 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_down_frustum.png and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_down_frustum.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_down_middle.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_down_middle.png index 2fe94789..9dccd7e6 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_down_middle.png and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_down_middle.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_down_tip.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_down_tip.png index e540bc19..71f6e178 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_down_tip.png and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_down_tip.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_down_tip_merge.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_down_tip_merge.png index 9212ef77..c2ef7c55 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_down_tip_merge.png and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_down_tip_merge.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_up_base.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_up_base.png index 16fb2fbd..3b71190e 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_up_base.png and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_up_base.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_up_frustum.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_up_frustum.png index 043470fd..b749bd6c 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_up_frustum.png and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_up_frustum.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_up_middle.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_up_middle.png index f3c751b9..5706853d 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_up_middle.png and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_up_middle.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_up_tip.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_up_tip.png index 47a77740..d4f54fe6 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_up_tip.png and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_up_tip.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_up_tip_merge.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_up_tip_merge.png index 386ddb6e..a30bbbd4 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_up_tip_merge.png and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_spike/nyxite_spike_up_tip_merge.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/triffid_goo_block.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/triffid_goo_block.png deleted file mode 100644 index 1b40756a..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/triffid_goo_block.png and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/cloud_shark/cloud_shark.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/cloud_shark/cloud_shark.png deleted file mode 100644 index 45f4ba5a..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/cloud_shark/cloud_shark.png and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/cloud_shark/cloud_shark_emissive.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/cloud_shark/cloud_shark_emissive.png deleted file mode 100644 index 3b8c88e8..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/cloud_shark/cloud_shark_emissive.png and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/creeping_horror.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/creeping_horror.png deleted file mode 100644 index 60c1aeea..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/creeping_horror.png and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/creeping_horror_emissive.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/creeping_horror_emissive.png deleted file mode 100644 index b905c937..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/creeping_horror_emissive.png and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/jumpy_bug.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/jumpy_bug.png deleted file mode 100644 index 1f33c503..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/jumpy_bug.png and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/jumpy_bug_emissive.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/jumpy_bug_emissive.png deleted file mode 100644 index 0fdb420d..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/jumpy_bug_emissive.png and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/lurking_terror.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/lurking_terror.png deleted file mode 100644 index ce78a925..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/lurking_terror.png and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/lurking_terror_emissive.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/lurking_terror_emissive.png deleted file mode 100644 index e17f59df..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/lurking_terror_emissive.png and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/portal_gun/portal_atlas_blue_vortex.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/portal_gun/portal_atlas_blue_vortex.png new file mode 100644 index 00000000..c7c61fa8 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/portal_gun/portal_atlas_blue_vortex.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/portal_gun/portal_atlas_orange_vortex.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/portal_gun/portal_atlas_orange_vortex.png new file mode 100644 index 00000000..02ed58c2 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/portal_gun/portal_atlas_orange_vortex.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/portal_gun/portal_blue_vortex.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/portal_gun/portal_blue_vortex.png new file mode 100644 index 00000000..aaef912a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/portal_gun/portal_blue_vortex.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/portal_gun/portal_craisin_blue_vortex.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/portal_gun/portal_craisin_blue_vortex.png new file mode 100644 index 00000000..02ed58c2 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/portal_gun/portal_craisin_blue_vortex.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/portal_gun/portal_craisin_orange_vortex.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/portal_gun/portal_craisin_orange_vortex.png new file mode 100644 index 00000000..5f968f76 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/portal_gun/portal_craisin_orange_vortex.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/portal_gun/portal_laynce_blue_vortex.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/portal_gun/portal_laynce_blue_vortex.png new file mode 100644 index 00000000..6649e933 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/portal_gun/portal_laynce_blue_vortex.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/portal_gun/portal_laynce_orange_vortex.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/portal_gun/portal_laynce_orange_vortex.png new file mode 100644 index 00000000..e3e15f9e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/portal_gun/portal_laynce_orange_vortex.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/portal_gun/portal_orange_vortex.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/portal_gun/portal_orange_vortex.png new file mode 100644 index 00000000..6649e933 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/portal_gun/portal_orange_vortex.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/portal_gun/portal_p_body_blue_vortex.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/portal_gun/portal_p_body_blue_vortex.png new file mode 100644 index 00000000..5f968f76 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/portal_gun/portal_p_body_blue_vortex.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/portal_gun/portal_p_body_orange_vortex.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/portal_gun/portal_p_body_orange_vortex.png new file mode 100644 index 00000000..301345a9 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/portal_gun/portal_p_body_orange_vortex.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/queen/queen_beam_end_1.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/queen/queen_beam_end_1.png deleted file mode 100644 index c3f6118e..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/queen/queen_beam_end_1.png and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/queen/queen_beam_end_2.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/queen/queen_beam_end_2.png deleted file mode 100644 index f93fca80..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/queen/queen_beam_end_2.png and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/queen/queen_beam_inner.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/queen/queen_beam_inner.png deleted file mode 100644 index 7658c7b8..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/queen/queen_beam_inner.png and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/queen/queen_beam_outer.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/queen/queen_beam_outer.png deleted file mode 100644 index 74143aa6..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/queen/queen_beam_outer.png and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/triffid.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/triffid.png deleted file mode 100644 index 00ee04a0..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/triffid.png and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/villager/profession/computer_scientist.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/villager/profession/computer_scientist.png new file mode 100644 index 00000000..420cfcfe Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/villager/profession/computer_scientist.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/villager/profession/computer_scientist.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/villager/profession/computer_scientist.png.mcmeta new file mode 100644 index 00000000..4525a63b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/villager/profession/computer_scientist.png.mcmeta @@ -0,0 +1,5 @@ +{ + "villager": { + "hat": "full" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/villager/profession/pest_control.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/villager/profession/pest_control.png new file mode 100644 index 00000000..ddb6ca14 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/villager/profession/pest_control.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/villager/profession/pest_control.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/villager/profession/pest_control.png.mcmeta new file mode 100644 index 00000000..5571aa23 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/villager/profession/pest_control.png.mcmeta @@ -0,0 +1,5 @@ +{ + "villager": { + "hat": "none" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/zombie_villager/profession/computer_scientist.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/zombie_villager/profession/computer_scientist.png new file mode 100644 index 00000000..420cfcfe Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/zombie_villager/profession/computer_scientist.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/zombie_villager/profession/computer_scientist.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/zombie_villager/profession/computer_scientist.png.mcmeta new file mode 100644 index 00000000..4525a63b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/zombie_villager/profession/computer_scientist.png.mcmeta @@ -0,0 +1,5 @@ +{ + "villager": { + "hat": "full" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/zombie_villager/profession/pest_control.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/zombie_villager/profession/pest_control.png new file mode 100644 index 00000000..ddb6ca14 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/zombie_villager/profession/pest_control.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/zombie_villager/profession/pest_control.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/zombie_villager/profession/pest_control.png.mcmeta new file mode 100644 index 00000000..5571aa23 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/zombie_villager/profession/pest_control.png.mcmeta @@ -0,0 +1,5 @@ +{ + "villager": { + "hat": "none" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/environment/eye_moon.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/environment/eye_moon.png new file mode 100644 index 00000000..1db201a8 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/environment/eye_moon.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/environment/eye_star1.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/environment/eye_star1.png new file mode 100644 index 00000000..0ed8de03 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/environment/eye_star1.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/environment/eye_star2.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/environment/eye_star2.png new file mode 100644 index 00000000..c9c7098c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/environment/eye_star2.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/environment/eye_star3.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/environment/eye_star3.png new file mode 100644 index 00000000..2a9efa28 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/environment/eye_star3.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/environment/eye_star4.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/environment/eye_star4.png new file mode 100644 index 00000000..2dc291f5 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/environment/eye_star4.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/environment/eye_star5.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/environment/eye_star5.png new file mode 100644 index 00000000..5c1cb4bf Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/environment/eye_star5.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/environment/moon_view/earth.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/environment/moon_view/earth.png new file mode 100644 index 00000000..985a7165 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/environment/moon_view/earth.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/hanging_signs/truffalo.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/hanging_signs/truffalo.png new file mode 100644 index 00000000..966c567f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/hanging_signs/truffalo.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/portal_gun_atlas_crosshair.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/portal_gun_atlas_crosshair.png new file mode 100644 index 00000000..cc6ed5f5 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/portal_gun_atlas_crosshair.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/portal_gun_craisin_crosshair.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/portal_gun_craisin_crosshair.png new file mode 100644 index 00000000..a30b6fee Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/portal_gun_craisin_crosshair.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/portal_gun_crosshair.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/portal_gun_crosshair.png new file mode 100644 index 00000000..1adf142c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/portal_gun_crosshair.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/portal_gun_laynce_crosshair.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/portal_gun_laynce_crosshair.png new file mode 100644 index 00000000..9ea060d5 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/portal_gun_laynce_crosshair.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/portal_gun_p_body_crosshair.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/portal_gun_p_body_crosshair.png new file mode 100644 index 00000000..20d22c0c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/portal_gun_p_body_crosshair.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/blood_gods_blade.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/blood_gods_blade.png new file mode 100644 index 00000000..bbe2bacb Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/blood_gods_blade.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/bug_spray.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/bug_spray.png new file mode 100644 index 00000000..9d5aeb7b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/bug_spray.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/bug_spray_spraying.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/bug_spray_spraying.png new file mode 100644 index 00000000..9d5aeb7b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/bug_spray_spraying.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/cheep_bucket.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/cheep_bucket.png index 39b5499a..42a752d7 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/cheep_bucket.png and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/cheep_bucket.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/cloud_shark_fin.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/cloud_shark_fin.png deleted file mode 100644 index e8f50269..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/cloud_shark_fin.png and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/cloud_shark_fin_soup.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/cloud_shark_fin_soup.png deleted file mode 100644 index 2cba050e..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/cloud_shark_fin_soup.png and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/creeping_horror_egg.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/creeping_horror_egg.png deleted file mode 100644 index 3f83ab76..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/creeping_horror_egg.png and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/giant_frying_pan/giant_frying_pan_in_hand.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/giant_frying_pan/giant_frying_pan_in_hand.png new file mode 100644 index 00000000..7c0e4f0d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/giant_frying_pan/giant_frying_pan_in_hand.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/giant_frying_pan/giant_frying_pan_in_hand_full.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/giant_frying_pan/giant_frying_pan_in_hand_full.png new file mode 100644 index 00000000..a3f688b8 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/giant_frying_pan/giant_frying_pan_in_hand_full.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/giant_frying_pan/giant_frying_pan_model.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/giant_frying_pan/giant_frying_pan_model.png new file mode 100644 index 00000000..ac28525d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/giant_frying_pan/giant_frying_pan_model.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/glimmer_bottle.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/glimmer_bottle.png index f9c4da5c..f783957b 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/glimmer_bottle.png and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/glimmer_bottle.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/glimmer_bottle.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/glimmer_bottle.png.mcmeta new file mode 100644 index 00000000..1e3d6590 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/glimmer_bottle.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "frametime": 3, + "interpolate": true + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/jumpy_boots.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/jumpy_boots.png deleted file mode 100644 index 8a3fd730..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/jumpy_boots.png and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/jumpy_bug_egg_item.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/jumpy_bug_egg_item.png deleted file mode 100644 index 820c86db..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/jumpy_bug_egg_item.png and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/jumpy_bug_leg.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/jumpy_bug_leg.png deleted file mode 100644 index f517ba33..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/jumpy_bug_leg.png and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/lurking_terror_egg.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/lurking_terror_egg.png deleted file mode 100644 index 6a372140..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/lurking_terror_egg.png and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/music_disc_grotesque.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/music_disc_grotesque.png new file mode 100644 index 00000000..a7b3d801 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/music_disc_grotesque.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/music_disc_the_queen.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/music_disc_the_queen.png new file mode 100644 index 00000000..b6c6f083 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/music_disc_the_queen.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/music_disc_verdance.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/music_disc_verdance.png new file mode 100644 index 00000000..cf11851a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/music_disc_verdance.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/portal_gun/portal_gun_atlas_item.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/portal_gun/portal_gun_atlas_item.png new file mode 100644 index 00000000..bf83fce8 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/portal_gun/portal_gun_atlas_item.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/portal_gun/portal_gun_craisin_item.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/portal_gun/portal_gun_craisin_item.png new file mode 100644 index 00000000..41a5c982 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/portal_gun/portal_gun_craisin_item.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/portal_gun/portal_gun_laynce_item.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/portal_gun/portal_gun_laynce_item.png new file mode 100644 index 00000000..ffca8a6a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/portal_gun/portal_gun_laynce_item.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/portal_gun/portal_gun_p_body_item.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/portal_gun/portal_gun_p_body_item.png new file mode 100644 index 00000000..e4626b8b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/portal_gun/portal_gun_p_body_item.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/spirit_apple.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/spirit_apple.png index 118f47e5..b2d128d7 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/spirit_apple.png and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/spirit_apple.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/temporal_tuner.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/temporal_tuner.png new file mode 100644 index 00000000..5aefb6c5 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/temporal_tuner.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/triffid_goo.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/triffid_goo.png deleted file mode 100644 index c815e500..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/triffid_goo.png and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/vortex_eye.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/vortex_eye.png deleted file mode 100644 index 70a00987..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/vortex_eye.png and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/bleeding.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/bleeding.png new file mode 100644 index 00000000..af1ec998 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/bleeding.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/blood_moon.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/blood_moon.png new file mode 100644 index 00000000..bbe2bacb Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/blood_moon.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/commanded.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/commanded.png index b73a5b56..9941aef2 100644 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/commanded.png and b/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/commanded.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/contracted.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/contracted.png deleted file mode 100644 index d8527f96..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/contracted.png and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/dilated.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/dilated.png deleted file mode 100644 index d8527f96..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/dilated.png and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/inverted.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/inverted.png deleted file mode 100644 index 77d8ce5f..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/inverted.png and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/royal_vitality_penalty.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/royal_vitality_penalty.png new file mode 100644 index 00000000..9941aef2 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/royal_vitality_penalty.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/jumpy_boots_layer_1.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/jumpy_boots_layer_1.png deleted file mode 100644 index 81496667..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/jumpy_boots_layer_1.png and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/models/item/portal_gun_atlas.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/item/portal_gun_atlas.png new file mode 100644 index 00000000..af3e1521 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/item/portal_gun_atlas.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/models/item/portal_gun_craisin.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/item/portal_gun_craisin.png new file mode 100644 index 00000000..e85406a0 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/item/portal_gun_craisin.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/models/item/portal_gun_laynce.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/item/portal_gun_laynce.png new file mode 100644 index 00000000..8f2a6d38 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/item/portal_gun_laynce.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/models/item/portal_gun_p_body.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/item/portal_gun_p_body.png new file mode 100644 index 00000000..fc6b49c0 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/item/portal_gun_p_body.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/bug_spray/bug_spray_particle1.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/bug_spray/bug_spray_particle1.png new file mode 100644 index 00000000..485eeb3d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/bug_spray/bug_spray_particle1.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/bug_spray/bug_spray_particle2.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/bug_spray/bug_spray_particle2.png new file mode 100644 index 00000000..235f79f0 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/bug_spray/bug_spray_particle2.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/bug_spray/bug_spray_particle3.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/bug_spray/bug_spray_particle3.png new file mode 100644 index 00000000..d8a93af4 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/bug_spray/bug_spray_particle3.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/bug_spray/bug_spray_particle4.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/bug_spray/bug_spray_particle4.png new file mode 100644 index 00000000..ef70266c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/bug_spray/bug_spray_particle4.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/vfx/commanded_vfx_side.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/vfx/commanded_vfx_side.png new file mode 100644 index 00000000..e9ef5b59 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/vfx/commanded_vfx_side.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/vfx/portal_gun_black_hole.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/vfx/portal_gun_black_hole.png deleted file mode 100644 index 2661e379..00000000 Binary files a/common-1.20.1/src/main/resources/assets/antarchy/textures/vfx/portal_gun_black_hole.png and /dev/null differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/vfx/portal_gun_shot.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/vfx/portal_gun_shot.png new file mode 100644 index 00000000..0f12eadc Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/vfx/portal_gun_shot.png differ diff --git a/common-1.20.1/src/main/resources/assets/minecraft/atlases/armor_trims.json b/common-1.20.1/src/main/resources/assets/minecraft/atlases/armor_trims.json index 8c1050d9..e8a9a58d 100644 --- a/common-1.20.1/src/main/resources/assets/minecraft/atlases/armor_trims.json +++ b/common-1.20.1/src/main/resources/assets/minecraft/atlases/armor_trims.json @@ -46,7 +46,8 @@ "uranium": "antarchy:trims/color_palettes/uranium", "titanium": "antarchy:trims/color_palettes/titanium", "blood_crystal": "antarchy:trims/color_palettes/blood_crystal", - "nightmare_scale": "antarchy:trims/color_palettes/nightmare_scale" + "nightmare_scale": "antarchy:trims/color_palettes/nightmare_scale", + "tigers_eye": "antarchy:trims/color_palettes/tigers_eye" } } ] diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/a_lovely_world.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/a_lovely_world.json deleted file mode 100644 index aff9ec92..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/a_lovely_world.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "parent": "antarchy:visit_elythia", - "criteria": { - "discover_stampys_house": { - "conditions": { - "player": [ - { - "condition": "minecraft:entity_properties", - "entity": "this", - "predicate": { - "location": { - "structures": "antarchy:stampys_house" - } - } - } - ] - }, - "trigger": "minecraft:location" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.a_lovely_world.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "antarchy:ouranwood_door" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.a_lovely_world.title" - } - }, - "requirements": [ - [ - "discover_stampys_house" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/apple_of_my_eye.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/apple_of_my_eye.json deleted file mode 100644 index 65b0a56e..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/apple_of_my_eye.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "parent": "antarchy:visit_elythia", - "criteria": { - "impossible": { - "trigger": "minecraft:impossible" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.apple_of_my_eye.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "antarchy:glimmer_bottle" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.apple_of_my_eye.title" - } - }, - "requirements": [ - [ - "impossible" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/beetle_buddies.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/beetle_buddies.json deleted file mode 100644 index e5837da4..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/beetle_buddies.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "parent": "antarchy:anger_the_hive_mind", - "criteria": { - "tame_hercules_beetle": { - "conditions": { - "entity": { - "type": "antarchy:hercules_beetle" - } - }, - "trigger": "minecraft:tame_animal" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.beetle_buddies.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "antarchy:hercules_beetle_spawn_egg" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.beetle_buddies.title" - } - }, - "requirements": [ - [ - "tame_hercules_beetle" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/behavioral_correction.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/behavioral_correction.json deleted file mode 100644 index f8a7ed03..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/behavioral_correction.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "parent": "antarchy:herculean_task", - "criteria": { - "obtain_attitude_adjuster": { - "conditions": { - "items": [ - { - "items": "antarchy:attitude_adjuster" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.behavioral_correction.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "antarchy:attitude_adjuster" - }, - "show_toast": true, - "title": { - "text": "Ant-ger Management" - } - }, - "requirements": [ - [ - "obtain_attitude_adjuster" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/brutalfly.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/brutalfly.json deleted file mode 100644 index 6cf7e04a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/brutalfly.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "parent": "antarchy:visit_elythia", - "criteria": { - "brutalfly": { - "conditions": { - "items": [ - { - "items": "antarchy:brutalfly_elytra" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.brutalfly.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "antarchy:brutalfly_elytra" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.brutalfly.title" - } - }, - "requirements": [ - [ - "brutalfly" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/bug_apetit.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/bug_apetit.json deleted file mode 100644 index c76db0e8..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/bug_apetit.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "parent": "antarchy:anger_the_hive_mind", - "criteria": { - "eat_cooked_bug_meat": { - "conditions": { - "item": { - "items": [ - "antarchy:cooked_bug_meat" - ] - } - }, - "trigger": "minecraft:consume_item" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.bug_apetit.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "antarchy:cooked_bug_meat" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.bug_apetit.title" - } - }, - "requirements": [ - [ - "eat_cooked_bug_meat" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/bugged_out.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/bugged_out.json deleted file mode 100644 index a3f500bf..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/bugged_out.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "parent": "antarchy:visit_elythia", - "criteria": { - "kill_alpha_mantis": { - "conditions": { - "entity": { - "type": "antarchy:alpha_mantis" - } - }, - "trigger": "minecraft:player_killed_entity" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.bugged_out.description" - }, - "frame": "challenge", - "icon": { - "count": 1, - "id": "antarchy:alpha_mantis_spawn_egg" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.bugged_out.title" - } - }, - "requirements": [ - [ - "kill_alpha_mantis" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/cancel_out.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/cancel_out.json deleted file mode 100644 index 7ab8bd36..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/cancel_out.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:adventure/root", - "criteria": { - "cancel_out": { - "conditions": { - "effects": { - "antarchy:growth": {}, - "antarchy:shrinking": {} - } - }, - "trigger": "minecraft:effects_changed" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.cancel_out.description" - }, - "frame": "goal", - "icon": { - "count": 1, - "id": "antarchy:shrink_ray" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.cancel_out.title" - } - }, - "requirements": [ - [ - "cancel_out" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/challenge_games.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/challenge_games.json deleted file mode 100644 index 10510c63..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/challenge_games.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "parent": "antarchy:visit_elythia", - "criteria": { - "discover_ruined_arena": { - "conditions": { - "player": [ - { - "condition": "minecraft:entity_properties", - "entity": "this", - "predicate": { - "location": { - "structures": "antarchy:ruined_arena" - } - } - } - ] - }, - "trigger": "minecraft:location" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.challenge_games.description" - }, - "frame": "challenge", - "icon": { - "count": 1, - "id": "minecraft:stone_bricks" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.challenge_games.title" - } - }, - "requirements": [ - [ - "discover_ruined_arena" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/cops_n_robbers.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/cops_n_robbers.json deleted file mode 100644 index 00a17b4a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/cops_n_robbers.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "parent": "antarchy:visit_elythia", - "criteria": { - "discover_ruined_prison": { - "conditions": { - "player": [ - { - "condition": "minecraft:entity_properties", - "entity": "this", - "predicate": { - "location": { - "structures": "antarchy:ruined_prison" - } - } - } - ] - }, - "trigger": "minecraft:location" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.cops_n_robbers.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "minecraft:iron_bars" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.cops_n_robbers.title" - } - }, - "requirements": [ - [ - "discover_ruined_prison" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/davy_jones_locker.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/davy_jones_locker.json deleted file mode 100644 index e5c3e555..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/davy_jones_locker.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "parent": "minecraft:adventure/root", - "criteria": { - "kill_kraken": { - "conditions": { - "entity": { - "type": "antarchy:kraken" - } - }, - "trigger": "minecraft:player_killed_entity" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.davy_jones_locker.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "antarchy:kraken_tooth" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.davy_jones_locker.title" - } - }, - "requirements": [ - [ - "kill_kraken" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/deerly_beloved.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/deerly_beloved.json deleted file mode 100644 index 3ac0b74d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/deerly_beloved.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "parent": "antarchy:visit_elythia", - "criteria": { - "impossible": { - "trigger": "minecraft:impossible" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.deerly_beloved.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "antarchy:glimmer_bottle" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.deerly_beloved.title" - } - }, - "requirements": [ - [ - "impossible" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/dont_let_the_bed_bugs_bite.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/dont_let_the_bed_bugs_bite.json deleted file mode 100644 index d7724e5a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/dont_let_the_bed_bugs_bite.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "parent": "antarchy:visit_thoraxis", - "criteria": { - "kill_bed_bug": { - "conditions": { - "entity": { - "type": "antarchy:bed_bug" - } - }, - "trigger": "minecraft:player_killed_entity" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.dont_let_the_bed_bugs_bite.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "antarchy:bed_bug_egg" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.dont_let_the_bed_bugs_bite.title" - } - }, - "requirements": [ - [ - "kill_bed_bug" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/duct_tape.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/duct_tape.json deleted file mode 100644 index 7d5bb26a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/duct_tape.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "parent": "minecraft:adventure/root", - "criteria": { - "impossible": { - "trigger": "minecraft:impossible" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.duct_tape.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "antarchy:duct_tape" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.duct_tape.title" - } - }, - "requirements": [ - [ - "impossible" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/elkcellent_choice.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/elkcellent_choice.json deleted file mode 100644 index 294cc956..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/elkcellent_choice.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "parent": "antarchy:visit_elythia", - "criteria": { - "impossible": { - "trigger": "minecraft:impossible" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.elkcellent_choice.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "antarchy:glimmer_bottle" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.elkcellent_choice.title" - } - }, - "requirements": [ - [ - "impossible" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/enter_the_speed_force.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/enter_the_speed_force.json deleted file mode 100644 index 34f3141d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/enter_the_speed_force.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "parent": "minecraft:adventure/root", - "criteria": { - "become_contracted": { - "conditions": { - "effects": { - "antarchy:contracted": {} - } - }, - "trigger": "minecraft:effects_changed" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.enter_the_speed_force.description" - }, - "frame": "goal", - "icon": { - "count": 1, - "id": "minecraft:potion", - "components": { - "minecraft:potion_contents": { - "potion": "antarchy:time_contraction" - } - } - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.enter_the_speed_force.title" - } - }, - "requirements": [ - [ - "become_contracted" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/fallen_king_crown.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/fallen_king_crown.json deleted file mode 100644 index 03a01b96..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/fallen_king_crown.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "parent": "antarchy:fallen_kingdom_castle", - "criteria": { - "fallen_king_crown": { - "conditions": { - "items": [ - { - "items": "antarchy:fallen_king_crown" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.fallen_king_crown.description" - }, - "frame": "goal", - "icon": { - "count": 1, - "id": "antarchy:fallen_king_crown" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.fallen_king_crown.title" - } - }, - "requirements": [ - [ - "fallen_king_crown" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/fallen_kingdom_castle.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/fallen_kingdom_castle.json deleted file mode 100644 index 98ff40ab..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/fallen_kingdom_castle.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "parent": "antarchy:visit_elythia", - "criteria": { - "discover_castle": { - "conditions": { - "player": [ - { - "condition": "minecraft:entity_properties", - "entity": "this", - "predicate": { - "location": { - "structures": "antarchy:fallen_kingdom_castle" - } - } - } - ] - }, - "trigger": "minecraft:location" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.fallen_kingdom_castle.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "minecraft:stone_bricks" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.fallen_kingdom_castle.title" - } - }, - "requirements": [ - [ - "discover_castle" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/gravity_gun_craft.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/gravity_gun_craft.json deleted file mode 100644 index 4c612dc1..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/gravity_gun_craft.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "parent": "antarchy:visit_thoraxis", - "criteria": { - "craft_gravity_gun": { - "conditions": { - "items": [ - { - "items": "antarchy:gravity_gun" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.gravity_gun_craft.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "antarchy:gravity_gun" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.gravity_gun_craft.title" - } - }, - "requirements": [ - [ - "craft_gravity_gun" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/growth_ray_craft.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/growth_ray_craft.json deleted file mode 100644 index 97c9bdb8..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/growth_ray_craft.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "parent": "minecraft:adventure/root", - "criteria": { - "craft_growth_ray": { - "conditions": { - "items": [ - { - "items": "antarchy:growth_ray" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.growth_ray_craft.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "antarchy:growth_ray" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.growth_ray_craft.title" - } - }, - "requirements": [ - [ - "craft_growth_ray" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/herculean_task.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/herculean_task.json deleted file mode 100644 index 70dc5d59..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/herculean_task.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "parent": "antarchy:anger_the_hive_mind", - "criteria": { - "kill_hercules_beetle": { - "conditions": { - "entity": { - "type": "antarchy:hercules_beetle" - } - }, - "trigger": "minecraft:player_killed_entity" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.herculean_task.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "antarchy:hercules_horn" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.herculean_task.title" - } - }, - "requirements": [ - [ - "kill_hercules_beetle" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/hey_listen.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/hey_listen.json deleted file mode 100644 index 8d624e78..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/hey_listen.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "parent": "antarchy:visit_thoraxis", - "criteria": { - "impossible": { - "trigger": "minecraft:impossible" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.hey_listen.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "antarchy:reverie_spawn_egg" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.hey_listen.title" - } - }, - "requirements": [ - [ - "impossible" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/hoppy_together.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/hoppy_together.json deleted file mode 100644 index 9d5bdb62..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/hoppy_together.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "parent": "antarchy:visit_elythia", - "criteria": { - "impossible": { - "trigger": "minecraft:impossible" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.hoppy_together.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "antarchy:glimmer_bottle" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.hoppy_together.title" - } - }, - "requirements": [ - [ - "impossible" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/in_the_upside_down.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/in_the_upside_down.json deleted file mode 100644 index e1f2e4aa..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/in_the_upside_down.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "parent": "antarchy:visit_thoraxis", - "criteria": { - "become_inverted": { - "conditions": { - "effects": { - "antarchy:inverted": {} - } - }, - "trigger": "minecraft:effects_changed" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.in_the_upside_down.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "minecraft:potion", - "components": { - "minecraft:potion_contents": { - "potion": "antarchy:inversion" - } - } - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.in_the_upside_down.title" - } - }, - "requirements": [ - [ - "become_inverted" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/kill_toreterror.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/kill_toreterror.json deleted file mode 100644 index 040750d4..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/kill_toreterror.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "parent": "antarchy:visit_elythia", - "criteria": { - "kill_toreterror": { - "conditions": { - "entity": { - "type": "antarchy:toreterror" - } - }, - "trigger": "minecraft:player_killed_entity" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.kill_toreterror.description" - }, - "frame": "challenge", - "icon": { - "count": 1, - "id": "antarchy:toreterror_spawn_egg" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.kill_toreterror.title" - } - }, - "requirements": [ - [ - "kill_toreterror" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/let_it_die.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/let_it_die.json deleted file mode 100644 index 1b50319f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/let_it_die.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "parent": "antarchy:visit_elythia", - "criteria": { - "obtain_truffalo_tuft": { - "conditions": { - "items": [ - { - "items": "antarchy:white_truffalo_tuft" - }, - { - "items": "antarchy:orange_truffalo_tuft" - }, - { - "items": "antarchy:magenta_truffalo_tuft" - }, - { - "items": "antarchy:light_blue_truffalo_tuft" - }, - { - "items": "antarchy:yellow_truffalo_tuft" - }, - { - "items": "antarchy:lime_truffalo_tuft" - }, - { - "items": "antarchy:pink_truffalo_tuft" - }, - { - "items": "antarchy:gray_truffalo_tuft" - }, - { - "items": "antarchy:light_gray_truffalo_tuft" - }, - { - "items": "antarchy:cyan_truffalo_tuft" - }, - { - "items": "antarchy:purple_truffalo_tuft" - }, - { - "items": "antarchy:blue_truffalo_tuft" - }, - { - "items": "antarchy:brown_truffalo_tuft" - }, - { - "items": "antarchy:green_truffalo_tuft" - }, - { - "items": "antarchy:red_truffalo_tuft" - }, - { - "items": "antarchy:black_truffalo_tuft" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.let_it_die.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "antarchy:white_truffalo_tuft" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.let_it_die.title" - } - }, - "requirements": [ - [ - "obtain_truffalo_tuft" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/lucid_dreams.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/lucid_dreams.json deleted file mode 100644 index 3793958b..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/lucid_dreams.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "parent": "antarchy:visit_thoraxis", - "criteria": { - "kill_lucid": { - "conditions": { - "entity": { - "type": "antarchy:lucid" - } - }, - "trigger": "minecraft:player_killed_entity" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.lucid_dreams.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "antarchy:lucid_eye" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.lucid_dreams.title" - } - }, - "requirements": [ - [ - "kill_lucid" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/moley_poley.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/moley_poley.json deleted file mode 100644 index 844c93b3..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/moley_poley.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "parent": "antarchy:anger_the_hive_mind", - "criteria": { - "kill_molevore": { - "conditions": { - "entity": { - "type": "antarchy:molevore" - } - }, - "trigger": "minecraft:player_killed_entity" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.moley_poley.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "antarchy:molevore_nose" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.moley_poley.title" - } - }, - "requirements": [ - [ - "kill_molevore" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/mucus_obtained.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/mucus_obtained.json deleted file mode 100644 index ce570ca6..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/mucus_obtained.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "parent": "minecraft:adventure/root", - "criteria": { - "obtain_mucus": { - "conditions": { - "items": [ - { - "items": "antarchy:mucus" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.mucus_obtained.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "antarchy:mucus" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.mucus_obtained.title" - } - }, - "requirements": [ - [ - "obtain_mucus" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/now_watch_me_whip.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/now_watch_me_whip.json deleted file mode 100644 index 9e066933..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/now_watch_me_whip.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "parent": "antarchy:sting_operation", - "criteria": { - "now_watch_me_whip": { - "conditions": { - "items": [ - { - "items": "antarchy:scorpion_whip" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.now_watch_me_whip.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "antarchy:scorpion_whip" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.now_watch_me_whip.title" - } - }, - "requirements": [ - [ - "now_watch_me_whip" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/rocket_powered_octopus.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/rocket_powered_octopus.json deleted file mode 100644 index 3bc55c0d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/rocket_powered_octopus.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "parent": "minecraft:adventure/root", - "criteria": { - "craft_rpo_launcher": { - "conditions": { - "items": [ - { - "items": "antarchy:rpo_launcher" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.rocket_powered_octopus.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "antarchy:rpo_launcher" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.rocket_powered_octopus.title" - } - }, - "requirements": [ - [ - "craft_rpo_launcher" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/royal_assailant_staff.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/royal_assailant_staff.json deleted file mode 100644 index f1eaa800..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/royal_assailant_staff.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "parent": "minecraft:adventure/root", - "criteria": { - "royal_assailant_staff": { - "conditions": { - "items": [ - { - "items": "antarchy:royal_assailant_staff" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.royal_assailant_staff.description" - }, - "frame": "goal", - "icon": { - "count": 1, - "id": "antarchy:royal_assailant_staff" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.royal_assailant_staff.title" - } - }, - "requirements": [ - [ - "royal_assailant_staff" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/shark_weak.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/shark_weak.json deleted file mode 100644 index 11c3275f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/shark_weak.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "parent": "antarchy:visit_elythia", - "criteria": { - "kill_stratoshark": { - "conditions": { - "entity": { - "type": "antarchy:stratoshark" - } - }, - "trigger": "minecraft:player_killed_entity" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.shark_weak.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "antarchy:stratoshark_fin" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.shark_weak.title" - } - }, - "requirements": [ - [ - "kill_stratoshark" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/shrink_ray_craft.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/shrink_ray_craft.json deleted file mode 100644 index 21bbb0c2..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/shrink_ray_craft.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "parent": "minecraft:adventure/root", - "criteria": { - "craft_shrink_ray": { - "conditions": { - "items": [ - { - "items": "antarchy:shrink_ray" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.shrink_ray_craft.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "antarchy:shrink_ray" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.shrink_ray_craft.title" - } - }, - "requirements": [ - [ - "craft_shrink_ray" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/soups_up.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/soups_up.json deleted file mode 100644 index a4cd4c5d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/soups_up.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "parent": "antarchy:shark_weak", - "criteria": { - "eat_soup": { - "conditions": { - "item": { - "items": [ - "antarchy:stratoshark_fin_soup" - ] - } - }, - "trigger": "minecraft:consume_item" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.soups_up.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "antarchy:stratoshark_fin_soup" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.soups_up.title" - } - }, - "requirements": [ - [ - "eat_soup" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/spirant_animal.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/spirant_animal.json deleted file mode 100644 index 9b9508b5..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/spirant_animal.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "parent": "antarchy:visit_elythia", - "criteria": { - "impossible": { - "trigger": "minecraft:impossible" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.spirant_animal.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "antarchy:glimmer_bottle" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.spirant_animal.title" - } - }, - "requirements": [ - [ - "impossible" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/squidzooka_craft.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/squidzooka_craft.json deleted file mode 100644 index 719c78d1..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/squidzooka_craft.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "parent": "minecraft:adventure/root", - "criteria": { - "craft_squidzooka": { - "conditions": { - "items": [ - { - "items": "antarchy:squidzooka" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.squidzooka_craft.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "antarchy:squidzooka" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.squidzooka_craft.title" - } - }, - "requirements": [ - [ - "craft_squidzooka" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/stone_cold.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/stone_cold.json deleted file mode 100644 index 6a228241..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/stone_cold.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "parent": "antarchy:visit_elythia", - "criteria": { - "kill_basilisk": { - "conditions": { - "entity": { - "type": "antarchy:basilisk" - } - }, - "trigger": "minecraft:player_killed_entity" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.stone_cold.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "antarchy:basilisk_fang" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.stone_cold.title" - } - }, - "requirements": [ - [ - "kill_basilisk" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/sweater_dreams.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/sweater_dreams.json deleted file mode 100644 index c54c949a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/sweater_dreams.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "parent": "antarchy:visit_thoraxis", - "criteria": { - "kill_nightmare": { - "conditions": { - "entity": { - "type": "antarchy:nightmare" - } - }, - "trigger": "minecraft:player_killed_entity" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.sweater_dreams.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "minecraft:potion", - "components": { - "minecraft:potion_contents": { - "potion": "antarchy:dread" - } - } - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.sweater_dreams.title" - } - }, - "requirements": [ - [ - "kill_nightmare" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/the_lab.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/the_lab.json deleted file mode 100644 index 09d9dcfb..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/the_lab.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "parent": "antarchy:visit_elythia", - "criteria": { - "discover_lab": { - "conditions": { - "player": [ - { - "condition": "minecraft:entity_properties", - "entity": "this", - "predicate": { - "location": { - "structures": "antarchy:trayaurus_lab" - } - } - } - ] - }, - "trigger": "minecraft:location" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.the_lab.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "antarchy:diamond_minecart" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.the_lab.title" - } - }, - "requirements": [ - [ - "discover_lab" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/ultimate_armor.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/ultimate_armor.json deleted file mode 100644 index e7a0f11e..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/ultimate_armor.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "parent": "minecraft:story/root", - "criteria": { - "ultimate_helmet": { - "conditions": { - "items": [ - { - "items": "antarchy:ultimate_helmet" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "ultimate_chestplate": { - "conditions": { - "items": [ - { - "items": "antarchy:ultimate_chestplate" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "ultimate_leggings": { - "conditions": { - "items": [ - { - "items": "antarchy:ultimate_leggings" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "ultimate_boots": { - "conditions": { - "items": [ - { - "items": "antarchy:ultimate_boots" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.ultimate_armor.description" - }, - "frame": "goal", - "icon": { - "count": 1, - "id": "antarchy:ultimate_chestplate" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.ultimate_armor.title" - } - }, - "requirements": [ - [ - "ultimate_helmet" - ], - [ - "ultimate_chestplate" - ], - [ - "ultimate_leggings" - ], - [ - "ultimate_boots" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/ultimate_bow.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/ultimate_bow.json deleted file mode 100644 index 2b171495..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/ultimate_bow.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "parent": "minecraft:adventure/root", - "criteria": { - "ultimate_bow": { - "conditions": { - "items": [ - { - "items": "antarchy:ultimate_bow" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.ultimate_bow.description" - }, - "frame": "goal", - "icon": { - "count": 1, - "id": "antarchy:ultimate_bow" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.ultimate_bow.title" - } - }, - "requirements": [ - [ - "ultimate_bow" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/upper_craft.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/upper_craft.json deleted file mode 100644 index f221db8b..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/upper_craft.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "parent": "minecraft:adventure/root", - "criteria": { - "craft_upper": { - "conditions": { - "items": [ - { - "items": "antarchy:upper" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.upper_craft.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "antarchy:upper" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.upper_craft.title" - } - }, - "requirements": [ - [ - "craft_upper" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/very_hungry_caterpillar.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/very_hungry_caterpillar.json deleted file mode 100644 index c87e10a8..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/very_hungry_caterpillar.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "parent": "minecraft:adventure/root", - "criteria": { - "impossible": { - "trigger": "minecraft:impossible" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.very_hungry_caterpillar.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "antarchy:caterpillar_spawn_egg" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.very_hungry_caterpillar.title" - } - }, - "requirements": [ - [ - "impossible" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/visit_cavaryn.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/visit_cavaryn.json deleted file mode 100644 index f02d73ed..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/visit_cavaryn.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "criteria": { - "entered_cavaryn": { - "conditions": { - "to": "antarchy:cavaryn" - }, - "trigger": "minecraft:changed_dimension" - } - }, - "display": { - "announce_to_chat": true, - "background": "antarchy:textures/block/myrmite/myrmite.png", - "description": { - "translate": "advancements.antarchy.visit_cavaryn.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "antarchy:myrmite" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.visit_cavaryn.title" - } - }, - "requirements": [ - [ - "entered_cavaryn" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/visit_elythia.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/visit_elythia.json deleted file mode 100644 index 123c2124..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/visit_elythia.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "criteria": { - "entered_elythia": { - "conditions": { - "to": "antarchy:elythia" - }, - "trigger": "minecraft:changed_dimension" - } - }, - "display": { - "announce_to_chat": true, - "background": "antarchy:textures/block/ouranwood/mossy_ouranwood_log.png", - "description": { - "translate": "advancements.antarchy.visit_elythia.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "antarchy:brown_ant_nest" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.visit_elythia.title" - } - }, - "requirements": [ - [ - "entered_elythia" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/visit_thoraxis.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/visit_thoraxis.json deleted file mode 100644 index ac57108b..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/visit_thoraxis.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "criteria": { - "entered_thoraxis": { - "conditions": { - "to": "antarchy:thoraxis" - }, - "trigger": "minecraft:changed_dimension" - } - }, - "display": { - "announce_to_chat": true, - "background": "antarchy:textures/block/nyxite.png", - "description": { - "translate": "advancements.antarchy.visit_thoraxis.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "antarchy:red_ant_nest" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.visit_thoraxis.title" - } - }, - "requirements": [ - [ - "entered_thoraxis" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/water_cannon_craft.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/water_cannon_craft.json deleted file mode 100644 index eaaa28c9..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/water_cannon_craft.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "parent": "minecraft:adventure/root", - "criteria": { - "get_water_cannon": { - "conditions": { - "items": [ - { - "items": "antarchy:water_cannon" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.water_cannon_craft.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "antarchy:water_cannon" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.water_cannon_craft.title" - } - }, - "requirements": [ - [ - "get_water_cannon" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/whoever_smelt_it_dealt_it.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/whoever_smelt_it_dealt_it.json deleted file mode 100644 index 9e10d2ca..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/whoever_smelt_it_dealt_it.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "parent": "antarchy:visit_thoraxis", - "criteria": { - "become_stinky": { - "conditions": { - "effects": { - "antarchy:stinky": {} - } - }, - "trigger": "minecraft:effects_changed" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.whoever_smelt_it_dealt_it.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "minecraft:potion", - "components": { - "minecraft:potion_contents": { - "potion": "antarchy:stinky" - } - } - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.whoever_smelt_it_dealt_it.title" - } - }, - "requirements": [ - [ - "become_stinky" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/a_lovely_world.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/a_lovely_world.json index b19a835a..ffc71ae1 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/a_lovely_world.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/a_lovely_world.json @@ -1,5 +1,5 @@ { - "parent": "minecraft:adventure/root", + "parent": "antarchy:visit_elythia", "criteria": { "discover_stampys_house": { "conditions": { @@ -9,7 +9,7 @@ "entity": "this", "predicate": { "location": { - "structures": "antarchy:stampys_house" + "structure": "antarchy:stampys_house" } } } @@ -25,7 +25,6 @@ }, "frame": "task", "icon": { - "count": 1, "item": "antarchy:ouranwood_door" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/anger_the_hive_mind.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/anger_the_hive_mind.json similarity index 85% rename from common-1.20.1/src/main/resources/data/antarchy/advancement/anger_the_hive_mind.json rename to common-1.20.1/src/main/resources/data/antarchy/advancements/anger_the_hive_mind.json index 8f6700dd..60819fd3 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/anger_the_hive_mind.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/anger_the_hive_mind.json @@ -4,9 +4,7 @@ "kill_horde_common": { "conditions": { "entity": { - "type": { - "tag": "antarchy:horde_common" - } + "type": "#antarchy:horde_common" }, "player": [ { @@ -30,8 +28,7 @@ }, "frame": "task", "icon": { - "count": 1, - "id": "antarchy:crawling_blight_spawn_egg" + "item": "antarchy:crawling_blight_spawn_egg" }, "show_toast": true, "title": { diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/ant_arch_of_elythia.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/ant_arch_of_elythia.json similarity index 89% rename from common-1.20.1/src/main/resources/data/antarchy/advancement/ant_arch_of_elythia.json rename to common-1.20.1/src/main/resources/data/antarchy/advancements/ant_arch_of_elythia.json index e19595ba..775d64e1 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/ant_arch_of_elythia.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/ant_arch_of_elythia.json @@ -21,7 +21,9 @@ "conditions": { "items": [ { - "items": "antarchy:brutalfly_elytra" + "items": [ + "antarchy:brutalfly_elytra" + ] } ] }, @@ -35,8 +37,7 @@ }, "frame": "challenge", "icon": { - "count": 1, - "id": "antarchy:brutalfly_elytra" + "item": "antarchy:brutalfly_elytra" }, "show_toast": true, "title": { diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/apple_of_my_eye.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/apple_of_my_eye.json index 35a26734..d5e26a33 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/apple_of_my_eye.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/apple_of_my_eye.json @@ -1,5 +1,5 @@ { - "parent": "minecraft:adventure/root", + "parent": "antarchy:visit_elythia", "criteria": { "impossible": { "trigger": "minecraft:impossible" @@ -12,7 +12,6 @@ }, "frame": "task", "icon": { - "count": 1, "item": "antarchy:glimmer_bottle" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/beetle_buddies.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/beetle_buddies.json index bf7d6726..197ccabf 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/beetle_buddies.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/beetle_buddies.json @@ -1,5 +1,5 @@ { - "parent": "minecraft:adventure/root", + "parent": "antarchy:anger_the_hive_mind", "criteria": { "tame_hercules_beetle": { "conditions": { @@ -17,7 +17,6 @@ }, "frame": "task", "icon": { - "count": 1, "item": "antarchy:hercules_beetle_spawn_egg" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/behavioral_correction.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/behavioral_correction.json index aa67cc55..281e402e 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/behavioral_correction.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/behavioral_correction.json @@ -1,11 +1,13 @@ { - "parent": "minecraft:adventure/root", + "parent": "antarchy:herculean_task", "criteria": { "obtain_attitude_adjuster": { "conditions": { "items": [ { - "items": "antarchy:attitude_adjuster" + "items": [ + "antarchy:attitude_adjuster" + ] } ] }, @@ -19,12 +21,11 @@ }, "frame": "task", "icon": { - "count": 1, "item": "antarchy:attitude_adjuster" }, "show_toast": true, "title": { - "translate": "advancements.antarchy.behavioral_correction.title" + "text": "Ant-ger Management" } }, "requirements": [ diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/brutalfly.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/brutalfly.json index 51ec2363..b7655ad6 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/brutalfly.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/brutalfly.json @@ -1,11 +1,13 @@ { - "parent": "minecraft:adventure/root", + "parent": "antarchy:visit_elythia", "criteria": { "brutalfly": { "conditions": { "items": [ { - "items": "antarchy:brutalfly_elytra" + "items": [ + "antarchy:brutalfly_elytra" + ] } ] }, @@ -19,7 +21,6 @@ }, "frame": "task", "icon": { - "count": 1, "item": "antarchy:brutalfly_elytra" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/bug_apetit.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/bug_apetit.json index 461208ff..cedf6400 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/bug_apetit.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/bug_apetit.json @@ -1,5 +1,5 @@ { - "parent": "minecraft:adventure/root", + "parent": "antarchy:anger_the_hive_mind", "criteria": { "eat_cooked_bug_meat": { "conditions": { @@ -19,7 +19,6 @@ }, "frame": "task", "icon": { - "count": 1, "item": "antarchy:cooked_bug_meat" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/bugged_out.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/bugged_out.json index 150a72fc..3fe9af7d 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/bugged_out.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/bugged_out.json @@ -1,5 +1,5 @@ { - "parent": "minecraft:adventure/root", + "parent": "antarchy:visit_elythia", "criteria": { "kill_alpha_mantis": { "conditions": { @@ -17,7 +17,6 @@ }, "frame": "challenge", "icon": { - "count": 1, "item": "antarchy:alpha_mantis_spawn_egg" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/cancel_out.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/cancel_out.json index 8acb0711..912a92fa 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/cancel_out.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/cancel_out.json @@ -18,7 +18,6 @@ }, "frame": "goal", "icon": { - "count": 1, "item": "antarchy:shrink_ray" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/challenge_games.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/challenge_games.json index 5abaf450..88655cff 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/challenge_games.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/challenge_games.json @@ -1,5 +1,5 @@ { - "parent": "minecraft:adventure/root", + "parent": "antarchy:visit_elythia", "criteria": { "discover_ruined_arena": { "conditions": { @@ -25,7 +25,6 @@ }, "frame": "challenge", "icon": { - "count": 1, "item": "minecraft:stone_bricks" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/cops_n_robbers.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/cops_n_robbers.json index 7c0cf9b8..f0dc047e 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/cops_n_robbers.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/cops_n_robbers.json @@ -1,5 +1,5 @@ { - "parent": "minecraft:adventure/root", + "parent": "antarchy:visit_elythia", "criteria": { "discover_ruined_prison": { "conditions": { @@ -25,7 +25,6 @@ }, "frame": "task", "icon": { - "count": 1, "item": "minecraft:iron_bars" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/davy_jones_locker.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/davy_jones_locker.json index c733f016..808ecfda 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/davy_jones_locker.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/davy_jones_locker.json @@ -17,7 +17,6 @@ }, "frame": "task", "icon": { - "count": 1, "item": "antarchy:kraken_tooth" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/deerly_beloved.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/deerly_beloved.json index d00cd4b2..64754e01 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/deerly_beloved.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/deerly_beloved.json @@ -1,5 +1,5 @@ { - "parent": "minecraft:adventure/root", + "parent": "antarchy:visit_elythia", "criteria": { "impossible": { "trigger": "minecraft:impossible" @@ -12,7 +12,6 @@ }, "frame": "task", "icon": { - "count": 1, "item": "antarchy:glimmer_bottle" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/dont_let_the_bed_bugs_bite.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/dont_let_the_bed_bugs_bite.json index a5f32fe8..08a109f8 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/dont_let_the_bed_bugs_bite.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/dont_let_the_bed_bugs_bite.json @@ -1,5 +1,5 @@ { - "parent": "minecraft:adventure/root", + "parent": "antarchy:visit_thoraxis", "criteria": { "kill_bed_bug": { "conditions": { @@ -17,7 +17,6 @@ }, "frame": "task", "icon": { - "count": 1, "item": "antarchy:bed_bug_egg" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/down_with_the_king.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/down_with_the_king.json new file mode 100644 index 00000000..02f74b4e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/down_with_the_king.json @@ -0,0 +1,33 @@ +{ + "parent": "antarchy:visit_elythia", + "criteria": { + "kill_king": { + "conditions": { + "entity": { + "type": "antarchy:king" + } + }, + "trigger": "minecraft:player_killed_entity" + } + }, + "display": { + "announce_to_chat": true, + "description": { + "translate": "advancements.antarchy.down_with_the_king.description" + }, + "frame": "challenge", + "icon": { + "item": "antarchy:king_spawn_egg" + }, + "show_toast": true, + "title": { + "translate": "advancements.antarchy.down_with_the_king.title" + } + }, + "requirements": [ + [ + "kill_king" + ] + ], + "sends_telemetry_event": true +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/down_with_the_queen.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/down_with_the_queen.json new file mode 100644 index 00000000..a465b24c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/down_with_the_queen.json @@ -0,0 +1,33 @@ +{ + "parent": "antarchy:visit_thoraxis", + "criteria": { + "kill_queen": { + "conditions": { + "entity": { + "type": "antarchy:queen" + } + }, + "trigger": "minecraft:player_killed_entity" + } + }, + "display": { + "announce_to_chat": true, + "description": { + "translate": "advancements.antarchy.down_with_the_queen.description" + }, + "frame": "challenge", + "icon": { + "item": "antarchy:queen_spawn_egg" + }, + "show_toast": true, + "title": { + "translate": "advancements.antarchy.down_with_the_queen.title" + } + }, + "requirements": [ + [ + "kill_queen" + ] + ], + "sends_telemetry_event": true +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/duct_tape.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/duct_tape.json index 5d7718f9..a6e50183 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/duct_tape.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/duct_tape.json @@ -12,7 +12,6 @@ }, "frame": "task", "icon": { - "count": 1, "item": "antarchy:duct_tape" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/elkcellent_choice.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/elkcellent_choice.json index bfb4c209..c8831e94 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/elkcellent_choice.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/elkcellent_choice.json @@ -1,5 +1,5 @@ { - "parent": "minecraft:adventure/root", + "parent": "antarchy:visit_elythia", "criteria": { "impossible": { "trigger": "minecraft:impossible" @@ -12,7 +12,6 @@ }, "frame": "task", "icon": { - "count": 1, "item": "antarchy:glimmer_bottle" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/enter_the_speed_force.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/enter_the_speed_force.json new file mode 100644 index 00000000..8ff7a374 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/enter_the_speed_force.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:adventure/root", + "criteria": { + "become_contracted": { + "conditions": { + "effects": { + "anthology:contracted": {} + } + }, + "trigger": "minecraft:effects_changed" + } + }, + "display": { + "announce_to_chat": true, + "description": { + "translate": "advancements.antarchy.enter_the_speed_force.description" + }, + "frame": "goal", + "icon": { + "item": "minecraft:potion", + "nbt": "{\"Potion\":\"antarchy:time_contraction\"}" + }, + "show_toast": true, + "title": { + "translate": "advancements.antarchy.enter_the_speed_force.title" + } + }, + "requirements": [ + [ + "become_contracted" + ] + ], + "sends_telemetry_event": true +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/fallen_king_crown.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/fallen_king_crown.json index 4cafa2c2..a1e37429 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/fallen_king_crown.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/fallen_king_crown.json @@ -5,7 +5,9 @@ "conditions": { "items": [ { - "items": "antarchy:fallen_king_crown" + "items": [ + "antarchy:fallen_king_crown" + ] } ] }, @@ -19,7 +21,6 @@ }, "frame": "goal", "icon": { - "count": 1, "item": "antarchy:fallen_king_crown" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/fallen_kingdom_castle.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/fallen_kingdom_castle.json index 3b60df5d..d673ac29 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/fallen_kingdom_castle.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/fallen_kingdom_castle.json @@ -1,5 +1,5 @@ { - "parent": "minecraft:adventure/root", + "parent": "antarchy:visit_elythia", "criteria": { "discover_castle": { "conditions": { @@ -25,7 +25,6 @@ }, "frame": "task", "icon": { - "count": 1, "item": "minecraft:stone_bricks" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/glimmer_keeper.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/glimmer_keeper.json new file mode 100644 index 00000000..886f9736 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/glimmer_keeper.json @@ -0,0 +1,67 @@ +{ + "parent": "antarchy:visit_elythia", + "criteria": { + "apple_of_my_eye": { + "conditions": { + "variant": "apple_cow" + }, + "trigger": "antarchy:tamed_glimmer" + }, + "deerly_beloved": { + "conditions": { + "variant": "ouranwood_deer" + }, + "trigger": "antarchy:tamed_glimmer" + }, + "elkcellent_choice": { + "conditions": { + "variant": "elka" + }, + "trigger": "antarchy:tamed_glimmer" + }, + "hoppy_together": { + "conditions": { + "variant": "frog" + }, + "trigger": "antarchy:tamed_glimmer" + }, + "spirant_animal": { + "conditions": { + "variant": "ant" + }, + "trigger": "antarchy:tamed_glimmer" + } + }, + "display": { + "announce_to_chat": true, + "description": { + "translate": "advancements.antarchy.glimmer_keeper.description" + }, + "frame": "challenge", + "icon": { + "item": "antarchy:spirit_apple" + }, + "show_toast": true, + "title": { + "translate": "advancements.antarchy.glimmer_keeper.title" + } + }, + "requirements": [ + [ + "apple_of_my_eye" + ], + [ + "deerly_beloved" + ], + [ + "elkcellent_choice" + ], + [ + "hoppy_together" + ], + [ + "spirant_animal" + ] + ], + "sends_telemetry_event": true +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/gravity_gun_craft.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/gravity_gun_craft.json index d64f87d6..86e0ff0a 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/gravity_gun_craft.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/gravity_gun_craft.json @@ -1,11 +1,13 @@ { - "parent": "minecraft:adventure/root", + "parent": "antarchy:visit_thoraxis", "criteria": { "craft_gravity_gun": { "conditions": { "items": [ { - "items": "antarchy:gravity_gun" + "items": [ + "antarchy:gravity_gun" + ] } ] }, @@ -19,7 +21,6 @@ }, "frame": "task", "icon": { - "count": 1, "item": "antarchy:gravity_gun" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/growth_ray_craft.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/growth_ray_craft.json index 182fda3f..06164e33 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/growth_ray_craft.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/growth_ray_craft.json @@ -5,7 +5,9 @@ "conditions": { "items": [ { - "items": "antarchy:growth_ray" + "items": [ + "antarchy:growth_ray" + ] } ] }, @@ -19,7 +21,6 @@ }, "frame": "task", "icon": { - "count": 1, "item": "antarchy:growth_ray" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/herculean_task.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/herculean_task.json index af364028..e00fb22f 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/herculean_task.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/herculean_task.json @@ -1,5 +1,5 @@ { - "parent": "minecraft:adventure/root", + "parent": "antarchy:anger_the_hive_mind", "criteria": { "kill_hercules_beetle": { "conditions": { @@ -17,7 +17,6 @@ }, "frame": "task", "icon": { - "count": 1, "item": "antarchy:hercules_horn" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/hey_listen.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/hey_listen.json index 175d8d96..29a35324 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/hey_listen.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/hey_listen.json @@ -1,5 +1,5 @@ { - "parent": "minecraft:adventure/root", + "parent": "antarchy:visit_thoraxis", "criteria": { "impossible": { "trigger": "minecraft:impossible" @@ -12,7 +12,6 @@ }, "frame": "task", "icon": { - "count": 1, "item": "antarchy:reverie_spawn_egg" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/hive_awakened.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/hive_awakened.json new file mode 100644 index 00000000..6d609b3c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/hive_awakened.json @@ -0,0 +1,31 @@ +{ + "parent": "antarchy:anger_the_hive_mind", + "criteria": { + "awakening": { + "conditions": { + "phase": "awakening" + }, + "trigger": "antarchy:horde_phase_changed" + } + }, + "display": { + "announce_to_chat": true, + "description": { + "translate": "advancements.antarchy.hive_awakened.description" + }, + "frame": "task", + "icon": { + "item": "antarchy:tigers_eye_block" + }, + "show_toast": true, + "title": { + "translate": "advancements.antarchy.hive_awakened.title" + } + }, + "requirements": [ + [ + "awakening" + ] + ], + "sends_telemetry_event": true +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/hoppy_together.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/hoppy_together.json index 9170835f..5108233d 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/hoppy_together.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/hoppy_together.json @@ -1,5 +1,5 @@ { - "parent": "minecraft:adventure/root", + "parent": "antarchy:visit_elythia", "criteria": { "impossible": { "trigger": "minecraft:impossible" @@ -12,7 +12,6 @@ }, "frame": "task", "icon": { - "count": 1, "item": "antarchy:glimmer_bottle" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/i_am_the_nightmare.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/i_am_the_nightmare.json similarity index 86% rename from common-1.20.1/src/main/resources/data/antarchy/advancement/i_am_the_nightmare.json rename to common-1.20.1/src/main/resources/data/antarchy/advancements/i_am_the_nightmare.json index 8d5a8a76..927cd54c 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/i_am_the_nightmare.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/i_am_the_nightmare.json @@ -33,13 +33,8 @@ }, "frame": "challenge", "icon": { - "count": 1, - "id": "minecraft:potion", - "components": { - "minecraft:potion_contents": { - "potion": "antarchy:dread" - } - } + "item": "minecraft:potion", + "nbt": "{\"Potion\":\"antarchy:dread\"}" }, "show_toast": true, "title": { diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/in_the_upside_down.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/in_the_upside_down.json index f0b5c7d8..a92228f9 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/in_the_upside_down.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/in_the_upside_down.json @@ -1,10 +1,10 @@ { - "parent": "minecraft:adventure/root", + "parent": "antarchy:visit_thoraxis", "criteria": { "become_inverted": { "conditions": { "effects": { - "antarchy:inverted": {} + "anthology:inverted": {} } }, "trigger": "minecraft:effects_changed" @@ -18,7 +18,7 @@ "frame": "task", "icon": { "item": "minecraft:potion", - "nbt": "{Potion:\"antarchy:inversion\"}" + "nbt": "{\"Potion\":\"antarchy:inversion\"}" }, "show_toast": true, "title": { diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/kill_toreterror.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/kill_toreterror.json index d922c426..b698a556 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/kill_toreterror.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/kill_toreterror.json @@ -1,5 +1,5 @@ { - "parent": "minecraft:adventure/root", + "parent": "antarchy:visit_elythia", "criteria": { "kill_toreterror": { "conditions": { @@ -17,7 +17,6 @@ }, "frame": "challenge", "icon": { - "count": 1, "item": "antarchy:toreterror_spawn_egg" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/let_it_die.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/let_it_die.json new file mode 100644 index 00000000..08f336f8 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/let_it_die.json @@ -0,0 +1,112 @@ +{ + "parent": "antarchy:visit_elythia", + "criteria": { + "obtain_truffalo_tuft": { + "conditions": { + "items": [ + { + "items": [ + "antarchy:white_truffalo_tuft" + ] + }, + { + "items": [ + "antarchy:orange_truffalo_tuft" + ] + }, + { + "items": [ + "antarchy:magenta_truffalo_tuft" + ] + }, + { + "items": [ + "antarchy:light_blue_truffalo_tuft" + ] + }, + { + "items": [ + "antarchy:yellow_truffalo_tuft" + ] + }, + { + "items": [ + "antarchy:lime_truffalo_tuft" + ] + }, + { + "items": [ + "antarchy:pink_truffalo_tuft" + ] + }, + { + "items": [ + "antarchy:gray_truffalo_tuft" + ] + }, + { + "items": [ + "antarchy:light_gray_truffalo_tuft" + ] + }, + { + "items": [ + "antarchy:cyan_truffalo_tuft" + ] + }, + { + "items": [ + "antarchy:purple_truffalo_tuft" + ] + }, + { + "items": [ + "antarchy:blue_truffalo_tuft" + ] + }, + { + "items": [ + "antarchy:brown_truffalo_tuft" + ] + }, + { + "items": [ + "antarchy:green_truffalo_tuft" + ] + }, + { + "items": [ + "antarchy:red_truffalo_tuft" + ] + }, + { + "items": [ + "antarchy:black_truffalo_tuft" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + } + }, + "display": { + "announce_to_chat": true, + "description": { + "translate": "advancements.antarchy.let_it_die.description" + }, + "frame": "task", + "icon": { + "item": "antarchy:white_truffalo_tuft" + }, + "show_toast": true, + "title": { + "translate": "advancements.antarchy.let_it_die.title" + } + }, + "requirements": [ + [ + "obtain_truffalo_tuft" + ] + ], + "sends_telemetry_event": true +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/let_it_grow.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/let_it_grow.json similarity index 90% rename from common-1.20.1/src/main/resources/data/antarchy/advancement/let_it_grow.json rename to common-1.20.1/src/main/resources/data/antarchy/advancements/let_it_grow.json index a5363806..a5bec4b1 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/let_it_grow.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/let_it_grow.json @@ -12,8 +12,7 @@ }, "frame": "task", "icon": { - "count": 1, - "id": "antarchy:truffalo_sapling" + "item": "antarchy:truffalo_sapling" }, "show_toast": true, "title": { diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/long_live_the_prince.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/long_live_the_prince.json similarity index 92% rename from common-1.20.1/src/main/resources/data/antarchy/advancement/long_live_the_prince.json rename to common-1.20.1/src/main/resources/data/antarchy/advancements/long_live_the_prince.json index bd7b288a..9a69f000 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/long_live_the_prince.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/long_live_the_prince.json @@ -17,8 +17,7 @@ }, "frame": "goal", "icon": { - "count": 1, - "id": "antarchy:prince_egg" + "item": "antarchy:prince_egg" }, "show_toast": true, "title": { diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/long_live_the_princess.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/long_live_the_princess.json similarity index 92% rename from common-1.20.1/src/main/resources/data/antarchy/advancement/long_live_the_princess.json rename to common-1.20.1/src/main/resources/data/antarchy/advancements/long_live_the_princess.json index d12d5e02..e0f9e0f3 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/long_live_the_princess.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/long_live_the_princess.json @@ -17,8 +17,7 @@ }, "frame": "goal", "icon": { - "count": 1, - "id": "antarchy:princess_egg" + "item": "antarchy:princess_egg" }, "show_toast": true, "title": { diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/lucid_dreams.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/lucid_dreams.json index c53f1091..1fec42e3 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/lucid_dreams.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/lucid_dreams.json @@ -1,5 +1,5 @@ { - "parent": "minecraft:adventure/root", + "parent": "antarchy:visit_thoraxis", "criteria": { "kill_lucid": { "conditions": { @@ -17,7 +17,6 @@ }, "frame": "task", "icon": { - "count": 1, "item": "antarchy:lucid_eye" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/moley_poley.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/moley_poley.json index e2d5308a..b734e7a1 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/moley_poley.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/moley_poley.json @@ -1,5 +1,5 @@ { - "parent": "minecraft:adventure/root", + "parent": "antarchy:anger_the_hive_mind", "criteria": { "kill_molevore": { "conditions": { @@ -17,7 +17,6 @@ }, "frame": "task", "icon": { - "count": 1, "item": "antarchy:molevore_nose" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/mucus_obtained.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/mucus_obtained.json index 2f6def5c..591bc35e 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/mucus_obtained.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/mucus_obtained.json @@ -5,7 +5,9 @@ "conditions": { "items": [ { - "items": "antarchy:mucus" + "items": [ + "antarchy:mucus" + ] } ] }, @@ -19,7 +21,6 @@ }, "frame": "task", "icon": { - "count": 1, "item": "antarchy:mucus" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/now_watch_me_whip.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/now_watch_me_whip.json index d1c45ae1..898f280a 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/now_watch_me_whip.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/now_watch_me_whip.json @@ -1,11 +1,13 @@ { - "parent": "minecraft:adventure/root", + "parent": "antarchy:sting_operation", "criteria": { "now_watch_me_whip": { "conditions": { "items": [ { - "items": "antarchy:scorpion_whip" + "items": [ + "antarchy:scorpion_whip" + ] } ] }, @@ -19,7 +21,6 @@ }, "frame": "task", "icon": { - "count": 1, "item": "antarchy:scorpion_whip" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/probably_wondering_how_i_got_here.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/probably_wondering_how_i_got_here.json similarity index 75% rename from common-1.20.1/src/main/resources/data/antarchy/advancement/probably_wondering_how_i_got_here.json rename to common-1.20.1/src/main/resources/data/antarchy/advancements/probably_wondering_how_i_got_here.json index a9e78b70..390b68ca 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/probably_wondering_how_i_got_here.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/probably_wondering_how_i_got_here.json @@ -4,7 +4,7 @@ "become_dilated": { "conditions": { "effects": { - "antarchy:dilated": {} + "anthology:dilated": {} } }, "trigger": "minecraft:effects_changed" @@ -17,13 +17,8 @@ }, "frame": "goal", "icon": { - "count": 1, - "id": "minecraft:potion", - "components": { - "minecraft:potion_contents": { - "potion": "antarchy:time_dilation" - } - } + "item": "minecraft:potion", + "nbt": "{\"Potion\":\"antarchy:time_dilation\"}" }, "show_toast": true, "title": { diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/rocket_powered_octopus.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/rocket_powered_octopus.json index c0ea338c..2db89067 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/rocket_powered_octopus.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/rocket_powered_octopus.json @@ -5,7 +5,9 @@ "conditions": { "items": [ { - "items": "antarchy:rpo_launcher" + "items": [ + "antarchy:rpo_launcher" + ] } ] }, @@ -19,7 +21,6 @@ }, "frame": "task", "icon": { - "count": 1, "item": "antarchy:rpo_launcher" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/royal_assailant_staff.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/royal_assailant_staff.json new file mode 100644 index 00000000..b9cd9a5f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/royal_assailant_staff.json @@ -0,0 +1,37 @@ +{ + "parent": "minecraft:adventure/root", + "criteria": { + "royal_assailant_staff": { + "conditions": { + "items": [ + { + "items": [ + "antarchy:royal_assailant_staff" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + } + }, + "display": { + "announce_to_chat": true, + "description": { + "translate": "advancements.antarchy.royal_assailant_staff.description" + }, + "frame": "goal", + "icon": { + "item": "antarchy:royal_assailant_staff" + }, + "show_toast": true, + "title": { + "translate": "advancements.antarchy.royal_assailant_staff.title" + } + }, + "requirements": [ + [ + "royal_assailant_staff" + ] + ], + "sends_telemetry_event": true +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/shark_weak.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/shark_weak.json index d3f57aab..45bb543d 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/shark_weak.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/shark_weak.json @@ -1,10 +1,10 @@ { - "parent": "minecraft:adventure/root", + "parent": "antarchy:visit_elythia", "criteria": { - "kill_cloud_shark": { + "kill_stratoshark": { "conditions": { "entity": { - "type": "antarchy:cloud_shark" + "type": "antarchy:stratoshark" } }, "trigger": "minecraft:player_killed_entity" @@ -17,8 +17,7 @@ }, "frame": "task", "icon": { - "count": 1, - "item": "antarchy:cloud_shark_fin" + "item": "antarchy:stratoshark_fin" }, "show_toast": true, "title": { @@ -27,7 +26,7 @@ }, "requirements": [ [ - "kill_cloud_shark" + "kill_stratoshark" ] ], "sends_telemetry_event": true diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/shrink_ray_craft.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/shrink_ray_craft.json index 63b7ac20..a36153d9 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/shrink_ray_craft.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/shrink_ray_craft.json @@ -5,7 +5,9 @@ "conditions": { "items": [ { - "items": "antarchy:shrink_ray" + "items": [ + "antarchy:shrink_ray" + ] } ] }, @@ -19,7 +21,6 @@ }, "frame": "task", "icon": { - "count": 1, "item": "antarchy:shrink_ray" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/sizzling_dedication.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/sizzling_dedication.json new file mode 100644 index 00000000..94fb0c02 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/sizzling_dedication.json @@ -0,0 +1,37 @@ +{ + "parent": "minecraft:husbandry/root", + "criteria": { + "giant_frying_pan": { + "conditions": { + "items": [ + { + "items": [ + "antarchy:giant_frying_pan" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + } + }, + "display": { + "announce_to_chat": true, + "description": { + "translate": "advancements.antarchy.sizzling_dedication.description" + }, + "frame": "challenge", + "icon": { + "item": "antarchy:giant_frying_pan" + }, + "show_toast": true, + "title": { + "translate": "advancements.antarchy.sizzling_dedication.title" + } + }, + "requirements": [ + [ + "giant_frying_pan" + ] + ], + "sends_telemetry_event": true +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/soups_up.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/soups_up.json index 45a0350d..8f315ccc 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/soups_up.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/soups_up.json @@ -1,11 +1,11 @@ { - "parent": "minecraft:adventure/root", + "parent": "antarchy:shark_weak", "criteria": { "eat_soup": { "conditions": { "item": { "items": [ - "antarchy:cloud_shark_fin_soup" + "antarchy:stratoshark_fin_soup" ] } }, @@ -19,8 +19,7 @@ }, "frame": "task", "icon": { - "count": 1, - "item": "antarchy:cloud_shark_fin_soup" + "item": "antarchy:stratoshark_fin_soup" }, "show_toast": true, "title": { diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/spirant_animal.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/spirant_animal.json index 7017fbe2..8cd1d4bc 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/spirant_animal.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/spirant_animal.json @@ -1,5 +1,5 @@ { - "parent": "minecraft:adventure/root", + "parent": "antarchy:visit_elythia", "criteria": { "impossible": { "trigger": "minecraft:impossible" @@ -12,7 +12,6 @@ }, "frame": "task", "icon": { - "count": 1, "item": "antarchy:glimmer_bottle" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/squidzooka_craft.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/squidzooka_craft.json index 4a84eeda..a4555d51 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/squidzooka_craft.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/squidzooka_craft.json @@ -5,7 +5,9 @@ "conditions": { "items": [ { - "items": "antarchy:squidzooka" + "items": [ + "antarchy:squidzooka" + ] } ] }, @@ -19,7 +21,6 @@ }, "frame": "task", "icon": { - "count": 1, "item": "antarchy:squidzooka" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/sting_operation.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/sting_operation.json similarity index 89% rename from common-1.20.1/src/main/resources/data/antarchy/advancement/sting_operation.json rename to common-1.20.1/src/main/resources/data/antarchy/advancements/sting_operation.json index 40fdb1fa..99f0b8c6 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/sting_operation.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/sting_operation.json @@ -17,8 +17,7 @@ }, "frame": "challenge", "icon": { - "count": 1, - "id": "antarchy:emperor_scorpion_spawn_egg" + "item": "antarchy:emperor_scorpion_spawn_egg" }, "show_toast": true, "title": { diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/stone_cold.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/stone_cold.json index 95e28122..1beb0ca9 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/stone_cold.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/stone_cold.json @@ -1,5 +1,5 @@ { - "parent": "minecraft:adventure/root", + "parent": "antarchy:visit_elythia", "criteria": { "kill_basilisk": { "conditions": { @@ -17,7 +17,6 @@ }, "frame": "task", "icon": { - "count": 1, "item": "antarchy:basilisk_fang" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/survived_the_horde.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/survived_the_horde.json new file mode 100644 index 00000000..1f4e02e5 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/survived_the_horde.json @@ -0,0 +1,31 @@ +{ + "parent": "antarchy:hive_awakened", + "criteria": { + "completed": { + "conditions": { + "phase": "completed" + }, + "trigger": "antarchy:horde_phase_changed" + } + }, + "display": { + "announce_to_chat": true, + "description": { + "translate": "advancements.antarchy.survived_the_horde.description" + }, + "frame": "challenge", + "icon": { + "item": "antarchy:hercules_horn" + }, + "show_toast": true, + "title": { + "translate": "advancements.antarchy.survived_the_horde.title" + } + }, + "requirements": [ + [ + "completed" + ] + ], + "sends_telemetry_event": true +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/sweater_dreams.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/sweater_dreams.json index 76ee0e19..60a05d35 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/sweater_dreams.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/sweater_dreams.json @@ -1,5 +1,5 @@ { - "parent": "minecraft:adventure/root", + "parent": "antarchy:visit_thoraxis", "criteria": { "kill_nightmare": { "conditions": { @@ -18,7 +18,7 @@ "frame": "task", "icon": { "item": "minecraft:potion", - "nbt": "{Potion:\"antarchy:dread\"}" + "nbt": "{\"Potion\":\"antarchy:dread\"}" }, "show_toast": true, "title": { diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/temporal_contradiction.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/temporal_contradiction.json similarity index 84% rename from common-1.20.1/src/main/resources/data/antarchy/advancement/temporal_contradiction.json rename to common-1.20.1/src/main/resources/data/antarchy/advancements/temporal_contradiction.json index f75d40bc..4794a7f1 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/temporal_contradiction.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/temporal_contradiction.json @@ -4,8 +4,8 @@ "become_contradictory": { "conditions": { "effects": { - "antarchy:contracted": {}, - "antarchy:dilated": {} + "anthology:contracted": {}, + "anthology:dilated": {} } }, "trigger": "minecraft:effects_changed" @@ -18,8 +18,7 @@ }, "frame": "challenge", "icon": { - "count": 1, - "id": "minecraft:clock" + "item": "minecraft:clock" }, "show_toast": true, "title": { diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/the_lab.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/the_lab.json index 8efd5f4e..422366e3 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/the_lab.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/the_lab.json @@ -1,5 +1,5 @@ { - "parent": "minecraft:adventure/root", + "parent": "antarchy:visit_elythia", "criteria": { "discover_lab": { "conditions": { @@ -25,7 +25,6 @@ }, "frame": "task", "icon": { - "count": 1, "item": "antarchy:diamond_minecart" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/through_the_throat.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/through_the_throat.json new file mode 100644 index 00000000..b188501a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/through_the_throat.json @@ -0,0 +1,31 @@ +{ + "parent": "antarchy:visit_thoraxis", + "criteria": { + "crossed_downward": { + "conditions": { + "direction": "down" + }, + "trigger": "antarchy:crossed_gravity_throat" + } + }, + "display": { + "announce_to_chat": true, + "description": { + "translate": "advancements.antarchy.through_the_throat.description" + }, + "frame": "goal", + "icon": { + "item": "antarchy:dream_sand" + }, + "show_toast": true, + "title": { + "translate": "advancements.antarchy.through_the_throat.title" + } + }, + "requirements": [ + [ + "crossed_downward" + ] + ], + "sends_telemetry_event": true +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/ultimate_armor.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/ultimate_armor.json index 4c13c53e..a5743e6e 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/ultimate_armor.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/ultimate_armor.json @@ -5,7 +5,9 @@ "conditions": { "items": [ { - "items": "antarchy:ultimate_helmet" + "items": [ + "antarchy:ultimate_helmet" + ] } ] }, @@ -15,7 +17,9 @@ "conditions": { "items": [ { - "items": "antarchy:ultimate_chestplate" + "items": [ + "antarchy:ultimate_chestplate" + ] } ] }, @@ -25,7 +29,9 @@ "conditions": { "items": [ { - "items": "antarchy:ultimate_leggings" + "items": [ + "antarchy:ultimate_leggings" + ] } ] }, @@ -35,7 +41,9 @@ "conditions": { "items": [ { - "items": "antarchy:ultimate_boots" + "items": [ + "antarchy:ultimate_boots" + ] } ] }, @@ -49,7 +57,6 @@ }, "frame": "goal", "icon": { - "count": 1, "item": "antarchy:ultimate_chestplate" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/ultimate_bow.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/ultimate_bow.json index 81191aea..3d840974 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/ultimate_bow.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/ultimate_bow.json @@ -5,7 +5,9 @@ "conditions": { "items": [ { - "items": "antarchy:ultimate_bow" + "items": [ + "antarchy:ultimate_bow" + ] } ] }, @@ -19,7 +21,6 @@ }, "frame": "goal", "icon": { - "count": 1, "item": "antarchy:ultimate_bow" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/underside_castle.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/underside_castle.json new file mode 100644 index 00000000..880a5fcb --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/underside_castle.json @@ -0,0 +1,41 @@ +{ + "parent": "antarchy:through_the_throat", + "criteria": { + "discover_castle": { + "conditions": { + "player": [ + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "location": { + "structure": "antarchy:underside_castle" + } + } + } + ] + }, + "trigger": "minecraft:location" + } + }, + "display": { + "announce_to_chat": true, + "description": { + "translate": "advancements.antarchy.underside_castle.description" + }, + "frame": "task", + "icon": { + "item": "antarchy:dream_sand" + }, + "show_toast": true, + "title": { + "translate": "advancements.antarchy.underside_castle.title" + } + }, + "requirements": [ + [ + "discover_castle" + ] + ], + "sends_telemetry_event": true +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/upper_craft.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/upper_craft.json index 7f225a28..9fff2317 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/upper_craft.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/upper_craft.json @@ -5,7 +5,9 @@ "conditions": { "items": [ { - "items": "antarchy:upper" + "items": [ + "antarchy:upper" + ] } ] }, @@ -19,7 +21,6 @@ }, "frame": "task", "icon": { - "count": 1, "item": "antarchy:upper" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/very_hungry_caterpillar.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/very_hungry_caterpillar.json index dfd78588..aea58a79 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/very_hungry_caterpillar.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/very_hungry_caterpillar.json @@ -12,7 +12,6 @@ }, "frame": "task", "icon": { - "count": 1, "item": "antarchy:caterpillar_spawn_egg" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/visit_cavaryn.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/visit_cavaryn.json index 95bb4c95..63b5563e 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/visit_cavaryn.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/visit_cavaryn.json @@ -1,5 +1,4 @@ { - "parent": "minecraft:adventure/root", "criteria": { "entered_cavaryn": { "conditions": { @@ -10,12 +9,12 @@ }, "display": { "announce_to_chat": true, + "background": "antarchy:textures/block/myrmite/myrmite.png", "description": { "translate": "advancements.antarchy.visit_cavaryn.description" }, "frame": "task", "icon": { - "count": 1, "item": "antarchy:myrmite" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/visit_elythia.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/visit_elythia.json index 931c9035..2139917d 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/visit_elythia.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/visit_elythia.json @@ -1,5 +1,4 @@ { - "parent": "minecraft:adventure/root", "criteria": { "entered_elythia": { "conditions": { @@ -10,12 +9,12 @@ }, "display": { "announce_to_chat": true, + "background": "antarchy:textures/block/ouranwood/mossy_ouranwood_log.png", "description": { "translate": "advancements.antarchy.visit_elythia.description" }, "frame": "task", "icon": { - "count": 1, "item": "antarchy:brown_ant_nest" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/visit_thoraxis.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/visit_thoraxis.json index 73f3bc6c..951e525d 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/visit_thoraxis.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/visit_thoraxis.json @@ -1,5 +1,4 @@ { - "parent": "minecraft:adventure/root", "criteria": { "entered_thoraxis": { "conditions": { @@ -10,12 +9,12 @@ }, "display": { "announce_to_chat": true, + "background": "antarchy:textures/block/nyxite.png", "description": { "translate": "advancements.antarchy.visit_thoraxis.description" }, "frame": "task", "icon": { - "count": 1, "item": "antarchy:red_ant_nest" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/water_cannon_craft.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/water_cannon_craft.json index 1005b7d4..92a4d049 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/water_cannon_craft.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/water_cannon_craft.json @@ -5,7 +5,9 @@ "conditions": { "items": [ { - "items": "antarchy:water_cannon" + "items": [ + "antarchy:water_cannon" + ] } ] }, @@ -19,7 +21,6 @@ }, "frame": "task", "icon": { - "count": 1, "item": "antarchy:water_cannon" }, "show_toast": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/whoever_smelt_it_dealt_it.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/whoever_smelt_it_dealt_it.json index 49a617f4..38da6e52 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancements/whoever_smelt_it_dealt_it.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/whoever_smelt_it_dealt_it.json @@ -1,5 +1,5 @@ { - "parent": "minecraft:adventure/root", + "parent": "antarchy:visit_thoraxis", "criteria": { "become_stinky": { "conditions": { @@ -18,7 +18,7 @@ "frame": "task", "icon": { "item": "minecraft:potion", - "nbt": "{Potion:\"antarchy:stinky\"}" + "nbt": "{\"Potion\":\"antarchy:stinky\"}" }, "show_toast": true, "title": { diff --git a/common-1.20.1/src/main/resources/data/antarchy/antmail/message/bloxiclean_queen_clean.json b/common-1.20.1/src/main/resources/data/antarchy/antmail/message/bloxiclean_queen_clean.json new file mode 100644 index 00000000..cc0b94d7 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/antmail/message/bloxiclean_queen_clean.json @@ -0,0 +1,9 @@ +{ + "sender": "bloxiclean@antmail.com", + "subject": "IS YOUR CARPET DIRTY?", + "body": "Bloxiclean now offers premium royal-area cleaning. We remove ash, ichor, bloodglass dust, and other difficult stains. Prices may vary by dimension.", + "trigger": { + "type": "random", + "value": 0.01 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/antmail/message/bloxiclean_sparkle.json b/common-1.20.1/src/main/resources/data/antarchy/antmail/message/bloxiclean_sparkle.json new file mode 100644 index 00000000..b67aca46 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/antmail/message/bloxiclean_sparkle.json @@ -0,0 +1,9 @@ +{ + "sender": "bloxiclean@antmail.com", + "subject": "BLOXICLEAN: WE MAKE BLOCKS SPARKLE", + "body": "Cobwebs? Sculk? Suspicious residue? Bloxiclean removes nearly anything from nearly anywhere. Book your complimentary pressure-wash before the stains become ancient history.", + "trigger": { + "type": "random", + "value": 0.01 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/antmail/message/coldcraft_city_tourism.json b/common-1.20.1/src/main/resources/data/antarchy/antmail/message/coldcraft_city_tourism.json new file mode 100644 index 00000000..fac3bde7 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/antmail/message/coldcraft_city_tourism.json @@ -0,0 +1,9 @@ +{ + "sender": "coldcraft@antmail.com", + "subject": "COLDCRAFT CITY: YOUR NEXT DESTINATION", + "body": "Visit ColdCraft City! See Big Ben, go shopping, and ride the Ferris wheel. Bring a coat, some spending money, and a plan for getting home.", + "trigger": { + "type": "random", + "value": 0.01 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/antmail/message/dicaprios_dinner.json b/common-1.20.1/src/main/resources/data/antarchy/antmail/message/dicaprios_dinner.json new file mode 100644 index 00000000..b6f1f85a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/antmail/message/dicaprios_dinner.json @@ -0,0 +1,9 @@ +{ + "sender": "dicaprios@antmail.com", + "subject": "A TASTE OF ITALY AWAITS", + "body": "DiCaprio's is now serving handmade pasta, suspiciously expensive bread, and a tiramisu that may know your secrets. Reserve a table today. Formal armor encouraged.", + "trigger": { + "type": "random", + "value": 0.01 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/antmail/message/welcome_day.json b/common-1.20.1/src/main/resources/data/antarchy/antmail/message/welcome_day.json new file mode 100644 index 00000000..44b9f4a3 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/antmail/message/welcome_day.json @@ -0,0 +1,9 @@ +{ + "sender": "noreply@antmail.com", + "subject": "WELCOME TO ANTMAIL", + "body": "Your address has been registered. If this message arrived late, the network probably had ants in it.", + "trigger": { + "type": "advancement", + "value": "minecraft:story/root" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/blockle/answers.json b/common-1.20.1/src/main/resources/data/antarchy/blockle/answers.json new file mode 100644 index 00000000..151da383 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/blockle/answers.json @@ -0,0 +1,23 @@ +{ + "replace": false, + "values": [ + "cheep", + "jerry", + "lucid", + "queen", + "ichor", + "lotus", + "mucus", + "peach" + ], + "items": { + "cheep": "antarchy:cheep_spawn_egg", + "jerry": "antarchy:jerry_spawn_egg", + "lucid": "antarchy:lucid_spawn_egg", + "queen": "antarchy:queen_spawn_egg", + "ichor": "antarchy:ichor", + "lotus": "antarchy:lotus", + "mucus": "antarchy:mucus", + "peach": "antarchy:peach" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/category/cavaryn.json b/common-1.20.1/src/main/resources/data/antarchy/computer/category/cavaryn.json new file mode 100644 index 00000000..f5258b70 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/category/cavaryn.json @@ -0,0 +1,4 @@ +{ + "title": "guide.antarchy.category.cavaryn", + "texture": "antarchy:item/floppy_disk/cavaryn_floppy_disk" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/category/elythia.json b/common-1.20.1/src/main/resources/data/antarchy/computer/category/elythia.json new file mode 100644 index 00000000..6d88b2ba --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/category/elythia.json @@ -0,0 +1,4 @@ +{ + "title": "guide.antarchy.category.elythia", + "texture": "antarchy:item/floppy_disk/elythia_floppy_disk" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/category/general.json b/common-1.20.1/src/main/resources/data/antarchy/computer/category/general.json new file mode 100644 index 00000000..e7bf2d6e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/category/general.json @@ -0,0 +1,4 @@ +{ + "title": "guide.antarchy.category.general", + "texture": "antarchy:item/floppy_disk/floppy_disk" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/category/thoraxis.json b/common-1.20.1/src/main/resources/data/antarchy/computer/category/thoraxis.json new file mode 100644 index 00000000..73a72371 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/category/thoraxis.json @@ -0,0 +1,4 @@ +{ + "title": "guide.antarchy.category.thoraxis", + "texture": "antarchy:item/floppy_disk/thoraxis_floppy_disk" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/disk/basilisk_game.json b/common-1.20.1/src/main/resources/data/antarchy/computer/disk/basilisk_game.json new file mode 100644 index 00000000..25919cac --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/disk/basilisk_game.json @@ -0,0 +1,5 @@ +{ + "category": "antarchy:elythia", + "title": "guide.antarchy.disk.basilisk_game.title", + "entries": [] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/disk/bloodglass.json b/common-1.20.1/src/main/resources/data/antarchy/computer/disk/bloodglass.json new file mode 100644 index 00000000..e4700b8b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/disk/bloodglass.json @@ -0,0 +1,7 @@ +{ + "category": "antarchy:thoraxis", + "title": "guide.antarchy.disk.bloodglass.title", + "entries": [ + "antarchy:bloodglass" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/disk/brutalfly.json b/common-1.20.1/src/main/resources/data/antarchy/computer/disk/brutalfly.json new file mode 100644 index 00000000..6d1b2600 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/disk/brutalfly.json @@ -0,0 +1,7 @@ +{ + "category": "antarchy:elythia", + "title": "guide.antarchy.disk.brutalfly.title", + "entries": [ + "antarchy:brutalfly" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/disk/cavaryn.json b/common-1.20.1/src/main/resources/data/antarchy/computer/disk/cavaryn.json new file mode 100644 index 00000000..9c814cb7 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/disk/cavaryn.json @@ -0,0 +1,7 @@ +{ + "category": "antarchy:cavaryn", + "title": "guide.antarchy.disk.cavaryn.title", + "entries": [ + "antarchy:termite" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/disk/elythia.json b/common-1.20.1/src/main/resources/data/antarchy/computer/disk/elythia.json new file mode 100644 index 00000000..4aa4672e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/disk/elythia.json @@ -0,0 +1,7 @@ +{ + "category": "antarchy:elythia", + "title": "guide.antarchy.disk.elythia.title", + "entries": [ + "antarchy:brown_ant" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/disk/flying_squirrel.json b/common-1.20.1/src/main/resources/data/antarchy/computer/disk/flying_squirrel.json new file mode 100644 index 00000000..2ac82888 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/disk/flying_squirrel.json @@ -0,0 +1,7 @@ +{ + "category": "antarchy:elythia", + "title": "guide.antarchy.disk.flying_squirrel.title", + "entries": [ + "antarchy:flying_squirrel" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/disk/glimmer.json b/common-1.20.1/src/main/resources/data/antarchy/computer/disk/glimmer.json new file mode 100644 index 00000000..92d92987 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/disk/glimmer.json @@ -0,0 +1,7 @@ +{ + "category": "antarchy:elythia", + "title": "guide.antarchy.disk.glimmer.title", + "entries": [ + "antarchy:glimmer" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/disk/hercules_beetle.json b/common-1.20.1/src/main/resources/data/antarchy/computer/disk/hercules_beetle.json new file mode 100644 index 00000000..99fb7cb1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/disk/hercules_beetle.json @@ -0,0 +1,7 @@ +{ + "category": "antarchy:cavaryn", + "title": "guide.antarchy.disk.hercules_beetle.title", + "entries": [ + "antarchy:hercules_beetle" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/disk/high_fructose_corn_syrup.json b/common-1.20.1/src/main/resources/data/antarchy/computer/disk/high_fructose_corn_syrup.json new file mode 100644 index 00000000..80534153 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/disk/high_fructose_corn_syrup.json @@ -0,0 +1,7 @@ +{ + "category": "antarchy:general", + "title": "guide.antarchy.disk.high_fructose_corn_syrup.title", + "entries": [ + "antarchy:high_fructose_corn_syrup" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/disk/king.json b/common-1.20.1/src/main/resources/data/antarchy/computer/disk/king.json new file mode 100644 index 00000000..03eebdf6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/disk/king.json @@ -0,0 +1,8 @@ +{ + "category": "antarchy:elythia", + "title": "guide.antarchy.disk.king.title", + "entries": [ + "antarchy:king", + "antarchy:prince" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/disk/kraken.json b/common-1.20.1/src/main/resources/data/antarchy/computer/disk/kraken.json new file mode 100644 index 00000000..1b1ebfd4 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/disk/kraken.json @@ -0,0 +1,7 @@ +{ + "category": "antarchy:general", + "title": "guide.antarchy.disk.kraken.title", + "entries": [ + "antarchy:kraken" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/disk/queen.json b/common-1.20.1/src/main/resources/data/antarchy/computer/disk/queen.json new file mode 100644 index 00000000..29bb8094 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/disk/queen.json @@ -0,0 +1,8 @@ +{ + "category": "antarchy:thoraxis", + "title": "guide.antarchy.disk.queen.title", + "entries": [ + "antarchy:queen", + "antarchy:princess" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/disk/rainbow_ant.json b/common-1.20.1/src/main/resources/data/antarchy/computer/disk/rainbow_ant.json new file mode 100644 index 00000000..73f9cbf9 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/disk/rainbow_ant.json @@ -0,0 +1,7 @@ +{ + "category": "antarchy:general", + "title": "guide.antarchy.disk.rainbow_ant.title", + "entries": [ + "antarchy:rainbow_ant" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/disk/temporal_fields.json b/common-1.20.1/src/main/resources/data/antarchy/computer/disk/temporal_fields.json new file mode 100644 index 00000000..29f7b865 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/disk/temporal_fields.json @@ -0,0 +1,7 @@ +{ + "category": "antarchy:thoraxis", + "title": "guide.antarchy.disk.temporal_fields.title", + "entries": [ + "antarchy:temporal_fields" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/disk/thoraxis.json b/common-1.20.1/src/main/resources/data/antarchy/computer/disk/thoraxis.json new file mode 100644 index 00000000..11b8754a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/disk/thoraxis.json @@ -0,0 +1,8 @@ +{ + "category": "antarchy:thoraxis", + "title": "guide.antarchy.disk.thoraxis.title", + "entries": [ + "antarchy:red_ant", + "antarchy:nightmare" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/disk/toreterror_arena.json b/common-1.20.1/src/main/resources/data/antarchy/computer/disk/toreterror_arena.json new file mode 100644 index 00000000..62c67305 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/disk/toreterror_arena.json @@ -0,0 +1,7 @@ +{ + "category": "antarchy:elythia", + "title": "guide.antarchy.disk.toreterror_arena.title", + "entries": [ + "antarchy:toreterror_arena" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/disk/vortex.json b/common-1.20.1/src/main/resources/data/antarchy/computer/disk/vortex.json new file mode 100644 index 00000000..7a94e9f9 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/disk/vortex.json @@ -0,0 +1,7 @@ +{ + "category": "antarchy:thoraxis", + "title": "guide.antarchy.disk.vortex.title", + "entries": [ + "antarchy:vortex" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/entry/bloodglass.json b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/bloodglass.json new file mode 100644 index 00000000..d2bf6354 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/bloodglass.json @@ -0,0 +1,33 @@ +{ + "type": "article", + "category": "thoraxis", + "title": "guide.antarchy.entry.bloodglass.title", + "subtitle": "guide.antarchy.entry.bloodglass.subtitle", + "description": [ + "guide.antarchy.entry.bloodglass.description", + "guide.antarchy.entry.bloodglass.description2", + "guide.antarchy.entry.bloodglass.description3" + ], + "cover_item": "antarchy:blood_crystal_shard", + "green_tint": false, + "gallery": [ + { + "item": "antarchy:blood_crystal_helmet" + }, + { + "item": "antarchy:blood_crystal_chestplate" + }, + { + "item": "antarchy:blood_crystal_leggings" + }, + { + "item": "antarchy:blood_crystal_boots" + }, + { + "item": "antarchy:blood_crystal_katana" + }, + { + "item": "antarchy:blood_crystal_apple" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/entry/brown_ant.json b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/brown_ant.json new file mode 100644 index 00000000..2235f07a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/brown_ant.json @@ -0,0 +1,35 @@ +{ + "type": "entity", + "category": "elythia", + "title": "guide.antarchy.entry.brown_ant.title", + "subtitle": "guide.antarchy.entry.brown_ant.subtitle", + "description": [ + "guide.antarchy.entry.brown_ant.description", + "guide.antarchy.entry.brown_ant.description2", + "guide.antarchy.entry.brown_ant.description3" + ], + "entity": "antarchy:brown_ant", + "cover_entity": "antarchy:brown_ant", + "dimension": "antarchy:elythia", + "rotation": 45, + "green_tint": false, + "gallery_title": "guide.antarchy.gallery.elythia", + "gallery": [ + "antarchy:king", + "antarchy:toreterror", + "antarchy:brutalfly", + "antarchy:basilisk", + "antarchy:glimmer", + "antarchy:flying_squirrel", + "antarchy:ouranwood_deer", + "antarchy:elka", + "antarchy:mantis", + "antarchy:alpha_mantis", + "antarchy:apple_cow", + "antarchy:stratoshark", + "antarchy:missile_squid", + "antarchy:octopus_bomb", + "antarchy:dorrie", + "antarchy:butterfly" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/entry/brutalfly.json b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/brutalfly.json new file mode 100644 index 00000000..57379b25 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/brutalfly.json @@ -0,0 +1,25 @@ +{ + "type": "mob", + "category": "elythia", + "title": "guide.antarchy.entry.brutalfly.title", + "subtitle": "guide.antarchy.entry.brutalfly.subtitle", + "description": [ + "guide.antarchy.entry.brutalfly.description", + "guide.antarchy.entry.brutalfly.description2", + "guide.antarchy.entry.brutalfly.description3", + "guide.antarchy.entry.brutalfly.description4" + ], + "entity": "antarchy:brutalfly", + "cover_entity": "antarchy:brutalfly", + "locator": "antarchy:brutalfly", + "dimension": "antarchy:elythia", + "rotation": 45, + "render_scale": 0.6, + "green_tint": false, + "gallery_title": "guide.antarchy.gallery.drops", + "gallery": [ + { + "item": "antarchy:brutalfly_wing" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/entry/duplicator_tree.json b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/duplicator_tree.json new file mode 100644 index 00000000..4aa755f5 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/duplicator_tree.json @@ -0,0 +1,12 @@ +{ + "type": "article", + "category": "general", + "title": "guide.antarchy.entry.duplicator_tree.title", + "subtitle": "guide.antarchy.entry.duplicator_tree.subtitle", + "description": [ + "guide.antarchy.entry.duplicator_tree.description", + "guide.antarchy.entry.duplicator_tree.description2" + ], + "cover_item": "antarchy:duplicator_log", + "green_tint": false +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/entry/easter_bunny.json b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/easter_bunny.json new file mode 100644 index 00000000..0a24b829 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/easter_bunny.json @@ -0,0 +1,14 @@ +{ + "type": "entity", + "category": "general", + "title": "guide.antarchy.entry.easter_bunny.title", + "subtitle": "guide.antarchy.entry.easter_bunny.subtitle", + "description": [ + "guide.antarchy.entry.easter_bunny.description", + "guide.antarchy.entry.easter_bunny.description2" + ], + "entity": "antarchy:easter_bunny", + "cover_entity": "antarchy:easter_bunny", + "rotation": 45, + "green_tint": false +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/entry/flying_squirrel.json b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/flying_squirrel.json new file mode 100644 index 00000000..5c99eaed --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/flying_squirrel.json @@ -0,0 +1,16 @@ +{ + "type": "mob", + "category": "elythia", + "title": "guide.antarchy.entry.flying_squirrel.title", + "subtitle": "guide.antarchy.entry.flying_squirrel.subtitle", + "description": [ + "guide.antarchy.entry.flying_squirrel.description", + "guide.antarchy.entry.flying_squirrel.description2", + "guide.antarchy.entry.flying_squirrel.description3", + "guide.antarchy.entry.flying_squirrel.description4" + ], + "entity": "antarchy:flying_squirrel", + "rotation": 45, + "render_scale": 0.8, + "green_tint": false +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/entry/glimmer.json b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/glimmer.json new file mode 100644 index 00000000..bab48c80 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/glimmer.json @@ -0,0 +1,19 @@ +{ + "type": "mob", + "category": "elythia", + "title": "guide.antarchy.entry.glimmer.title", + "subtitle": "guide.antarchy.entry.glimmer.subtitle", + "description": [ + "guide.antarchy.entry.glimmer.description", + "guide.antarchy.entry.glimmer.description2", + "guide.antarchy.entry.glimmer.description3", + "guide.antarchy.entry.glimmer.description4", + "guide.antarchy.entry.glimmer.description5", + "guide.antarchy.entry.glimmer.description6", + "guide.antarchy.entry.glimmer.description7" + ], + "entity": "antarchy:glimmer", + "rotation": 45, + "render_scale": 0.8, + "green_tint": false +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/entry/hercules_beetle.json b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/hercules_beetle.json new file mode 100644 index 00000000..52e8e878 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/hercules_beetle.json @@ -0,0 +1,24 @@ +{ + "type": "mob", + "category": "cavaryn", + "title": "guide.antarchy.entry.hercules_beetle.title", + "subtitle": "guide.antarchy.entry.hercules_beetle.subtitle", + "description": [ + "guide.antarchy.entry.hercules_beetle.description", + "guide.antarchy.entry.hercules_beetle.description2", + "guide.antarchy.entry.hercules_beetle.description3" + ], + "entity": "antarchy:hercules_beetle", + "cover_entity": "antarchy:hercules_beetle", + "rotation": 45, + "render_scale": 0.5, + "green_tint": false, + "gallery": [ + { + "item": "antarchy:hercules_horn" + }, + { + "item": "antarchy:broodfruit" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/entry/high_fructose_corn_syrup.json b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/high_fructose_corn_syrup.json new file mode 100644 index 00000000..a73e0d1b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/high_fructose_corn_syrup.json @@ -0,0 +1,13 @@ +{ + "type": "article", + "category": "general", + "title": "guide.antarchy.entry.high_fructose_corn_syrup.title", + "subtitle": "guide.antarchy.entry.high_fructose_corn_syrup.subtitle", + "description": [ + "guide.antarchy.entry.high_fructose_corn_syrup.description", + "guide.antarchy.entry.high_fructose_corn_syrup.description2", + "guide.antarchy.entry.high_fructose_corn_syrup.description3" + ], + "cover_item": "antarchy:high_fructose_corn_syrup", + "green_tint": false +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/entry/king.json b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/king.json new file mode 100644 index 00000000..36886f14 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/king.json @@ -0,0 +1,29 @@ +{ + "type": "entity", + "category": "elythia", + "title": "guide.antarchy.entry.king.title", + "subtitle": "guide.antarchy.entry.king.subtitle", + "description": [ + "guide.antarchy.entry.king.description", + "guide.antarchy.entry.king.description2", + "guide.antarchy.entry.king.description3", + "guide.antarchy.entry.king.description4", + "guide.antarchy.entry.king.description5" + ], + "entity": "antarchy:king", + "cover_entity": "antarchy:king", + "locator": "antarchy:kings_tree", + "dimension": "antarchy:elythia", + "rotation": 45, + "render_scale": 0.5, + "green_tint": false, + "gallery": [ + "antarchy:prince", + { + "item": "antarchy:king_scale" + }, + { + "item": "antarchy:prince_egg" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/entry/kraken.json b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/kraken.json new file mode 100644 index 00000000..0af4c2fd --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/kraken.json @@ -0,0 +1,25 @@ +{ + "type": "entity", + "category": "general", + "title": "guide.antarchy.entry.kraken.title", + "subtitle": "guide.antarchy.entry.kraken.subtitle", + "description": [ + "guide.antarchy.entry.kraken.description", + "guide.antarchy.entry.kraken.description2", + "guide.antarchy.entry.kraken.description3", + "guide.antarchy.entry.kraken.description4" + ], + "entity": "antarchy:kraken", + "cover_entity": "antarchy:kraken", + "render_scale": 0.5, + "green_tint": false, + "gallery_title": "guide.antarchy.gallery.drops", + "gallery": [ + { + "item": "antarchy:kraken_tentacle" + }, + { + "item": "antarchy:kraken_tooth" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/entry/nightmare.json b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/nightmare.json new file mode 100644 index 00000000..1d66deff --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/nightmare.json @@ -0,0 +1,19 @@ +{ + "type": "mob", + "category": "thoraxis", + "title": "guide.antarchy.entry.nightmare.title", + "subtitle": "guide.antarchy.entry.nightmare.subtitle", + "description": [ + "guide.antarchy.entry.nightmare.description", + "guide.antarchy.entry.nightmare.description2", + "guide.antarchy.entry.nightmare.description3" + ], + "entity": "antarchy:nightmare", + "green_tint": false, + "gallery_title": "guide.antarchy.gallery.drops", + "gallery": [ + { + "item": "antarchy:nightmare_scale" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/entry/prince.json b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/prince.json new file mode 100644 index 00000000..1c0eed91 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/prince.json @@ -0,0 +1,14 @@ +{ + "type": "entity", + "category": "elythia", + "title": "guide.antarchy.entry.prince.title", + "subtitle": "guide.antarchy.entry.prince.subtitle", + "description": [ + "guide.antarchy.entry.prince.description", + "guide.antarchy.entry.prince.description2" + ], + "entity": "antarchy:prince", + "cover_entity": "antarchy:prince", + "rotation": 45, + "green_tint": false +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/entry/princess.json b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/princess.json new file mode 100644 index 00000000..a1495798 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/princess.json @@ -0,0 +1,14 @@ +{ + "type": "entity", + "category": "thoraxis", + "title": "guide.antarchy.entry.princess.title", + "subtitle": "guide.antarchy.entry.princess.subtitle", + "description": [ + "guide.antarchy.entry.princess.description", + "guide.antarchy.entry.princess.description2" + ], + "entity": "antarchy:princess", + "cover_entity": "antarchy:princess", + "rotation": 45, + "green_tint": false +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/entry/queen.json b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/queen.json new file mode 100644 index 00000000..9e51bce8 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/queen.json @@ -0,0 +1,37 @@ +{ + "type": "entity", + "category": "thoraxis", + "title": "guide.antarchy.entry.queen.title", + "subtitle": "guide.antarchy.entry.queen.subtitle", + "description": [ + "guide.antarchy.entry.queen.description", + "guide.antarchy.entry.queen.description2", + "guide.antarchy.entry.queen.description3", + "guide.antarchy.entry.queen.description5", + "guide.antarchy.entry.queen.description6", + "guide.antarchy.entry.queen.description4" + ], + "entity": "antarchy:queen", + "cover_entity": "antarchy:queen", + "locator": "antarchy:queen", + "dimension": "antarchy:thoraxis", + "rotation": 45, + "render_scale": 0.5, + "green_tint": false, + "gallery": [ + "antarchy:manticore", + "antarchy:princess", + { + "item": "antarchy:queen_scale" + }, + { + "item": "antarchy:princess_egg" + }, + { + "item": "antarchy:blood_crystal_shard" + }, + { + "item": "antarchy:music_disc_the_queen" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/entry/rainbow_ant.json b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/rainbow_ant.json new file mode 100644 index 00000000..1330010e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/rainbow_ant.json @@ -0,0 +1,20 @@ +{ + "type": "entity", + "category": "general", + "title": "guide.antarchy.entry.rainbow_ant.title", + "subtitle": "guide.antarchy.entry.rainbow_ant.subtitle", + "description": [ + "guide.antarchy.entry.rainbow_ant.description", + "guide.antarchy.entry.rainbow_ant.description2", + "guide.antarchy.entry.rainbow_ant.description3" + ], + "entity": "antarchy:rainbow_ant", + "cover_entity": "antarchy:rainbow_ant", + "rotation": 45, + "green_tint": false, + "gallery": [ + { + "item": "antarchy:rainbow_sugar" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/entry/red_ant.json b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/red_ant.json new file mode 100644 index 00000000..bc83f09c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/red_ant.json @@ -0,0 +1,30 @@ +{ + "type": "entity", + "category": "thoraxis", + "title": "guide.antarchy.entry.red_ant.title", + "subtitle": "guide.antarchy.entry.red_ant.subtitle", + "description": [ + "guide.antarchy.entry.red_ant.description", + "guide.antarchy.entry.red_ant.description2", + "guide.antarchy.entry.red_ant.description3", + "guide.antarchy.entry.red_ant.description4", + "guide.antarchy.entry.red_ant.description5" + ], + "entity": "antarchy:red_ant", + "cover_entity": "antarchy:red_ant", + "dimension": "antarchy:thoraxis", + "rotation": 45, + "green_tint": false, + "gallery_title": "guide.antarchy.gallery.thoraxis", + "gallery": [ + "antarchy:queen", + "antarchy:nightmare", + "antarchy:reverie", + "antarchy:lucid", + "antarchy:vortex", + "antarchy:manticore", + "antarchy:emperor_scorpion", + "antarchy:scorpion", + "antarchy:bed_bug" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/entry/temporal_fields.json b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/temporal_fields.json new file mode 100644 index 00000000..9035712c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/temporal_fields.json @@ -0,0 +1,13 @@ +{ + "type": "article", + "category": "thoraxis", + "title": "guide.antarchy.entry.temporal_fields.title", + "subtitle": "guide.antarchy.entry.temporal_fields.subtitle", + "description": [ + "guide.antarchy.entry.temporal_fields.description", + "guide.antarchy.entry.temporal_fields.description2", + "guide.antarchy.entry.temporal_fields.description3" + ], + "cover_potion": "antarchy:time_dilation", + "green_tint": false +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/entry/termite.json b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/termite.json new file mode 100644 index 00000000..07479807 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/termite.json @@ -0,0 +1,31 @@ +{ + "type": "entity", + "category": "cavaryn", + "title": "guide.antarchy.entry.termite.title", + "subtitle": "guide.antarchy.entry.termite.subtitle", + "description": [ + "guide.antarchy.entry.termite.description", + "guide.antarchy.entry.termite.description2", + "guide.antarchy.entry.termite.description3", + "guide.antarchy.entry.termite.description4" + ], + "entity": "antarchy:termite", + "cover_entity": "antarchy:termite", + "dimension": "antarchy:cavaryn", + "rotation": 45, + "green_tint": false, + "gallery_title": "guide.antarchy.gallery.cavaryn", + "gallery": [ + "antarchy:hercules_beetle", + "antarchy:jerry", + "antarchy:crawling_blight", + "antarchy:skulking_fright", + "antarchy:springbug", + "antarchy:spit_bug", + "antarchy:moleworm", + "antarchy:molevore", + "antarchy:worm", + "antarchy:rolly_polly", + "antarchy:stink_bug" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/entry/toreterror_arena.json b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/toreterror_arena.json new file mode 100644 index 00000000..00ca6a95 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/toreterror_arena.json @@ -0,0 +1,27 @@ +{ + "type": "structure", + "category": "elythia", + "title": "guide.antarchy.entry.toreterror.title", + "subtitle": "guide.antarchy.entry.toreterror_arena.subtitle", + "description": [ + "guide.antarchy.entry.toreterror_arena.description", + "guide.antarchy.entry.toreterror_arena.description2" + ], + "entity": "antarchy:toreterror", + "structure": "antarchy:toreterror_arena", + "structure_tag": "antarchy:toreterror_arena_locator", + "dimension": "antarchy:elythia", + "search_radius": 100, + "cover_entity": "antarchy:toreterror", + "render_scale": 0.8, + "green_tint": false, + "gallery_title": "guide.antarchy.gallery.drops", + "gallery": [ + { + "item": "antarchy:primordial_scute" + }, + { + "item": "antarchy:water_cannon" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer/entry/vortex.json b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/vortex.json new file mode 100644 index 00000000..30d4c4d5 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer/entry/vortex.json @@ -0,0 +1,25 @@ +{ + "type": "article", + "category": "thoraxis", + "title": "guide.antarchy.entry.vortex.title", + "subtitle": "guide.antarchy.entry.vortex.subtitle", + "description": [ + "guide.antarchy.entry.vortex.description", + "guide.antarchy.entry.vortex.description2", + "guide.antarchy.entry.vortex.description3" + ], + "cover_entity": "antarchy:vortex", + "render_scale": 0.8, + "green_tint": false, + "gallery": [ + { + "item": "antarchy:vortex_lens" + }, + { + "item": "antarchy:eye_of_the_storm" + }, + { + "item": "antarchy:bluestone" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/computer_scientist_trades/trades.json b/common-1.20.1/src/main/resources/data/antarchy/computer_scientist_trades/trades.json new file mode 100644 index 00000000..97ebc13a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/computer_scientist_trades/trades.json @@ -0,0 +1,202 @@ +{ + "trades": [ + { + "level": 1, + "index": 0, + "buy": { + "item": "minecraft:redstone", + "min": 12, + "max": 16 + }, + "sell": { + "item": "minecraft:emerald", + "min": 1, + "max": 2 + } + }, + { + "level": 1, + "index": 1, + "buy": { + "item": "antarchy:bluestone", + "min": 6, + "max": 10 + }, + "sell": { + "item": "minecraft:emerald", + "min": 1, + "max": 2 + } + }, + { + "level": 1, + "index": 2, + "buy": { + "item": "minecraft:emerald", + "min": 2, + "max": 4 + }, + "sell": { + "item": "antarchy:duct_tape", + "min": 1, + "max": 2 + } + }, + { + "level": 1, + "index": 3, + "buy": { + "item": "antos:floppy_disk", + "min": 1, + "max": 1 + }, + "sell": { + "item": "minecraft:emerald", + "min": 4, + "max": 8 + } + }, + { + "level": 2, + "index": 0, + "buy": { + "item": "minecraft:emerald", + "min": 4, + "max": 8 + }, + "sell": { + "item": "antos:floppy_disk", + "min": 1, + "max": 1 + }, + "sell_disk": "random_general" + }, + { + "level": 2, + "index": 1, + "buy": { + "item": "antos:floppy_disk", + "min": 12, + "max": 20 + }, + "sell": { + "item": "antos:floppy_disk", + "min": 1, + "max": 1 + }, + "sell_disk": "antarchy:toreterror_arena" + }, + { + "level": 3, + "index": 0, + "buy": { + "item": "antarchy:vortex_charge", + "min": 1, + "max": 1 + }, + "sell": { + "item": "minecraft:emerald", + "min": 10, + "max": 10 + } + }, + { + "level": 3, + "index": 1, + "buy": { + "item": "antarchy:flytrap_goo", + "min": 1, + "max": 1 + }, + "sell": { + "item": "minecraft:emerald", + "min": 10, + "max": 10 + } + }, + { + "level": 4, + "index": 0, + "buy": { + "item": "minecraft:emerald", + "min": 8, + "max": 16 + }, + "sell": { + "item": "minecraft:comparator", + "min": 1, + "max": 2 + } + }, + { + "level": 4, + "index": 1, + "buy": { + "item": "minecraft:emerald", + "min": 12, + "max": 20 + }, + "sell": { + "item": "antarchy:bluestone_comparator", + "min": 1, + "max": 2 + } + }, + { + "level": 4, + "index": 2, + "buy": { + "item": "antarchy:antimetal", + "min": 1, + "max": 2 + }, + "sell": { + "item": "minecraft:emerald", + "min": 8, + "max": 16 + } + }, + { + "level": 5, + "index": 0, + "buy": { + "item": "minecraft:emerald", + "min": 32, + "max": 64 + }, + "sell": { + "item": "antarchy:uranium_nugget", + "min": 1, + "max": 1 + } + }, + { + "level": 5, + "index": 1, + "buy": { + "item": "minecraft:emerald", + "min": 32, + "max": 64 + }, + "sell": { + "item": "antarchy:titanium_nugget", + "min": 1, + "max": 1 + } + }, + { + "level": 5, + "index": 2, + "buy": { + "item": "minecraft:emerald", + "min": 16, + "max": 32 + }, + "sell": { + "item": "antarchy:rainbow_sugar", + "min": 1, + "max": 2 + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/damage_type/jumpy_bug_jump.json b/common-1.20.1/src/main/resources/data/antarchy/damage_type/jumpy_bug_jump.json deleted file mode 100644 index e6c918fb..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/damage_type/jumpy_bug_jump.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "message_id": "jumpy_bug_jump", - "scaling": "when_caused_by_living_non_player", - "exhaustion": 0.1, - "effects": "hurt", - "death_message_type": "default" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/damage_type/moon_vacuum.json b/common-1.20.1/src/main/resources/data/antarchy/damage_type/moon_vacuum.json new file mode 100644 index 00000000..ef0a6c68 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/damage_type/moon_vacuum.json @@ -0,0 +1,7 @@ +{ + "message_id": "moon_vacuum", + "scaling": "never", + "exhaustion": 0.0, + "effects": "hurt", + "death_message_type": "default" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/damage_type/triffid_mauling.json b/common-1.20.1/src/main/resources/data/antarchy/damage_type/triffid_mauling.json deleted file mode 100644 index 6cf0af8f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/damage_type/triffid_mauling.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "message_id": "triffid_mauling", - "scaling": "when_caused_by_living_non_player", - "exhaustion": 0.1, - "effects": "hurt", - "death_message_type": "default" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/damage_type/triffid_swallow.json b/common-1.20.1/src/main/resources/data/antarchy/damage_type/triffid_swallow.json deleted file mode 100644 index e3e25b12..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/damage_type/triffid_swallow.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "message_id": "triffid_swallow", - "scaling": "when_caused_by_living_non_player", - "exhaustion": 0.1, - "effects": "hurt", - "death_message_type": "default" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/damage_types/basilisk_bite.json b/common-1.20.1/src/main/resources/data/antarchy/damage_types/basilisk_bite.json deleted file mode 100644 index 9b392a44..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/damage_types/basilisk_bite.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "message_id": "basilisk_bite", - "scaling": "when_caused_by_living_non_player", - "exhaustion": 0.1, - "effects": "hurt", - "death_message_type": "default" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/damage_types/bed_bug_bite.json b/common-1.20.1/src/main/resources/data/antarchy/damage_types/bed_bug_bite.json deleted file mode 100644 index 74c22eed..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/damage_types/bed_bug_bite.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "message_id": "bed_bug_bite", - "scaling": "when_caused_by_living_non_player", - "exhaustion": 0.1, - "effects": "hurt", - "death_message_type": "default" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/damage_types/cornea_stalk_prick.json b/common-1.20.1/src/main/resources/data/antarchy/damage_types/cornea_stalk_prick.json deleted file mode 100644 index 9259a978..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/damage_types/cornea_stalk_prick.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "message_id": "cornea_stalk_prick", - "scaling": "never", - "exhaustion": 0.1, - "effects": "hurt", - "death_message_type": "default" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/damage_types/emperor_scorpion_sting.json b/common-1.20.1/src/main/resources/data/antarchy/damage_types/emperor_scorpion_sting.json deleted file mode 100644 index d74a6fae..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/damage_types/emperor_scorpion_sting.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "message_id": "emperor_scorpion_sting", - "scaling": "when_caused_by_living_non_player", - "exhaustion": 0.1, - "effects": "hurt", - "death_message_type": "default" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/damage_types/hercules_beetle_obliteration.json b/common-1.20.1/src/main/resources/data/antarchy/damage_types/hercules_beetle_obliteration.json deleted file mode 100644 index e9fba373..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/damage_types/hercules_beetle_obliteration.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "message_id": "hercules_beetle_obliteration", - "scaling": "when_caused_by_living_non_player", - "exhaustion": 0.1, - "effects": "hurt", - "death_message_type": "default" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/damage_types/jumpy_bug_jump.json b/common-1.20.1/src/main/resources/data/antarchy/damage_types/jumpy_bug_jump.json deleted file mode 100644 index e6c918fb..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/damage_types/jumpy_bug_jump.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "message_id": "jumpy_bug_jump", - "scaling": "when_caused_by_living_non_player", - "exhaustion": 0.1, - "effects": "hurt", - "death_message_type": "default" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/damage_types/kraken_lightning.json b/common-1.20.1/src/main/resources/data/antarchy/damage_types/kraken_lightning.json deleted file mode 100644 index 6feb4b40..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/damage_types/kraken_lightning.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "message_id": "kraken_lightning", - "scaling": "when_caused_by_living_non_player", - "exhaustion": 0.1, - "effects": "hurt", - "death_message_type": "default" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/damage_types/kraken_mauling.json b/common-1.20.1/src/main/resources/data/antarchy/damage_types/kraken_mauling.json deleted file mode 100644 index 2728d507..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/damage_types/kraken_mauling.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "message_id": "kraken_mauling", - "scaling": "when_caused_by_living_non_player", - "exhaustion": 0.1, - "effects": "hurt", - "death_message_type": "default" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/damage_types/nightmare_mauling.json b/common-1.20.1/src/main/resources/data/antarchy/damage_types/nightmare_mauling.json deleted file mode 100644 index 833b7379..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/damage_types/nightmare_mauling.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "message_id": "nightmare_mauling", - "scaling": "when_caused_by_living_non_player", - "exhaustion": 0.1, - "effects": "hurt", - "death_message_type": "default" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/damage_types/rpo_launcher_blast.json b/common-1.20.1/src/main/resources/data/antarchy/damage_types/rpo_launcher_blast.json deleted file mode 100644 index b5051cc9..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/damage_types/rpo_launcher_blast.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "message_id": "rpo_launcher_blast", - "scaling": "when_caused_by_living_non_player", - "exhaustion": 0.1, - "effects": "hurt", - "death_message_type": "default" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/damage_types/spit_bug_disrespect.json b/common-1.20.1/src/main/resources/data/antarchy/damage_types/spit_bug_disrespect.json deleted file mode 100644 index 69faaa7a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/damage_types/spit_bug_disrespect.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "message_id": "spit_bug_disrespect", - "scaling": "when_caused_by_living_non_player", - "exhaustion": 0.1, - "effects": "hurt", - "death_message_type": "default" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/damage_types/toreterror_jump.json b/common-1.20.1/src/main/resources/data/antarchy/damage_types/toreterror_jump.json deleted file mode 100644 index e860a89c..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/damage_types/toreterror_jump.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "message_id": "toreterror_jump", - "scaling": "when_caused_by_living_non_player", - "exhaustion": 0.1, - "effects": "hurt", - "death_message_type": "default" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/damage_types/toreterror_spin.json b/common-1.20.1/src/main/resources/data/antarchy/damage_types/toreterror_spin.json deleted file mode 100644 index 4a6afd29..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/damage_types/toreterror_spin.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "message_id": "toreterror_spin", - "scaling": "when_caused_by_living_non_player", - "exhaustion": 0.1, - "effects": "hurt", - "death_message_type": "default" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/damage_types/triffid_mauling.json b/common-1.20.1/src/main/resources/data/antarchy/damage_types/triffid_mauling.json deleted file mode 100644 index 6cf0af8f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/damage_types/triffid_mauling.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "message_id": "triffid_mauling", - "scaling": "when_caused_by_living_non_player", - "exhaustion": 0.1, - "effects": "hurt", - "death_message_type": "default" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/damage_types/triffid_swallow.json b/common-1.20.1/src/main/resources/data/antarchy/damage_types/triffid_swallow.json deleted file mode 100644 index e3e25b12..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/damage_types/triffid_swallow.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "message_id": "triffid_swallow", - "scaling": "when_caused_by_living_non_player", - "exhaustion": 0.1, - "effects": "hurt", - "death_message_type": "default" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/damage_types/water_soaked.json b/common-1.20.1/src/main/resources/data/antarchy/damage_types/water_soaked.json deleted file mode 100644 index 56c1f742..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/damage_types/water_soaked.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "message_id": "water_soaked", - "scaling": "when_caused_by_living_non_player", - "exhaustion": 0.1, - "effects": "hurt", - "death_message_type": "default" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/dimension/cavaryn.json b/common-1.20.1/src/main/resources/data/antarchy/dimension/cavaryn.json index 2e514481..969fac3c 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/dimension/cavaryn.json +++ b/common-1.20.1/src/main/resources/data/antarchy/dimension/cavaryn.json @@ -14,7 +14,7 @@ ], "humidity": [ -1.0, - 0.55 + 0.1 ], "continentalness": [ -1.0, @@ -43,7 +43,7 @@ 1.0 ], "humidity": [ - 0.5, + 0.0, 1.0 ], "continentalness": [ @@ -55,8 +55,8 @@ 1.0 ], "weirdness": [ - -0.45, - 0.45 + -0.55, + 0.55 ], "depth": [ -2.0, @@ -73,8 +73,8 @@ 1.0 ], "humidity": [ - 0.15, - 0.85 + 0.0, + 1.0 ], "continentalness": [ -1.0, @@ -85,7 +85,37 @@ 1.0 ], "weirdness": [ - 0.45, + -0.85, + -0.45 + ], + "depth": [ + -2.0, + -0.1 + ], + "offset": 0.0 + }, + "biome": "antarchy:glowcap_caves" + }, + { + "parameters": { + "temperature": [ + -1.0, + 1.0 + ], + "humidity": [ + 0.1, + 1.0 + ], + "continentalness": [ + -1.0, + 1.0 + ], + "erosion": [ + -1.0, + 1.0 + ], + "weirdness": [ + 0.35, 1.0 ], "depth": [ @@ -103,9 +133,99 @@ 1.0 ], "humidity": [ + 0.1, + 1.0 + ], + "continentalness": [ -1.0, 1.0 ], + "erosion": [ + -1.0, + 1.0 + ], + "weirdness": [ + 0.65, + 1.0 + ], + "depth": [ + -2.0, + -0.1 + ], + "offset": 0.0 + }, + "biome": "antarchy:biowart_caves" + }, + { + "parameters": { + "temperature": [ + -1.0, + 1.0 + ], + "humidity": [ + -0.05, + 0.25 + ], + "continentalness": [ + -1.0, + 1.0 + ], + "erosion": [ + -1.0, + 1.0 + ], + "weirdness": [ + -0.35, + 0.55 + ], + "depth": [ + -2.0, + -0.1 + ], + "offset": 0.0 + }, + "biome": "antarchy:cavaryn_moleworm_caves" + }, + { + "parameters": { + "temperature": [ + -1.0, + 1.0 + ], + "humidity": [ + 0.35, + 1.0 + ], + "continentalness": [ + -1.0, + 1.0 + ], + "erosion": [ + -1.0, + 1.0 + ], + "weirdness": [ + -0.6, + 0.9 + ], + "depth": [ + 0.0, + 2.0 + ], + "offset": 0.0 + }, + "biome": "antarchy:wormy_caves" + }, + { + "parameters": { + "temperature": [ + -1.0, + 1.0 + ], + "humidity": [ + -1.0, + -0.15 + ], "continentalness": [ -1.0, 1.0 @@ -125,6 +245,66 @@ "offset": 0.0 }, "biome": "antarchy:brooding_tunnels" + }, + { + "parameters": { + "temperature": [ + -1.0, + 1.0 + ], + "humidity": [ + -0.15, + 1.0 + ], + "continentalness": [ + -1.0, + 1.0 + ], + "erosion": [ + -1.0, + 1.0 + ], + "weirdness": [ + -1.0, + -0.6 + ], + "depth": [ + -0.1, + 2.0 + ], + "offset": 0.0 + }, + "biome": "antarchy:brooding_tunnels" + }, + { + "parameters": { + "temperature": [ + -1.0, + 1.0 + ], + "humidity": [ + -0.15, + 1.0 + ], + "continentalness": [ + -1.0, + 1.0 + ], + "erosion": [ + -1.0, + 1.0 + ], + "weirdness": [ + 0.9, + 1.0 + ], + "depth": [ + -0.1, + 2.0 + ], + "offset": 0.0 + }, + "biome": "antarchy:brooding_tunnels" } ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/dimension/elythia.json b/common-1.20.1/src/main/resources/data/antarchy/dimension/elythia.json index 0ee2aed4..194668ae 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/dimension/elythia.json +++ b/common-1.20.1/src/main/resources/data/antarchy/dimension/elythia.json @@ -5,500 +5,275 @@ "settings": "antarchy:elythia", "biome_source": { "type": "antarchy:elythia_biome_source", - "moleworm_caves_max_y": 30, - "surface_biome_sample_y": 160, - "ocean_max_y": 62, - "sea_level": 60, + "cloud_sea_min_y": 250, "biomes": [ { - "biome": "antarchy:moleworm_caves", + "biome": "antarchy:elythia_ocean", "parameters": { - "temperature": 0.69, - "humidity": 0.95, - "continentalness": 0.56, - "erosion": 0.2, - "weirdness": 0.16, - "depth": 0.3, - "offset": 0.27 + "temperature": [ + 0.45, + 0.85 + ], + "humidity": [ + 0.75, + 1.0 + ], + "continentalness": [ + -1.0, + -0.93 + ], + "erosion": [ + -1.0, + 1.0 + ], + "weirdness": [ + -1.0, + 1.0 + ], + "depth": [ + 0.0, + 0.25 + ], + "offset": 0.0 } }, { - "biome": "antarchy:moleworm_caves", + "biome": "antarchy:elythia_coral_spikes", "parameters": { - "temperature": 0.62, - "humidity": 0.92, - "continentalness": 0.48, - "erosion": 0.38, - "weirdness": -0.55, - "depth": 0.3, - "offset": 0.27 - } - }, - { - "biome": "antarchy:moleworm_caves", - "parameters": { - "temperature": 0.75, - "humidity": 0.96, - "continentalness": 0.64, - "erosion": 0.1, - "weirdness": 0.65, - "depth": 0.3, - "offset": 0.27 - } - }, - { - "biome": "antarchy:elythia_lush_caves", - "parameters": { - "temperature": 0.72, - "humidity": 1.0, - "continentalness": 0.52, - "erosion": 0.15, - "weirdness": -0.1, - "depth": 0.35, - "offset": 0.1 - } - }, - { - "biome": "antarchy:elythia_lush_caves", - "parameters": { - "temperature": 0.68, - "humidity": 0.99, - "continentalness": 0.6, - "erosion": 0.28, - "weirdness": 0.42, - "depth": 0.4, - "offset": 0.1 - } - }, - { - "biome": "antarchy:elythia_meadow", - "parameters": { - "temperature": 0.7, - "humidity": 0.94, - "continentalness": 0.55, - "erosion": 0.22, - "weirdness": -0.3, - "depth": 0.3, + "temperature": [ + 0.72, + 0.86 + ], + "humidity": [ + 0.78, + 0.93 + ], + "continentalness": [ + -1.0, + -0.93 + ], + "erosion": [ + -0.2, + 0.45 + ], + "weirdness": [ + 0.35, + 0.7 + ], + "depth": [ + 0.0, + 0.25 + ], "offset": 0.0 } }, { "biome": "antarchy:elythia_meadow", "parameters": { - "temperature": 0.68, - "humidity": 0.96, - "continentalness": 0.57, - "erosion": 0.18, - "weirdness": 0.55, - "depth": 0.3, + "temperature": [ + 0.55, + 0.8 + ], + "humidity": [ + 0.82, + 1.0 + ], + "continentalness": [ + -0.93, + 0.25 + ], + "erosion": [ + -1.0, + 0.65 + ], + "weirdness": [ + -1.0, + 0.2 + ], + "depth": [ + 0.0, + 0.35 + ], "offset": 0.0 } }, { - "biome": "antarchy:peach_forest", + "biome": "antarchy:truffalo_forest", "parameters": { - "temperature": 0.67, - "humidity": 0.91, - "continentalness": 0.54, - "erosion": 0.16, - "weirdness": -0.42, - "depth": 0.45, + "temperature": [ + 0.55, + 0.8 + ], + "humidity": [ + 0.82, + 1.0 + ], + "continentalness": [ + -0.93, + 0.25 + ], + "erosion": [ + -1.0, + 0.65 + ], + "weirdness": [ + 0.2, + 0.75 + ], + "depth": [ + 0.0, + 0.3 + ], "offset": 0.0 } }, { - "biome": "antarchy:peach_forest", + "biome": "antarchy:butterfly_fields", "parameters": { - "temperature": 0.66, - "humidity": 0.89, - "continentalness": 0.54, - "erosion": 0.38, - "weirdness": -0.42, - "depth": 0.45, + "temperature": [ + 0.68, + 0.78 + ], + "humidity": [ + 0.9, + 1.0 + ], + "continentalness": [ + 0.05, + 0.2 + ], + "erosion": [ + 0.05, + 0.35 + ], + "weirdness": [ + 0.85, + 1.0 + ], + "depth": [ + 0.0, + 0.2 + ], "offset": 0.0 } }, { - "biome": "antarchy:peach_forest", + "biome": "antarchy:ouranwood_forest", "parameters": { - "temperature": 0.68, - "humidity": 0.93, - "continentalness": 0.54, - "erosion": 0.16, - "weirdness": -0.74, - "depth": 0.45, + "temperature": [ + 0.52, + 0.78 + ], + "humidity": [ + 0.84, + 1.0 + ], + "continentalness": [ + 0.25, + 0.72 + ], + "erosion": [ + -0.5, + 0.55 + ], + "weirdness": [ + -0.35, + 0.62 + ], + "depth": [ + 0.0, + 1.0 + ], "offset": 0.0 } }, { - "biome": "antarchy:peach_forest", + "biome": "antarchy:fungal_ouranwood_forest", "parameters": { - "temperature": 0.65, - "humidity": 0.87, - "continentalness": 0.55, - "erosion": 0.38, - "weirdness": -0.74, - "depth": 0.45, + "temperature": [ + 0.5, + 0.68 + ], + "humidity": [ + 0.88, + 1.0 + ], + "continentalness": [ + 0.32, + 0.67 + ], + "erosion": [ + -0.1, + 0.35 + ], + "weirdness": [ + 0.68, + 1.0 + ], + "depth": [ + 0.0, + 0.3 + ], "offset": 0.0 } }, { "biome": "antarchy:glimmering_pools", "parameters": { - "temperature": 0.67, - "humidity": 0.95, - "continentalness": 0.54, - "erosion": 0.23, - "weirdness": -0.46, - "depth": 0.45, + "temperature": [ + 0.52, + 0.78 + ], + "humidity": [ + 0.84, + 1.0 + ], + "continentalness": [ + 0.3, + 0.65 + ], + "erosion": [ + -0.3, + 0.45 + ], + "weirdness": [ + -0.8, + -0.35 + ], + "depth": [ + 0.0, + 0.25 + ], "offset": 0.0 } }, { - "biome": "antarchy:ouranwood_forest", + "biome": "antarchy:peach_forest", "parameters": { - "temperature": 0.67, - "humidity": 0.93, - "continentalness": 0.54, - "erosion": 0.25, - "weirdness": -0.5, - "depth": 0.45, - "offset": 0.0 - } - }, - { - "biome": "antarchy:ouranwood_forest", - "parameters": { - "temperature": 0.67, - "humidity": 0.93, - "continentalness": 0.54, - "erosion": 0.2, - "weirdness": -0.4, - "depth": 0.45, - "offset": 0.0 - } - }, - { - "biome": "antarchy:ouranwood_forest", - "parameters": { - "temperature": 0.55, - "humidity": 0.9, - "continentalness": 0.9, - "erosion": 0.12, - "weirdness": -0.2, - "depth": 0.3, - "offset": 0.0 - } - }, - { - "biome": "antarchy:elythia_meadow", - "parameters": { - "temperature": 0.7, - "humidity": 0.95, - "continentalness": 0.38, - "erosion": 0.12, - "weirdness": -0.1, - "depth": 0.3, - "offset": 0.0 - } - }, - { - "biome": "antarchy:elythia_meadow", - "parameters": { - "temperature": 0.62, - "humidity": 0.98, - "continentalness": 0.78, - "erosion": 0.05, - "weirdness": 0.5, - "depth": 0.3, - "offset": 0.0 - } - }, - { - "biome": "antarchy:ouranwood_forest", - "parameters": { - "temperature": 0.55, - "humidity": 0.9, - "continentalness": 0.9, - "erosion": 0.12, - "weirdness": -0.2, - "depth": 0.0, - "offset": 0.0 - } - }, - { - "biome": "antarchy:sparse_ouranwood_forest", - "parameters": { - "temperature": 0.2, - "humidity": 0.62, - "continentalness": 0.95, - "erosion": -0.35, - "weirdness": 0.98, - "depth": 0.0, - "offset": 0.0 - } - }, - { - "biome": "antarchy:ouranwood_forest", - "parameters": { - "temperature": 0.55, - "humidity": 0.9, - "continentalness": 0.9, - "erosion": 0.12, - "weirdness": -0.2, - "depth": 0.0, - "offset": 0.0 - } - }, - { - "biome": "antarchy:fungal_ouranwood_forest", - "parameters": { - "temperature": 0.55, - "humidity": 0.9, - "continentalness": 0.75, - "erosion": 0.0, - "weirdness": 0.85, - "depth": 0.45, - "offset": 0.0 - } - }, - { - "biome": "antarchy:fungal_ouranwood_forest", - "parameters": { - "temperature": 0.55, - "humidity": 0.9, - "continentalness": 0.75, - "erosion": 0.0, - "weirdness": 0.85, - "depth": 0.0, - "offset": 0.0 - } - }, - { - "biome": "antarchy:butterfly_fields", - "parameters": { - "temperature": 0.74, - "humidity": 0.99, - "continentalness": 0.6, - "erosion": 0.17, - "weirdness": 0.28, - "depth": 0.0, - "offset": 0.0 - } - }, - { - "biome": "antarchy:butterfly_fields", - "parameters": { - "temperature": 0.76, - "humidity": 0.995, - "continentalness": 0.68, - "erosion": 0.12, - "weirdness": 0.36, - "depth": 0.0, - "offset": 0.0 - } - }, - { - "biome": "antarchy:elythia_meadow", - "parameters": { - "temperature": 0.7, - "humidity": 0.95, - "continentalness": 0.38, - "erosion": 0.12, - "weirdness": -0.1, - "depth": 0.0, - "offset": 0.0 - } - }, - { - "biome": "antarchy:elythia_meadow", - "parameters": { - "temperature": 0.7, - "humidity": 0.95, - "continentalness": 0.55, - "erosion": 0.22, - "weirdness": 0.15, - "depth": 0.0, - "offset": 0.0 - } - }, - { - "biome": "antarchy:ouranwood_forest", - "parameters": { - "temperature": 0.45, - "humidity": 0.85, - "continentalness": 0.75, - "erosion": 0.0, - "weirdness": 0.7, - "depth": 0.5, - "offset": 0.0 - } - }, - { - "biome": "antarchy:ouranwood_forest", - "parameters": { - "temperature": 0.55, - "humidity": 0.9, - "continentalness": 0.9, - "erosion": 0.12, - "weirdness": -0.2, - "depth": 0.5, - "offset": 0.0 - } - }, - { - "biome": "antarchy:butterfly_fields", - "parameters": { - "temperature": 0.66, - "humidity": 0.96, - "continentalness": 0.62, - "erosion": 0.13, - "weirdness": 0.2, - "depth": 0.0, - "offset": 0.0 - } - }, - { - "biome": "antarchy:butterfly_fields", - "parameters": { - "temperature": 0.7, - "humidity": 0.97, - "continentalness": 0.64, - "erosion": 0.15, - "weirdness": 0.1, - "depth": 0.0, - "offset": 0.0 - } - }, - { - "biome": "antarchy:butterfly_fields", - "parameters": { - "temperature": 0.72, - "humidity": 0.98, - "continentalness": 0.66, - "erosion": 0.14, - "weirdness": 0.32, - "depth": 0.0, - "offset": 0.0 - } - }, - { - "biome": "antarchy:elythia_meadow", - "parameters": { - "temperature": 0.66, - "humidity": 0.96, - "continentalness": 0.62, - "erosion": 0.13, - "weirdness": 0.2, - "depth": 0.85, - "offset": 0.0 - } - }, - { - "biome": "antarchy:elythia_ocean", - "parameters": { - "temperature": 0.65, - "humidity": 0.9, - "continentalness": -0.88, - "erosion": 0.3, - "weirdness": 0.0, - "depth": 0.0, - "offset": 0.0 - } - }, - { - "biome": "antarchy:elythia_ocean", - "parameters": { - "temperature": 0.6, - "humidity": 0.88, - "continentalness": -0.92, - "erosion": 0.25, - "weirdness": -0.4, - "depth": 0.0, - "offset": 0.0 - } - }, - { - "biome": "antarchy:elythia_ocean", - "parameters": { - "temperature": 0.7, - "humidity": 0.92, - "continentalness": -0.85, - "erosion": 0.35, - "weirdness": 0.4, - "depth": 0.0, - "offset": 0.0 - } - }, - { - "biome": "antarchy:elythia_ocean", - "parameters": { - "temperature": 0.65, - "humidity": 0.9, - "continentalness": -0.88, - "erosion": 0.3, - "weirdness": 0.0, - "depth": 0.5, - "offset": 0.0 - } - }, - { - "biome": "antarchy:elythia_ocean", - "parameters": { - "temperature": 0.6, - "humidity": 0.88, - "continentalness": -0.92, - "erosion": 0.25, - "weirdness": -0.4, - "depth": 0.5, - "offset": 0.0 - } - }, - { - "biome": "antarchy:elythia_coral_spikes", - "parameters": { - "temperature": 0.8, - "humidity": 0.85, - "continentalness": -0.88, - "erosion": 0.2, - "weirdness": 0.5, - "depth": 0.0, - "offset": 0.0 - } - }, - { - "biome": "antarchy:elythia_coral_spikes", - "parameters": { - "temperature": 0.75, - "humidity": 0.82, - "continentalness": -0.9, - "erosion": 0.15, - "weirdness": -0.55, - "depth": 0.0, - "offset": 0.0 - } - }, - { - "biome": "antarchy:elythia_coral_spikes", - "parameters": { - "temperature": 0.8, - "humidity": 0.85, - "continentalness": -0.88, - "erosion": 0.2, - "weirdness": 0.5, - "depth": 0.5, - "offset": 0.0 - } - }, - { - "biome": "antarchy:elythia_coral_spikes", - "parameters": { - "temperature": 0.75, - "humidity": 0.82, - "continentalness": -0.9, - "erosion": 0.15, - "weirdness": -0.55, - "depth": 0.5, + "temperature": [ + 0.58, + 0.8 + ], + "humidity": [ + 0.78, + 0.98 + ], + "continentalness": [ + 0.72, + 1.0 + ], + "erosion": [ + -0.5, + 0.65 + ], + "weirdness": [ + -0.85, + 0.7 + ], + "depth": [ + 0.0, + 0.35 + ], "offset": 0.0 } }, @@ -526,14 +301,13 @@ 1.0 ], "depth": [ - 0.0, + -1.0, 1.0 ], - "offset": 0.999 + "offset": 1.0 } } - ], - "cloud_sea_min_y": 360 + ] } } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/dimension/thoraxis.json b/common-1.20.1/src/main/resources/data/antarchy/dimension/thoraxis.json index 03c8f802..e99426ed 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/dimension/thoraxis.json +++ b/common-1.20.1/src/main/resources/data/antarchy/dimension/thoraxis.json @@ -5,9 +5,10 @@ "settings": "antarchy:thoraxis", "biome_source": { "type": "antarchy:thoraxis_biome_source", - "dream_dunes_max_y": 96, + "dream_dunes_max_y": 24, "umbral_hills_max_y": 100, "lucid_pools_min_y": 116, + "nadir_forest_min_y": 128, "biomes": [ { "parameters": { @@ -39,6 +40,36 @@ }, "biome": "antarchy:dream_dunes" }, + { + "parameters": { + "temperature": [ + -1.0, + 1.0 + ], + "humidity": [ + -1.0, + 1.0 + ], + "continentalness": [ + -1.0, + 1.0 + ], + "erosion": [ + -1.0, + 1.0 + ], + "weirdness": [ + -1.0, + 1.0 + ], + "depth": [ + 0.0, + 1.0 + ], + "offset": 0.0 + }, + "biome": "antarchy:vortex_expanse" + }, { "parameters": { "temperature": [ @@ -248,6 +279,36 @@ "offset": 0.6 }, "biome": "antarchy:lucid_pools" + }, + { + "parameters": { + "temperature": [ + -1.0, + 1.0 + ], + "humidity": [ + -1.0, + 1.0 + ], + "continentalness": [ + -1.0, + 1.0 + ], + "erosion": [ + -1.0, + 1.0 + ], + "weirdness": [ + -1.0, + 1.0 + ], + "depth": [ + 0.0, + 1.0 + ], + "offset": 0.7 + }, + "biome": "antarchy:nadir_forest" } ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/dimension_type/thoraxis.json b/common-1.20.1/src/main/resources/data/antarchy/dimension_type/thoraxis.json index 368ef383..e439913f 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/dimension_type/thoraxis.json +++ b/common-1.20.1/src/main/resources/data/antarchy/dimension_type/thoraxis.json @@ -4,9 +4,9 @@ "coordinate_scale": 8.0, "bed_works": false, "respawn_anchor_works": true, - "min_y": 0, - "height": 256, - "logical_height": 220, + "min_y": -256, + "height": 512, + "logical_height": 512, "infiniburn": "#minecraft:infiniburn_nether", "effects": "minecraft:the_nether", "ambient_light": 0.08, diff --git a/common-1.20.1/src/main/resources/data/antarchy/enchantment/chronosphere.json b/common-1.20.1/src/main/resources/data/antarchy/enchantment/chronosphere.json deleted file mode 100644 index 61c8b34d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/enchantment/chronosphere.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "anvil_cost": 8, - "description": { - "translate": "enchantment.antarchy.chronosphere" - }, - "effects": {}, - "max_cost": { - "base": 55, - "per_level_above_first": 15 - }, - "max_level": 3, - "min_cost": { - "base": 30, - "per_level_above_first": 15 - }, - "primary_items": "#minecraft:enchantable/chest_armor", - "slots": [ - "chest" - ], - "supported_items": "#minecraft:enchantable/chest_armor", - "weight": 1 -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/enchantment/feather_rising.json b/common-1.20.1/src/main/resources/data/antarchy/enchantment/feather_rising.json deleted file mode 100644 index b81459c2..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/enchantment/feather_rising.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "anvil_cost": 4, - "description": { - "translate": "enchantment.antarchy.feather_rising" - }, - "effects": {}, - "max_cost": { - "base": 45, - "per_level_above_first": 0 - }, - "max_level": 1, - "min_cost": { - "base": 25, - "per_level_above_first": 0 - }, - "primary_items": "#minecraft:enchantable/foot_armor", - "slots": [ - "feet" - ], - "supported_items": "#minecraft:enchantable/foot_armor", - "weight": 2 -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/jukebox_song/underside.json b/common-1.20.1/src/main/resources/data/antarchy/jukebox_song/underside.json deleted file mode 100644 index 10fde747..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/jukebox_song/underside.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "sound_event": "antarchy:music_disc_underside", - "description": { - "translate": "jukebox_song.antarchy.underside" - }, - "length_in_seconds": 225.0, - "comparator_output": 13 -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/amber_lichen.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/amber_lichen.json deleted file mode 100644 index dfba2794..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/amber_lichen.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "conditions": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "items": [ - "minecraft:shears" - ] - } - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:amber_lichen" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/amber_lichen" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/amber_moss_block.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/amber_moss_block.json deleted file mode 100644 index a8bfc055..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/amber_moss_block.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:amber_moss_block" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/amber_moss_block" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/amber_moss_carpet.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/amber_moss_carpet.json deleted file mode 100644 index 7e68cad1..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/amber_moss_carpet.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:amber_moss_carpet" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/amber_moss_carpet" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/antigravel.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/antigravel.json deleted file mode 100644 index b89e352a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/antigravel.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:antigravel" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/antigravel" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/antimetal.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/antimetal.json deleted file mode 100644 index 3ed331e1..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/antimetal.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:antimetal" - } - ] - } - ], - "random_sequence": "antarchy:blocks/antimetal" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/antimetal_activator_rail.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/antimetal_activator_rail.json deleted file mode 100644 index f91df6d2..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/antimetal_activator_rail.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:antimetal_activator_rail" - } - ] - } - ], - "random_sequence": "antarchy:blocks/antimetal_activator_rail" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/antimetal_detector_rail.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/antimetal_detector_rail.json deleted file mode 100644 index a6101057..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/antimetal_detector_rail.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:antimetal_detector_rail" - } - ] - } - ], - "random_sequence": "antarchy:blocks/antimetal_detector_rail" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/antimetal_powered_rail.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/antimetal_powered_rail.json deleted file mode 100644 index eed683c6..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/antimetal_powered_rail.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:antimetal_powered_rail" - } - ] - } - ], - "random_sequence": "antarchy:blocks/antimetal_powered_rail" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/antimetal_rail.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/antimetal_rail.json deleted file mode 100644 index e58e371f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/antimetal_rail.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:antimetal_rail" - } - ] - } - ], - "random_sequence": "antarchy:blocks/antimetal_rail" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/antimetal_scaffolding.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/antimetal_scaffolding.json deleted file mode 100644 index abcd187f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/antimetal_scaffolding.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:antimetal_scaffolding" - } - ] - } - ], - "random_sequence": "antarchy:blocks/antimetal_scaffolding" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/antimetal_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/antimetal_slab.json deleted file mode 100644 index 959fbd3c..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/antimetal_slab.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:block_state_property", - "block": "antarchy:antimetal_slab", - "properties": { - "type": "double" - } - } - ], - "functions": [ - { - "function": "minecraft:set_count", - "count": 2 - } - ], - "name": "antarchy:antimetal_slab" - }, - { - "type": "minecraft:item", - "name": "antarchy:antimetal_slab" - } - ] - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/antimetal_slab" -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/antimetal_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/antimetal_stairs.json deleted file mode 100644 index f81249ea..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/antimetal_stairs.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:antimetal_stairs" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/antimetal_stairs" -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/bed_bug_egg.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/bed_bug_egg.json deleted file mode 100644 index d16d9f39..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/bed_bug_egg.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:bed_bug_egg", - "functions": [ - { - "function": "minecraft:explosion_decay" - } - ] - } - ] - } - ], - "random_sequence": "minecraft:blocks/turtle_egg" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/bile_vein.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/bile_vein.json deleted file mode 100644 index 32eb33c8..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/bile_vein.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:bile_vein" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/bile_vein" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/biomite.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/biomite.json deleted file mode 100644 index ac5e40b9..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/biomite.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:biomite" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/biomite" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/biomite_turf.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/biomite_turf.json deleted file mode 100644 index 9980b91f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/biomite_turf.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:biomite_turf" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/biomite_turf" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/biowart.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/biowart.json deleted file mode 100644 index 38860771..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/biowart.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:biowart" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/biowart" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/biowart_tendrils.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/biowart_tendrils.json deleted file mode 100644 index 416d7142..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/biowart_tendrils.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:biowart_tendrils" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/biowart_tendrils" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/blood_crystal_block.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/blood_crystal_block.json deleted file mode 100644 index d59363a9..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/blood_crystal_block.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:blood_crystal_block" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/blood_crystal_cluster.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/blood_crystal_cluster.json deleted file mode 100644 index 3f5b2e29..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/blood_crystal_cluster.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "entries": [ - { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "predicates": { - "minecraft:enchantments": [ - { - "enchantments": "minecraft:silk_touch", - "levels": { - "min": 1 - } - } - ] - } - } - } - ], - "name": "antarchy:blood_crystal_cluster" - }, - { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "items": "#minecraft:cluster_max_harvestables" - } - } - ], - "functions": [ - { - "count": 4.0, - "function": "minecraft:set_count" - }, - { - "enchantment": "minecraft:fortune", - "formula": "minecraft:ore_drops", - "function": "minecraft:apply_bonus" - } - ], - "name": "antarchy:blood_crystal_shard" - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "antarchy:blood_crystal_shard" - } - ] - } - ] - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/amethyst_cluster" -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/bluestone_block.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/bluestone_block.json deleted file mode 100644 index 1e8f11e6..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/bluestone_block.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:bluestone_block" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/bluestone_comparator.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/bluestone_comparator.json deleted file mode 100644 index 26d77722..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/bluestone_comparator.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:bluestone_comparator" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/bluestone_lamp.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/bluestone_lamp.json deleted file mode 100644 index 050e8523..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/bluestone_lamp.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:bluestone_lamp" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/bluestone_lamp" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/bluestone_ore.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/bluestone_ore.json deleted file mode 100644 index b7f5736d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/bluestone_ore.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", - "name": "antarchy:bluestone_ore", - "conditions": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "components": { - "minecraft:enchantments": { - "levels": { - "minecraft:silk_touch": 1 - } - } - } - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:bluestone", - "functions": [ - { - "function": "minecraft:apply_bonus", - "enchantment": "minecraft:fortune", - "formula": "minecraft:ore_drops" - }, - { - "function": "minecraft:explosion_decay" - } - ] - } - ] - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/bluestone_repeater.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/bluestone_repeater.json deleted file mode 100644 index dc3e4d9f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/bluestone_repeater.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:bluestone_repeater" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/bluestone_torch.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/bluestone_torch.json deleted file mode 100644 index 1181c0aa..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/bluestone_torch.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:bluestone_torch" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/bluestone_wire.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/bluestone_wire.json deleted file mode 100644 index b49ab6cb..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/bluestone_wire.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:bluestone" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/blush_moss_block.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/blush_moss_block.json deleted file mode 100644 index 566101fa..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/blush_moss_block.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:blush_moss_block" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/moss_block" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/blush_moss_carpet.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/blush_moss_carpet.json deleted file mode 100644 index 2c408c83..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/blush_moss_carpet.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "entries": [ - { - "type": "minecraft:item", - "conditions": [ - { - "block": "antarchy:blush_moss_carpet", - "condition": "minecraft:block_state_property", - "properties": { - "bottom": "true" - } - } - ], - "functions": [ - { - "function": "minecraft:explosion_decay" - } - ], - "name": "antarchy:blush_moss_carpet" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/moss_carpet" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/broodstone.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/broodstone.json deleted file mode 100644 index 127d6661..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/broodstone.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:broodstone" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/broodstone" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/broodstone_brick_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/broodstone_brick_slab.json deleted file mode 100644 index 3b654ece..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/broodstone_brick_slab.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "antarchy:broodstone_brick_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "antarchy:broodstone_brick_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/broodstone_brick_slab" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/broodstone_brick_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/broodstone_brick_stairs.json deleted file mode 100644 index 66b18f76..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/broodstone_brick_stairs.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:broodstone_brick_stairs" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/broodstone_brick_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/broodstone_brick_wall.json deleted file mode 100644 index ca98b9a5..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/broodstone_brick_wall.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:broodstone_brick_wall" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/broodstone_bricks.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/broodstone_bricks.json deleted file mode 100644 index 800d7a1a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/broodstone_bricks.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:broodstone_bricks" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/broodstone_pillar.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/broodstone_pillar.json deleted file mode 100644 index 0cddd51f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/broodstone_pillar.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:broodstone_pillar" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/broodstone_pillar" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/broodstone_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/broodstone_slab.json deleted file mode 100644 index fd22e35a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/broodstone_slab.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "antarchy:broodstone_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "antarchy:broodstone_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/broodstone_slab" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/broodstone_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/broodstone_stairs.json deleted file mode 100644 index 61531b81..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/broodstone_stairs.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:broodstone_stairs" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/broodstone_titanium_ore.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/broodstone_titanium_ore.json deleted file mode 100644 index e82655e1..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/broodstone_titanium_ore.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", - "name": "antarchy:broodstone_titanium_ore", - "conditions": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "components": { - "minecraft:enchantments": { - "levels": { - "minecraft:silk_touch": 1 - } - } - } - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:raw_titanium_scrap", - "functions": [ - { - "function": "minecraft:apply_bonus", - "enchantment": "minecraft:fortune", - "formula": "minecraft:ore_drops" - }, - { - "function": "minecraft:explosion_decay" - } - ] - } - ] - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/broodstone_uranium_ore.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/broodstone_uranium_ore.json deleted file mode 100644 index adc15d84..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/broodstone_uranium_ore.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", - "name": "antarchy:broodstone_uranium_ore", - "conditions": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "components": { - "minecraft:enchantments": { - "levels": { - "minecraft:silk_touch": 1 - } - } - } - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:raw_uranium_scrap", - "functions": [ - { - "function": "minecraft:apply_bonus", - "enchantment": "minecraft:fortune", - "formula": "minecraft:ore_drops" - }, - { - "function": "minecraft:explosion_decay" - } - ] - } - ] - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/broodstone_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/broodstone_wall.json deleted file mode 100644 index b611acf6..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/broodstone_wall.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:broodstone_wall" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/brown_ant_nest.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/brown_ant_nest.json deleted file mode 100644 index 41e87a40..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/brown_ant_nest.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - }, - { - "condition": "minecraft:match_tool", - "predicate": { - "components": { - "minecraft:enchantments": { - "levels": { - "minecraft:silk_touch": 1 - } - } - } - } - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:brown_ant_nest" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/camellia.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/camellia.json deleted file mode 100644 index 897225ec..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/camellia.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "conditions": [ - { - "block": "antarchy:camellia", - "condition": "minecraft:block_state_property", - "properties": { - "half": "lower" - } - } - ], - "name": "antarchy:camellia" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/camellia" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/chiseled_broodstone.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/chiseled_broodstone.json deleted file mode 100644 index 2fe7e767..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/chiseled_broodstone.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:chiseled_broodstone" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/chiseled_dream_sandstone.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/chiseled_dream_sandstone.json deleted file mode 100644 index ae82513c..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/chiseled_dream_sandstone.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:chiseled_dream_sandstone" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/chiseled_sandstone" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/chiseled_nyxite.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/chiseled_nyxite.json deleted file mode 100644 index 47104d56..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/chiseled_nyxite.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:chiseled_nyxite" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/chiseled_nyxite" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/chiseled_shellstone.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/chiseled_shellstone.json deleted file mode 100644 index d3467ae6..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/chiseled_shellstone.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:chiseled_shellstone" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/chiseled_shellstone" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/chiseled_titanium.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/chiseled_titanium.json deleted file mode 100644 index e0aff048..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/chiseled_titanium.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:chiseled_titanium" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/chiseled_titanium" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/chiseled_uranium.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/chiseled_uranium.json deleted file mode 100644 index 55880026..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/chiseled_uranium.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:chiseled_uranium" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/chiseled_uranium" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/chitin_block.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/chitin_block.json deleted file mode 100644 index dee0af3b..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/chitin_block.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:chitin_block" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/chitin_block" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/chitin_spike.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/chitin_spike.json deleted file mode 100644 index ded89868..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/chitin_spike.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:chitin_spike" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/corn_crop.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/corn_crop.json deleted file mode 100644 index 54de69a3..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/corn_crop.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", - "name": "antarchy:corn", - "conditions": [ - { - "condition": "minecraft:block_state_property", - "block": "antarchy:corn_crop", - "properties": { - "half": "lower", - "age": "3" - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:corn_seeds", - "conditions": [ - { - "condition": "minecraft:block_state_property", - "block": "antarchy:corn_crop", - "properties": { - "half": "lower" - } - } - ] - } - ] - } - ] - }, - { - "rolls": 1.0, - "conditions": [ - { - "condition": "minecraft:block_state_property", - "block": "antarchy:corn_crop", - "properties": { - "half": "lower", - "age": "3" - } - }, - { - "condition": "minecraft:random_chance", - "chance": 0.5 - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:corn" - } - ] - }, - { - "rolls": 1.0, - "conditions": [ - { - "condition": "minecraft:block_state_property", - "block": "antarchy:corn_crop", - "properties": { - "half": "lower", - "age": "3" - } - }, - { - "condition": "minecraft:random_chance", - "chance": 0.5 - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:corn" - } - ] - } - ], - "random_sequence": "antarchy:blocks/corn_crop" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/cornea_stalk.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/cornea_stalk.json deleted file mode 100644 index cca0ef2d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/cornea_stalk.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [], - "random_sequence": "antarchy:blocks/cornea_stalk" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/cracked_shellstone_bricks.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/cracked_shellstone_bricks.json deleted file mode 100644 index caf67870..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/cracked_shellstone_bricks.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:cracked_shellstone_bricks" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/cracked_shellstone_bricks" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/crawling_blight_eggs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/crawling_blight_eggs.json deleted file mode 100644 index ee8223b7..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/crawling_blight_eggs.json +++ /dev/null @@ -1 +0,0 @@ -{"type":"minecraft:block","pools":[]} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/creeping_horror_egg.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/creeping_horror_egg.json deleted file mode 100644 index 2a3ec5b3..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/creeping_horror_egg.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:creeping_horror_egg", - "functions": [ - { - "function": "minecraft:explosion_decay" - } - ] - } - ] - } - ], - "random_sequence": "minecraft:blocks/turtle_egg" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/creeping_horror_eggs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/creeping_horror_eggs.json deleted file mode 100644 index ee8223b7..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/creeping_horror_eggs.json +++ /dev/null @@ -1 +0,0 @@ -{"type":"minecraft:block","pools":[]} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/creepvine.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/creepvine.json deleted file mode 100644 index e1abf289..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/creepvine.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "conditions": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "items": [ - "minecraft:shears" - ] - } - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:creepvine" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/creepvine" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/critter_cage_block.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/critter_cage_block.json deleted file mode 100644 index 88290b1f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/critter_cage_block.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:critter_cage" - } - ], - "functions": [ - { - "function": "minecraft:copy_components", - "source": "block_entity" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/cut_dream_sandstone.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/cut_dream_sandstone.json deleted file mode 100644 index 424f9e65..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/cut_dream_sandstone.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:cut_dream_sandstone" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/cut_sandstone" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/cut_dream_sandstone_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/cut_dream_sandstone_slab.json deleted file mode 100644 index 2a86b88d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/cut_dream_sandstone_slab.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:cut_dream_sandstone_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/cut_sandstone_slab" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/cut_titanium.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/cut_titanium.json deleted file mode 100644 index 66c0b972..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/cut_titanium.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:cut_titanium" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/cut_titanium" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/cut_titanium_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/cut_titanium_slab.json deleted file mode 100644 index 3c4ff908..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/cut_titanium_slab.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "antarchy:cut_titanium_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "antarchy:cut_titanium_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/cut_titanium_slab" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/cut_titanium_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/cut_titanium_stairs.json deleted file mode 100644 index aad46bb5..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/cut_titanium_stairs.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:cut_titanium_stairs" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/cut_titanium_stairs" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/cut_uranium.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/cut_uranium.json deleted file mode 100644 index 301f599d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/cut_uranium.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:cut_uranium" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/cut_uranium" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/cut_uranium_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/cut_uranium_slab.json deleted file mode 100644 index 3a637241..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/cut_uranium_slab.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "antarchy:cut_uranium_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "antarchy:cut_uranium_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/cut_uranium_slab" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/cut_uranium_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/cut_uranium_stairs.json deleted file mode 100644 index 085fba98..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/cut_uranium_stairs.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:cut_uranium_stairs" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/cut_uranium_stairs" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dead_star_coral.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dead_star_coral.json deleted file mode 100644 index d34f10d0..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dead_star_coral.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "conditions": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "components": { - "minecraft:enchantments": { - "levels": { - "minecraft:silk_touch": 1 - } - } - } - } - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:dead_star_coral" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dead_star_coral_block.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dead_star_coral_block.json deleted file mode 100644 index 06d2dfd0..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dead_star_coral_block.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:dead_star_coral_block" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dead_star_coral_fan.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dead_star_coral_fan.json deleted file mode 100644 index 43218c24..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dead_star_coral_fan.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "conditions": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "components": { - "minecraft:enchantments": { - "levels": { - "minecraft:silk_touch": 1 - } - } - } - } - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:dead_star_coral_fan" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dead_star_coral_wall_fan.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dead_star_coral_wall_fan.json deleted file mode 100644 index 43218c24..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dead_star_coral_wall_fan.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "conditions": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "components": { - "minecraft:enchantments": { - "levels": { - "minecraft:silk_touch": 1 - } - } - } - } - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:dead_star_coral_fan" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/deepslate_titanium_ore.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/deepslate_titanium_ore.json deleted file mode 100644 index a1bef158..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/deepslate_titanium_ore.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", - "name": "antarchy:deepslate_titanium_ore", - "conditions": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "components": { - "minecraft:enchantments": { - "levels": { - "minecraft:silk_touch": 1 - } - } - } - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:raw_titanium_scrap", - "functions": [ - { - "function": "minecraft:apply_bonus", - "enchantment": "minecraft:fortune", - "formula": "minecraft:ore_drops" - }, - { - "function": "minecraft:explosion_decay" - } - ] - } - ] - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/deepslate_uranium_ore.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/deepslate_uranium_ore.json deleted file mode 100644 index f2199bdf..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/deepslate_uranium_ore.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", - "name": "antarchy:deepslate_uranium_ore", - "conditions": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "components": { - "minecraft:enchantments": { - "levels": { - "minecraft:silk_touch": 1 - } - } - } - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:raw_uranium_scrap", - "functions": [ - { - "function": "minecraft:apply_bonus", - "enchantment": "minecraft:fortune", - "formula": "minecraft:ore_drops" - }, - { - "function": "minecraft:explosion_decay" - } - ] - } - ] - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dream_campfire.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dream_campfire.json deleted file mode 100644 index 8bf38e8a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dream_campfire.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - }, - { - "condition": "minecraft:match_tool", - "predicate": { - "components": { - "minecraft:enchantments": { - "levels": { - "minecraft:silk_touch": 1 - } - } - } - } - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:dream_campfire" - } - ] - }, - { - "rolls": 1, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:dream_sand" - } - ] - } - ], - "random_sequence": "antarchy:blocks/dream_campfire" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dream_ceiling_torch.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dream_ceiling_torch.json deleted file mode 100644 index 2d716ec1..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dream_ceiling_torch.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:dream_torch" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/dream_ceiling_torch" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dream_lantern.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dream_lantern.json deleted file mode 100644 index d8a0fc78..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dream_lantern.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:dream_lantern" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/dream_lantern" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dream_sand.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dream_sand.json deleted file mode 100644 index d30a08f9..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dream_sand.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:dream_sand" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/sand" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dream_sandstone.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dream_sandstone.json deleted file mode 100644 index d639dbcc..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dream_sandstone.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:dream_sandstone" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/sandstone" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dream_sandstone_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dream_sandstone_slab.json deleted file mode 100644 index b2b99f1b..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dream_sandstone_slab.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:dream_sandstone_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/sandstone_slab" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dream_sandstone_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dream_sandstone_stairs.json deleted file mode 100644 index 4c4f2870..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dream_sandstone_stairs.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:dream_sandstone_stairs" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/sandstone_stairs" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dream_sandstone_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dream_sandstone_wall.json deleted file mode 100644 index 62a87487..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dream_sandstone_wall.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:dream_sandstone_wall" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/sandstone_wall" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dream_torch.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dream_torch.json deleted file mode 100644 index be499a91..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dream_torch.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:dream_torch" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/dream_torch" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dream_wall_torch.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dream_wall_torch.json deleted file mode 100644 index ee1a3927..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/dream_wall_torch.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:dream_torch" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/dream_wall_torch" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/duct_tape.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/duct_tape.json deleted file mode 100644 index 36106b7c..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/duct_tape.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:duct_tape" - } - ], - "conditions": [ - { - "condition": "minecraft:block_state_property", - "block": "antarchy:duct_tape", - "properties": { - "uses": "4" - } - }, - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/duplicator_log.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/duplicator_log.json deleted file mode 100644 index 89403243..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/duplicator_log.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:duplicator_log" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/duplicator_sapling.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/duplicator_sapling.json deleted file mode 100644 index 1d011246..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/duplicator_sapling.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:duplicator_sapling" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/giant_lily_pad.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/giant_lily_pad.json deleted file mode 100644 index b6332265..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/giant_lily_pad.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:giant_lily_pad" - } - ] - }, - { - "rolls": 1.0, - "conditions": [ - { - "condition": "minecraft:block_state_property", - "block": "antarchy:giant_lily_pad", - "properties": { - "has_lotus": "true" - } - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:lotus" - } - ] - } - ], - "random_sequence": "antarchy:blocks/giant_lily_pad" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/glowcap_mushroom.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/glowcap_mushroom.json deleted file mode 100644 index 0fe88a8e..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/glowcap_mushroom.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:glowcap_mushroom" - } - ] - } - ], - "random_sequence": "antarchy:blocks/glowcap_mushroom" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/glowcap_mushroom_block.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/glowcap_mushroom_block.json deleted file mode 100644 index 43f987b9..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/glowcap_mushroom_block.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", - "name": "antarchy:glowcap_mushroom_block", - "conditions": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "predicates": { - "minecraft:enchantments": [ - { - "enchantments": "minecraft:silk_touch", - "levels": { - "min": 1 - } - } - ] - } - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:glowcap_mushroom", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 2.0 - } - }, - { - "function": "minecraft:apply_bonus", - "enchantment": "minecraft:fortune", - "formula": "minecraft:uniform_bonus_count", - "parameters": { - "bonusMultiplier": 2 - } - } - ] - } - ] - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/glowcap_mushroom_block" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/hanging_creeproots.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/hanging_creeproots.json deleted file mode 100644 index 3a6dfc7e..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/hanging_creeproots.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:hanging_creeproots" - } - ] - } - ], - "random_sequence": "antarchy:blocks/hanging_creeproots" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/hanging_peach.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/hanging_peach.json deleted file mode 100644 index 96e05f39..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/hanging_peach.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:peach" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/hanging_peach" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/hushweed.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/hushweed.json deleted file mode 100644 index 38f318d5..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/hushweed.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:hushweed" - } - ] - } - ], - "random_sequence": "antarchy:blocks/hushweed" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/infested_coarse_dirt.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/infested_coarse_dirt.json deleted file mode 100644 index 7b59ea19..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/infested_coarse_dirt.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/infested_rooted_dirt.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/infested_rooted_dirt.json deleted file mode 100644 index 7b59ea19..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/infested_rooted_dirt.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/jerry_egg.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/jerry_egg.json deleted file mode 100644 index 1c029f55..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/jerry_egg.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:jerry_egg" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/jerry_egg" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/jumpy_bug_egg.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/jumpy_bug_egg.json deleted file mode 100644 index 56e63d63..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/jumpy_bug_egg.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:jumpy_bug_egg" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/jumpy_bug_egg" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/large_blood_crystal_bud.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/large_blood_crystal_bud.json deleted file mode 100644 index 802a65ec..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/large_blood_crystal_bud.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "entries": [ - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "predicates": { - "minecraft:enchantments": [ - { - "enchantments": "minecraft:silk_touch", - "levels": { - "min": 1 - } - } - ] - } - } - } - ], - "name": "antarchy:large_blood_crystal_bud" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/large_amethyst_bud" -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/loam.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/loam.json deleted file mode 100644 index 4b098d8f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/loam.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:loam" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/loam" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/loam_brick_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/loam_brick_slab.json deleted file mode 100644 index f10a57ee..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/loam_brick_slab.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "antarchy:loam_brick_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "antarchy:loam_brick_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/loam_brick_slab" -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/loam_brick_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/loam_brick_stairs.json deleted file mode 100644 index a664f3c8..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/loam_brick_stairs.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:loam_brick_stairs" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/loam_brick_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/loam_brick_wall.json deleted file mode 100644 index dd93ccb4..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/loam_brick_wall.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:loam_brick_wall" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/lotus.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/lotus.json deleted file mode 100644 index 2c7f5cb8..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/lotus.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1.0, - "conditions": [ - { "condition": "minecraft:survives_explosion" } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:lotus" - } - ] - } - ], - "random_sequence": "antarchy:blocks/lotus" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/lumen_froglight.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/lumen_froglight.json deleted file mode 100644 index 79c8941d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/lumen_froglight.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:lumen_froglight" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/lurking_terror_egg.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/lurking_terror_egg.json deleted file mode 100644 index 1cfefbdd..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/lurking_terror_egg.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:lurking_terror_egg", - "functions": [ - { - "function": "minecraft:explosion_decay" - } - ] - } - ] - } - ], - "random_sequence": "minecraft:blocks/turtle_egg" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/lurking_terror_eggs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/lurking_terror_eggs.json deleted file mode 100644 index ee8223b7..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/lurking_terror_eggs.json +++ /dev/null @@ -1 +0,0 @@ -{"type":"minecraft:block","pools":[]} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/medium_blood_crystal_bud.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/medium_blood_crystal_bud.json deleted file mode 100644 index f8fb2734..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/medium_blood_crystal_bud.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "entries": [ - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "predicates": { - "minecraft:enchantments": [ - { - "enchantments": "minecraft:silk_touch", - "levels": { - "min": 1 - } - } - ] - } - } - } - ], - "name": "antarchy:medium_blood_crystal_bud" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/medium_amethyst_bud" -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/molting_vines.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/molting_vines.json deleted file mode 100644 index 35966857..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/molting_vines.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:molting_vines" - } - ] - } - ], - "random_sequence": "antarchy:blocks/molting_vines" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_broodstone_brick_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_broodstone_brick_slab.json deleted file mode 100644 index 992b3eb9..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_broodstone_brick_slab.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "antarchy:mossy_broodstone_brick_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "antarchy:mossy_broodstone_brick_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/mossy_broodstone_brick_slab" -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_broodstone_brick_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_broodstone_brick_stairs.json deleted file mode 100644 index 55deec61..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_broodstone_brick_stairs.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:mossy_broodstone_brick_stairs" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_broodstone_brick_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_broodstone_brick_wall.json deleted file mode 100644 index 67e5682b..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_broodstone_brick_wall.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:mossy_broodstone_brick_wall" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_myrmite_brick_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_myrmite_brick_slab.json deleted file mode 100644 index 2f78608f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_myrmite_brick_slab.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "antarchy:mossy_myrmite_brick_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "antarchy:mossy_myrmite_brick_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/mossy_myrmite_brick_slab" -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_myrmite_brick_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_myrmite_brick_stairs.json deleted file mode 100644 index c61d7253..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_myrmite_brick_stairs.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:mossy_myrmite_brick_stairs" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_myrmite_brick_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_myrmite_brick_wall.json deleted file mode 100644 index 6ec5a544..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_myrmite_brick_wall.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:mossy_myrmite_brick_wall" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_nyxite_brick_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_nyxite_brick_slab.json deleted file mode 100644 index 469e6532..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_nyxite_brick_slab.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "antarchy:mossy_nyxite_brick_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "antarchy:mossy_nyxite_brick_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/mossy_nyxite_brick_slab" -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_nyxite_brick_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_nyxite_brick_stairs.json deleted file mode 100644 index 84ba1f68..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_nyxite_brick_stairs.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:mossy_nyxite_brick_stairs" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_nyxite_brick_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_nyxite_brick_wall.json deleted file mode 100644 index e1cf26a0..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_nyxite_brick_wall.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:mossy_nyxite_brick_wall" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_ouranwood_log.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_ouranwood_log.json deleted file mode 100644 index d5d9a58a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_ouranwood_log.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:mossy_ouranwood_log" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/jungle_log" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_ouranwood_wood.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_ouranwood_wood.json deleted file mode 100644 index fb237892..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_ouranwood_wood.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:mossy_ouranwood_wood" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/jungle_wood" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_shellstone_brick_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_shellstone_brick_slab.json deleted file mode 100644 index 1ee537f0..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_shellstone_brick_slab.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "antarchy:mossy_shellstone_brick_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "antarchy:mossy_shellstone_brick_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/mossy_shellstone_brick_slab" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_shellstone_brick_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_shellstone_brick_stairs.json deleted file mode 100644 index 3c45a676..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_shellstone_brick_stairs.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:mossy_shellstone_brick_stairs" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/mossy_shellstone_brick_stairs" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_shellstone_brick_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_shellstone_brick_wall.json deleted file mode 100644 index 0c5bee10..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_shellstone_brick_wall.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:mossy_shellstone_brick_wall" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/mossy_shellstone_brick_wall" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_shellstone_bricks.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_shellstone_bricks.json deleted file mode 100644 index c71114a5..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_shellstone_bricks.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:mossy_shellstone_bricks" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/mossy_shellstone_bricks" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mucus.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mucus.json deleted file mode 100644 index e429ffd7..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mucus.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:mucus" - } - ], - "conditions": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "items": [ - "minecraft:shears" - ] - } - } - ] - } - ], - "random_sequence": "antarchy:blocks/mucus" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/myrmite.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/myrmite.json deleted file mode 100644 index fd82e19e..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/myrmite.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:myrmite" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/myrmite" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/myrmite_brick_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/myrmite_brick_slab.json deleted file mode 100644 index ba592e73..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/myrmite_brick_slab.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "antarchy:myrmite_brick_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "antarchy:myrmite_brick_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/myrmite_brick_slab" -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/myrmite_brick_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/myrmite_brick_stairs.json deleted file mode 100644 index 9c1870f8..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/myrmite_brick_stairs.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:myrmite_brick_stairs" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/myrmite_brick_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/myrmite_brick_wall.json deleted file mode 100644 index a56b916e..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/myrmite_brick_wall.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:myrmite_brick_wall" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/myrmite_coal_ore.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/myrmite_coal_ore.json deleted file mode 100644 index 6da2ca1d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/myrmite_coal_ore.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", - "name": "antarchy:myrmite_coal_ore", - "conditions": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "components": { - "minecraft:enchantments": { - "levels": { - "minecraft:silk_touch": 1 - } - } - } - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:coal", - "functions": [ - { - "function": "minecraft:apply_bonus", - "enchantment": "minecraft:fortune", - "formula": "minecraft:ore_drops" - }, - { - "function": "minecraft:explosion_decay" - } - ] - } - ] - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/myrmite_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/myrmite_slab.json deleted file mode 100644 index b99c86e9..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/myrmite_slab.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "antarchy:myrmite_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "antarchy:myrmite_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/myrmite_slab" -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/myrmite_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/myrmite_stairs.json deleted file mode 100644 index 96c9860c..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/myrmite_stairs.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:myrmite_stairs" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/myrmite_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/myrmite_wall.json deleted file mode 100644 index 6c04fa09..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/myrmite_wall.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:myrmite_wall" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_button.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_button.json deleted file mode 100644 index cc738c5c..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_button.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:nadir_button" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/jungle_button" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_door.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_door.json deleted file mode 100644 index d992154d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_door.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "conditions": [ - { - "block": "antarchy:nadir_door", - "condition": "minecraft:block_state_property", - "properties": { - "half": "lower" - } - } - ], - "name": "antarchy:nadir_door" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/jungle_door" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_fence.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_fence.json deleted file mode 100644 index 3388ad18..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_fence.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:nadir_fence" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/jungle_fence" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_fence_gate.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_fence_gate.json deleted file mode 100644 index aeb691fc..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_fence_gate.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:nadir_fence_gate" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/jungle_fence_gate" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_hanging_sign.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_hanging_sign.json deleted file mode 100644 index 7754bba0..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_hanging_sign.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:nadir_hanging_sign" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/nadir_hanging_sign" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_log.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_log.json deleted file mode 100644 index 0b91f557..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_log.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:nadir_log" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/jungle_log" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_planks.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_planks.json deleted file mode 100644 index 489c3e34..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_planks.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:nadir_planks" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/jungle_planks" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_pressure_plate.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_pressure_plate.json deleted file mode 100644 index c9f9152d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_pressure_plate.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:nadir_pressure_plate" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/jungle_pressure_plate" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_sapling.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_sapling.json deleted file mode 100644 index dd2b5842..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_sapling.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:nadir_sapling" - } - ] - } - ], - "random_sequence": "antarchy:blocks/nadir_sapling" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_sign.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_sign.json deleted file mode 100644 index 67baa54a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_sign.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:nadir_sign" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/nadir_sign" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_slab.json deleted file mode 100644 index c2c76ef4..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_slab.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "antarchy:nadir_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "antarchy:nadir_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/jungle_slab" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_stairs.json deleted file mode 100644 index e06e6af0..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_stairs.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:nadir_stairs" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/jungle_stairs" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_trapdoor.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_trapdoor.json deleted file mode 100644 index 6c570532..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_trapdoor.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:nadir_trapdoor" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/jungle_trapdoor" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_veil.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_veil.json deleted file mode 100644 index dfb8cce5..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_veil.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:nadir_veil" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/nadir_veil" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_wall_hanging_sign.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_wall_hanging_sign.json deleted file mode 100644 index 5a053f35..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_wall_hanging_sign.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:nadir_hanging_sign" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/nadir_wall_hanging_sign" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_wall_sign.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_wall_sign.json deleted file mode 100644 index ef0298e8..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_wall_sign.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:nadir_sign" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/nadir_wall_sign" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_wood.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_wood.json deleted file mode 100644 index cb9de74b..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_wood.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:nadir_wood" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/jungle_wood" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nyxite.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nyxite.json deleted file mode 100644 index 88d04855..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nyxite.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:nyxite" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nyxite_brick_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nyxite_brick_slab.json deleted file mode 100644 index dd76fd58..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nyxite_brick_slab.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "antarchy:nyxite_brick_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "antarchy:nyxite_brick_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/nyxite_brick_slab" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nyxite_brick_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nyxite_brick_stairs.json deleted file mode 100644 index e417be42..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nyxite_brick_stairs.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:nyxite_brick_stairs" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/nyxite_brick_stairs" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nyxite_brick_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nyxite_brick_wall.json deleted file mode 100644 index bfd778ec..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nyxite_brick_wall.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:nyxite_brick_wall" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/nyxite_brick_wall" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nyxite_bricks.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nyxite_bricks.json deleted file mode 100644 index 3737802a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nyxite_bricks.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:nyxite_bricks" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/nyxite_bricks" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nyxite_pillar.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nyxite_pillar.json deleted file mode 100644 index 1afc0284..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nyxite_pillar.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:nyxite_pillar" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/nyxite_pillar" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nyxite_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nyxite_slab.json deleted file mode 100644 index a65d7383..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nyxite_slab.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "antarchy:nyxite_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "antarchy:nyxite_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/nyxite_slab" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nyxite_spike.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nyxite_spike.json deleted file mode 100644 index 4d1b4380..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nyxite_spike.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:nyxite_spike" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nyxite_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nyxite_stairs.json deleted file mode 100644 index 87cece8a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nyxite_stairs.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:nyxite_stairs" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/nyxite_stairs" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nyxite_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nyxite_wall.json deleted file mode 100644 index b1bdfe1b..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nyxite_wall.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:nyxite_wall" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/nyxite_wall" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/orange_milkweed.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/orange_milkweed.json deleted file mode 100644 index f79b2304..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/orange_milkweed.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "conditions": [ - { - "block": "antarchy:orange_milkweed", - "condition": "minecraft:block_state_property", - "properties": { - "half": "lower" - } - } - ], - "name": "antarchy:orange_milkweed" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/orange_milkweed" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_acorn.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_acorn.json deleted file mode 100644 index e1eefbb8..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_acorn.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:ouranwood_acorn" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/ouranwood_acorn" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_button.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_button.json deleted file mode 100644 index 44d807f6..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_button.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:ouranwood_button" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/jungle_button" -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_door.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_door.json deleted file mode 100644 index f5e80def..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_door.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "conditions": [ - { - "block": "antarchy:ouranwood_door", - "condition": "minecraft:block_state_property", - "properties": { - "half": "lower" - } - } - ], - "name": "antarchy:ouranwood_door" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/jungle_door" -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_fence.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_fence.json deleted file mode 100644 index 7caf870a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_fence.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:ouranwood_fence" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/jungle_fence" -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_fence_gate.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_fence_gate.json deleted file mode 100644 index b5611fc4..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_fence_gate.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:ouranwood_fence_gate" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/jungle_fence_gate" -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_hanging_sign.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_hanging_sign.json deleted file mode 100644 index abe13499..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_hanging_sign.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:ouranwood_hanging_sign" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/ouranwood_hanging_sign" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_leaves.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_leaves.json deleted file mode 100644 index 2957533a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_leaves.json +++ /dev/null @@ -1,137 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:any_of", - "terms": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "items": "minecraft:shears" - } - }, - { - "condition": "minecraft:match_tool", - "predicate": { - "predicates": { - "minecraft:enchantments": [ - { - "enchantments": "minecraft:silk_touch", - "levels": { - "min": 1 - } - } - ] - } - } - } - ] - } - ], - "name": "antarchy:ouranwood_leaves" - }, - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:survives_explosion" - }, - { - "chances": [ - 0.025, - 0.027777778, - 0.03125, - 0.041666668, - 0.1 - ], - "condition": "minecraft:table_bonus", - "enchantment": "minecraft:fortune" - } - ], - "name": "antarchy:ouranwood_acorn" - } - ] - } - ], - "rolls": 1.0 - }, - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:inverted", - "term": { - "condition": "minecraft:any_of", - "terms": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "items": "minecraft:shears" - } - }, - { - "condition": "minecraft:match_tool", - "predicate": { - "predicates": { - "minecraft:enchantments": [ - { - "enchantments": "minecraft:silk_touch", - "levels": { - "min": 1 - } - } - ] - } - } - } - ] - } - } - ], - "entries": [ - { - "type": "minecraft:item", - "conditions": [ - { - "chances": [ - 0.02, - 0.022222223, - 0.025, - 0.033333335, - 0.1 - ], - "condition": "minecraft:table_bonus", - "enchantment": "minecraft:fortune" - } - ], - "functions": [ - { - "add": false, - "count": { - "type": "minecraft:uniform", - "max": 2.0, - "min": 1.0 - }, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "minecraft:stick" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/ouranwood_leaves" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_log.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_log.json deleted file mode 100644 index d4293289..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_log.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:ouranwood_log" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/jungle_log" -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_planks.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_planks.json deleted file mode 100644 index a06fd256..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_planks.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:ouranwood_planks" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/jungle_planks" -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_pressure_plate.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_pressure_plate.json deleted file mode 100644 index 572da244..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_pressure_plate.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:ouranwood_pressure_plate" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/jungle_pressure_plate" -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_sign.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_sign.json deleted file mode 100644 index d74b95f4..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_sign.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:ouranwood_sign" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/ouranwood_sign" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_slab.json deleted file mode 100644 index 2607b412..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_slab.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "antarchy:ouranwood_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "antarchy:ouranwood_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/jungle_slab" -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_stairs.json deleted file mode 100644 index 5000d99f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_stairs.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:ouranwood_stairs" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/jungle_stairs" -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_trapdoor.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_trapdoor.json deleted file mode 100644 index b117b21c..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_trapdoor.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:ouranwood_trapdoor" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/jungle_trapdoor" -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_wall_hanging_sign.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_wall_hanging_sign.json deleted file mode 100644 index a082998d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_wall_hanging_sign.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:ouranwood_hanging_sign" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/ouranwood_wall_hanging_sign" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_wall_sign.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_wall_sign.json deleted file mode 100644 index 6dafb630..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_wall_sign.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:ouranwood_sign" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/ouranwood_wall_sign" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_wood.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_wood.json deleted file mode 100644 index 1a7dbd98..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_wood.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:ouranwood_wood" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/jungle_wood" -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/pale_nyxite.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/pale_nyxite.json deleted file mode 100644 index 7f93d556..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/pale_nyxite.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:pale_nyxite" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_button.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_button.json deleted file mode 100644 index 74410c74..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_button.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:peach_button" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/jungle_button" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_door.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_door.json deleted file mode 100644 index c8b63c95..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_door.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "conditions": [ - { - "block": "antarchy:peach_door", - "condition": "minecraft:block_state_property", - "properties": { - "half": "lower" - } - } - ], - "name": "antarchy:peach_door" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/jungle_door" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_fence.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_fence.json deleted file mode 100644 index 31c7edd6..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_fence.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:peach_fence" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/jungle_fence" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_fence_gate.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_fence_gate.json deleted file mode 100644 index fd509861..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_fence_gate.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:peach_fence_gate" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/jungle_fence_gate" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_hanging_sign.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_hanging_sign.json deleted file mode 100644 index a5d88061..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_hanging_sign.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:peach_hanging_sign" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/peach_hanging_sign" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_leaves.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_leaves.json deleted file mode 100644 index f1a2b349..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_leaves.json +++ /dev/null @@ -1,138 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:any_of", - "terms": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "items": "minecraft:shears" - } - }, - { - "condition": "minecraft:match_tool", - "predicate": { - "predicates": { - "minecraft:enchantments": [ - { - "enchantments": "minecraft:silk_touch", - "levels": { - "min": 1 - } - } - ] - } - } - } - ] - } - ], - "name": "antarchy:peach_leaves" - }, - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:survives_explosion" - }, - { - "chances": [ - 0.025, - 0.027777778, - 0.03125, - 0.041666668, - 0.1 - ], - "condition": "minecraft:table_bonus", - "enchantment": "minecraft:fortune" - } - ], - "name": "antarchy:peach_sapling" - } - ] - } - ], - "rolls": 1.0 - }, - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:inverted", - "term": { - "condition": "minecraft:any_of", - "terms": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "items": "minecraft:shears" - } - }, - { - "condition": "minecraft:match_tool", - "predicate": { - "predicates": { - "minecraft:enchantments": [ - { - "enchantments": "minecraft:silk_touch", - "levels": { - "min": 1 - } - } - ] - } - } - } - ] - } - } - ], - "entries": [ - { - "type": "minecraft:item", - "conditions": [ - { - "chances": [ - 0.02, - 0.022222223, - 0.025, - 0.033333335, - 0.1 - ], - "condition": "minecraft:table_bonus", - "enchantment": "minecraft:fortune" - } - ], - "functions": [ - { - "add": false, - "count": { - "type": "minecraft:uniform", - "max": 2.0, - "min": 1.0 - }, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "minecraft:stick" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/peach_leaves" -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_log.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_log.json deleted file mode 100644 index 35a91254..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_log.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:peach_log" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/jungle_log" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_planks.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_planks.json deleted file mode 100644 index 1bd313c7..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_planks.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:peach_planks" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/jungle_planks" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_pressure_plate.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_pressure_plate.json deleted file mode 100644 index 7f9121ef..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_pressure_plate.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:peach_pressure_plate" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/jungle_pressure_plate" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_sapling.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_sapling.json deleted file mode 100644 index 7d35a420..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_sapling.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:peach_sapling" - } - ] - } - ], - "random_sequence": "antarchy:blocks/peach_sapling" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_sign.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_sign.json deleted file mode 100644 index b71fbb4b..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_sign.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:peach_sign" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/peach_sign" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_slab.json deleted file mode 100644 index 53e759d0..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_slab.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "antarchy:peach_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "antarchy:peach_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/jungle_slab" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_stairs.json deleted file mode 100644 index 3f81f57e..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_stairs.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:peach_stairs" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/jungle_stairs" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_trapdoor.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_trapdoor.json deleted file mode 100644 index ee2c8580..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_trapdoor.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:peach_trapdoor" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/jungle_trapdoor" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_wall_hanging_sign.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_wall_hanging_sign.json deleted file mode 100644 index f9804bed..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_wall_hanging_sign.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:peach_hanging_sign" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/peach_wall_hanging_sign" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_wall_sign.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_wall_sign.json deleted file mode 100644 index 7ddd0f95..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_wall_sign.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:peach_sign" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/peach_wall_sign" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_wood.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_wood.json deleted file mode 100644 index f1787698..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/peach_wood.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:peach_wood" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/jungle_wood" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/pink_milkweed.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/pink_milkweed.json deleted file mode 100644 index 99a772e5..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/pink_milkweed.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "conditions": [ - { - "block": "antarchy:pink_milkweed", - "condition": "minecraft:block_state_property", - "properties": { - "half": "lower" - } - } - ], - "name": "antarchy:pink_milkweed" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/pink_milkweed" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_antimetal.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_antimetal.json deleted file mode 100644 index 73100b37..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_antimetal.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:polished_antimetal" - } - ] - } - ], - "random_sequence": "antarchy:blocks/polished_antimetal" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_antimetal_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_antimetal_slab.json deleted file mode 100644 index 624081d1..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_antimetal_slab.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:block_state_property", - "block": "antarchy:polished_antimetal_slab", - "properties": { - "type": "double" - } - } - ], - "functions": [ - { - "function": "minecraft:set_count", - "count": 2 - } - ], - "name": "antarchy:polished_antimetal_slab" - }, - { - "type": "minecraft:item", - "name": "antarchy:polished_antimetal_slab" - } - ] - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/polished_antimetal_slab" -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_antimetal_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_antimetal_stairs.json deleted file mode 100644 index e96674d5..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_antimetal_stairs.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:polished_antimetal_stairs" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/polished_antimetal_stairs" -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_broodstone.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_broodstone.json deleted file mode 100644 index 6820fe85..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_broodstone.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:polished_broodstone" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_broodstone_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_broodstone_slab.json deleted file mode 100644 index 10ca4083..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_broodstone_slab.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "antarchy:polished_broodstone_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "antarchy:polished_broodstone_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/polished_broodstone_slab" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_broodstone_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_broodstone_stairs.json deleted file mode 100644 index dd45fc50..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_broodstone_stairs.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:polished_broodstone_stairs" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_broodstone_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_broodstone_wall.json deleted file mode 100644 index 28fae763..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_broodstone_wall.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:polished_broodstone_wall" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_myrmite_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_myrmite_slab.json deleted file mode 100644 index 5f5357f1..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_myrmite_slab.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "antarchy:polished_myrmite_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "antarchy:polished_myrmite_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/polished_myrmite_slab" -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_myrmite_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_myrmite_stairs.json deleted file mode 100644 index 4425c913..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_myrmite_stairs.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:polished_myrmite_stairs" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_myrmite_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_myrmite_wall.json deleted file mode 100644 index 4954c852..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_myrmite_wall.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:polished_myrmite_wall" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_nyxite.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_nyxite.json deleted file mode 100644 index 9bdf4248..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_nyxite.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:polished_nyxite" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/polished_nyxite" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_nyxite_button.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_nyxite_button.json deleted file mode 100644 index 4568d117..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_nyxite_button.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:polished_nyxite_button" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/stone_button" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_nyxite_pressure_plate.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_nyxite_pressure_plate.json deleted file mode 100644 index 9590f8d2..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_nyxite_pressure_plate.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:polished_nyxite_pressure_plate" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/stone_pressure_plate" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_nyxite_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_nyxite_slab.json deleted file mode 100644 index fd3b5613..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_nyxite_slab.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "antarchy:polished_nyxite_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "antarchy:polished_nyxite_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/polished_nyxite_slab" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_nyxite_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_nyxite_stairs.json deleted file mode 100644 index db1519d2..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_nyxite_stairs.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:polished_nyxite_stairs" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/polished_nyxite_stairs" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_nyxite_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_nyxite_wall.json deleted file mode 100644 index 852fd8f6..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_nyxite_wall.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:polished_nyxite_wall" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/polished_nyxite_wall" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_shellstone.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_shellstone.json deleted file mode 100644 index f2f69474..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_shellstone.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:polished_shellstone" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/polished_shellstone" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_shellstone_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_shellstone_slab.json deleted file mode 100644 index 9f14b34e..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_shellstone_slab.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "antarchy:polished_shellstone_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "antarchy:polished_shellstone_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/polished_shellstone_slab" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_shellstone_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_shellstone_stairs.json deleted file mode 100644 index b1834d14..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_shellstone_stairs.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:polished_shellstone_stairs" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/polished_shellstone_stairs" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_shellstone_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_shellstone_wall.json deleted file mode 100644 index dc9c6f88..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_shellstone_wall.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:polished_shellstone_wall" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/polished_shellstone_wall" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/potent_nyxite.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/potent_nyxite.json deleted file mode 100644 index a08a448b..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/potent_nyxite.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:potent_nyxite" - } - ], - "rolls": 1.0 - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/potted_glowcap_mushroom.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/potted_glowcap_mushroom.json deleted file mode 100644 index c7a9f5e6..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/potted_glowcap_mushroom.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:flower_pot" - } - ] - }, - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:glowcap_mushroom" - } - ] - } - ], - "random_sequence": "antarchy:blocks/potted_glowcap_mushroom" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/potted_lotus.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/potted_lotus.json deleted file mode 100644 index ad1f944c..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/potted_lotus.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:flower_pot" - } - ] - }, - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:lotus" - } - ] - } - ], - "random_sequence": "antarchy:blocks/potted_lotus" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/potted_nadir_sapling.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/potted_nadir_sapling.json deleted file mode 100644 index 004fffd6..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/potted_nadir_sapling.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:flower_pot" - } - ] - }, - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:nadir_sapling" - } - ] - } - ], - "random_sequence": "antarchy:blocks/potted_nadir_sapling" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/potted_ouranwood_acorn.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/potted_ouranwood_acorn.json deleted file mode 100644 index 061cb2d6..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/potted_ouranwood_acorn.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:flower_pot" - } - ] - }, - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:ouranwood_acorn" - } - ] - } - ], - "random_sequence": "antarchy:blocks/potted_ouranwood_acorn" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/potted_peach_sapling.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/potted_peach_sapling.json deleted file mode 100644 index c22a2844..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/potted_peach_sapling.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:flower_pot" - } - ] - }, - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:peach_sapling" - } - ] - } - ], - "random_sequence": "antarchy:blocks/potted_peach_sapling" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/potted_spider_lily.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/potted_spider_lily.json deleted file mode 100644 index 079da348..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/potted_spider_lily.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:flower_pot" - } - ] - }, - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:spider_lily" - } - ] - } - ], - "random_sequence": "antarchy:blocks/potted_spider_lily" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/prince_egg.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/prince_egg.json deleted file mode 100644 index 15debe54..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/prince_egg.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ { "type": "minecraft:item", "name": "antarchy:prince_egg" } ], - "conditions": [ { "condition": "minecraft:survives_explosion" } ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/princess_egg.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/princess_egg.json deleted file mode 100644 index cfae1e9f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/princess_egg.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ { "type": "minecraft:item", "name": "antarchy:princess_egg" } ], - "conditions": [ { "condition": "minecraft:survives_explosion" } ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/rainbow_ant_nest.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/rainbow_ant_nest.json deleted file mode 100644 index bd2bcf15..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/rainbow_ant_nest.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - }, - { - "condition": "minecraft:match_tool", - "predicate": { - "components": { - "minecraft:enchantments": { - "levels": { - "minecraft:silk_touch": 1 - } - } - } - } - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:rainbow_ant_nest" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/raw_titanium_block.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/raw_titanium_block.json deleted file mode 100644 index 3db55d2e..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/raw_titanium_block.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:raw_titanium_block" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/raw_uranium_block.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/raw_uranium_block.json deleted file mode 100644 index 15692e0a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/raw_uranium_block.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:raw_uranium_block" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/red_ant_nest.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/red_ant_nest.json deleted file mode 100644 index 1db5c81a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/red_ant_nest.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - }, - { - "condition": "minecraft:match_tool", - "predicate": { - "components": { - "minecraft:enchantments": { - "levels": { - "minecraft:silk_touch": 1 - } - } - } - } - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:red_ant_nest" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/roseate_froglight.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/roseate_froglight.json deleted file mode 100644 index 7665156e..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/roseate_froglight.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:roseate_froglight" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/seashell.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/seashell.json deleted file mode 100644 index da9adf20..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/seashell.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:seashell" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/shellstone.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/shellstone.json deleted file mode 100644 index d3323d86..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/shellstone.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:shellstone" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/shellstone" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/shellstone_brick_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/shellstone_brick_slab.json deleted file mode 100644 index d18aacd5..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/shellstone_brick_slab.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "antarchy:shellstone_brick_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "antarchy:shellstone_brick_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/shellstone_brick_slab" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/shellstone_brick_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/shellstone_brick_stairs.json deleted file mode 100644 index b5599f00..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/shellstone_brick_stairs.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:shellstone_brick_stairs" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/shellstone_brick_stairs" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/shellstone_brick_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/shellstone_brick_wall.json deleted file mode 100644 index fe77132f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/shellstone_brick_wall.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:shellstone_brick_wall" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/shellstone_brick_wall" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/shellstone_bricks.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/shellstone_bricks.json deleted file mode 100644 index d726b845..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/shellstone_bricks.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:shellstone_bricks" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/shellstone_bricks" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/shellstone_pillar.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/shellstone_pillar.json deleted file mode 100644 index 0197c093..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/shellstone_pillar.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:shellstone_pillar" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/shellstone_pillar" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/shellstone_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/shellstone_slab.json deleted file mode 100644 index 9b8e83e9..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/shellstone_slab.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "antarchy:shellstone_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "antarchy:shellstone_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/shellstone_slab" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/shellstone_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/shellstone_stairs.json deleted file mode 100644 index 5afbfa5a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/shellstone_stairs.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:shellstone_stairs" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/shellstone_stairs" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/shellstone_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/shellstone_wall.json deleted file mode 100644 index 30fda0e1..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/shellstone_wall.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:shellstone_wall" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/shellstone_wall" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/skulking_fright_eggs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/skulking_fright_eggs.json deleted file mode 100644 index ee8223b7..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/skulking_fright_eggs.json +++ /dev/null @@ -1 +0,0 @@ -{"type":"minecraft:block","pools":[]} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/small_blood_crystal_bud.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/small_blood_crystal_bud.json deleted file mode 100644 index c3210026..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/small_blood_crystal_bud.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "entries": [ - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "predicates": { - "minecraft:enchantments": [ - { - "enchantments": "minecraft:silk_touch", - "levels": { - "min": 1 - } - } - ] - } - } - } - ], - "name": "antarchy:small_blood_crystal_bud" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/small_amethyst_bud" -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/smooth_dream_sandstone.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/smooth_dream_sandstone.json deleted file mode 100644 index 910fb764..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/smooth_dream_sandstone.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:smooth_dream_sandstone" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/smooth_sandstone" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/smooth_dream_sandstone_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/smooth_dream_sandstone_slab.json deleted file mode 100644 index d2915704..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/smooth_dream_sandstone_slab.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:smooth_dream_sandstone_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/smooth_sandstone_slab" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/smooth_dream_sandstone_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/smooth_dream_sandstone_stairs.json deleted file mode 100644 index d0898ddb..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/smooth_dream_sandstone_stairs.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:smooth_dream_sandstone_stairs" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/smooth_sandstone_stairs" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/spider_lily.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/spider_lily.json deleted file mode 100644 index cf82c4af..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/spider_lily.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:spider_lily" - } - ] - } - ], - "random_sequence": "antarchy:blocks/spider_lily" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/spit_bug_egg.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/spit_bug_egg.json deleted file mode 100644 index 623ae141..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/spit_bug_egg.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:spit_bug_egg" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/spit_bug_egg" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/star_coral.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/star_coral.json deleted file mode 100644 index 2b132dbf..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/star_coral.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "components": { - "minecraft:enchantments": { - "levels": { - "minecraft:silk_touch": 1 - } - } - } - } - } - ], - "name": "antarchy:star_coral" - }, - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "name": "antarchy:star_coral" - } - ] - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/star_coral_block.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/star_coral_block.json deleted file mode 100644 index f1b69b32..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/star_coral_block.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "components": { - "minecraft:enchantments": { - "levels": { - "minecraft:silk_touch": 1 - } - } - } - } - } - ], - "name": "antarchy:star_coral_block" - }, - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "name": "antarchy:star_coral_block" - } - ] - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/star_coral_fan.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/star_coral_fan.json deleted file mode 100644 index 0794b0d4..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/star_coral_fan.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "components": { - "minecraft:enchantments": { - "levels": { - "minecraft:silk_touch": 1 - } - } - } - } - } - ], - "name": "antarchy:star_coral_fan" - }, - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "name": "antarchy:star_coral_fan" - } - ] - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/star_coral_wall_fan.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/star_coral_wall_fan.json deleted file mode 100644 index 0794b0d4..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/star_coral_wall_fan.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "components": { - "minecraft:enchantments": { - "levels": { - "minecraft:silk_touch": 1 - } - } - } - } - } - ], - "name": "antarchy:star_coral_fan" - }, - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "name": "antarchy:star_coral_fan" - } - ] - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/stripped_nadir_log.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/stripped_nadir_log.json deleted file mode 100644 index 8c1d3eca..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/stripped_nadir_log.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:stripped_nadir_log" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/stripped_jungle_log" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/stripped_nadir_wood.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/stripped_nadir_wood.json deleted file mode 100644 index 72481f44..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/stripped_nadir_wood.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:stripped_nadir_wood" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/stripped_jungle_wood" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/stripped_ouranwood_log.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/stripped_ouranwood_log.json deleted file mode 100644 index 50d3061e..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/stripped_ouranwood_log.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:stripped_ouranwood_log" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/stripped_jungle_log" -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/stripped_ouranwood_wood.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/stripped_ouranwood_wood.json deleted file mode 100644 index 6e4679ad..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/stripped_ouranwood_wood.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:stripped_ouranwood_wood" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/stripped_jungle_wood" -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/stripped_peach_log.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/stripped_peach_log.json deleted file mode 100644 index 514158bb..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/stripped_peach_log.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:stripped_peach_log" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/stripped_jungle_log" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/stripped_peach_wood.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/stripped_peach_wood.json deleted file mode 100644 index 91106444..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/stripped_peach_wood.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:stripped_peach_wood" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/stripped_jungle_wood" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/termite_nest.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/termite_nest.json deleted file mode 100644 index c222199e..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/termite_nest.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - }, - { - "condition": "minecraft:match_tool", - "predicate": { - "components": { - "minecraft:enchantments": { - "levels": { - "minecraft:silk_touch": 1 - } - } - } - } - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:termite_nest" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/titanium_bars.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/titanium_bars.json deleted file mode 100644 index ca3141d4..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/titanium_bars.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:titanium_bars" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/titanium_bars" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/titanium_block.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/titanium_block.json deleted file mode 100644 index d75bfea9..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/titanium_block.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:titanium_block" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/titanium_bulb.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/titanium_bulb.json deleted file mode 100644 index 463e1b1d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/titanium_bulb.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:titanium_bulb" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/titanium_bulb" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/titanium_door.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/titanium_door.json deleted file mode 100644 index 0d382fda..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/titanium_door.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "conditions": [ - { - "block": "antarchy:titanium_door", - "condition": "minecraft:block_state_property", - "properties": { - "half": "lower" - } - } - ], - "name": "antarchy:titanium_door" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/iron_door" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/titanium_ore.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/titanium_ore.json deleted file mode 100644 index f2298a83..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/titanium_ore.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", - "name": "antarchy:titanium_ore", - "conditions": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "components": { - "minecraft:enchantments": { - "levels": { - "minecraft:silk_touch": 1 - } - } - } - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:raw_titanium_scrap", - "functions": [ - { - "function": "minecraft:apply_bonus", - "enchantment": "minecraft:fortune", - "formula": "minecraft:ore_drops" - }, - { - "function": "minecraft:explosion_decay" - } - ] - } - ] - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/titanium_trapdoor.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/titanium_trapdoor.json deleted file mode 100644 index f8099042..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/titanium_trapdoor.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:titanium_trapdoor" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "minecraft:blocks/iron_trapdoor" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/triffid_goo_block.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/triffid_goo_block.json deleted file mode 100644 index b09e8e76..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/triffid_goo_block.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:triffid_goo_block" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/triffid_goo_block" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/umbral_moss_block.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/umbral_moss_block.json deleted file mode 100644 index 050f79fd..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/umbral_moss_block.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:umbral_moss_block" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/moss_block" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/umbral_moss_carpet.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/umbral_moss_carpet.json deleted file mode 100644 index 1ca07a11..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/umbral_moss_carpet.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "entries": [ - { - "type": "minecraft:item", - "conditions": [ - { - "block": "antarchy:umbral_moss_carpet", - "condition": "minecraft:block_state_property", - "properties": { - "bottom": "true" - } - } - ], - "functions": [ - { - "function": "minecraft:explosion_decay" - } - ], - "name": "antarchy:umbral_moss_carpet" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/moss_carpet" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/upper.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/upper.json deleted file mode 100644 index b5c904fa..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/upper.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:upper" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/upper" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/uranium_bars.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/uranium_bars.json deleted file mode 100644 index e5a40a93..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/uranium_bars.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:uranium_bars" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/uranium_bars" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/uranium_block.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/uranium_block.json deleted file mode 100644 index cb0f9784..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/uranium_block.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:uranium_block" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/uranium_bulb.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/uranium_bulb.json deleted file mode 100644 index fa7bc0ff..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/uranium_bulb.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:uranium_bulb" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/uranium_bulb" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/uranium_door.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/uranium_door.json deleted file mode 100644 index 4485195d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/uranium_door.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "conditions": [ - { - "block": "antarchy:uranium_door", - "condition": "minecraft:block_state_property", - "properties": { - "half": "lower" - } - } - ], - "name": "antarchy:uranium_door" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:blocks/iron_door" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/uranium_ore.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/uranium_ore.json deleted file mode 100644 index 41202d6b..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/uranium_ore.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", - "name": "antarchy:uranium_ore", - "conditions": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "components": { - "minecraft:enchantments": { - "levels": { - "minecraft:silk_touch": 1 - } - } - } - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:raw_uranium_scrap", - "functions": [ - { - "function": "minecraft:apply_bonus", - "enchantment": "minecraft:fortune", - "formula": "minecraft:ore_drops" - }, - { - "function": "minecraft:explosion_decay" - } - ] - } - ] - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/uranium_trapdoor.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/uranium_trapdoor.json deleted file mode 100644 index 1ad2348a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/uranium_trapdoor.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:uranium_trapdoor" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "minecraft:blocks/iron_trapdoor" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/wasp_nest.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/wasp_nest.json deleted file mode 100644 index cb9d67c8..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/wasp_nest.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - }, - { - "condition": "minecraft:match_tool", - "predicate": { - "components": { - "minecraft:enchantments": { - "levels": { - "minecraft:silk_touch": 1 - } - } - } - } - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:wasp_nest" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/wild_corn.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/wild_corn.json deleted file mode 100644 index 46f29bdc..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/wild_corn.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1.0, - "conditions": [ - { - "condition": "minecraft:block_state_property", - "block": "antarchy:wild_corn", - "properties": { - "half": "lower" - } - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:corn" - } - ] - } - ], - "random_sequence": "antarchy:blocks/wild_corn" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/basilisk_lair/generic.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/basilisk_lair/generic.json deleted file mode 100644 index 93e08b3c..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/basilisk_lair/generic.json +++ /dev/null @@ -1,200 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [ - { - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:ouranwood_planks", - "weight": 16, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 6.0, - "max": 18.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:ouranwood_acorn", - "weight": 10, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 4.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:bluestone", - "weight": 14, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 3.0, - "max": 10.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:redstone", - "weight": 14, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 12.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:arrow", - "weight": 18, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 10.0, - "max": 28.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:torch", - "weight": 10, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 12.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:iron_pickaxe", - "weight": 6 - }, - { - "type": "minecraft:item", - "name": "minecraft:iron_axe", - "weight": 6 - }, - { - "type": "minecraft:item", - "name": "minecraft:bow", - "weight": 6, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 6.0, - "max": 18.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:moss_block", - "weight": 12, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 8.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:vine", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 8.0 - } - } - ] - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 7.0 - } - }, - { - "entries": [ - { - "type": "minecraft:empty", - "weight": 74 - }, - { - "type": "minecraft:item", - "name": "antarchy:uranium_nugget", - "weight": 5, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:titanium_nugget", - "weight": 5, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - } - ] - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:chests/basilisk_lair/generic" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/basilisk_lair/treasure.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/basilisk_lair/treasure.json deleted file mode 100644 index 3c2530ea..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/basilisk_lair/treasure.json +++ /dev/null @@ -1,198 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [ - { - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:basilisk_fang", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:basilisk_dagger", - "weight": 3, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 12.0, - "max": 25.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:diamond", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 3.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:emerald", - "weight": 12, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 5.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:bluestone", - "weight": 14, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 6.0, - "max": 16.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:redstone", - "weight": 12, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 6.0, - "max": 18.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:crossbow", - "weight": 8, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 10.0, - "max": 24.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:diamond_pickaxe", - "weight": 5, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 12.0, - "max": 24.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:golden_apple", - "weight": 8 - }, - { - "type": "minecraft:item", - "name": "minecraft:book", - "weight": 8, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 15.0, - "max": 30.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 5.0, - "max": 8.0 - } - }, - { - "entries": [ - { - "type": "minecraft:empty", - "weight": 66 - }, - { - "type": "minecraft:item", - "name": "antarchy:uranium_nugget", - "weight": 7, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 3.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:titanium_nugget", - "weight": 7, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 3.0 - } - } - ] - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:chests/basilisk_lair/treasure" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/bedroom.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/bedroom.json deleted file mode 100644 index 6011c694..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/bedroom.json +++ /dev/null @@ -1,135 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [ - { - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:white_bed", - "weight": 8 - }, - { - "type": "minecraft:item", - "name": "minecraft:red_bed", - "weight": 8 - }, - { - "type": "minecraft:item", - "name": "minecraft:blue_bed", - "weight": 8 - }, - { - "type": "minecraft:item", - "name": "minecraft:book", - "weight": 12 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 8.0, - "min": 2.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:paper", - "weight": 14 - }, - { - "type": "minecraft:item", - "name": "minecraft:clock", - "weight": 6 - }, - { - "type": "minecraft:item", - "name": "minecraft:compass", - "weight": 6 - }, - { - "type": "minecraft:item", - "name": "minecraft:candle", - "weight": 12 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 4.0, - "min": 1.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:string", - "weight": 6 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 6.0, - "min": 2.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:feather", - "weight": 8 - }, - { - "type": "minecraft:item", - "name": "antarchy:mud_pie", - "weight": 2 - }, - { - "type": "minecraft:item", - "name": "minecraft:golden_apple", - "weight": 3 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "antarchy:uranium_nugget", - "weight": 2 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "antarchy:titanium_nugget", - "weight": 2 - } - ], - "rolls": { - "type": "minecraft:uniform", - "max": 7.0, - "min": 3.0 - } - } - ], - "random_sequence": "antarchy:chests/fallen_kingdom/bedroom" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/generic.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/generic.json deleted file mode 100644 index 1946e603..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/generic.json +++ /dev/null @@ -1,205 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [ - { - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 16.0, - "min": 4.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:oak_slab", - "weight": 14 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 16.0, - "min": 6.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:cobblestone", - "weight": 16 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 8.0, - "min": 1.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:bread", - "weight": 8 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 12.0, - "min": 4.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:torch", - "weight": 14 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 12.0, - "min": 4.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:stick", - "weight": 16 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 8.0, - "min": 2.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:string", - "weight": 12 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 8.0, - "min": 2.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:paper", - "weight": 10 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 6.0, - "min": 2.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:coal", - "weight": 10 - }, - { - "type": "minecraft:item", - "name": "antarchy:mud_pie", - "weight": 6 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 3.0, - "min": 1.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "antarchy:duct_tape", - "weight": 4 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 4.0, - "min": 1.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:candle", - "weight": 8 - }, - { - "type": "minecraft:item", - "name": "minecraft:golden_apple", - "weight": 6 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "antarchy:uranium_nugget", - "weight": 4 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "antarchy:titanium_nugget", - "weight": 4 - } - ], - "rolls": { - "type": "minecraft:uniform", - "max": 8.0, - "min": 4.0 - } - } - ], - "random_sequence": "antarchy:chests/fallen_kingdom/generic" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/kitchen.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/kitchen.json deleted file mode 100644 index 6ba7c98a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/kitchen.json +++ /dev/null @@ -1,235 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [ - { - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 6.0, - "min": 2.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:bread", - "weight": 20 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 7.0, - "min": 2.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:carrot", - "weight": 14 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 7.0, - "min": 2.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:potato", - "weight": 14 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 4.0, - "min": 1.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:cooked_beef", - "weight": 10 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 4.0, - "min": 1.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:cooked_porkchop", - "weight": 10 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 3.0, - "min": 1.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:bowl", - "weight": 12 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 4.0, - "min": 1.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:apple", - "weight": 12 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 6.0, - "min": 2.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:cookie", - "weight": 10 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 6.0, - "min": 2.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:beetroot", - "weight": 8 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 2.0, - "min": 1.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:pumpkin_pie", - "weight": 6 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 5.0, - "min": 2.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:sugar", - "weight": 6 - }, - { - "type": "minecraft:item", - "name": "antarchy:mud_pie", - "weight": 4 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 3.0, - "min": 1.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "antarchy:duct_tape", - "weight": 4 - }, - { - "type": "minecraft:item", - "name": "minecraft:golden_apple", - "weight": 4 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "antarchy:uranium_nugget", - "weight": 3 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "antarchy:titanium_nugget", - "weight": 3 - } - ], - "rolls": { - "type": "minecraft:uniform", - "max": 7.0, - "min": 3.0 - } - } - ], - "random_sequence": "antarchy:chests/fallen_kingdom/kitchen" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/storage.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/storage.json deleted file mode 100644 index 98dfa9a2..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/storage.json +++ /dev/null @@ -1,220 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [ - { - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 16.0, - "min": 4.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:cobblestone", - "weight": 20 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 12.0, - "min": 4.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:oak_planks", - "weight": 18 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 12.0, - "min": 4.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:spruce_planks", - "weight": 18 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 8.0, - "min": 2.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:stick", - "weight": 18 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 8.0, - "min": 2.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:torch", - "weight": 18 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 8.0, - "min": 2.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:string", - "weight": 12 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 8.0, - "min": 2.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:coal", - "weight": 12 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 8.0, - "min": 2.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:paper", - "weight": 10 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 6.0, - "min": 2.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:flint", - "weight": 10 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 4.0, - "min": 1.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:redstone", - "weight": 8 - }, - { - "type": "minecraft:item", - "name": "antarchy:mud_pie", - "weight": 6 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 3.0, - "min": 1.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "antarchy:duct_tape", - "weight": 4 - }, - { - "type": "minecraft:item", - "name": "minecraft:golden_apple", - "weight": 4 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "antarchy:uranium_nugget", - "weight": 3 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "antarchy:titanium_nugget", - "weight": 3 - } - ], - "rolls": { - "type": "minecraft:uniform", - "max": 8.0, - "min": 4.0 - } - } - ], - "random_sequence": "antarchy:chests/fallen_kingdom/storage" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/tools.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/tools.json deleted file mode 100644 index 56a1f365..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/tools.json +++ /dev/null @@ -1,214 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [ - { - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:stone_pickaxe", - "weight": 12 - }, - { - "type": "minecraft:item", - "name": "minecraft:stone_axe", - "weight": 12 - }, - { - "type": "minecraft:item", - "name": "minecraft:stone_shovel", - "weight": 12 - }, - { - "type": "minecraft:item", - "name": "minecraft:iron_pickaxe", - "weight": 10 - }, - { - "type": "minecraft:item", - "name": "minecraft:iron_axe", - "weight": 10 - }, - { - "type": "minecraft:item", - "name": "minecraft:iron_shovel", - "weight": 10 - }, - { - "type": "minecraft:item", - "name": "minecraft:iron_hoe", - "weight": 8 - }, - { - "type": "minecraft:item", - "name": "minecraft:shears", - "weight": 10 - }, - { - "type": "minecraft:item", - "name": "minecraft:flint_and_steel", - "weight": 10 - }, - { - "type": "minecraft:item", - "name": "minecraft:shield", - "weight": 8 - }, - { - "type": "minecraft:item", - "name": "minecraft:bow", - "weight": 6 - }, - { - "type": "minecraft:item", - "name": "minecraft:crossbow", - "weight": 4 - } - ], - "rolls": { - "type": "minecraft:uniform", - "max": 4.0, - "min": 2.0 - } - }, - { - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 12.0, - "min": 4.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:stick", - "weight": 16 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 8.0, - "min": 2.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:coal", - "weight": 14 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 8.0, - "min": 2.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:string", - "weight": 12 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 6.0, - "min": 2.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:flint", - "weight": 12 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 4.0, - "min": 1.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:leather", - "weight": 8 - }, - { - "type": "minecraft:item", - "name": "antarchy:mud_pie", - "weight": 4 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 2.0, - "min": 1.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "antarchy:duct_tape", - "weight": 4 - }, - { - "type": "minecraft:item", - "name": "minecraft:golden_apple", - "weight": 4 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "antarchy:uranium_nugget", - "weight": 3 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "antarchy:titanium_nugget", - "weight": 3 - } - ], - "rolls": { - "type": "minecraft:uniform", - "max": 2.0, - "min": 1.0 - } - } - ], - "random_sequence": "antarchy:chests/fallen_kingdom/tools" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/tower.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/tower.json deleted file mode 100644 index 599e935a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/tower.json +++ /dev/null @@ -1,265 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [ - { - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:bow", - "weight": 16, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 5.0, - "max": 22.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:crossbow", - "weight": 14, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 6.0, - "max": 24.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:bow", - "weight": 8, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 18.0, - "max": 30.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:crossbow", - "weight": 6, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 18.0, - "max": 30.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:shield", - "weight": 6 - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 3.0 - } - }, - { - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:arrow", - "weight": 22, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 16.0, - "max": 32.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:spectral_arrow", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 8.0, - "max": 16.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:tipped_arrow", - "weight": 6, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 12.0 - } - }, - { - "function": "minecraft:set_components", - "components": { - "minecraft:potion_contents": { - "potion": "minecraft:poison" - } - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:feather", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 8.0 - } - } - ] - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 4.0 - } - }, - { - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:iron_ingot", - "weight": 12, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 6.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:string", - "weight": 12, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 8.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:torch", - "weight": 10, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 12.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:duct_tape", - "weight": 6, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:uranium_nugget", - "weight": 6, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:titanium_nugget", - "weight": 6, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:golden_apple", - "weight": 4 - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - } - ], - "random_sequence": "antarchy:chests/fallen_kingdom_castle/tower" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/treasure.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/treasure.json deleted file mode 100644 index be90946f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/treasure.json +++ /dev/null @@ -1,146 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [ - { - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 10.0, - "min": 4.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:gold_ingot", - "weight": 24 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 20.0, - "min": 8.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:copper_ingot", - "weight": 24 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 6.0, - "min": 2.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:emerald", - "weight": 16 - }, - { - "type": "minecraft:item", - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "max": 35.0, - "min": 20.0 - }, - "options": "#minecraft:on_random_loot" - } - ], - "name": "minecraft:book", - "weight": 4 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 8.0, - "min": 4.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:iron_ingot", - "weight": 8 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 3.0, - "min": 1.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:diamond", - "weight": 12 - } - ], - "rolls": { - "type": "minecraft:uniform", - "max": 8.0, - "min": 5.0 - } - }, - { - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 3.0, - "min": 1.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "antarchy:uranium_nugget", - "weight": 8 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 3.0, - "min": 1.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "antarchy:titanium_nugget", - "weight": 8 - }, - { - "type": "minecraft:item", - "name": "minecraft:golden_apple", - "weight": 6 - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:chests/fallen_kingdom/treasure" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/queen_castle/generic.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/queen_castle/generic.json deleted file mode 100644 index ebfa6185..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/queen_castle/generic.json +++ /dev/null @@ -1,12 +0,0 @@ -{"type":"minecraft:chest","pools":[{"rolls":{"type":"minecraft:uniform","min":6,"max":9},"entries":[ -{"type":"minecraft:item","name":"minecraft:diamond_sword","weight":8,"functions":[{"function":"minecraft:enchant_with_levels","levels":{"type":"minecraft:uniform","min":18,"max":30},"options":"#minecraft:on_random_loot"}]}, -{"type":"minecraft:item","name":"minecraft:diamond_pickaxe","weight":7,"functions":[{"function":"minecraft:enchant_with_levels","levels":{"type":"minecraft:uniform","min":18,"max":30},"options":"#minecraft:on_random_loot"}]}, -{"type":"minecraft:item","name":"antarchy:blood_crystal_helmet","weight":2},{"type":"minecraft:item","name":"antarchy:blood_crystal_chestplate","weight":2},{"type":"minecraft:item","name":"antarchy:blood_crystal_leggings","weight":2},{"type":"minecraft:item","name":"antarchy:blood_crystal_boots","weight":2}, -{"type":"minecraft:item","name":"antarchy:bluestone","weight":14,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":8,"max":20}}]}, -{"type":"minecraft:item","name":"antarchy:nyxite","weight":10,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":2,"max":6}}]}, -{"type":"minecraft:item","name":"antarchy:blood_crystal_shard","weight":12,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":2,"max":5}}]}, -{"type":"minecraft:item","name":"antarchy:blood_crystal_apple","weight":20,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":1,"max":3}}]}, -{"type":"minecraft:item","name":"antarchy:lucid_pearl","weight":4},{"type":"minecraft:item","name":"minecraft:golden_apple","weight":5}, -{"type":"minecraft:item","name":"minecraft:potion","weight":8,"functions":[{"function":"minecraft:set_potion","id":"antarchy:inversion"}]},{"type":"minecraft:item","name":"minecraft:tipped_arrow","weight":8,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":4,"max":12}},{"function":"minecraft:set_potion","id":"antarchy:inversion"}]}, -{"type":"minecraft:item","name":"minecraft:book","weight":10,"functions":[{"function":"minecraft:enchant_randomly","options":["minecraft:mending","minecraft:unbreaking","minecraft:protection","minecraft:efficiency"]}]} -]}],"random_sequence":"antarchy:chests/queen_castle/generic"} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/queen_castle/treasure.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/queen_castle/treasure.json deleted file mode 100644 index cfa3c85c..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/queen_castle/treasure.json +++ /dev/null @@ -1,12 +0,0 @@ -{"type":"minecraft:chest","pools":[{"rolls":{"type":"minecraft:uniform","min":7,"max":10},"entries":[ -{"type":"minecraft:item","name":"antarchy:ultimate_helmet","weight":2},{"type":"minecraft:item","name":"antarchy:ultimate_chestplate","weight":2},{"type":"minecraft:item","name":"antarchy:ultimate_leggings","weight":2},{"type":"minecraft:item","name":"antarchy:ultimate_boots","weight":2}, -{"type":"minecraft:item","name":"antarchy:blood_crystal_katana","weight":5},{"type":"minecraft:item","name":"antarchy:lucid_pearl","weight":8}, -{"type":"minecraft:item","name":"antarchy:blood_crystal_shard","weight":14,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":3,"max":8}}]}, -{"type":"minecraft:item","name":"antarchy:blood_crystal_apple","weight":20,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":1,"max":4}}]}, -{"type":"minecraft:item","name":"antarchy:bluestone","weight":14,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":10,"max":24}}]}, -{"type":"minecraft:item","name":"antarchy:nyxite","weight":10,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":4,"max":10}}]}, -{"type":"minecraft:item","name":"antarchy:potent_nyxite","weight":4},{"type":"minecraft:item","name":"minecraft:enchanted_golden_apple","weight":2}, -{"type":"minecraft:item","name":"minecraft:book","weight":14,"functions":[{"function":"minecraft:enchant_randomly","options":["minecraft:mending","minecraft:unbreaking","minecraft:protection","minecraft:efficiency","minecraft:fortune"]}]}, -{"type":"minecraft:item","name":"minecraft:potion","weight":8,"functions":[{"function":"minecraft:set_potion","id":"antarchy:inversion"}]},{"type":"minecraft:item","name":"minecraft:tipped_arrow","weight":8,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":6,"max":16}},{"function":"minecraft:set_potion","id":"antarchy:inversion"}]}, -{"type":"minecraft:item","name":"antarchy:titanium_ingot","weight":1},{"type":"minecraft:item","name":"antarchy:uranium_ingot","weight":1} -]}],"random_sequence":"antarchy:chests/queen_castle/treasure"} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/ruined_arena/generic.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/ruined_arena/generic.json deleted file mode 100644 index 1d928138..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/ruined_arena/generic.json +++ /dev/null @@ -1,309 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [ - { - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:bow", - "weight": 16, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 6.0, - "max": 20.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:shield", - "weight": 10 - }, - { - "type": "minecraft:item", - "name": "minecraft:arrow", - "weight": 18, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 12.0, - "max": 32.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:spectral_arrow", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 6.0, - "max": 14.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:bread", - "weight": 10, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 6.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:emerald", - "weight": 9, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 4.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:lapis_lazuli", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 10.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:experience_bottle", - "weight": 6, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 5.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:potion", - "weight": 7, - "functions": [ - { - "function": "minecraft:set_components", - "components": { - "minecraft:potion_contents": { - "potion": "antarchy:shrinking" - } - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:potion", - "weight": 7, - "functions": [ - { - "function": "minecraft:set_components", - "components": { - "minecraft:potion_contents": { - "potion": "minecraft:strength" - } - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:potion", - "weight": 6, - "functions": [ - { - "function": "minecraft:set_components", - "components": { - "minecraft:potion_contents": { - "potion": "minecraft:slow_falling" - } - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:book", - "weight": 5, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 10.0, - "max": 24.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:golden_apple", - "weight": 5 - }, - { - "type": "minecraft:item", - "name": "minecraft:diamond", - "weight": 3, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:uranium_nugget", - "weight": 40, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 5.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:titanium_nugget", - "weight": 40, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 5.0 - } - } - ] - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 7.0 - } - }, - { - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:ultimate_sword", - "weight": 2 - }, - { - "type": "minecraft:item", - "name": "antarchy:ultimate_bow", - "weight": 2 - }, - { - "type": "minecraft:item", - "name": "antarchy:ultimate_crossbow", - "weight": 2 - }, - { - "type": "minecraft:item", - "name": "minecraft:diamond_sword", - "weight": 4, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 18.0, - "max": 30.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:crossbow", - "weight": 4, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 18.0, - "max": 30.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:book", - "weight": 6, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 20.0, - "max": 30.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 1.0 - } - } - ], - "random_sequence": "antarchy:chests/ruined_arena/generic" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/ruined_prison/generic.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/ruined_prison/generic.json deleted file mode 100644 index f7a5e755..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/ruined_prison/generic.json +++ /dev/null @@ -1,240 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [ - { - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:bread", - "weight": 14, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 5.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:rotten_flesh", - "weight": 16, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 7.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:bone", - "weight": 14, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 6.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:chain", - "weight": 12, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 4.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:iron_ingot", - "weight": 10, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 4.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:arrow", - "weight": 12, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 8.0, - "max": 20.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:torch", - "weight": 12, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 12.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:string", - "weight": 10, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 6.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:coal", - "weight": 10, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 6.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:experience_bottle", - "weight": 6, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 3.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:potion", - "weight": 6, - "functions": [ - { - "function": "minecraft:set_components", - "components": { - "minecraft:potion_contents": { - "potion": "minecraft:healing" - } - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:emerald", - "weight": 6, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 3.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:duct_tape", - "weight": 5, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 3.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:uranium_nugget", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 3.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:titanium_nugget", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 3.0 - } - } - ] - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 7.0 - } - } - ], - "random_sequence": "antarchy:chests/ruined_prison/generic" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/ruined_prison/warden_cache.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/ruined_prison/warden_cache.json deleted file mode 100644 index ed539a08..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/ruined_prison/warden_cache.json +++ /dev/null @@ -1,282 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [ - { - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:iron_sword", - "weight": 14, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 10.0, - "max": 22.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:crossbow", - "weight": 14, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 10.0, - "max": 22.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:shield", - "weight": 10 - }, - { - "type": "minecraft:item", - "name": "minecraft:arrow", - "weight": 16, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 12.0, - "max": 28.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:spectral_arrow", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 12.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:chainmail_chestplate", - "weight": 8, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 8.0, - "max": 20.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:chainmail_leggings", - "weight": 8, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 8.0, - "max": 20.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:experience_bottle", - "weight": 10, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 5.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:potion", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_components", - "components": { - "minecraft:potion_contents": { - "potion": "minecraft:strength" - } - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:potion", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_components", - "components": { - "minecraft:potion_contents": { - "potion": "minecraft:healing" - } - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:book", - "weight": 6, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 16.0, - "max": 28.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:golden_apple", - "weight": 6 - }, - { - "type": "minecraft:item", - "name": "minecraft:diamond", - "weight": 4, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:uranium_nugget", - "weight": 18, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 5.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:titanium_nugget", - "weight": 18, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 5.0 - } - } - ] - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 7.0 - } - }, - { - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:diamond_sword", - "weight": 4, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 20.0, - "max": 30.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:crossbow", - "weight": 4, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 20.0, - "max": 30.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:book", - "weight": 6, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 20.0, - "max": 30.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 1.0 - } - } - ], - "random_sequence": "antarchy:chests/ruined_prison/warden_cache" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/scorpion_arena/generic.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/scorpion_arena/generic.json deleted file mode 100644 index 01fe9ead..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/scorpion_arena/generic.json +++ /dev/null @@ -1,12 +0,0 @@ -{"type":"minecraft:chest","pools":[{"rolls":{"type":"minecraft:uniform","min":5,"max":8},"entries":[ -{"type":"minecraft:item","name":"minecraft:arrow","weight":18,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":12,"max":32}}]}, -{"type":"minecraft:item","name":"minecraft:tipped_arrow","weight":8,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":2,"max":6}},{"function":"minecraft:set_potion","id":"antarchy:inversion"}]}, -{"type":"minecraft:item","name":"minecraft:bow","weight":10,"functions":[{"function":"minecraft:enchant_with_levels","levels":{"type":"minecraft:uniform","min":6,"max":18},"options":"#minecraft:on_random_loot"}]}, -{"type":"minecraft:item","name":"minecraft:iron_sword","weight":8},{"type":"minecraft:item","name":"minecraft:shield","weight":8}, -{"type":"minecraft:item","name":"antarchy:bluestone","weight":15,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":3,"max":10}}]}, -{"type":"minecraft:item","name":"antarchy:blood_crystal_shard","weight":10,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":1,"max":3}}]}, -{"type":"minecraft:item","name":"antarchy:blood_crystal_apple","weight":14,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":1,"max":2}}]}, -{"type":"minecraft:item","name":"antarchy:scorpion_whip","weight":3},{"type":"minecraft:item","name":"minecraft:golden_apple","weight":3}, -{"type":"minecraft:item","name":"minecraft:potion","weight":7,"functions":[{"function":"minecraft:set_potion","id":"antarchy:inversion"}]}, -{"type":"minecraft:item","name":"minecraft:book","weight":5,"functions":[{"function":"minecraft:enchant_randomly","options":["minecraft:mending","minecraft:unbreaking","minecraft:sharpness"]}]} -]}],"random_sequence":"antarchy:chests/scorpion_arena/generic"} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/scorpion_arena/treasure.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/scorpion_arena/treasure.json deleted file mode 100644 index 9ca8c11a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/scorpion_arena/treasure.json +++ /dev/null @@ -1,13 +0,0 @@ -{"type":"minecraft:chest","pools":[{"rolls":{"type":"minecraft:uniform","min":6,"max":9},"entries":[ -{"type":"minecraft:item","name":"antarchy:scorpion_whip","weight":8},{"type":"minecraft:item","name":"antarchy:blood_crystal_katana","weight":4}, -{"type":"minecraft:item","name":"antarchy:blood_crystal_helmet","weight":2},{"type":"minecraft:item","name":"antarchy:blood_crystal_chestplate","weight":2},{"type":"minecraft:item","name":"antarchy:blood_crystal_leggings","weight":2},{"type":"minecraft:item","name":"antarchy:blood_crystal_boots","weight":2}, -{"type":"minecraft:item","name":"antarchy:lucid_pearl","weight":3},{"type":"minecraft:item","name":"antarchy:blood_crystal_shard","weight":12,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":2,"max":6}}]}, -{"type":"minecraft:item","name":"antarchy:blood_crystal_apple","weight":16,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":1,"max":3}}]}, -{"type":"minecraft:item","name":"antarchy:bluestone","weight":12,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":8,"max":18}}]}, -{"type":"minecraft:item","name":"antarchy:nyxite","weight":8,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":2,"max":6}}]}, -{"type":"minecraft:item","name":"minecraft:diamond_sword","weight":7,"functions":[{"function":"minecraft:enchant_with_levels","levels":{"type":"minecraft:uniform","min":18,"max":30},"options":"#minecraft:on_random_loot"}]}, -{"type":"minecraft:item","name":"minecraft:book","weight":8,"functions":[{"function":"minecraft:enchant_randomly","options":["minecraft:mending","minecraft:unbreaking","minecraft:sharpness","minecraft:protection"]}]}, -{"type":"minecraft:item","name":"minecraft:tipped_arrow","weight":6,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":4,"max":10}},{"function":"minecraft:set_potion","id":"antarchy:inversion"}]}, -{"type":"minecraft:item","name":"minecraft:potion","weight":6,"functions":[{"function":"minecraft:set_potion","id":"antarchy:inversion"}]}, -{"type":"minecraft:item","name":"antarchy:titanium_ingot","weight":1},{"type":"minecraft:item","name":"antarchy:uranium_ingot","weight":1} -]}],"random_sequence":"antarchy:chests/scorpion_arena/treasure"} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/seashell.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/seashell.json deleted file mode 100644 index 28e25c0e..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/seashell.json +++ /dev/null @@ -1,129 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [ - { - "rolls": { - "type": "minecraft:uniform", - "min": 1, - "max": 3 - }, - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:lapis_lazuli", - "weight": 14, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2, - "max": 6 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:redstone", - "weight": 14, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2, - "max": 6 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:quartz", - "weight": 14, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2, - "max": 5 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:raw_iron", - "weight": 7, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1, - "max": 3 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:raw_gold", - "weight": 7, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1, - "max": 3 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:uranium_nugget", - "weight": 2, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1, - "max": 2 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:titanium_nugget", - "weight": 2, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1, - "max": 2 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:heart_of_the_sea", - "weight": 1 - }, - { - "type": "minecraft:item", - "name": "minecraft:diamond", - "weight": 1 - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/stampys_house/bedroom.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/stampys_house/bedroom.json deleted file mode 100644 index 8fcaf3c1..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/stampys_house/bedroom.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [ - { - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:white_wool", - "weight": 14, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 6.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:orange_wool", - "weight": 14, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 6.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:candle", - "weight": 12, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 4.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:paper", - "weight": 12, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 7.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:feather", - "weight": 10, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 6.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:book", - "weight": 10, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 8.0, - "max": 20.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:music_disc_cat", - "weight": 2 - }, - { - "type": "minecraft:item", - "name": "minecraft:bone", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 6.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:emerald", - "weight": 6, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 3.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:amethyst_shard", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 6.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:rainbow_sugar", - "weight": 10 - }, - { - "type": "minecraft:item", - "name": "antarchy:duct_tape", - "weight": 4, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 3.0 - } - } - ] - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 7.0 - } - } - ], - "random_sequence": "antarchy:chests/stampys_house/bedroom" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/stampys_house/kitchen.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/stampys_house/kitchen.json deleted file mode 100644 index 85d58abc..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/stampys_house/kitchen.json +++ /dev/null @@ -1,165 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [ - { - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:peach", - "weight": 18, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 3.0, - "max": 8.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:peach_pie", - "weight": 10, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 3.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:popcorn", - "weight": 12, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 6.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:cornbread", - "weight": 10, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 5.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:root_beer", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 3.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:rainbow_sugar", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 4.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:cookie", - "weight": 12, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 3.0, - "max": 8.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:milk_bucket", - "weight": 6 - }, - { - "type": "minecraft:item", - "name": "minecraft:cake", - "weight": 3 - }, - { - "type": "minecraft:item", - "name": "minecraft:apple", - "weight": 10, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 5.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:bread", - "weight": 12, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 5.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:mud_pie", - "weight": 4 - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 7.0 - } - } - ], - "random_sequence": "antarchy:chests/stampys_house/kitchen" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/stampys_house/storage.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/stampys_house/storage.json deleted file mode 100644 index c7093fe5..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/stampys_house/storage.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [ - { - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:peach_planks", - "weight": 16, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 6.0, - "max": 16.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:peach_slab", - "weight": 12, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 12.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:ladder", - "weight": 14, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 12.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:torch", - "weight": 14, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 12.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:redstone", - "weight": 12, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 12.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:lever", - "weight": 10, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 4.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:stick", - "weight": 14, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 12.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:string", - "weight": 10, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 8.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:fishing_rod", - "weight": 8 - }, - { - "type": "minecraft:item", - "name": "minecraft:bow", - "weight": 6, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 6.0, - "max": 18.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:duct_tape", - "weight": 6, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 4.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:golden_apple", - "weight": 3 - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 8.0 - } - } - ], - "random_sequence": "antarchy:chests/stampys_house/storage" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/temple_of_technoblade/generic.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/temple_of_technoblade/generic.json deleted file mode 100644 index e5882976..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/temple_of_technoblade/generic.json +++ /dev/null @@ -1,210 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [ - { - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:potato", - "weight": 20, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 8.0, - "max": 24.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:baked_potato", - "weight": 16, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 12.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:poisonous_potato", - "weight": 4, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 3.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:golden_carrot", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 4.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:cooked_porkchop", - "weight": 12, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 8.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:gold_ingot", - "weight": 10, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 5.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:emerald", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 3.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:amethyst_shard", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 8.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:tigers_eye", - "weight": 5, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 3.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:book", - "weight": 7, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 8.0, - "max": 20.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:golden_apple", - "weight": 4 - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 7.0 - } - }, - { - "entries": [ - { - "type": "minecraft:empty", - "weight": 72 - }, - { - "type": "minecraft:item", - "name": "antarchy:uranium_nugget", - "weight": 6, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:titanium_nugget", - "weight": 6, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - } - ] - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:chests/temple_of_technoblade/generic" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/temple_of_technoblade/treasure.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/temple_of_technoblade/treasure.json deleted file mode 100644 index 189b3f72..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/temple_of_technoblade/treasure.json +++ /dev/null @@ -1,170 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [ - { - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:diamond", - "weight": 12, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 4.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:emerald", - "weight": 16, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 7.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:gold_ingot", - "weight": 18, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 12.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:amethyst_shard", - "weight": 14, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 12.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:blood_crystal_shard", - "weight": 9, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 4.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:tigers_eye", - "weight": 10, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 4.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:golden_apple", - "weight": 8 - }, - { - "type": "minecraft:item", - "name": "minecraft:book", - "weight": 8, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 18.0, - "max": 30.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:fallen_king_crown", - "weight": 2 - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 5.0, - "max": 8.0 - } - }, - { - "entries": [ - { - "type": "minecraft:empty", - "weight": 64 - }, - { - "type": "minecraft:item", - "name": "antarchy:uranium_nugget", - "weight": 7, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 3.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:titanium_nugget", - "weight": 7, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 3.0 - } - } - ] - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:chests/temple_of_technoblade/treasure" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/tigers_eye_shrine/treasure.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/tigers_eye_shrine/treasure.json deleted file mode 100644 index d975eaf6..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/tigers_eye_shrine/treasure.json +++ /dev/null @@ -1,162 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:uranium_ingot", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1, - "max": 2 - } - } - ] - } - ] - }, - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:tigers_eye", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1, - "max": 3 - } - } - ] - } - ] - }, - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:titanium_nugget", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2, - "max": 6 - } - } - ] - } - ] - }, - { - "rolls": { - "type": "minecraft:uniform", - "min": 2, - "max": 4 - }, - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:bone", - "weight": 10, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2, - "max": 6 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:string", - "weight": 10, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2, - "max": 6 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:coal", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2, - "max": 6 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:torch", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2, - "max": 8 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:rotten_flesh", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2, - "max": 6 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:arrow", - "weight": 6, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2, - "max": 8 - } - } - ] - } - ] - } - ], - "random_sequence": "antarchy:chests/tigers_eye_shrine/treasure" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/trayaurus_lab/trayaurus_lab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/trayaurus_lab/trayaurus_lab.json deleted file mode 100644 index 3163e7d5..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/trayaurus_lab/trayaurus_lab.json +++ /dev/null @@ -1,449 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [ - { - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:redstone", - "weight": 28 - }, - { - "type": "minecraft:item", - "name": "minecraft:redstone_torch", - "weight": 18 - }, - { - "type": "minecraft:item", - "name": "minecraft:repeater", - "weight": 12 - }, - { - "type": "minecraft:item", - "name": "minecraft:comparator", - "weight": 10 - }, - { - "type": "minecraft:item", - "name": "minecraft:lever", - "weight": 14 - }, - { - "type": "minecraft:item", - "name": "minecraft:observer", - "weight": 8 - }, - { - "type": "minecraft:item", - "name": "minecraft:piston", - "weight": 8 - }, - { - "type": "minecraft:item", - "name": "minecraft:sticky_piston", - "weight": 6 - }, - { - "type": "minecraft:item", - "name": "minecraft:dropper", - "weight": 10 - }, - { - "type": "minecraft:item", - "name": "minecraft:dispenser", - "weight": 10 - }, - { - "type": "minecraft:item", - "name": "minecraft:glass_bottle", - "weight": 12 - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 3.0 - } - }, - { - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 7.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:iron_ingot", - "weight": 12 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 7.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:copper_ingot", - "weight": 14 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 4.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:gold_ingot", - "weight": 8 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 4.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:glowstone_dust", - "weight": 10 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "antarchy:uranium_nugget", - "weight": 2 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "antarchy:titanium_nugget", - "weight": 2 - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - }, - { - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:flint_and_steel", - "weight": 20 - }, - { - "type": "minecraft:item", - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 15.0, - "max": 30.0 - }, - "options": "#minecraft:on_random_loot" - } - ], - "name": "minecraft:book", - "weight": 16 - }, - { - "type": "minecraft:item", - "functions": [ - { - "function": "minecraft:enchant_randomly", - "options": [ - "minecraft:mending", - "minecraft:swift_sneak", - "minecraft:frost_walker", - "minecraft:soul_speed", - "minecraft:binding_curse" - ] - } - ], - "name": "minecraft:book", - "weight": 4 - }, - { - "type": "minecraft:item", - "functions": [ - { - "function": "minecraft:set_components", - "components": { - "minecraft:potion_contents": { - "potion": "antarchy:shrinking" - } - } - } - ], - "name": "minecraft:potion", - "weight": 2 - }, - { - "type": "minecraft:item", - "functions": [ - { - "function": "minecraft:set_components", - "components": { - "minecraft:potion_contents": { - "potion": "antarchy:growing" - } - } - } - ], - "name": "minecraft:potion", - "weight": 2 - }, - { - "type": "minecraft:item", - "name": "minecraft:iron_sword", - "weight": 8 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 4.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:fermented_spider_eye", - "weight": 6 - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - }, - { - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:rainbow_sugar", - "weight": 14 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 4.0, - "min": 1.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:emerald", - "weight": 8 - }, - { - "type": "minecraft:item", - "name": "minecraft:diamond", - "weight": 3 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 4.0, - "min": 1.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:glowstone_dust", - "weight": 10 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 8.0, - "min": 2.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:lapis_lazuli", - "weight": 8 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 6.0, - "min": 2.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:amethyst_shard", - "weight": 8 - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - }, - { - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 8.0, - "min": 3.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:bone", - "weight": 16 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 6.0, - "min": 2.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:string", - "weight": 14 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 4.0, - "min": 1.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "antarchy:duct_tape", - "weight": 10 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 6.0, - "min": 2.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "antarchy:ouranwood_acorn", - "weight": 12 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 6.0, - "min": 2.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:paper", - "weight": 10 - }, - { - "type": "minecraft:item", - "functions": [ - { - "count": { - "type": "minecraft:uniform", - "max": 6.0, - "min": 2.0 - }, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:feather", - "weight": 8 - }, - { - "type": "minecraft:item", - "name": "antarchy:mud_pie", - "weight": 4 - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 4.0 - } - } - ], - "random_sequence": "antarchy:chests/trayaurus_lab" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/underside_ruins/generic.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/underside_ruins/generic.json deleted file mode 100644 index 482f04ec..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/underside_ruins/generic.json +++ /dev/null @@ -1,12 +0,0 @@ -{"type":"minecraft:chest","pools":[{"rolls":{"type":"minecraft:uniform","min":5,"max":8},"entries":[ -{"type":"minecraft:item","name":"minecraft:arrow","weight":16,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":10,"max":28}}]}, -{"type":"minecraft:item","name":"minecraft:tipped_arrow","weight":9,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":2,"max":6}},{"function":"minecraft:set_potion","id":"antarchy:inversion"}]}, -{"type":"minecraft:item","name":"minecraft:iron_pickaxe","weight":10},{"type":"minecraft:item","name":"minecraft:iron_sword","weight":8}, -{"type":"minecraft:item","name":"antarchy:bluestone","weight":15,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":4,"max":12}}]}, -{"type":"minecraft:item","name":"antarchy:nyxite","weight":10,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":1,"max":4}}]}, -{"type":"minecraft:item","name":"antarchy:lucid_eye","weight":8,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":1,"max":2}}]}, -{"type":"minecraft:item","name":"antarchy:blood_crystal_shard","weight":9,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":1,"max":3}}]}, -{"type":"minecraft:item","name":"antarchy:blood_crystal_apple","weight":15,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":1,"max":2}}]}, -{"type":"minecraft:item","name":"minecraft:potion","weight":8,"functions":[{"function":"minecraft:set_potion","id":"antarchy:inversion"}]}, -{"type":"minecraft:item","name":"minecraft:book","weight":6,"functions":[{"function":"minecraft:enchant_randomly","options":["minecraft:mending","minecraft:unbreaking","minecraft:efficiency"]}]} -]}],"random_sequence":"antarchy:chests/underside_ruins/generic"} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/underside_ruins/treasure.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/underside_ruins/treasure.json deleted file mode 100644 index 3562a324..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/underside_ruins/treasure.json +++ /dev/null @@ -1,13 +0,0 @@ -{"type":"minecraft:chest","pools":[{"rolls":{"type":"minecraft:uniform","min":6,"max":9},"entries":[ -{"type":"minecraft:item","name":"antarchy:lucid_pearl","weight":8},{"type":"minecraft:item","name":"antarchy:blood_crystal_katana","weight":3}, -{"type":"minecraft:item","name":"antarchy:blood_crystal_helmet","weight":2},{"type":"minecraft:item","name":"antarchy:blood_crystal_chestplate","weight":2},{"type":"minecraft:item","name":"antarchy:blood_crystal_leggings","weight":2},{"type":"minecraft:item","name":"antarchy:blood_crystal_boots","weight":2}, -{"type":"minecraft:item","name":"antarchy:potent_nyxite","weight":4},{"type":"minecraft:item","name":"antarchy:nyxite","weight":10,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":3,"max":8}}]}, -{"type":"minecraft:item","name":"antarchy:bluestone","weight":13,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":8,"max":20}}]}, -{"type":"minecraft:item","name":"antarchy:blood_crystal_shard","weight":12,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":2,"max":6}}]}, -{"type":"minecraft:item","name":"antarchy:blood_crystal_apple","weight":16,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":1,"max":3}}]}, -{"type":"minecraft:item","name":"minecraft:diamond_pickaxe","weight":8,"functions":[{"function":"minecraft:enchant_with_levels","levels":{"type":"minecraft:uniform","min":18,"max":30},"options":"#minecraft:on_random_loot"}]}, -{"type":"minecraft:item","name":"minecraft:book","weight":10,"functions":[{"function":"minecraft:enchant_randomly","options":["minecraft:mending","minecraft:unbreaking","minecraft:efficiency","minecraft:protection"]}]}, -{"type":"minecraft:item","name":"minecraft:tipped_arrow","weight":7,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":4,"max":10}},{"function":"minecraft:set_potion","id":"antarchy:inversion"}]}, -{"type":"minecraft:item","name":"minecraft:potion","weight":7,"functions":[{"function":"minecraft:set_potion","id":"antarchy:inversion"}]}, -{"type":"minecraft:item","name":"antarchy:titanium_ingot","weight":1},{"type":"minecraft:item","name":"antarchy:uranium_ingot","weight":1} -]}],"random_sequence":"antarchy:chests/underside_ruins/treasure"} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/alpha_mantis.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/alpha_mantis.json deleted file mode 100644 index 851328fc..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/alpha_mantis.json +++ /dev/null @@ -1,123 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:mantis_claw" - } - ], - "conditions": [ - { - "condition": "minecraft:killed_by_player" - } - ], - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - }, - { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 1.0 - } - } - ] - }, - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:uranium_nugget" - } - ], - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 4.0 - } - }, - { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 2.0 - } - } - ] - }, - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:titanium_nugget" - } - ], - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 4.0 - } - }, - { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 2.0 - } - } - ] - }, - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:raw_bug_meat" - } - ], - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 6.0, - "max": 10.0 - } - }, - { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 3.0 - } - } - ] - } - ], - "random_sequence": "antarchy:entities/alpha_mantis" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/apple_cow.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/apple_cow.json deleted file mode 100644 index a7437c82..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/apple_cow.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:leather", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 2.0 - } - }, - { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 1.0 - } - } - ] - } - ] - }, - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:beef", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 3.0 - } - }, - { - "function": "minecraft:furnace_smelt", - "conditions": [ - { - "condition": "minecraft:entity_properties", - "entity": "this", - "predicate": { - "flags": { - "is_on_fire": true - } - } - } - ] - }, - { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 1.0 - } - } - ] - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/basilisk.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/basilisk.json deleted file mode 100644 index a5a7135b..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/basilisk.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "rolls": { - "type": "minecraft:uniform", - "min": 1, - "max": 2 - }, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:basilisk_fang" - } - ], - "conditions": [ - { - "condition": "minecraft:killed_by_player" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/bed_bug.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/bed_bug.json deleted file mode 100644 index eb13f53d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/bed_bug.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:raw_bug_meat", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - }, - { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 1.0 - } - } - ] - } - ], - "conditions": [ - { - "condition": "minecraft:killed_by_player" - } - ] - } - ], - "random_sequence": "antarchy:entities/bed_bug" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/brutalfly.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/brutalfly.json deleted file mode 100644 index c001fa35..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/brutalfly.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:brutalfly_wing" - } - ], - "conditions": [ - { - "condition": "minecraft:killed_by_player" - } - ], - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - }, - { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 1.0 - } - } - ] - } - ], - "random_sequence": "antarchy:entities/brutalfly" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/cheep.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/cheep.json deleted file mode 100644 index ea3b5bba..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/cheep.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:cheep" - } - ] - } - ], - "random_sequence": "antarchy:entities/cheep" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/cloud_shark.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/cloud_shark.json deleted file mode 100644 index 5a78e7af..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/cloud_shark.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:cloud_shark_fin" - } - ], - "conditions": [ - { - "condition": "minecraft:killed_by_player" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/creeping_horror.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/creeping_horror.json deleted file mode 100644 index a6a1b354..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/creeping_horror.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:chitin", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - }, - { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 1.0 - } - } - ] - } - ], - "conditions": [ - { - "condition": "minecraft:killed_by_player" - } - ] - }, - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:raw_bug_meat", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - }, - { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 1.0 - } - } - ] - } - ], - "conditions": [ - { - "condition": "minecraft:killed_by_player" - } - ] - } - ], - "random_sequence": "antarchy:entities/creeping_horror" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/easter_bunny.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/easter_bunny.json deleted file mode 100644 index c4f7ac96..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/easter_bunny.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/emperor_scorpion.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/emperor_scorpion.json deleted file mode 100644 index c5a7c9df..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/emperor_scorpion.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:emperor_scorpion_stinger" - } - ], - "conditions": [ - { - "condition": "minecraft:killed_by_player" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/enchanted_golden_apple_cow.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/enchanted_golden_apple_cow.json deleted file mode 100644 index a7437c82..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/enchanted_golden_apple_cow.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:leather", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 2.0 - } - }, - { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 1.0 - } - } - ] - } - ] - }, - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:beef", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 3.0 - } - }, - { - "function": "minecraft:furnace_smelt", - "conditions": [ - { - "condition": "minecraft:entity_properties", - "entity": "this", - "predicate": { - "flags": { - "is_on_fire": true - } - } - } - ] - }, - { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 1.0 - } - } - ] - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/flying_squirrel.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/flying_squirrel.json deleted file mode 100644 index c4f7ac96..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/flying_squirrel.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/golden_apple_cow.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/golden_apple_cow.json deleted file mode 100644 index a7437c82..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/golden_apple_cow.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:leather", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 2.0 - } - }, - { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 1.0 - } - } - ] - } - ] - }, - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:beef", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 3.0 - } - }, - { - "function": "minecraft:furnace_smelt", - "conditions": [ - { - "condition": "minecraft:entity_properties", - "entity": "this", - "predicate": { - "flags": { - "is_on_fire": true - } - } - } - ] - }, - { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 1.0 - } - } - ] - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/hercules_beetle.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/hercules_beetle.json deleted file mode 100644 index a30541b2..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/hercules_beetle.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:hercules_horn", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - }, - { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 1.0 - } - } - ] - } - ], - "conditions": [ - { - "condition": "minecraft:killed_by_player" - } - ] - } - ], - "random_sequence": "antarchy:entities/hercules_beetle" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/jerry.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/jerry.json deleted file mode 100644 index 2a746c8b..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/jerry.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:jerry_nucleus", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - }, - { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 1.0 - } - } - ] - } - ], - "conditions": [ - { - "condition": "minecraft:killed_by_player" - } - ] - } - ], - "random_sequence": "antarchy:entities/jerry" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/jumpy_bug.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/jumpy_bug.json deleted file mode 100644 index 7bb37ad8..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/jumpy_bug.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:jumpy_bug_leg", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - }, - { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 1.0 - } - } - ] - } - ] - }, - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:chitin", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - }, - { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 1.0 - } - } - ] - } - ], - "conditions": [ - { - "condition": "minecraft:killed_by_player" - } - ] - }, - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:raw_bug_meat", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - }, - { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 1.0 - } - } - ] - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/kraken.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/kraken.json deleted file mode 100644 index 8306f4e1..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/kraken.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "rolls": { - "type": "minecraft:uniform", - "min": 2, - "max": 3 - }, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:kraken_tooth" - } - ], - "conditions": [ - { - "condition": "minecraft:killed_by_player" - } - ] - }, - { - "rolls": { - "type": "minecraft:uniform", - "min": 2, - "max": 4 - }, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:kraken_tentacle" - } - ], - "conditions": [ - { - "condition": "minecraft:killed_by_player" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/lucid.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/lucid.json deleted file mode 100644 index 664ce949..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/lucid.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:lucid_eye" - } - ], - "conditions": [ - { - "condition": "minecraft:killed_by_player" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/lurking_terror.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/lurking_terror.json deleted file mode 100644 index fa23ca8f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/lurking_terror.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:chitin", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - }, - { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 1.0 - } - } - ] - } - ], - "conditions": [ - { - "condition": "minecraft:killed_by_player" - } - ] - }, - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:raw_bug_meat", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - }, - { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 1.0 - } - } - ] - } - ], - "conditions": [ - { - "condition": "minecraft:killed_by_player" - } - ] - } - ], - "random_sequence": "antarchy:entities/lurking_terror" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/manticore.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/manticore.json deleted file mode 100644 index 3eb728b5..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/manticore.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "rolls": 1.0, - "entries": [{ "type": "minecraft:item", "name": "antarchy:manticore_wing" }], - "conditions": [{ "condition": "minecraft:killed_by_player" }], - "functions": [ - { "function": "minecraft:set_count", "count": { "type": "minecraft:uniform", "min": 1.0, "max": 2.0 } }, - { "function": "minecraft:enchanted_count_increase", "enchantment": "minecraft:looting", "count": { "type": "minecraft:uniform", "min": 0.0, "max": 1.0 } } - ] - } - ], - "random_sequence": "antarchy:entities/manticore" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/mantis.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/mantis.json deleted file mode 100644 index b24b2ee3..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/mantis.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:mantis_claw" - } - ], - "conditions": [ - { - "condition": "minecraft:killed_by_player" - }, - { - "condition": "minecraft:random_chance", - "chance": 0.35 - } - ], - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 1.0 - } - }, - { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 1.0 - } - } - ] - }, - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:raw_bug_meat" - } - ], - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - }, - { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 1.0 - } - } - ] - } - ], - "random_sequence": "antarchy:entities/mantis" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/missile_squid.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/missile_squid.json deleted file mode 100644 index c4f7ac96..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/missile_squid.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/molevore.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/molevore.json deleted file mode 100644 index 6d8b3d99..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/molevore.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:molevore_nose" - } - ], - "conditions": [ - { - "condition": "minecraft:killed_by_player" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/moleworm.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/moleworm.json deleted file mode 100644 index abb99896..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/moleworm.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:moleworm", - "functions": [ - { - "function": "minecraft:set_count", - "count": 1 - } - ] - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/nightmare.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/nightmare.json deleted file mode 100644 index 27bd59df..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/nightmare.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:nightmare_scale", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 5.0 - } - } - ] - } - ], - "conditions": [ - { - "condition": "minecraft:killed_by_player" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/octopus_bomb.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/octopus_bomb.json deleted file mode 100644 index c66fab67..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/octopus_bomb.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "rolls": { - "type": "minecraft:uniform", - "min": 5, - "max": 10 - }, - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:ink_sac" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/ouranwood_deer.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/ouranwood_deer.json deleted file mode 100644 index 5bd5aaec..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/ouranwood_deer.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:leather", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 2.0 - } - }, - { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 1.0 - } - } - ] - } - ] - }, - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:raw_venison", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 3.0 - } - }, - { - "function": "minecraft:furnace_smelt", - "conditions": [ - { - "condition": "minecraft:entity_properties", - "entity": "this", - "predicate": { - "flags": { - "is_on_fire": true - } - } - } - ] - }, - { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 1.0 - } - } - ] - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/queen.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/queen.json deleted file mode 100644 index 39697c66..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/queen.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "type": "minecraft:entity", - "random_sequence": "antarchy:entities/queen", - "pools": [ - { - "rolls": 1.0, - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:princess_egg", - "functions": [ - { - "function": "minecraft:set_count", - "count": 1 - } - ] - } - ] - }, - { - "rolls": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 6.0 - }, - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:killed_by_player" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:queen_scale", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 8.0, - "max": 16.0 - } - } - ] - } - ] - }, - { - "rolls": { - "type": "minecraft:uniform", - "min": 8.0, - "max": 12.0 - }, - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:killed_by_player" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:blood_crystal_shard", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 12.0, - "max": 20.0 - } - } - ] - } - ] - }, - { - "rolls": { - "type": "minecraft:uniform", - "min": 3.0, - "max": 5.0 - }, - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:killed_by_player" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:netherite_scrap", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 10.0, - "max": 16.0 - } - } - ] - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/spit_bug.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/spit_bug.json deleted file mode 100644 index 15863bcc..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/spit_bug.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:chitin", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - }, - { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 1.0 - } - } - ] - } - ], - "conditions": [ - { - "condition": "minecraft:killed_by_player" - } - ] - }, - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:raw_bug_meat", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - }, - { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 1.0 - } - } - ] - } - ], - "conditions": [ - { - "condition": "minecraft:killed_by_player" - } - ] - } - ], - "random_sequence": "antarchy:entities/spit_bug" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/stink_bug.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/stink_bug.json deleted file mode 100644 index a392269a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/stink_bug.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:stink_bug" - } - ], - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 1.0 - } - } - ] - } - ], - "random_sequence": "antarchy:entities/stink_bug" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/toreterror.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/toreterror.json deleted file mode 100644 index 8b8512f1..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/toreterror.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 5.0, - "max": 10.0 - } - }, - { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 1.0 - } - } - ], - "name": "antarchy:primordial_scute" - } - ], - "rolls": 1.0, - "conditions": [ - { - "condition": "minecraft:killed_by_player" - } - ] - }, - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:constant", - "value": 1 - } - } - ], - "name": "antarchy:water_cannon" - } - ], - "conditions": [ - { - "condition": "minecraft:killed_by_player" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:entities/toreterror" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/triffid.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/triffid.json deleted file mode 100644 index 703b4e66..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/triffid.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:triffid_goo" - } - ], - "conditions": [ - { - "condition": "minecraft:killed_by_player" - } - ], - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 5.0 - } - }, - { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 1.0 - } - } - ] - } - ], - "random_sequence": "antarchy:entities/triffid" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/worm.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/worm.json deleted file mode 100644 index c9cec376..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/worm.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:worm_tooth", - "functions": [ - { - "function": "minecraft:set_count", - "count": 1 - } - ] - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/basilisk_lair/hard.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/basilisk_lair/hard.json deleted file mode 100644 index 310a2352..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/basilisk_lair/hard.json +++ /dev/null @@ -1,214 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [ - { - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:basilisk_fang", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:basilisk_dagger", - "weight": 3, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 18.0, - "max": 30.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:crossbow", - "weight": 10, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 20.0, - "max": 30.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:diamond_sword", - "weight": 8, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 20.0, - "max": 30.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:diamond_pickaxe", - "weight": 7, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 18.0, - "max": 30.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:arrow", - "weight": 16, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 24.0, - "max": 48.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:bluestone", - "weight": 14, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 8.0, - "max": 20.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:redstone", - "weight": 14, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 8.0, - "max": 20.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:diamond", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 3.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:golden_apple", - "weight": 10 - }, - { - "type": "minecraft:item", - "name": "minecraft:book", - "weight": 10, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 20.0, - "max": 30.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 5.0, - "max": 8.0 - } - }, - { - "entries": [ - { - "type": "minecraft:empty", - "weight": 64 - }, - { - "type": "minecraft:item", - "name": "antarchy:uranium_nugget", - "weight": 7, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 3.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:titanium_nugget", - "weight": 7, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 3.0 - } - } - ] - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:spawners/basilisk_lair/hard" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/basilisk_lair/medium.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/basilisk_lair/medium.json deleted file mode 100644 index 5fe07766..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/basilisk_lair/medium.json +++ /dev/null @@ -1,187 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [ - { - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:arrow", - "weight": 18, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 14.0, - "max": 36.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:bow", - "weight": 12, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 10.0, - "max": 22.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:iron_sword", - "weight": 10, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 10.0, - "max": 22.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:iron_pickaxe", - "weight": 10, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 8.0, - "max": 20.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:bluestone", - "weight": 16, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 5.0, - "max": 14.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:redstone", - "weight": 16, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 5.0, - "max": 14.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:dispenser", - "weight": 7 - }, - { - "type": "minecraft:item", - "name": "minecraft:tripwire_hook", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 4.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:ouranwood_acorn", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 4.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:golden_apple", - "weight": 5 - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 7.0 - } - }, - { - "entries": [ - { - "type": "minecraft:empty", - "weight": 72 - }, - { - "type": "minecraft:item", - "name": "antarchy:uranium_nugget", - "weight": 6, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:titanium_nugget", - "weight": 6, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - } - ] - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:spawners/basilisk_lair/medium" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/fallen_kingdom_castle/hard.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/fallen_kingdom_castle/hard.json deleted file mode 100644 index d18616d0..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/fallen_kingdom_castle/hard.json +++ /dev/null @@ -1,231 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [ - { - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:diamond", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 4.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:gold_ingot", - "weight": 14, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 6.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:emerald", - "weight": 12, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 4.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:copper_ingot", - "weight": 14, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 8.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:book", - "weight": 8, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 15.0, - "max": 30.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:crossbow", - "weight": 10, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 15.0, - "max": 30.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:arrow", - "weight": 14, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 12.0, - "max": 32.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:duct_tape", - "weight": 10, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 3.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:torch", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 12.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:bread", - "weight": 12, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 6.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:mud_pie", - "weight": 4 - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 7.0 - } - }, - { - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:fallen_king_crown", - "weight": 6, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 1.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:uranium_nugget", - "weight": 9, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:titanium_nugget", - "weight": 9, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:golden_apple", - "weight": 9 - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - } - ], - "random_sequence": "antarchy:spawners/fallen_kingdom_castle/trail_chamber/hard" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/fallen_kingdom_castle/medium.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/fallen_kingdom_castle/medium.json deleted file mode 100644 index 69b9914a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/fallen_kingdom_castle/medium.json +++ /dev/null @@ -1,260 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [ - { - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:bread", - "weight": 18, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 6.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:iron_ingot", - "weight": 12, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 4.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:copper_ingot", - "weight": 14, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 8.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:gold_ingot", - "weight": 10, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 4.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:arrow", - "weight": 14, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 8.0, - "max": 24.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:torch", - "weight": 10, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 12.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:duct_tape", - "weight": 10, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 3.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:potion", - "weight": 6, - "functions": [ - { - "function": "minecraft:set_components", - "components": { - "minecraft:potion_contents": { - "potion": "antarchy:shrinking" - } - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:potion", - "weight": 6, - "functions": [ - { - "function": "minecraft:set_components", - "components": { - "minecraft:potion_contents": { - "potion": "antarchy:growing" - } - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:emerald", - "weight": 6, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 3.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:mud_pie", - "weight": 4 - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 3.0, - "max": 6.0 - } - }, - { - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:fallen_king_crown", - "weight": 4, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 1.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:uranium_nugget", - "weight": 7, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:titanium_nugget", - "weight": 7, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:golden_apple", - "weight": 7 - }, - { - "type": "minecraft:item", - "name": "minecraft:diamond", - "weight": 4, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:book", - "weight": 4, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 10.0, - "max": 25.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - } - ], - "random_sequence": "antarchy:spawners/fallen_kingdom_castle/trail_chamber/medium" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/queen_castle/hard.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/queen_castle/hard.json deleted file mode 100644 index b6d023b6..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/queen_castle/hard.json +++ /dev/null @@ -1,7 +0,0 @@ -{"type":"minecraft:chest","pools":[{"rolls":{"type":"minecraft:uniform","min":6,"max":9},"entries":[ -{"type":"minecraft:item","name":"minecraft:diamond_sword","weight":8,"functions":[{"function":"minecraft:enchant_with_levels","levels":{"type":"minecraft:uniform","min":24,"max":35},"options":"#minecraft:on_random_loot"}]},{"type":"minecraft:item","name":"minecraft:diamond_pickaxe","weight":8,"functions":[{"function":"minecraft:enchant_with_levels","levels":{"type":"minecraft:uniform","min":24,"max":35},"options":"#minecraft:on_random_loot"}]}, -{"type":"minecraft:item","name":"antarchy:blood_crystal_katana","weight":6},{"type":"minecraft:item","name":"antarchy:blood_crystal_helmet","weight":2},{"type":"minecraft:item","name":"antarchy:blood_crystal_chestplate","weight":2},{"type":"minecraft:item","name":"antarchy:blood_crystal_leggings","weight":2},{"type":"minecraft:item","name":"antarchy:blood_crystal_boots","weight":2},{"type":"minecraft:item","name":"antarchy:lucid_pearl","weight":5}, -{"type":"minecraft:item","name":"antarchy:blood_crystal_shard","weight":14,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":3,"max":8}}]},{"type":"minecraft:item","name":"antarchy:blood_crystal_apple","weight":22,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":1,"max":4}}]}, -{"type":"minecraft:item","name":"antarchy:bluestone","weight":14,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":10,"max":24}}]},{"type":"minecraft:item","name":"antarchy:nyxite","weight":10,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":4,"max":10}}]}, -{"type":"minecraft:item","name":"minecraft:enchanted_golden_apple","weight":2},{"type":"minecraft:item","name":"minecraft:potion","weight":9,"functions":[{"function":"minecraft:set_potion","id":"antarchy:inversion"}]},{"type":"minecraft:item","name":"minecraft:tipped_arrow","weight":9,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":6,"max":16}},{"function":"minecraft:set_potion","id":"antarchy:inversion"}]},{"type":"minecraft:item","name":"minecraft:book","weight":14,"functions":[{"function":"minecraft:enchant_randomly","options":["minecraft:mending","minecraft:unbreaking","minecraft:protection","minecraft:efficiency","minecraft:fortune"]}]},{"type":"minecraft:item","name":"antarchy:titanium_ingot","weight":1},{"type":"minecraft:item","name":"antarchy:uranium_ingot","weight":1} -]}],"random_sequence":"antarchy:spawners/queen_castle/hard"} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/queen_castle/medium.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/queen_castle/medium.json deleted file mode 100644 index 6119fe04..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/queen_castle/medium.json +++ /dev/null @@ -1,7 +0,0 @@ -{"type":"minecraft:chest","pools":[{"rolls":{"type":"minecraft:uniform","min":5,"max":8},"entries":[ -{"type":"minecraft:item","name":"minecraft:diamond_sword","weight":8,"functions":[{"function":"minecraft:enchant_with_levels","levels":{"type":"minecraft:uniform","min":18,"max":28},"options":"#minecraft:on_random_loot"}]},{"type":"minecraft:item","name":"minecraft:diamond_pickaxe","weight":7,"functions":[{"function":"minecraft:enchant_with_levels","levels":{"type":"minecraft:uniform","min":18,"max":28},"options":"#minecraft:on_random_loot"}]}, -{"type":"minecraft:item","name":"antarchy:blood_crystal_katana","weight":4},{"type":"minecraft:item","name":"antarchy:blood_crystal_chestplate","weight":2},{"type":"minecraft:item","name":"antarchy:blood_crystal_leggings","weight":2}, -{"type":"minecraft:item","name":"antarchy:bluestone","weight":15,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":8,"max":18}}]},{"type":"minecraft:item","name":"antarchy:nyxite","weight":10,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":2,"max":6}}]}, -{"type":"minecraft:item","name":"antarchy:blood_crystal_shard","weight":12,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":2,"max":5}}]},{"type":"minecraft:item","name":"antarchy:blood_crystal_apple","weight":21,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":1,"max":3}}]}, -{"type":"minecraft:item","name":"minecraft:potion","weight":9,"functions":[{"function":"minecraft:set_potion","id":"antarchy:inversion"}]},{"type":"minecraft:item","name":"minecraft:tipped_arrow","weight":9,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":4,"max":12}},{"function":"minecraft:set_potion","id":"antarchy:inversion"}]},{"type":"minecraft:item","name":"minecraft:book","weight":11,"functions":[{"function":"minecraft:enchant_randomly","options":["minecraft:mending","minecraft:unbreaking","minecraft:protection","minecraft:efficiency"]}]} -]}],"random_sequence":"antarchy:spawners/queen_castle/medium"} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/ruined_arena/hard.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/ruined_arena/hard.json deleted file mode 100644 index bba31926..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/ruined_arena/hard.json +++ /dev/null @@ -1,348 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [ - { - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:ultimate_sword", - "weight": 2 - }, - { - "type": "minecraft:item", - "name": "antarchy:ultimate_bow", - "weight": 2 - }, - { - "type": "minecraft:item", - "name": "antarchy:ultimate_crossbow", - "weight": 2 - }, - { - "type": "minecraft:item", - "name": "minecraft:diamond_sword", - "weight": 10, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 24.0, - "max": 30.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:crossbow", - "weight": 10, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 24.0, - "max": 30.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:bow", - "weight": 8, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 24.0, - "max": 30.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:shield", - "weight": 8 - }, - { - "type": "minecraft:item", - "name": "minecraft:arrow", - "weight": 18, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 24.0, - "max": 48.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:spectral_arrow", - "weight": 12, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 12.0, - "max": 24.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:experience_bottle", - "weight": 12, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 5.0, - "max": 10.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:potion", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_components", - "components": { - "minecraft:potion_contents": { - "potion": "minecraft:strength" - } - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:potion", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_components", - "components": { - "minecraft:potion_contents": { - "potion": "minecraft:swiftness" - } - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:potion", - "weight": 6, - "functions": [ - { - "function": "minecraft:set_components", - "components": { - "minecraft:potion_contents": { - "potion": "minecraft:regeneration" - } - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:book", - "weight": 10, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 24.0, - "max": 30.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:golden_apple", - "weight": 10 - }, - { - "type": "minecraft:item", - "name": "minecraft:diamond", - "weight": 6, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 4.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:uranium_nugget", - "weight": 56, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 9.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:titanium_nugget", - "weight": 56, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 9.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:uranium_ingot", - "weight": 2, - "functions": [ - { - "function": "minecraft:set_count", - "count": 1 - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:titanium_ingot", - "weight": 2, - "functions": [ - { - "function": "minecraft:set_count", - "count": 1 - } - ] - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 5.0, - "max": 8.0 - } - }, - { - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:diamond_sword", - "weight": 8, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 24.0, - "max": 30.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:crossbow", - "weight": 8, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 24.0, - "max": 30.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:book", - "weight": 10, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 25.0, - "max": 30.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:netherite_scrap", - "weight": 4, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:diamond", - "weight": 6, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 3.0 - } - } - ] - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - } - ], - "random_sequence": "antarchy:spawners/ruined_arena/hard" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/ruined_arena/medium.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/ruined_arena/medium.json deleted file mode 100644 index 7f1876a4..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/ruined_arena/medium.json +++ /dev/null @@ -1,279 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [ - { - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:iron_sword", - "weight": 18, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 8.0, - "max": 20.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:crossbow", - "weight": 16, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 10.0, - "max": 22.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:bow", - "weight": 14, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 10.0, - "max": 22.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:shield", - "weight": 10 - }, - { - "type": "minecraft:item", - "name": "minecraft:arrow", - "weight": 20, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 16.0, - "max": 36.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:spectral_arrow", - "weight": 10, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 8.0, - "max": 20.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:experience_bottle", - "weight": 10, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 3.0, - "max": 7.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:potion", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_components", - "components": { - "minecraft:potion_contents": { - "potion": "minecraft:swiftness" - } - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:potion", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_components", - "components": { - "minecraft:potion_contents": { - "potion": "minecraft:strength" - } - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:potion", - "weight": 6, - "functions": [ - { - "function": "minecraft:set_components", - "components": { - "minecraft:potion_contents": { - "potion": "minecraft:healing" - } - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:emerald", - "weight": 10, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 6.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:gold_ingot", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 7.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:lapis_lazuli", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 5.0, - "max": 12.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:uranium_nugget", - "weight": 48, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 3.0, - "max": 7.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:titanium_nugget", - "weight": 48, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 3.0, - "max": 7.0 - } - } - ] - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 7.0 - } - }, - { - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:diamond_sword", - "weight": 4, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 20.0, - "max": 30.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:book", - "weight": 6, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 20.0, - "max": 30.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:golden_apple", - "weight": 6 - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 1.0 - } - } - ], - "random_sequence": "antarchy:spawners/ruined_arena/medium" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/ruined_prison/hard.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/ruined_prison/hard.json deleted file mode 100644 index 827dccb2..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/ruined_prison/hard.json +++ /dev/null @@ -1,274 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [ - { - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:diamond_sword", - "weight": 10, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 24.0, - "max": 30.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:crossbow", - "weight": 10, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 24.0, - "max": 30.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:shield", - "weight": 8 - }, - { - "type": "minecraft:item", - "name": "minecraft:arrow", - "weight": 18, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 24.0, - "max": 48.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:spectral_arrow", - "weight": 12, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 12.0, - "max": 24.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:experience_bottle", - "weight": 12, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 5.0, - "max": 10.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:potion", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_components", - "components": { - "minecraft:potion_contents": { - "potion": "minecraft:strength" - } - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:potion", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_components", - "components": { - "minecraft:potion_contents": { - "potion": "minecraft:regeneration" - } - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:book", - "weight": 10, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 24.0, - "max": 30.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:golden_apple", - "weight": 10 - }, - { - "type": "minecraft:item", - "name": "minecraft:diamond", - "weight": 6, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 4.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:uranium_nugget", - "weight": 40, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 8.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:titanium_nugget", - "weight": 40, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 8.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:uranium_ingot", - "weight": 2 - }, - { - "type": "minecraft:item", - "name": "antarchy:titanium_ingot", - "weight": 2 - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 5.0, - "max": 8.0 - } - }, - { - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:crossbow", - "weight": 8, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 24.0, - "max": 30.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:book", - "weight": 10, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 25.0, - "max": 30.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:netherite_scrap", - "weight": 4, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:diamond", - "weight": 6, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 3.0 - } - } - ] - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - } - ], - "random_sequence": "antarchy:spawners/ruined_prison/hard" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/ruined_prison/medium.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/ruined_prison/medium.json deleted file mode 100644 index 8ce546a3..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/ruined_prison/medium.json +++ /dev/null @@ -1,248 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [ - { - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:iron_sword", - "weight": 18, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 8.0, - "max": 20.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:crossbow", - "weight": 16, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 10.0, - "max": 22.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:shield", - "weight": 12 - }, - { - "type": "minecraft:item", - "name": "minecraft:arrow", - "weight": 20, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 16.0, - "max": 36.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:spectral_arrow", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 6.0, - "max": 14.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:experience_bottle", - "weight": 10, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 3.0, - "max": 7.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:potion", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_components", - "components": { - "minecraft:potion_contents": { - "potion": "minecraft:strength" - } - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:potion", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_components", - "components": { - "minecraft:potion_contents": { - "potion": "minecraft:healing" - } - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:emerald", - "weight": 10, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 5.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:iron_ingot", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 6.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:chain", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 6.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:uranium_nugget", - "weight": 32, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 6.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:titanium_nugget", - "weight": 32, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 6.0 - } - } - ] - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 7.0 - } - }, - { - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:diamond_sword", - "weight": 4, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 20.0, - "max": 30.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:book", - "weight": 6, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 20.0, - "max": 30.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:golden_apple", - "weight": 6 - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 1.0 - } - } - ], - "random_sequence": "antarchy:spawners/ruined_prison/medium" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/scorpion_arena/hard.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/scorpion_arena/hard.json deleted file mode 100644 index 989d2620..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/scorpion_arena/hard.json +++ /dev/null @@ -1,9 +0,0 @@ -{"type":"minecraft:chest","pools":[{"rolls":{"type":"minecraft:uniform","min":5,"max":8},"entries":[ -{"type":"minecraft:item","name":"minecraft:diamond_sword","weight":8,"functions":[{"function":"minecraft:enchant_with_levels","levels":{"type":"minecraft:uniform","min":20,"max":30},"options":"#minecraft:on_random_loot"}]},{"type":"minecraft:item","name":"minecraft:diamond_pickaxe","weight":7,"functions":[{"function":"minecraft:enchant_with_levels","levels":{"type":"minecraft:uniform","min":20,"max":30},"options":"#minecraft:on_random_loot"}]}, -{"type":"minecraft:item","name":"antarchy:blood_crystal_katana","weight":5},{"type":"minecraft:item","name":"antarchy:blood_crystal_chestplate","weight":2},{"type":"minecraft:item","name":"antarchy:blood_crystal_leggings","weight":2}, -{"type":"minecraft:item","name":"antarchy:bluestone","weight":14,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":8,"max":20}}]}, -{"type":"minecraft:item","name":"antarchy:blood_crystal_shard","weight":12,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":2,"max":6}}]}, -{"type":"minecraft:item","name":"antarchy:blood_crystal_apple","weight":20,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":1,"max":3}}]}, -{"type":"minecraft:item","name":"minecraft:tipped_arrow","weight":8,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":4,"max":10}},{"function":"minecraft:set_potion","id":"antarchy:inversion"}]},{"type":"minecraft:item","name":"minecraft:potion","weight":8,"functions":[{"function":"minecraft:set_potion","id":"antarchy:inversion"}]}, -{"type":"minecraft:item","name":"minecraft:book","weight":10,"functions":[{"function":"minecraft:enchant_randomly","options":["minecraft:mending","minecraft:unbreaking","minecraft:sharpness","minecraft:protection"]}]},{"type":"minecraft:item","name":"antarchy:titanium_ingot","weight":1},{"type":"minecraft:item","name":"antarchy:uranium_ingot","weight":1} -]}],"random_sequence":"antarchy:spawners/scorpion_arena/hard"} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/scorpion_arena/medium.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/scorpion_arena/medium.json deleted file mode 100644 index fd12e4fd..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/scorpion_arena/medium.json +++ /dev/null @@ -1,10 +0,0 @@ -{"type":"minecraft:chest","pools":[{"rolls":{"type":"minecraft:uniform","min":4,"max":7},"entries":[ -{"type":"minecraft:item","name":"minecraft:arrow","weight":16,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":14,"max":36}}]}, -{"type":"minecraft:item","name":"minecraft:tipped_arrow","weight":8,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":2,"max":6}},{"function":"minecraft:set_potion","id":"antarchy:inversion"}]}, -{"type":"minecraft:item","name":"minecraft:iron_sword","weight":9},{"type":"minecraft:item","name":"antarchy:blood_crystal_katana","weight":2}, -{"type":"minecraft:item","name":"antarchy:blood_crystal_helmet","weight":2},{"type":"minecraft:item","name":"antarchy:blood_crystal_boots","weight":2}, -{"type":"minecraft:item","name":"antarchy:bluestone","weight":14,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":5,"max":14}}]}, -{"type":"minecraft:item","name":"antarchy:blood_crystal_shard","weight":10,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":1,"max":3}}]}, -{"type":"minecraft:item","name":"antarchy:blood_crystal_apple","weight":18,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":1,"max":2}}]}, -{"type":"minecraft:item","name":"minecraft:potion","weight":8,"functions":[{"function":"minecraft:set_potion","id":"antarchy:inversion"}]},{"type":"minecraft:item","name":"minecraft:book","weight":6,"functions":[{"function":"minecraft:enchant_randomly","options":["minecraft:mending","minecraft:unbreaking","minecraft:sharpness"]}]} -]}],"random_sequence":"antarchy:spawners/scorpion_arena/medium"} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/stampys_house/hard.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/stampys_house/hard.json deleted file mode 100644 index bc533a4b..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/stampys_house/hard.json +++ /dev/null @@ -1,231 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [ - { - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:diamond", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 4.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:gold_ingot", - "weight": 14, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 6.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:emerald", - "weight": 12, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 4.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:copper_ingot", - "weight": 14, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 8.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:book", - "weight": 8, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 15.0, - "max": 30.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:crossbow", - "weight": 10, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 15.0, - "max": 30.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:arrow", - "weight": 14, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 12.0, - "max": 32.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:duct_tape", - "weight": 10, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 3.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:torch", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 12.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:bread", - "weight": 12, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 6.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:mud_pie", - "weight": 4 - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 7.0 - } - }, - { - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:fallen_king_crown", - "weight": 6, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 1.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:uranium_nugget", - "weight": 9, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:titanium_nugget", - "weight": 9, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:golden_apple", - "weight": 9 - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - } - ], - "random_sequence": "antarchy:spawners/stampys_house/trail_chamber/hard" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/stampys_house/medium.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/stampys_house/medium.json deleted file mode 100644 index f01c5d6e..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/stampys_house/medium.json +++ /dev/null @@ -1,260 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [ - { - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:bread", - "weight": 18, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 6.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:iron_ingot", - "weight": 12, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 4.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:copper_ingot", - "weight": 14, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 8.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:gold_ingot", - "weight": 10, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 4.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:arrow", - "weight": 14, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 8.0, - "max": 24.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:torch", - "weight": 10, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 12.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:duct_tape", - "weight": 10, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 3.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:potion", - "weight": 6, - "functions": [ - { - "function": "minecraft:set_components", - "components": { - "minecraft:potion_contents": { - "potion": "antarchy:shrinking" - } - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:potion", - "weight": 6, - "functions": [ - { - "function": "minecraft:set_components", - "components": { - "minecraft:potion_contents": { - "potion": "antarchy:growing" - } - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:emerald", - "weight": 6, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 3.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:mud_pie", - "weight": 4 - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 3.0, - "max": 6.0 - } - }, - { - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:fallen_king_crown", - "weight": 4, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 1.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:uranium_nugget", - "weight": 7, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:titanium_nugget", - "weight": 7, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:golden_apple", - "weight": 7 - }, - { - "type": "minecraft:item", - "name": "minecraft:diamond", - "weight": 4, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:book", - "weight": 4, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 10.0, - "max": 25.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - } - ], - "random_sequence": "antarchy:spawners/stampys_house/trail_chamber/medium" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/temple_of_technoblade/hard.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/temple_of_technoblade/hard.json deleted file mode 100644 index 3f56bc73..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/temple_of_technoblade/hard.json +++ /dev/null @@ -1,185 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [ - { - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:diamond", - "weight": 10, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 4.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:emerald", - "weight": 14, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 7.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:gold_ingot", - "weight": 16, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 12.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:amethyst_shard", - "weight": 12, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 5.0, - "max": 14.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:blood_crystal_shard", - "weight": 10, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 4.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:tigers_eye", - "weight": 10, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 4.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:book", - "weight": 10, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 20.0, - "max": 30.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:experience_bottle", - "weight": 10, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 10.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:golden_apple", - "weight": 10 - }, - { - "type": "minecraft:item", - "name": "antarchy:fallen_king_crown", - "weight": 3 - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 5.0, - "max": 8.0 - } - }, - { - "entries": [ - { - "type": "minecraft:empty", - "weight": 62 - }, - { - "type": "minecraft:item", - "name": "antarchy:uranium_nugget", - "weight": 7, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 3.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:titanium_nugget", - "weight": 7, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 3.0 - } - } - ] - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:spawners/temple_of_technoblade/hard" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/temple_of_technoblade/medium.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/temple_of_technoblade/medium.json deleted file mode 100644 index 673d0075..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/temple_of_technoblade/medium.json +++ /dev/null @@ -1,195 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [ - { - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:baked_potato", - "weight": 18, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 12.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:cooked_porkchop", - "weight": 12, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 8.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:golden_carrot", - "weight": 10, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 4.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:gold_ingot", - "weight": 14, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 7.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:emerald", - "weight": 12, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 4.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:amethyst_shard", - "weight": 12, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 3.0, - "max": 9.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:tigers_eye", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 3.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:experience_bottle", - "weight": 8, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 6.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:book", - "weight": 8, - "functions": [ - { - "function": "minecraft:enchant_with_levels", - "levels": { - "type": "minecraft:uniform", - "min": 12.0, - "max": 24.0 - }, - "options": "#minecraft:on_random_loot" - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:golden_apple", - "weight": 6 - } - ], - "rolls": { - "type": "minecraft:uniform", - "min": 4.0, - "max": 7.0 - } - }, - { - "entries": [ - { - "type": "minecraft:empty", - "weight": 70 - }, - { - "type": "minecraft:item", - "name": "antarchy:uranium_nugget", - "weight": 6, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "antarchy:titanium_nugget", - "weight": 6, - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - } - ] - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:spawners/temple_of_technoblade/medium" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/underside_ruins/hard.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/underside_ruins/hard.json deleted file mode 100644 index 69807370..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/underside_ruins/hard.json +++ /dev/null @@ -1,7 +0,0 @@ -{"type":"minecraft:chest","pools":[{"rolls":{"type":"minecraft:uniform","min":5,"max":8},"entries":[ -{"type":"minecraft:item","name":"minecraft:diamond_pickaxe","weight":8,"functions":[{"function":"minecraft:enchant_with_levels","levels":{"type":"minecraft:uniform","min":20,"max":30},"options":"#minecraft:on_random_loot"}]},{"type":"minecraft:item","name":"minecraft:diamond_sword","weight":7,"functions":[{"function":"minecraft:enchant_with_levels","levels":{"type":"minecraft:uniform","min":20,"max":30},"options":"#minecraft:on_random_loot"}]}, -{"type":"minecraft:item","name":"antarchy:blood_crystal_katana","weight":4},{"type":"minecraft:item","name":"antarchy:blood_crystal_chestplate","weight":2},{"type":"minecraft:item","name":"antarchy:blood_crystal_leggings","weight":2},{"type":"minecraft:item","name":"antarchy:lucid_pearl","weight":4}, -{"type":"minecraft:item","name":"antarchy:bluestone","weight":14,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":8,"max":20}}]},{"type":"minecraft:item","name":"antarchy:nyxite","weight":10,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":3,"max":8}}]}, -{"type":"minecraft:item","name":"antarchy:blood_crystal_apple","weight":20,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":1,"max":3}}]}, -{"type":"minecraft:item","name":"minecraft:tipped_arrow","weight":8,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":4,"max":10}},{"function":"minecraft:set_potion","id":"antarchy:inversion"}]},{"type":"minecraft:item","name":"minecraft:potion","weight":8,"functions":[{"function":"minecraft:set_potion","id":"antarchy:inversion"}]},{"type":"minecraft:item","name":"minecraft:book","weight":10,"functions":[{"function":"minecraft:enchant_randomly","options":["minecraft:mending","minecraft:unbreaking","minecraft:efficiency","minecraft:fortune"]}]},{"type":"minecraft:item","name":"antarchy:titanium_ingot","weight":1},{"type":"minecraft:item","name":"antarchy:uranium_ingot","weight":1} -]}],"random_sequence":"antarchy:spawners/underside_ruins/hard"} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/underside_ruins/medium.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/underside_ruins/medium.json deleted file mode 100644 index 82a0792a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/underside_ruins/medium.json +++ /dev/null @@ -1,9 +0,0 @@ -{"type":"minecraft:chest","pools":[{"rolls":{"type":"minecraft:uniform","min":4,"max":7},"entries":[ -{"type":"minecraft:item","name":"minecraft:iron_pickaxe","weight":10},{"type":"minecraft:item","name":"minecraft:arrow","weight":15,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":12,"max":32}}]}, -{"type":"minecraft:item","name":"minecraft:tipped_arrow","weight":9,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":2,"max":6}},{"function":"minecraft:set_potion","id":"antarchy:inversion"}]}, -{"type":"minecraft:item","name":"antarchy:blood_crystal_katana","weight":2},{"type":"minecraft:item","name":"antarchy:blood_crystal_helmet","weight":2},{"type":"minecraft:item","name":"antarchy:blood_crystal_boots","weight":2}, -{"type":"minecraft:item","name":"antarchy:bluestone","weight":15,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":5,"max":14}}]}, -{"type":"minecraft:item","name":"antarchy:nyxite","weight":10,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":1,"max":4}}]}, -{"type":"minecraft:item","name":"antarchy:blood_crystal_apple","weight":18,"functions":[{"function":"minecraft:set_count","count":{"type":"minecraft:uniform","min":1,"max":2}}]}, -{"type":"minecraft:item","name":"minecraft:potion","weight":9,"functions":[{"function":"minecraft:set_potion","id":"antarchy:inversion"}]},{"type":"minecraft:item","name":"minecraft:book","weight":7,"functions":[{"function":"minecraft:enchant_randomly","options":["minecraft:mending","minecraft:unbreaking","minecraft:efficiency"]}]} -]}],"random_sequence":"antarchy:spawners/underside_ruins/medium"} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ant_trap.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ant_trap.json new file mode 100644 index 00000000..bb39d6df --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ant_trap.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:ant_trap" + } + ] + } + ], + "random_sequence": "antarchy:blocks/ant_trap" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/antimetal_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/antimetal_slab.json index 959fbd3c..2a3a0e71 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/antimetal_slab.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/antimetal_slab.json @@ -41,4 +41,4 @@ } ], "random_sequence": "antarchy:blocks/antimetal_slab" -} \ No newline at end of file +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/antimetal_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/antimetal_stairs.json index f81249ea..61f0b7da 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/antimetal_stairs.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/antimetal_stairs.json @@ -17,4 +17,4 @@ } ], "random_sequence": "antarchy:blocks/antimetal_stairs" -} \ No newline at end of file +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/black_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/black_truffalo_tuft.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/black_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/black_truffalo_tuft.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/blood_crystal_cluster.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/blood_crystal_cluster.json index 3f5b2e29..2c24daf8 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/blood_crystal_cluster.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/blood_crystal_cluster.json @@ -12,16 +12,14 @@ { "condition": "minecraft:match_tool", "predicate": { - "predicates": { - "minecraft:enchantments": [ - { - "enchantments": "minecraft:silk_touch", - "levels": { - "min": 1 - } + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 } - ] - } + } + ] } } ], @@ -36,7 +34,7 @@ { "condition": "minecraft:match_tool", "predicate": { - "items": "#minecraft:cluster_max_harvestables" + "tag": "minecraft:cluster_max_harvestables" } } ], @@ -76,4 +74,3 @@ ], "random_sequence": "minecraft:blocks/amethyst_cluster" } - diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/blue_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/blue_truffalo_tuft.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/blue_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/blue_truffalo_tuft.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/bluestone_ore.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/bluestone_ore.json index b7f5736d..8233e38f 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/bluestone_ore.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/bluestone_ore.json @@ -19,13 +19,14 @@ { "condition": "minecraft:match_tool", "predicate": { - "components": { - "minecraft:enchantments": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", "levels": { - "minecraft:silk_touch": 1 + "min": 1 } } - } + ] } } ] diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/broodstone_titanium_ore.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/broodstone_titanium_ore.json index e82655e1..5da10c37 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/broodstone_titanium_ore.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/broodstone_titanium_ore.json @@ -19,13 +19,14 @@ { "condition": "minecraft:match_tool", "predicate": { - "components": { - "minecraft:enchantments": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", "levels": { - "minecraft:silk_touch": 1 + "min": 1 } } - } + ] } } ] diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/broodstone_uranium_ore.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/broodstone_uranium_ore.json index adc15d84..1dbee8eb 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/broodstone_uranium_ore.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/broodstone_uranium_ore.json @@ -19,13 +19,14 @@ { "condition": "minecraft:match_tool", "predicate": { - "components": { - "minecraft:enchantments": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", "levels": { - "minecraft:silk_touch": 1 + "min": 1 } } - } + ] } } ] diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/brown_ant_nest.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/brown_ant_nest.json index 41e87a40..3877c0a5 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/brown_ant_nest.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/brown_ant_nest.json @@ -10,13 +10,14 @@ { "condition": "minecraft:match_tool", "predicate": { - "components": { - "minecraft:enchantments": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", "levels": { - "minecraft:silk_touch": 1 + "min": 1 } } - } + ] } } ], diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/brown_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/brown_truffalo_tuft.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/brown_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/brown_truffalo_tuft.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/chiseled_loam_bricks.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/chiseled_loam_bricks.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/chiseled_loam_bricks.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/chiseled_loam_bricks.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/chiseled_myrmite.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/chiseled_myrmite.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/chiseled_myrmite.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/chiseled_myrmite.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/chiseled_typhonite.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/chiseled_typhonite.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/chiseled_typhonite.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/chiseled_typhonite.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/corn_crop.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/corn_crop.json index 90a0d86e..54de69a3 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/corn_crop.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/corn_crop.json @@ -3,19 +3,38 @@ "pools": [ { "rolls": 1.0, - "conditions": [ - { - "condition": "minecraft:block_state_property", - "block": "antarchy:corn_crop", - "properties": { - "half": "lower" - } - } - ], "entries": [ { - "type": "minecraft:item", - "name": "antarchy:corn" + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "name": "antarchy:corn", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "antarchy:corn_crop", + "properties": { + "half": "lower", + "age": "3" + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:corn_seeds", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "antarchy:corn_crop", + "properties": { + "half": "lower" + } + } + ] + } + ] } ] }, diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/crawling_blight_egg.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/crawling_blight_egg.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/crawling_blight_egg.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/crawling_blight_egg.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/budding_blood_crystal.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/crawling_blight_eggs.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/budding_blood_crystal.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/crawling_blight_eggs.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/creeping_horror_egg.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/creeping_horror_egg.json deleted file mode 100644 index 2a3ec5b3..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/creeping_horror_egg.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:creeping_horror_egg", - "functions": [ - { - "function": "minecraft:explosion_decay" - } - ] - } - ] - } - ], - "random_sequence": "minecraft:blocks/turtle_egg" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/creeping_horror_eggs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/creeping_horror_eggs.json deleted file mode 100644 index ee8223b7..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/creeping_horror_eggs.json +++ /dev/null @@ -1 +0,0 @@ -{"type":"minecraft:block","pools":[]} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/critter_cage_block.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/critter_cage_block.json index 6e74c8cd..252e36ed 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/critter_cage_block.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/critter_cage_block.json @@ -16,14 +16,8 @@ ], "functions": [ { - "function": "minecraft:copy_nbt", - "source": "block_entity", - "ops": [ - { "source": "EntityType", "target": "antarchy_critter_cage_entity_type", "op": "replace" }, - { "source": "EntityData", "target": "EntityData", "op": "replace" }, - { "source": "PrimaryColor", "target": "antarchy_critter_cage_primary_color", "op": "replace" }, - { "source": "SecondaryColor", "target": "antarchy_critter_cage_secondary_color", "op": "replace" } - ] + "function": "minecraft:copy_name", + "source": "block_entity" } ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/cut_titanium_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/cut_titanium_wall.json deleted file mode 100644 index 6e1ae02c..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/cut_titanium_wall.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:cut_titanium_wall" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/cut_uranium_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/cut_uranium_wall.json deleted file mode 100644 index 7360e0cf..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/cut_uranium_wall.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:cut_uranium_wall" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/cyan_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/cyan_truffalo_tuft.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/cyan_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/cyan_truffalo_tuft.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dead_star_coral.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dead_star_coral.json index d34f10d0..27583e39 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dead_star_coral.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dead_star_coral.json @@ -7,13 +7,14 @@ { "condition": "minecraft:match_tool", "predicate": { - "components": { - "minecraft:enchantments": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", "levels": { - "minecraft:silk_touch": 1 + "min": 1 } } - } + ] } } ], diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dead_star_coral_fan.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dead_star_coral_fan.json index 43218c24..dd13c0b3 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dead_star_coral_fan.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dead_star_coral_fan.json @@ -7,13 +7,14 @@ { "condition": "minecraft:match_tool", "predicate": { - "components": { - "minecraft:enchantments": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", "levels": { - "minecraft:silk_touch": 1 + "min": 1 } } - } + ] } } ], diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dead_star_coral_wall_fan.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dead_star_coral_wall_fan.json index 43218c24..dd13c0b3 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dead_star_coral_wall_fan.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dead_star_coral_wall_fan.json @@ -7,13 +7,14 @@ { "condition": "minecraft:match_tool", "predicate": { - "components": { - "minecraft:enchantments": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", "levels": { - "minecraft:silk_touch": 1 + "min": 1 } } - } + ] } } ], diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/deepslate_titanium_ore.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/deepslate_titanium_ore.json index a1bef158..cd5eeea4 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/deepslate_titanium_ore.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/deepslate_titanium_ore.json @@ -19,13 +19,14 @@ { "condition": "minecraft:match_tool", "predicate": { - "components": { - "minecraft:enchantments": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", "levels": { - "minecraft:silk_touch": 1 + "min": 1 } } - } + ] } } ] diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/deepslate_uranium_ore.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/deepslate_uranium_ore.json index f2199bdf..cea1fbcc 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/deepslate_uranium_ore.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/deepslate_uranium_ore.json @@ -19,13 +19,14 @@ { "condition": "minecraft:match_tool", "predicate": { - "components": { - "minecraft:enchantments": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", "levels": { - "minecraft:silk_touch": 1 + "min": 1 } } - } + ] } } ] diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dream_campfire.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dream_campfire.json index 8bf38e8a..bfdde8b1 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dream_campfire.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dream_campfire.json @@ -10,13 +10,14 @@ { "condition": "minecraft:match_tool", "predicate": { - "components": { - "minecraft:enchantments": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", "levels": { - "minecraft:silk_touch": 1 + "min": 1 } } - } + ] } } ], diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/duskbell.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/duskbell.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/duskbell.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/duskbell.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/flytrap_goo_block.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/flytrap_goo_block.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/flytrap_goo_block.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/flytrap_goo_block.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/gorevine.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/gorevine.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/gorevine.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/gorevine.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/gray_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/gray_truffalo_tuft.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/gray_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/gray_truffalo_tuft.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/green_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/green_truffalo_tuft.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/green_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/green_truffalo_tuft.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/jumpy_bug_egg.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/jumpy_bug_egg.json deleted file mode 100644 index 56e63d63..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/jumpy_bug_egg.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:jumpy_bug_egg" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/jumpy_bug_egg" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/large_blood_crystal_bud.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/large_blood_crystal_bud.json index 802a65ec..367aa31a 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/large_blood_crystal_bud.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/large_blood_crystal_bud.json @@ -9,16 +9,14 @@ { "condition": "minecraft:match_tool", "predicate": { - "predicates": { - "minecraft:enchantments": [ - { - "enchantments": "minecraft:silk_touch", - "levels": { - "min": 1 - } + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 } - ] - } + } + ] } } ], @@ -30,4 +28,3 @@ ], "random_sequence": "minecraft:blocks/large_amethyst_bud" } - diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/large_nadir_fern.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/large_nadir_fern.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/large_nadir_fern.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/large_nadir_fern.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/light_blue_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/light_blue_truffalo_tuft.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/light_blue_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/light_blue_truffalo_tuft.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/light_gray_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/light_gray_truffalo_tuft.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/light_gray_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/light_gray_truffalo_tuft.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/lime_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/lime_truffalo_tuft.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/lime_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/lime_truffalo_tuft.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/loam_brick_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/loam_brick_slab.json new file mode 100644 index 00000000..372fc159 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/loam_brick_slab.json @@ -0,0 +1,35 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "conditions": [ + { + "block": "antarchy:loam_brick_slab", + "condition": "minecraft:block_state_property", + "properties": { + "type": "double" + } + } + ], + "count": 2.0, + "function": "minecraft:set_count" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "antarchy:loam_brick_slab" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "antarchy:blocks/loam_brick_slab" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/loam_brick_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/loam_brick_stairs.json new file mode 100644 index 00000000..c8ea174a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/loam_brick_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:loam_brick_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/loam_brick_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/loam_brick_wall.json new file mode 100644 index 00000000..a892de59 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/loam_brick_wall.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:loam_brick_wall" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/loam_bricks.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/loam_bricks.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/loam_bricks.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/loam_bricks.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/lotus.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/lotus.json index 2c7f5cb8..52821de4 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/lotus.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/lotus.json @@ -4,7 +4,9 @@ { "rolls": 1.0, "conditions": [ - { "condition": "minecraft:survives_explosion" } + { + "condition": "minecraft:survives_explosion" + } ], "entries": [ { diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/lurking_terror_egg.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/lurking_terror_egg.json deleted file mode 100644 index 1cfefbdd..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/lurking_terror_egg.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:lurking_terror_egg", - "functions": [ - { - "function": "minecraft:explosion_decay" - } - ] - } - ] - } - ], - "random_sequence": "minecraft:blocks/turtle_egg" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/lurking_terror_eggs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/lurking_terror_eggs.json deleted file mode 100644 index ee8223b7..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/lurking_terror_eggs.json +++ /dev/null @@ -1 +0,0 @@ -{"type":"minecraft:block","pools":[]} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/magenta_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/magenta_truffalo_tuft.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/magenta_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/magenta_truffalo_tuft.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/medium_blood_crystal_bud.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/medium_blood_crystal_bud.json index f8fb2734..73040696 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/medium_blood_crystal_bud.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/medium_blood_crystal_bud.json @@ -9,16 +9,14 @@ { "condition": "minecraft:match_tool", "predicate": { - "predicates": { - "minecraft:enchantments": [ - { - "enchantments": "minecraft:silk_touch", - "levels": { - "min": 1 - } + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 } - ] - } + } + ] } } ], @@ -30,4 +28,3 @@ ], "random_sequence": "minecraft:blocks/medium_amethyst_bud" } - diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_broodstone_brick_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_broodstone_brick_slab.json new file mode 100644 index 00000000..94c69e53 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_broodstone_brick_slab.json @@ -0,0 +1,35 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "conditions": [ + { + "block": "antarchy:mossy_broodstone_brick_slab", + "condition": "minecraft:block_state_property", + "properties": { + "type": "double" + } + } + ], + "count": 2.0, + "function": "minecraft:set_count" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "antarchy:mossy_broodstone_brick_slab" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "antarchy:blocks/mossy_broodstone_brick_slab" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_broodstone_brick_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_broodstone_brick_stairs.json new file mode 100644 index 00000000..ad941bfc --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_broodstone_brick_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:mossy_broodstone_brick_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_broodstone_brick_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_broodstone_brick_wall.json new file mode 100644 index 00000000..65991338 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_broodstone_brick_wall.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:mossy_broodstone_brick_wall" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_broodstone_bricks.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_broodstone_bricks.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_broodstone_bricks.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_broodstone_bricks.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_myrmite_brick_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_myrmite_brick_slab.json new file mode 100644 index 00000000..0b8adf55 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_myrmite_brick_slab.json @@ -0,0 +1,35 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "conditions": [ + { + "block": "antarchy:mossy_myrmite_brick_slab", + "condition": "minecraft:block_state_property", + "properties": { + "type": "double" + } + } + ], + "count": 2.0, + "function": "minecraft:set_count" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "antarchy:mossy_myrmite_brick_slab" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "antarchy:blocks/mossy_myrmite_brick_slab" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_myrmite_brick_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_myrmite_brick_stairs.json new file mode 100644 index 00000000..18fb1683 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_myrmite_brick_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:mossy_myrmite_brick_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_myrmite_brick_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_myrmite_brick_wall.json new file mode 100644 index 00000000..5e063211 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_myrmite_brick_wall.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:mossy_myrmite_brick_wall" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_myrmite_bricks.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_myrmite_bricks.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_myrmite_bricks.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_myrmite_bricks.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_nyxite_brick_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_nyxite_brick_slab.json new file mode 100644 index 00000000..501ff782 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_nyxite_brick_slab.json @@ -0,0 +1,35 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "conditions": [ + { + "block": "antarchy:mossy_nyxite_brick_slab", + "condition": "minecraft:block_state_property", + "properties": { + "type": "double" + } + } + ], + "count": 2.0, + "function": "minecraft:set_count" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "antarchy:mossy_nyxite_brick_slab" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "antarchy:blocks/mossy_nyxite_brick_slab" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_nyxite_brick_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_nyxite_brick_stairs.json new file mode 100644 index 00000000..0c8d5553 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_nyxite_brick_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:mossy_nyxite_brick_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_nyxite_brick_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_nyxite_brick_wall.json new file mode 100644 index 00000000..7ce15352 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_nyxite_brick_wall.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:mossy_nyxite_brick_wall" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_nyxite_bricks.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_nyxite_bricks.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/mossy_nyxite_bricks.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_nyxite_bricks.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/myrmite_brick_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/myrmite_brick_slab.json new file mode 100644 index 00000000..7d1cc21a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/myrmite_brick_slab.json @@ -0,0 +1,35 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "conditions": [ + { + "block": "antarchy:myrmite_brick_slab", + "condition": "minecraft:block_state_property", + "properties": { + "type": "double" + } + } + ], + "count": 2.0, + "function": "minecraft:set_count" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "antarchy:myrmite_brick_slab" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "antarchy:blocks/myrmite_brick_slab" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/myrmite_brick_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/myrmite_brick_stairs.json new file mode 100644 index 00000000..c3001c20 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/myrmite_brick_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:myrmite_brick_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/myrmite_brick_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/myrmite_brick_wall.json new file mode 100644 index 00000000..6fb0146b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/myrmite_brick_wall.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:myrmite_brick_wall" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/myrmite_bricks.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/myrmite_bricks.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/myrmite_bricks.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/myrmite_bricks.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/myrmite_coal_ore.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/myrmite_coal_ore.json index 6da2ca1d..da0ab104 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/myrmite_coal_ore.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/myrmite_coal_ore.json @@ -19,13 +19,14 @@ { "condition": "minecraft:match_tool", "predicate": { - "components": { - "minecraft:enchantments": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", "levels": { - "minecraft:silk_touch": 1 + "min": 1 } } - } + ] } } ] diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/myrmite_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/myrmite_slab.json new file mode 100644 index 00000000..dbb60b5a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/myrmite_slab.json @@ -0,0 +1,35 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "conditions": [ + { + "block": "antarchy:myrmite_slab", + "condition": "minecraft:block_state_property", + "properties": { + "type": "double" + } + } + ], + "count": 2.0, + "function": "minecraft:set_count" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "antarchy:myrmite_slab" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "antarchy:blocks/myrmite_slab" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/myrmite_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/myrmite_stairs.json new file mode 100644 index 00000000..f7bc19a3 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/myrmite_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:myrmite_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/myrmite_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/myrmite_wall.json new file mode 100644 index 00000000..2d47f756 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/myrmite_wall.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:myrmite_wall" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_fern.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_fern.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_fern.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_fern.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_nyxium.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_nyxium.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_nyxium.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_nyxium.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_roots.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_roots.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_roots.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_roots.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/orange_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/orange_truffalo_tuft.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/orange_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/orange_truffalo_tuft.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_button.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_button.json index 44d807f6..062af04a 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_button.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_button.json @@ -18,4 +18,4 @@ } ], "random_sequence": "minecraft:blocks/jungle_button" -} \ No newline at end of file +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_door.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_door.json index f5e80def..1dc25c24 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_door.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_door.json @@ -27,4 +27,4 @@ } ], "random_sequence": "minecraft:blocks/jungle_door" -} \ No newline at end of file +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_fence.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_fence.json index 7caf870a..fdfd5479 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_fence.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_fence.json @@ -18,4 +18,4 @@ } ], "random_sequence": "minecraft:blocks/jungle_fence" -} \ No newline at end of file +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_fence_gate.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_fence_gate.json index b5611fc4..56560230 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_fence_gate.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_fence_gate.json @@ -18,4 +18,4 @@ } ], "random_sequence": "minecraft:blocks/jungle_fence_gate" -} \ No newline at end of file +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_leaves.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_leaves.json index 2957533a..435bbdc3 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_leaves.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_leaves.json @@ -16,22 +16,22 @@ { "condition": "minecraft:match_tool", "predicate": { - "items": "minecraft:shears" + "items": [ + "minecraft:shears" + ] } }, { "condition": "minecraft:match_tool", "predicate": { - "predicates": { - "minecraft:enchantments": [ - { - "enchantments": "minecraft:silk_touch", - "levels": { - "min": 1 - } + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 } - ] - } + } + ] } } ] @@ -75,22 +75,22 @@ { "condition": "minecraft:match_tool", "predicate": { - "items": "minecraft:shears" + "items": [ + "minecraft:shears" + ] } }, { "condition": "minecraft:match_tool", "predicate": { - "predicates": { - "minecraft:enchantments": [ - { - "enchantments": "minecraft:silk_touch", - "levels": { - "min": 1 - } + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 } - ] - } + } + ] } } ] diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_log.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_log.json index d4293289..4f2eabb2 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_log.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_log.json @@ -18,4 +18,4 @@ } ], "random_sequence": "minecraft:blocks/jungle_log" -} \ No newline at end of file +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_planks.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_planks.json index a06fd256..ae9db21c 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_planks.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_planks.json @@ -18,4 +18,4 @@ } ], "random_sequence": "minecraft:blocks/jungle_planks" -} \ No newline at end of file +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_pressure_plate.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_pressure_plate.json index 572da244..5cf75506 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_pressure_plate.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_pressure_plate.json @@ -18,4 +18,4 @@ } ], "random_sequence": "minecraft:blocks/jungle_pressure_plate" -} \ No newline at end of file +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_slab.json index 2607b412..2781210e 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_slab.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_slab.json @@ -32,4 +32,4 @@ } ], "random_sequence": "minecraft:blocks/jungle_slab" -} \ No newline at end of file +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_stairs.json index 5000d99f..84029be5 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_stairs.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_stairs.json @@ -18,4 +18,4 @@ } ], "random_sequence": "minecraft:blocks/jungle_stairs" -} \ No newline at end of file +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_trapdoor.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_trapdoor.json index b117b21c..d806e46f 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_trapdoor.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_trapdoor.json @@ -18,4 +18,4 @@ } ], "random_sequence": "minecraft:blocks/jungle_trapdoor" -} \ No newline at end of file +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_wood.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_wood.json index 1a7dbd98..471f4727 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_wood.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_wood.json @@ -18,4 +18,4 @@ } ], "random_sequence": "minecraft:blocks/jungle_wood" -} \ No newline at end of file +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/packed_loam.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/packed_loam.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/packed_loam.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/packed_loam.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/peach_leaves.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/peach_leaves.json index f1a2b349..26ddc7fb 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/peach_leaves.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/peach_leaves.json @@ -16,22 +16,22 @@ { "condition": "minecraft:match_tool", "predicate": { - "items": "minecraft:shears" + "items": [ + "minecraft:shears" + ] } }, { "condition": "minecraft:match_tool", "predicate": { - "predicates": { - "minecraft:enchantments": [ - { - "enchantments": "minecraft:silk_touch", - "levels": { - "min": 1 - } + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 } - ] - } + } + ] } } ] @@ -75,22 +75,22 @@ { "condition": "minecraft:match_tool", "predicate": { - "items": "minecraft:shears" + "items": [ + "minecraft:shears" + ] } }, { "condition": "minecraft:match_tool", "predicate": { - "predicates": { - "minecraft:enchantments": [ - { - "enchantments": "minecraft:silk_touch", - "levels": { - "min": 1 - } + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 } - ] - } + } + ] } } ] @@ -135,4 +135,3 @@ ], "random_sequence": "antarchy:blocks/peach_leaves" } - diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/pink_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/pink_truffalo_tuft.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/pink_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/pink_truffalo_tuft.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_antimetal_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_antimetal_slab.json index 624081d1..cacdfe2a 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_antimetal_slab.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_antimetal_slab.json @@ -41,4 +41,4 @@ } ], "random_sequence": "antarchy:blocks/polished_antimetal_slab" -} \ No newline at end of file +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_antimetal_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_antimetal_stairs.json index e96674d5..a6e1ea3f 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_antimetal_stairs.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_antimetal_stairs.json @@ -17,4 +17,4 @@ } ], "random_sequence": "antarchy:blocks/polished_antimetal_stairs" -} \ No newline at end of file +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_myrmite.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_myrmite.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_myrmite.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_myrmite.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_myrmite_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_myrmite_slab.json new file mode 100644 index 00000000..683604b6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_myrmite_slab.json @@ -0,0 +1,35 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "conditions": [ + { + "block": "antarchy:polished_myrmite_slab", + "condition": "minecraft:block_state_property", + "properties": { + "type": "double" + } + } + ], + "count": 2.0, + "function": "minecraft:set_count" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "antarchy:polished_myrmite_slab" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "antarchy:blocks/polished_myrmite_slab" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_myrmite_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_myrmite_stairs.json new file mode 100644 index 00000000..f3b033dc --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_myrmite_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:polished_myrmite_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_myrmite_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_myrmite_wall.json new file mode 100644 index 00000000..d93f981e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_myrmite_wall.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:polished_myrmite_wall" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_typhonite.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_typhonite.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_typhonite.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_typhonite.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_typhonite_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_typhonite_slab.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_typhonite_slab.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_typhonite_slab.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_typhonite_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_typhonite_stairs.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_typhonite_stairs.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_typhonite_stairs.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_typhonite_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_typhonite_wall.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/polished_typhonite_wall.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_typhonite_wall.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/potted_truffalo_sapling.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/potted_truffalo_sapling.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/potted_truffalo_sapling.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/potted_truffalo_sapling.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/prince_egg.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/prince_egg.json new file mode 100644 index 00000000..1efc16b8 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/prince_egg.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:prince_egg" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/princess_egg.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/princess_egg.json new file mode 100644 index 00000000..0c2ff280 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/princess_egg.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:princess_egg" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/purple_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/purple_truffalo_tuft.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/purple_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/purple_truffalo_tuft.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/rainbow_ant_nest.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/rainbow_ant_nest.json index bd2bcf15..9f0a44c5 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/rainbow_ant_nest.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/rainbow_ant_nest.json @@ -10,13 +10,14 @@ { "condition": "minecraft:match_tool", "predicate": { - "components": { - "minecraft:enchantments": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", "levels": { - "minecraft:silk_touch": 1 + "min": 1 } } - } + ] } } ], diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/red_ant_nest.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/red_ant_nest.json index 1db5c81a..00ce0e0a 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/red_ant_nest.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/red_ant_nest.json @@ -10,13 +10,14 @@ { "condition": "minecraft:match_tool", "predicate": { - "components": { - "minecraft:enchantments": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", "levels": { - "minecraft:silk_touch": 1 + "min": 1 } } - } + ] } } ], diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/red_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/red_truffalo_tuft.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/red_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/red_truffalo_tuft.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/royal_button.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/royal_button.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/royal_button.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/royal_button.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/royal_door.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/royal_door.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/royal_door.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/royal_door.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/royal_fence.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/royal_fence.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/royal_fence.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/royal_fence.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/royal_fence_gate.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/royal_fence_gate.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/royal_fence_gate.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/royal_fence_gate.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/royal_flowering_leaves.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/royal_flowering_leaves.json similarity index 79% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/royal_flowering_leaves.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/royal_flowering_leaves.json index ee441fed..977a599d 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/royal_flowering_leaves.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/royal_flowering_leaves.json @@ -16,22 +16,22 @@ { "condition": "minecraft:match_tool", "predicate": { - "items": "minecraft:shears" + "items": [ + "minecraft:shears" + ] } }, { "condition": "minecraft:match_tool", "predicate": { - "predicates": { - "minecraft:enchantments": [ - { - "enchantments": "minecraft:silk_touch", - "levels": { - "min": 1 - } + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 } - ] - } + } + ] } } ] @@ -75,22 +75,22 @@ { "condition": "minecraft:match_tool", "predicate": { - "items": "minecraft:shears" + "items": [ + "minecraft:shears" + ] } }, { "condition": "minecraft:match_tool", "predicate": { - "predicates": { - "minecraft:enchantments": [ - { - "enchantments": "minecraft:silk_touch", - "levels": { - "min": 1 - } + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 } - ] - } + } + ] } } ] diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/royal_hanging_sign.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/royal_hanging_sign.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/royal_hanging_sign.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/royal_hanging_sign.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/royal_leaves.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/royal_leaves.json similarity index 79% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/royal_leaves.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/royal_leaves.json index ace26aac..55d596fe 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/royal_leaves.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/royal_leaves.json @@ -16,22 +16,22 @@ { "condition": "minecraft:match_tool", "predicate": { - "items": "minecraft:shears" + "items": [ + "minecraft:shears" + ] } }, { "condition": "minecraft:match_tool", "predicate": { - "predicates": { - "minecraft:enchantments": [ - { - "enchantments": "minecraft:silk_touch", - "levels": { - "min": 1 - } + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 } - ] - } + } + ] } } ] @@ -75,22 +75,22 @@ { "condition": "minecraft:match_tool", "predicate": { - "items": "minecraft:shears" + "items": [ + "minecraft:shears" + ] } }, { "condition": "minecraft:match_tool", "predicate": { - "predicates": { - "minecraft:enchantments": [ - { - "enchantments": "minecraft:silk_touch", - "levels": { - "min": 1 - } + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 } - ] - } + } + ] } } ] diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/royal_log.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/royal_log.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/royal_log.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/royal_log.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/royal_planks.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/royal_planks.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/royal_planks.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/royal_planks.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/royal_pressure_plate.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/royal_pressure_plate.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/royal_pressure_plate.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/royal_pressure_plate.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/royal_sapling.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/royal_sapling.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/royal_sapling.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/royal_sapling.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/royal_sign.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/royal_sign.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/royal_sign.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/royal_sign.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/royal_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/royal_slab.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/royal_slab.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/royal_slab.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/royal_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/royal_stairs.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/royal_stairs.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/royal_stairs.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/royal_trapdoor.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/royal_trapdoor.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/royal_trapdoor.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/royal_trapdoor.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/royal_wall_hanging_sign.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/royal_wall_hanging_sign.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/royal_wall_hanging_sign.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/royal_wall_hanging_sign.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/royal_wall_sign.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/royal_wall_sign.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/royal_wall_sign.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/royal_wall_sign.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/royal_wood.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/royal_wood.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/royal_wood.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/royal_wood.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/skulking_fright_egg.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/skulking_fright_egg.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/skulking_fright_egg.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/skulking_fright_egg.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/cloud_block.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/skulking_fright_eggs.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/cloud_block.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/skulking_fright_eggs.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/small_blood_crystal_bud.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/small_blood_crystal_bud.json index c3210026..0000a195 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/small_blood_crystal_bud.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/small_blood_crystal_bud.json @@ -9,16 +9,14 @@ { "condition": "minecraft:match_tool", "predicate": { - "predicates": { - "minecraft:enchantments": [ - { - "enchantments": "minecraft:silk_touch", - "levels": { - "min": 1 - } + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 } - ] - } + } + ] } } ], @@ -30,4 +28,3 @@ ], "random_sequence": "minecraft:blocks/small_amethyst_bud" } - diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/spiraling_vines.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/spiraling_vines.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/spiraling_vines.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/spiraling_vines.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/springbug_egg.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/springbug_egg.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/springbug_egg.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/springbug_egg.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/star_coral.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/star_coral.json index 2b132dbf..d1965f06 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/star_coral.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/star_coral.json @@ -13,13 +13,14 @@ { "condition": "minecraft:match_tool", "predicate": { - "components": { - "minecraft:enchantments": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", "levels": { - "minecraft:silk_touch": 1 + "min": 1 } } - } + ] } } ], diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/star_coral_block.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/star_coral_block.json index f1b69b32..7cec5341 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/star_coral_block.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/star_coral_block.json @@ -13,13 +13,14 @@ { "condition": "minecraft:match_tool", "predicate": { - "components": { - "minecraft:enchantments": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", "levels": { - "minecraft:silk_touch": 1 + "min": 1 } } - } + ] } } ], diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/star_coral_fan.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/star_coral_fan.json index 0794b0d4..0d305efb 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/star_coral_fan.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/star_coral_fan.json @@ -13,13 +13,14 @@ { "condition": "minecraft:match_tool", "predicate": { - "components": { - "minecraft:enchantments": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", "levels": { - "minecraft:silk_touch": 1 + "min": 1 } } - } + ] } } ], diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/star_coral_wall_fan.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/star_coral_wall_fan.json index 0794b0d4..0d305efb 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/star_coral_wall_fan.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/star_coral_wall_fan.json @@ -13,13 +13,14 @@ { "condition": "minecraft:match_tool", "predicate": { - "components": { - "minecraft:enchantments": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", "levels": { - "minecraft:silk_touch": 1 + "min": 1 } } - } + ] } } ], diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/stripped_ouranwood_log.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/stripped_ouranwood_log.json index 50d3061e..59f623b8 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/stripped_ouranwood_log.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/stripped_ouranwood_log.json @@ -18,4 +18,4 @@ } ], "random_sequence": "minecraft:blocks/stripped_jungle_log" -} \ No newline at end of file +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/stripped_ouranwood_wood.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/stripped_ouranwood_wood.json index 6e4679ad..6994b390 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/stripped_ouranwood_wood.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/stripped_ouranwood_wood.json @@ -18,4 +18,4 @@ } ], "random_sequence": "minecraft:blocks/stripped_jungle_wood" -} \ No newline at end of file +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/stripped_royal_log.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/stripped_royal_log.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/stripped_royal_log.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/stripped_royal_log.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/stripped_royal_wood.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/stripped_royal_wood.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/stripped_royal_wood.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/stripped_royal_wood.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/stripped_truffalo_log.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/stripped_truffalo_log.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/stripped_truffalo_log.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/stripped_truffalo_log.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/stripped_truffalo_wood.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/stripped_truffalo_wood.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/stripped_truffalo_wood.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/stripped_truffalo_wood.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/termite_nest.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/termite_nest.json index c222199e..c2c1e0e0 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/termite_nest.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/termite_nest.json @@ -10,13 +10,14 @@ { "condition": "minecraft:match_tool", "predicate": { - "components": { - "minecraft:enchantments": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", "levels": { - "minecraft:silk_touch": 1 + "min": 1 } } - } + ] } } ], diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/tigers_eye_block.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/tigers_eye_block.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/tigers_eye_block.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/tigers_eye_block.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/titanium_ore.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/titanium_ore.json index f2298a83..ad9b166a 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/titanium_ore.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/titanium_ore.json @@ -19,13 +19,14 @@ { "condition": "minecraft:match_tool", "predicate": { - "components": { - "minecraft:enchantments": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", "levels": { - "minecraft:silk_touch": 1 + "min": 1 } } - } + ] } } ] diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/triffid_goo_block.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/triffid_goo_block.json deleted file mode 100644 index b09e8e76..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/triffid_goo_block.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:triffid_goo_block" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ], - "random_sequence": "antarchy:blocks/triffid_goo_block" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_button.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/truffalo_button.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_button.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/truffalo_button.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_door.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/truffalo_door.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_door.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/truffalo_door.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_fence.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/truffalo_fence.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_fence.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/truffalo_fence.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_fence_gate.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/truffalo_fence_gate.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_fence_gate.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/truffalo_fence_gate.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_hanging_sign.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/truffalo_hanging_sign.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_hanging_sign.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/truffalo_hanging_sign.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_log.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/truffalo_log.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_log.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/truffalo_log.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_planks.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/truffalo_planks.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_planks.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/truffalo_planks.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_pressure_plate.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/truffalo_pressure_plate.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_pressure_plate.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/truffalo_pressure_plate.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_sapling.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/truffalo_sapling.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_sapling.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/truffalo_sapling.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_sign.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/truffalo_sign.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_sign.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/truffalo_sign.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/truffalo_slab.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_slab.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/truffalo_slab.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/truffalo_stairs.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_stairs.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/truffalo_stairs.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_trapdoor.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/truffalo_trapdoor.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_trapdoor.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/truffalo_trapdoor.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_wall_hanging_sign.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/truffalo_wall_hanging_sign.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_wall_hanging_sign.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/truffalo_wall_hanging_sign.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_wall_sign.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/truffalo_wall_sign.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_wall_sign.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/truffalo_wall_sign.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_wood.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/truffalo_wood.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_wood.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/truffalo_wood.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/typhonite.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/typhonite.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/typhonite.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/typhonite.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/typhonite_brick_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/typhonite_brick_slab.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/typhonite_brick_slab.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/typhonite_brick_slab.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/typhonite_brick_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/typhonite_brick_stairs.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/typhonite_brick_stairs.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/typhonite_brick_stairs.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/typhonite_brick_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/typhonite_brick_wall.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/typhonite_brick_wall.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/typhonite_brick_wall.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/typhonite_bricks.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/typhonite_bricks.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/typhonite_bricks.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/typhonite_bricks.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/typhonite_pillar.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/typhonite_pillar.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/typhonite_pillar.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/typhonite_pillar.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/typhonite_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/typhonite_slab.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/typhonite_slab.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/typhonite_slab.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/typhonite_spike.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/typhonite_spike.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/typhonite_spike.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/typhonite_spike.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/typhonite_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/typhonite_stairs.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/typhonite_stairs.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/typhonite_stairs.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/typhonite_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/typhonite_wall.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/typhonite_wall.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/typhonite_wall.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/uranium_ore.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/uranium_ore.json index 41202d6b..2f36426e 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/uranium_ore.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/uranium_ore.json @@ -19,13 +19,14 @@ { "condition": "minecraft:match_tool", "predicate": { - "components": { - "minecraft:enchantments": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", "levels": { - "minecraft:silk_touch": 1 + "min": 1 } } - } + ] } } ] diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/veined_typhonite.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/veined_typhonite.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/veined_typhonite.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/veined_typhonite.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/verdant_nyxium.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/verdant_nyxium.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/verdant_nyxium.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/verdant_nyxium.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/verdant_roots.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/verdant_roots.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/verdant_roots.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/verdant_roots.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/vortex_lens.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/vortex_lens.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/vortex_lens.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/vortex_lens.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/wasp_nest.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/wasp_nest.json index cb9d67c8..3573a5e0 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/wasp_nest.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/wasp_nest.json @@ -10,13 +10,14 @@ { "condition": "minecraft:match_tool", "predicate": { - "components": { - "minecraft:enchantments": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", "levels": { - "minecraft:silk_touch": 1 + "min": 1 } } - } + ] } } ], diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/whirlflower.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/whirlflower.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/whirlflower.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/whirlflower.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/white_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/white_truffalo_tuft.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/white_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/white_truffalo_tuft.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/yellow_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/yellow_truffalo_tuft.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/yellow_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/yellow_truffalo_tuft.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/apple_cow_orchard.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/apple_cow_orchard.json new file mode 100644 index 00000000..5ab7ea94 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/apple_cow_orchard.json @@ -0,0 +1,163 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 4, + "max": 7 + }, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:apple", + "weight": 20, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:golden_apple", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "minecraft:shears", + "weight": 4 + }, + { + "type": "minecraft:item", + "name": "antarchy:corn", + "weight": 12, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:high_fructose_corn_syrup", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:wheat", + "weight": 14, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:bread", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:hay_block", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:emerald", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:kraken\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:high_fructose_corn_syrup\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:rainbow_ant\"}" + } + ] + } + ] + } + ], + "random_sequence": "antarchy:chests/apple_cow_orchard" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/basilisk_lair/generic.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/basilisk_lair/generic.json index 93e08b3c..a0087f51 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/basilisk_lair/generic.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/basilisk_lair/generic.json @@ -115,7 +115,7 @@ "min": 6.0, "max": 18.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -148,6 +148,50 @@ } } ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 4, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:elythia\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 4, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:kraken\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 4, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:glimmer\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 4, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:brutalfly\"}" + } + ] } ], "rolls": { diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/basilisk_lair/treasure.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/basilisk_lair/treasure.json index 3c2530ea..6cf23e39 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/basilisk_lair/treasure.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/basilisk_lair/treasure.json @@ -30,7 +30,51 @@ "min": 12.0, "max": 25.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:basilisk_game\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:elythia\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:kraken\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:glimmer\"}" } ] }, @@ -106,7 +150,7 @@ "min": 10.0, "max": 24.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -122,7 +166,7 @@ "min": 12.0, "max": 24.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -131,6 +175,11 @@ "name": "minecraft:golden_apple", "weight": 8 }, + { + "type": "minecraft:item", + "name": "antarchy:music_disc_verdance", + "weight": 2 + }, { "type": "minecraft:item", "name": "minecraft:book", @@ -143,7 +192,7 @@ "min": 15.0, "max": 30.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/computer_prototype.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/computer_prototype.json new file mode 100644 index 00000000..69b1645e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/computer_prototype.json @@ -0,0 +1,76 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 1, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:chronosphere\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 4, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:elythia\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 4, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:flying_squirrel\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 4, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:rainbow_ant\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 4, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:cavaryn\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 1, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:basilisk_game\"}" + } + ] + } + ] + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/fallen_kingdom_castle/generic.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/fallen_kingdom_castle/generic.json index 1946e603..3e8b3655 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/fallen_kingdom_castle/generic.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/fallen_kingdom_castle/generic.json @@ -192,6 +192,28 @@ ], "name": "antarchy:titanium_nugget", "weight": 4 + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:elythia\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:kraken\"}" + } + ] } ], "rolls": { diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/fallen_kingdom_castle/tower.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/fallen_kingdom_castle/tower.json index dcd6b2a2..d65b5ef7 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/fallen_kingdom_castle/tower.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/fallen_kingdom_castle/tower.json @@ -15,7 +15,7 @@ "min": 5.0, "max": 22.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -31,7 +31,7 @@ "min": 6.0, "max": 24.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -47,7 +47,7 @@ "min": 18.0, "max": 30.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -63,7 +63,7 @@ "min": 18.0, "max": 30.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/fallen_kingdom_castle/treasure.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/fallen_kingdom_castle/treasure.json index be90946f..d6ebb498 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/fallen_kingdom_castle/treasure.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/fallen_kingdom_castle/treasure.json @@ -58,7 +58,7 @@ "max": 35.0, "min": 20.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ], "name": "minecraft:book", @@ -93,6 +93,33 @@ ], "name": "minecraft:diamond", "weight": 12 + }, + { + "type": "minecraft:item", + "name": "antarchy:music_disc_verdance", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:elythia\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:kraken\"}" + } + ] } ], "rolls": { @@ -140,6 +167,29 @@ } ], "rolls": 1.0 + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:portal_gun_atlas" + }, + { + "type": "minecraft:item", + "name": "antarchy:portal_gun_p_body" + }, + { + "type": "minecraft:item", + "name": "antarchy:portal_gun_craisin" + } + ], + "conditions": [ + { + "condition": "minecraft:random_chance", + "chance": 0.02 + } + ] } ], "random_sequence": "antarchy:chests/fallen_kingdom/treasure" diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/magical_castle/bedroom.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/magical_castle/bedroom.json new file mode 100644 index 00000000..e57f0877 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/magical_castle/bedroom.json @@ -0,0 +1,196 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 3, + "max": 6 + }, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:ouranwood_acorn", + "weight": 12, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:peach", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:truffalo_log", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:duct_tape", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:bug_spray", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:critter_cage", + "weight": 4 + }, + { + "type": "minecraft:item", + "name": "minecraft:book", + "weight": 8 + }, + { + "type": "minecraft:item", + "name": "minecraft:paper", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:candle", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 1, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:brutalfly\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 1, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:elythia\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 1, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:flying_squirrel\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 1, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:glimmer\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 1, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:king\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 1, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:toreterror_arena\"}" + } + ] + } + ] + } + ], + "random_sequence": "antarchy:chests/magical_castle/bedroom" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/magical_castle/generic.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/magical_castle/generic.json new file mode 100644 index 00000000..01d1e9d2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/magical_castle/generic.json @@ -0,0 +1,484 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 4, + "max": 7 + }, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:white_truffalo_tuft", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:orange_truffalo_tuft", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:magenta_truffalo_tuft", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:light_blue_truffalo_tuft", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:yellow_truffalo_tuft", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:lime_truffalo_tuft", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:pink_truffalo_tuft", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:gray_truffalo_tuft", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:light_gray_truffalo_tuft", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:cyan_truffalo_tuft", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:purple_truffalo_tuft", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:blue_truffalo_tuft", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:brown_truffalo_tuft", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:green_truffalo_tuft", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:red_truffalo_tuft", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:black_truffalo_tuft", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:truffalo_log", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:peach", + "weight": 12, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:ouranwood_acorn", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:peach_pie", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:cornbread", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:duct_tape", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:bug_spray", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:critter_cage", + "weight": 3 + }, + { + "type": "minecraft:item", + "name": "antarchy:uranium_nugget", + "weight": 1, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:titanium_nugget", + "weight": 1, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:brutalfly\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:elythia\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:flying_squirrel\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:glimmer\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:king\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:toreterror_arena\"}" + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:portal_gun_atlas" + }, + { + "type": "minecraft:item", + "name": "antarchy:portal_gun_p_body" + }, + { + "type": "minecraft:item", + "name": "antarchy:portal_gun_craisin" + } + ], + "conditions": [ + { + "condition": "minecraft:random_chance", + "chance": 0.03 + } + ] + } + ], + "random_sequence": "antarchy:chests/magical_castle/generic" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/magical_castle/kitchen.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/magical_castle/kitchen.json new file mode 100644 index 00000000..012b79d2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/magical_castle/kitchen.json @@ -0,0 +1,206 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 3, + "max": 6 + }, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:peach", + "weight": 18, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:peach_pie", + "weight": 12, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:cornbread", + "weight": 12, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:ouranwood_acorn", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:bread", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:cookie", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:apple", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:milk_bucket", + "weight": 3 + }, + { + "type": "minecraft:item", + "name": "antarchy:bug_spray", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 1, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:brutalfly\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 1, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:elythia\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 1, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:flying_squirrel\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 1, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:glimmer\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 1, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:king\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 1, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:toreterror_arena\"}" + } + ] + } + ] + } + ], + "random_sequence": "antarchy:chests/magical_castle/kitchen" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/queen_castle/generic.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/queen_castle/generic.json new file mode 100644 index 00000000..615118cf --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/queen_castle/generic.json @@ -0,0 +1,227 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 6, + "max": 9 + }, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:diamond_sword", + "weight": 8, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 18, + "max": 30 + }, + "treasure": false + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:diamond_pickaxe", + "weight": 7, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 18, + "max": 30 + }, + "treasure": false + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_helmet", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_chestplate", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_leggings", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_boots", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:bluestone", + "weight": 14, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 8, + "max": 20 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:nyxite", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_shard", + "weight": 12, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_apple", + "weight": 20, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:lucid_pearl", + "weight": 4 + }, + { + "type": "minecraft:item", + "name": "minecraft:golden_apple", + "weight": 5 + }, + { + "type": "minecraft:item", + "name": "minecraft:potion", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_potion", + "id": "antarchy:inversion" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:tipped_arrow", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 12 + } + }, + { + "function": "minecraft:set_potion", + "id": "antarchy:inversion" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:book", + "weight": 10, + "functions": [ + { + "function": "minecraft:enchant_randomly", + "enchantments": [ + "minecraft:mending", + "minecraft:unbreaking", + "minecraft:protection", + "minecraft:efficiency" + ] + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 4, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:thoraxis\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:temporal_fields\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:bloodglass\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:vortex\"}" + } + ] + } + ] + } + ], + "random_sequence": "antarchy:chests/queen_castle/generic" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/queen_castle/treasure.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/queen_castle/treasure.json new file mode 100644 index 00000000..77ff946a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/queen_castle/treasure.json @@ -0,0 +1,216 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 7, + "max": 10 + }, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:ultimate_helmet", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:ultimate_chestplate", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:ultimate_leggings", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:ultimate_boots", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_katana", + "weight": 5 + }, + { + "type": "minecraft:item", + "name": "antarchy:lucid_pearl", + "weight": 8 + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_shard", + "weight": 14, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_apple", + "weight": 20, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:bluestone", + "weight": 14, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 10, + "max": 24 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:nyxite", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:potent_nyxite", + "weight": 4 + }, + { + "type": "minecraft:item", + "name": "minecraft:enchanted_golden_apple", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "minecraft:book", + "weight": 14, + "functions": [ + { + "function": "minecraft:enchant_randomly", + "enchantments": [ + "minecraft:mending", + "minecraft:unbreaking", + "minecraft:protection", + "minecraft:efficiency", + "minecraft:fortune" + ] + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:potion", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_potion", + "id": "antarchy:inversion" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:tipped_arrow", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 6, + "max": 16 + } + }, + { + "function": "minecraft:set_potion", + "id": "antarchy:inversion" + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:titanium_ingot", + "weight": 1 + }, + { + "type": "minecraft:item", + "name": "antarchy:uranium_ingot", + "weight": 1 + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:thoraxis\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:temporal_fields\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:bloodglass\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:vortex\"}" + } + ] + } + ] + } + ], + "random_sequence": "antarchy:chests/queen_castle/treasure" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/ruined_arena/generic.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/ruined_arena/generic.json index 50dba6cd..c97bb88b 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/ruined_arena/generic.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/ruined_arena/generic.json @@ -15,7 +15,7 @@ "min": 6.0, "max": 20.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -159,7 +159,7 @@ "min": 10.0, "max": 24.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -212,6 +212,39 @@ } } ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:elythia\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:kraken\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:brutalfly\"}" + } + ] } ], "rolls": { @@ -249,7 +282,7 @@ "min": 18.0, "max": 30.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -265,7 +298,7 @@ "min": 18.0, "max": 30.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -281,7 +314,7 @@ "min": 20.0, "max": 30.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/ruined_prison/generic.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/ruined_prison/generic.json index f7a5e755..f77e81c8 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/ruined_prison/generic.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/ruined_prison/generic.json @@ -159,12 +159,8 @@ "weight": 6, "functions": [ { - "function": "minecraft:set_components", - "components": { - "minecraft:potion_contents": { - "potion": "minecraft:healing" - } - } + "function": "minecraft:set_potion", + "id": "minecraft:healing" } ] }, @@ -227,6 +223,28 @@ } } ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:elythia\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:kraken\"}" + } + ] } ], "rolls": { diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/ruined_prison/warden_cache.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/ruined_prison/warden_cache.json index ed539a08..e4726612 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/ruined_prison/warden_cache.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/ruined_prison/warden_cache.json @@ -15,7 +15,7 @@ "min": 10.0, "max": 22.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -31,7 +31,7 @@ "min": 10.0, "max": 22.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -82,7 +82,7 @@ "min": 8.0, "max": 20.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -98,7 +98,7 @@ "min": 8.0, "max": 20.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -123,12 +123,8 @@ "weight": 8, "functions": [ { - "function": "minecraft:set_components", - "components": { - "minecraft:potion_contents": { - "potion": "minecraft:strength" - } - } + "function": "minecraft:set_potion", + "id": "minecraft:strength" } ] }, @@ -138,12 +134,8 @@ "weight": 8, "functions": [ { - "function": "minecraft:set_components", - "components": { - "minecraft:potion_contents": { - "potion": "minecraft:healing" - } - } + "function": "minecraft:set_potion", + "id": "minecraft:healing" } ] }, @@ -159,7 +151,7 @@ "min": 16.0, "max": 28.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -212,6 +204,28 @@ } } ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:elythia\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:kraken\"}" + } + ] } ], "rolls": { @@ -234,7 +248,7 @@ "min": 20.0, "max": 30.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -250,7 +264,7 @@ "min": 20.0, "max": 30.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -266,7 +280,7 @@ "min": 20.0, "max": 30.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/scorpion_arena/generic.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/scorpion_arena/generic.json new file mode 100644 index 00000000..d67c976e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/scorpion_arena/generic.json @@ -0,0 +1,156 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 5, + "max": 8 + }, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:arrow", + "weight": 18, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 12, + "max": 32 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:tipped_arrow", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 6 + } + }, + { + "function": "minecraft:set_potion", + "id": "antarchy:inversion" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:bow", + "weight": 10, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 6, + "max": 18 + }, + "treasure": false + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:iron_sword", + "weight": 8 + }, + { + "type": "minecraft:item", + "name": "minecraft:shield", + "weight": 8 + }, + { + "type": "minecraft:item", + "name": "antarchy:bluestone", + "weight": 15, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_shard", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_apple", + "weight": 14, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:scorpion_whip", + "weight": 3 + }, + { + "type": "minecraft:item", + "name": "minecraft:golden_apple", + "weight": 3 + }, + { + "type": "minecraft:item", + "name": "minecraft:potion", + "weight": 7, + "functions": [ + { + "function": "minecraft:set_potion", + "id": "antarchy:inversion" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:book", + "weight": 5, + "functions": [ + { + "function": "minecraft:enchant_randomly", + "enchantments": [ + "minecraft:mending", + "minecraft:unbreaking", + "minecraft:sharpness" + ] + } + ] + } + ] + } + ], + "random_sequence": "antarchy:chests/scorpion_arena/generic" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/scorpion_arena/treasure.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/scorpion_arena/treasure.json new file mode 100644 index 00000000..d901aeb9 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/scorpion_arena/treasure.json @@ -0,0 +1,182 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 6, + "max": 9 + }, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:scorpion_whip", + "weight": 8 + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_katana", + "weight": 4 + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_helmet", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_chestplate", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_leggings", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_boots", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:lucid_pearl", + "weight": 3 + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_shard", + "weight": 12, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_apple", + "weight": 16, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:bluestone", + "weight": 12, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 8, + "max": 18 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:nyxite", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:diamond_sword", + "weight": 7, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 18, + "max": 30 + }, + "treasure": false + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:book", + "weight": 8, + "functions": [ + { + "function": "minecraft:enchant_randomly", + "enchantments": [ + "minecraft:mending", + "minecraft:unbreaking", + "minecraft:sharpness", + "minecraft:protection" + ] + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:tipped_arrow", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 10 + } + }, + { + "function": "minecraft:set_potion", + "id": "antarchy:inversion" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:potion", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_potion", + "id": "antarchy:inversion" + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:titanium_ingot", + "weight": 1 + }, + { + "type": "minecraft:item", + "name": "antarchy:uranium_ingot", + "weight": 1 + } + ] + } + ], + "random_sequence": "antarchy:chests/scorpion_arena/treasure" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/stampys_house/bedroom.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/stampys_house/bedroom.json index 8fcaf3c1..bf25e721 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/stampys_house/bedroom.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/stampys_house/bedroom.json @@ -90,7 +90,7 @@ "min": 8.0, "max": 20.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/stampys_house/storage.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/stampys_house/storage.json index c7093fe5..b111ae47 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/stampys_house/storage.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/stampys_house/storage.json @@ -140,7 +140,7 @@ "min": 6.0, "max": 18.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -163,6 +163,28 @@ "type": "minecraft:item", "name": "minecraft:golden_apple", "weight": 3 + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:elythia\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:kraken\"}" + } + ] } ], "rolls": { diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/temple_of_technoblade/generic.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/temple_of_technoblade/generic.json index e5882976..b9397b33 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/temple_of_technoblade/generic.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/temple_of_technoblade/generic.json @@ -150,7 +150,7 @@ "min": 8.0, "max": 20.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -158,6 +158,28 @@ "type": "minecraft:item", "name": "minecraft:golden_apple", "weight": 4 + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:elythia\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:kraken\"}" + } + ] } ], "rolls": { diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/temple_of_technoblade/treasure.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/temple_of_technoblade/treasure.json index 189b3f72..c5e2f738 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/temple_of_technoblade/treasure.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/temple_of_technoblade/treasure.json @@ -110,7 +110,7 @@ "min": 18.0, "max": 30.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -118,6 +118,38 @@ "type": "minecraft:item", "name": "antarchy:fallen_king_crown", "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:music_disc_verdance", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_gods_blade", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:elythia\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:kraken\"}" + } + ] } ], "rolls": { @@ -164,6 +196,29 @@ } ], "rolls": 1.0 + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:portal_gun_atlas" + }, + { + "type": "minecraft:item", + "name": "antarchy:portal_gun_p_body" + }, + { + "type": "minecraft:item", + "name": "antarchy:portal_gun_craisin" + } + ], + "conditions": [ + { + "condition": "minecraft:random_chance", + "chance": 0.02 + } + ] } ], "random_sequence": "antarchy:chests/temple_of_technoblade/treasure" diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/tigers_eye_shrine/treasure.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/tigers_eye_shrine/treasure.json new file mode 100644 index 00000000..1d71ec9c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/tigers_eye_shrine/treasure.json @@ -0,0 +1,189 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:uranium_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + } + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:tigers_eye", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:titanium_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 6 + } + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:bone", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:string", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:coal", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:torch", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:rotten_flesh", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:arrow", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:music_disc_grotesque", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 4, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:cavaryn\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 4, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:hercules_beetle\"}" + } + ] + } + ] + } + ], + "random_sequence": "antarchy:chests/tigers_eye_shrine/treasure" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/trayaurus_lab/trayaurus_lab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/trayaurus_lab/trayaurus_lab.json index 949c9991..1d857f1b 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/trayaurus_lab/trayaurus_lab.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/trayaurus_lab/trayaurus_lab.json @@ -181,7 +181,7 @@ "min": 15.0, "max": 30.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ], "name": "minecraft:book", @@ -192,7 +192,7 @@ "functions": [ { "function": "minecraft:enchant_randomly", - "options": [ + "enchantments": [ "minecraft:mending", "minecraft:swift_sneak", "minecraft:frost_walker", @@ -428,6 +428,28 @@ "type": "minecraft:item", "name": "antarchy:mud_pie", "weight": 4 + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 4, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:elythia\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 4, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:kraken\"}" + } + ] } ], "rolls": { diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/underside_ruins/generic.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/underside_ruins/generic.json new file mode 100644 index 00000000..f50e455b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/underside_ruins/generic.json @@ -0,0 +1,226 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 5, + "max": 8 + }, + "entries": [ + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:thoraxis\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:temporal_fields\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:bloodglass\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:vortex\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:arrow", + "weight": 16, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 10, + "max": 28 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:tipped_arrow", + "weight": 9, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 6 + } + }, + { + "function": "minecraft:set_potion", + "id": "antarchy:inversion" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:iron_pickaxe", + "weight": 10 + }, + { + "type": "minecraft:item", + "name": "minecraft:iron_sword", + "weight": 8 + }, + { + "type": "minecraft:item", + "name": "antarchy:bluestone", + "weight": 15, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 12 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:nyxite", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:lucid_eye", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_shard", + "weight": 9, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_apple", + "weight": 15, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:potion", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_potion", + "id": "antarchy:inversion" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:potion", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_potion", + "id": "antarchy:time_contraction" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:potion", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_potion", + "id": "antarchy:time_dilation" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:book", + "weight": 6, + "functions": [ + { + "function": "minecraft:enchant_randomly", + "enchantments": [ + "minecraft:mending", + "minecraft:unbreaking", + "minecraft:efficiency" + ] + } + ] + } + ] + } + ], + "random_sequence": "antarchy:chests/underside_ruins/generic" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/underside_ruins/treasure.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/underside_ruins/treasure.json new file mode 100644 index 00000000..8b2ae3c6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/underside_ruins/treasure.json @@ -0,0 +1,239 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 6, + "max": 9 + }, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:lucid_pearl", + "weight": 8 + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_katana", + "weight": 3 + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_helmet", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_chestplate", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_leggings", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_boots", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:potent_nyxite", + "weight": 4 + }, + { + "type": "minecraft:item", + "name": "antarchy:nyxite", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:bluestone", + "weight": 13, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 8, + "max": 20 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_shard", + "weight": 12, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_apple", + "weight": 16, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:diamond_pickaxe", + "weight": 8, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 18, + "max": 30 + }, + "treasure": false + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:book", + "weight": 10, + "functions": [ + { + "function": "minecraft:enchant_randomly", + "enchantments": [ + "minecraft:mending", + "minecraft:unbreaking", + "minecraft:efficiency", + "minecraft:protection", + "antarchy:feather_rising", + "antarchy:chronosphere" + ] + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:tipped_arrow", + "weight": 7, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 10 + } + }, + { + "function": "minecraft:set_potion", + "id": "antarchy:inversion" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:potion", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_potion", + "id": "antarchy:time_contraction" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:potion", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_potion", + "id": "antarchy:time_dilation" + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:titanium_ingot", + "weight": 1 + }, + { + "type": "minecraft:item", + "name": "antarchy:uranium_ingot", + "weight": 1 + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:thoraxis\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:temporal_fields\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:bloodglass\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:vortex\"}" + } + ] + } + ] + } + ], + "random_sequence": "antarchy:chests/underside_ruins/treasure" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/undertrial_vault.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/undertrial_vault.json similarity index 83% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/undertrial_vault.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/undertrial_vault.json index e13a824e..276dff01 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/undertrial_vault.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/undertrial_vault.json @@ -92,7 +92,7 @@ "functions": [ { "function": "minecraft:enchant_randomly", - "options": [ + "enchantments": [ "antarchy:chronosphere" ] } @@ -129,6 +129,33 @@ "weight": 3 } ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:portal_gun_atlas" + }, + { + "type": "minecraft:item", + "name": "antarchy:portal_gun_p_body" + }, + { + "type": "minecraft:item", + "name": "antarchy:portal_gun_craisin" + }, + { + "type": "minecraft:item", + "name": "antarchy:portal_gun_laynce" + } + ], + "conditions": [ + { + "condition": "minecraft:random_chance", + "chance": 0.08 + } + ] } ], "random_sequence": "antarchy:chests/undertrial_vault" diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/alpha_mantis.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/alpha_mantis.json index 851328fc..435cb22b 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/alpha_mantis.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/alpha_mantis.json @@ -24,8 +24,7 @@ } }, { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", + "function": "minecraft:looting_enchant", "count": { "type": "minecraft:uniform", "min": 0.0, @@ -52,8 +51,7 @@ } }, { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", + "function": "minecraft:looting_enchant", "count": { "type": "minecraft:uniform", "min": 0.0, @@ -80,8 +78,7 @@ } }, { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", + "function": "minecraft:looting_enchant", "count": { "type": "minecraft:uniform", "min": 0.0, @@ -108,8 +105,7 @@ } }, { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", + "function": "minecraft:looting_enchant", "count": { "type": "minecraft:uniform", "min": 0.0, diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/apple_cow.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/apple_cow.json index a7437c82..f9110a55 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/apple_cow.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/apple_cow.json @@ -17,8 +17,7 @@ } }, { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", + "function": "minecraft:looting_enchant", "count": { "type": "minecraft:uniform", "min": 0.0, @@ -59,8 +58,7 @@ ] }, { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", + "function": "minecraft:looting_enchant", "count": { "type": "minecraft:uniform", "min": 0.0, diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/bed_bug.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/bed_bug.json index eb13f53d..e1040b49 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/bed_bug.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/bed_bug.json @@ -17,8 +17,7 @@ } }, { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", + "function": "minecraft:looting_enchant", "count": { "type": "minecraft:uniform", "min": 0.0, diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/brutalfly.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/brutalfly.json index c001fa35..ec20b589 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/brutalfly.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/brutalfly.json @@ -24,8 +24,7 @@ } }, { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", + "function": "minecraft:looting_enchant", "count": { "type": "minecraft:uniform", "min": 0.0, diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/cloud_shark.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/cloud_shark.json deleted file mode 100644 index 5a78e7af..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/cloud_shark.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:cloud_shark_fin" - } - ], - "conditions": [ - { - "condition": "minecraft:killed_by_player" - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/crawling_blight.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/crawling_blight.json similarity index 86% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/crawling_blight.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/crawling_blight.json index 563a90a5..ababefc1 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/crawling_blight.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/crawling_blight.json @@ -17,8 +17,7 @@ } }, { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", + "function": "minecraft:looting_enchant", "count": { "type": "minecraft:uniform", "min": 0.0, @@ -50,8 +49,7 @@ } }, { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", + "function": "minecraft:looting_enchant", "count": { "type": "minecraft:uniform", "min": 0.0, diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/creeping_horror.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/creeping_horror.json deleted file mode 100644 index f402239f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/creeping_horror.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:chitin", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - }, - { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 1.0 - } - } - ] - } - ], - "conditions": [ - { - "condition": "minecraft:killed_by_player" - } - ] - }, - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:raw_bug_meat", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - }, - { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 1.0 - } - } - ] - } - ], - "conditions": [ - { - "condition": "minecraft:killed_by_player" - } - ] - } - ], - "random_sequence": "antarchy:entities/creeping_horror" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/enchanted_golden_apple_cow.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/enchanted_golden_apple_cow.json index a7437c82..f9110a55 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/enchanted_golden_apple_cow.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/enchanted_golden_apple_cow.json @@ -17,8 +17,7 @@ } }, { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", + "function": "minecraft:looting_enchant", "count": { "type": "minecraft:uniform", "min": 0.0, @@ -59,8 +58,7 @@ ] }, { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", + "function": "minecraft:looting_enchant", "count": { "type": "minecraft:uniform", "min": 0.0, diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/flytrap.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/flytrap.json similarity index 87% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/flytrap.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/flytrap.json index 2171a9cc..4440aba7 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/flytrap.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/flytrap.json @@ -24,8 +24,7 @@ } }, { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", + "function": "minecraft:looting_enchant", "count": { "type": "minecraft:uniform", "min": 0.0, diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/golden_apple_cow.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/golden_apple_cow.json index a7437c82..f9110a55 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/golden_apple_cow.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/golden_apple_cow.json @@ -17,8 +17,7 @@ } }, { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", + "function": "minecraft:looting_enchant", "count": { "type": "minecraft:uniform", "min": 0.0, @@ -59,8 +58,7 @@ ] }, { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", + "function": "minecraft:looting_enchant", "count": { "type": "minecraft:uniform", "min": 0.0, diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/hercules_beetle.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/hercules_beetle.json index a30541b2..88dae82a 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/hercules_beetle.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/hercules_beetle.json @@ -17,8 +17,7 @@ } }, { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", + "function": "minecraft:looting_enchant", "count": { "type": "minecraft:uniform", "min": 0.0, diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/jerry.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/jerry.json index 2a746c8b..5cca66ce 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/jerry.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/jerry.json @@ -17,8 +17,7 @@ } }, { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", + "function": "minecraft:looting_enchant", "count": { "type": "minecraft:uniform", "min": 0.0, diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/jumpy_bug.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/jumpy_bug.json deleted file mode 100644 index 30997597..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/jumpy_bug.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:jumpy_bug_leg", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - }, - { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 1.0 - } - } - ] - } - ] - }, - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:chitin", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - }, - { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 1.0 - } - } - ] - } - ], - "conditions": [ - { - "condition": "minecraft:killed_by_player" - } - ] - }, - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:raw_bug_meat", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - }, - { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 1.0 - } - } - ] - } - ] - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/king.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/king.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/king.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/king.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/lurking_terror.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/lurking_terror.json deleted file mode 100644 index 9e97d257..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/lurking_terror.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:chitin", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - }, - { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 1.0 - } - } - ] - } - ], - "conditions": [ - { - "condition": "minecraft:killed_by_player" - } - ] - }, - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:raw_bug_meat", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - }, - { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 1.0 - } - } - ] - } - ], - "conditions": [ - { - "condition": "minecraft:killed_by_player" - } - ] - } - ], - "random_sequence": "antarchy:entities/lurking_terror" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/manticore.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/manticore.json new file mode 100644 index 00000000..5bfeeedb --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/manticore.json @@ -0,0 +1,38 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:manticore_wing" + } + ], + "conditions": [ + { + "condition": "minecraft:killed_by_player" + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 2.0 + } + }, + { + "function": "minecraft:looting_enchant", + "count": { + "type": "minecraft:uniform", + "min": 0.0, + "max": 1.0 + } + } + ] + } + ], + "random_sequence": "antarchy:entities/manticore" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/mantis.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/mantis.json index b24b2ee3..aa5759bc 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/mantis.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/mantis.json @@ -28,8 +28,7 @@ } }, { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", + "function": "minecraft:looting_enchant", "count": { "type": "minecraft:uniform", "min": 0.0, @@ -56,8 +55,7 @@ } }, { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", + "function": "minecraft:looting_enchant", "count": { "type": "minecraft:uniform", "min": 0.0, diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/ouranwood_deer.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/ouranwood_deer.json index 5bd5aaec..dc00d4f4 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/ouranwood_deer.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/ouranwood_deer.json @@ -17,8 +17,7 @@ } }, { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", + "function": "minecraft:looting_enchant", "count": { "type": "minecraft:uniform", "min": 0.0, @@ -59,8 +58,7 @@ ] }, { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", + "function": "minecraft:looting_enchant", "count": { "type": "minecraft:uniform", "min": 0.0, diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/queen.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/queen.json new file mode 100644 index 00000000..a5fc0b2c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/queen.json @@ -0,0 +1,124 @@ +{ + "type": "minecraft:entity", + "random_sequence": "antarchy:entities/queen", + "pools": [ + { + "rolls": 1.0, + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:killed_by_player" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:music_disc_the_queen" + } + ] + }, + { + "rolls": 1.0, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:princess_egg", + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 4.0, + "max": 6.0 + }, + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:killed_by_player" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:queen_scale", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 8.0, + "max": 16.0 + } + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 8.0, + "max": 12.0 + }, + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:killed_by_player" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_shard", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 12.0, + "max": 20.0 + } + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 3.0, + "max": 5.0 + }, + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:killed_by_player" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:netherite_scrap", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 10.0, + "max": 16.0 + } + } + ] + } + ] + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/skulking_fright.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/skulking_fright.json similarity index 86% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/skulking_fright.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/skulking_fright.json index ec5d81ff..b0769830 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/skulking_fright.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/skulking_fright.json @@ -17,8 +17,7 @@ } }, { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", + "function": "minecraft:looting_enchant", "count": { "type": "minecraft:uniform", "min": 0.0, @@ -50,8 +49,7 @@ } }, { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", + "function": "minecraft:looting_enchant", "count": { "type": "minecraft:uniform", "min": 0.0, diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/spit_bug.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/spit_bug.json index d604c60a..dc004771 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/spit_bug.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/spit_bug.json @@ -17,8 +17,7 @@ } }, { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", + "function": "minecraft:looting_enchant", "count": { "type": "minecraft:uniform", "min": 0.0, @@ -50,8 +49,7 @@ } }, { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", + "function": "minecraft:looting_enchant", "count": { "type": "minecraft:uniform", "min": 0.0, diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/springbug.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/springbug.json similarity index 84% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/springbug.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/springbug.json index 4b982ad4..bb777f50 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/springbug.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/springbug.json @@ -17,8 +17,7 @@ } }, { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", + "function": "minecraft:looting_enchant", "count": { "type": "minecraft:uniform", "min": 0.0, @@ -45,8 +44,7 @@ } }, { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", + "function": "minecraft:looting_enchant", "count": { "type": "minecraft:uniform", "min": 0.0, @@ -78,8 +76,7 @@ } }, { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", + "function": "minecraft:looting_enchant", "count": { "type": "minecraft:uniform", "min": 0.0, diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/stratoshark.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/stratoshark.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/stratoshark.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/stratoshark.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/toreterror.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/toreterror.json index 8b8512f1..6165d793 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/toreterror.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/toreterror.json @@ -16,8 +16,7 @@ } }, { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", + "function": "minecraft:looting_enchant", "count": { "type": "minecraft:uniform", "min": 0.0, diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/triffid.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/triffid.json deleted file mode 100644 index 703b4e66..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/triffid.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:triffid_goo" - } - ], - "conditions": [ - { - "condition": "minecraft:killed_by_player" - } - ], - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 2.0, - "max": 5.0 - } - }, - { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 1.0 - } - } - ] - } - ], - "random_sequence": "antarchy:entities/triffid" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/vortex.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/vortex.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/vortex.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/vortex.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/worm.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/worm.json new file mode 100644 index 00000000..a8f00420 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/worm.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:worm_tooth", + "conditions": [ + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "nbt": "{GrowthStage:2}" + } + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ] + } + ] + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/basilisk_lair/hard.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/basilisk_lair/hard.json index 310a2352..2ae3449e 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/basilisk_lair/hard.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/basilisk_lair/hard.json @@ -30,7 +30,7 @@ "min": 18.0, "max": 30.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -46,7 +46,7 @@ "min": 20.0, "max": 30.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -62,7 +62,7 @@ "min": 20.0, "max": 30.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -78,7 +78,7 @@ "min": 18.0, "max": 30.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -159,7 +159,7 @@ "min": 20.0, "max": 30.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/basilisk_lair/medium.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/basilisk_lair/medium.json index 5fe07766..28b5a3d6 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/basilisk_lair/medium.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/basilisk_lair/medium.json @@ -30,7 +30,7 @@ "min": 10.0, "max": 22.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -46,7 +46,7 @@ "min": 10.0, "max": 22.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -62,7 +62,7 @@ "min": 8.0, "max": 20.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/fallen_kingdom_castle/hard.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/fallen_kingdom_castle/hard.json index d18616d0..fbaf5150 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/fallen_kingdom_castle/hard.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/fallen_kingdom_castle/hard.json @@ -75,7 +75,7 @@ "min": 15.0, "max": 30.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -91,7 +91,7 @@ "min": 15.0, "max": 30.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/fallen_kingdom_castle/medium.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/fallen_kingdom_castle/medium.json index 21777b28..5d43a733 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/fallen_kingdom_castle/medium.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/fallen_kingdom_castle/medium.json @@ -236,7 +236,7 @@ "min": 10.0, "max": 25.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/magical_castle/hard.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/magical_castle/hard.json new file mode 100644 index 00000000..df39acab --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/magical_castle/hard.json @@ -0,0 +1,307 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 3, + "max": 6 + }, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:peach", + "weight": 14, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:peach_pie", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:cornbread", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:ouranwood_acorn", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:truffalo_log", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:duct_tape", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:bug_spray", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:critter_cage", + "weight": 4 + }, + { + "type": "minecraft:item", + "name": "minecraft:emerald", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:gold_ingot", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:brutalfly\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:elythia\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:flying_squirrel\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:glimmer\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:king\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:toreterror_arena\"}" + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:uranium_nugget", + "weight": 7, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:titanium_nugget", + "weight": 7, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:golden_apple", + "weight": 7 + }, + { + "type": "minecraft:item", + "name": "minecraft:diamond", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:book", + "weight": 5, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 12, + "max": 24 + }, + "treasure": false + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:elythia\"}" + } + ] + } + ] + } + ], + "random_sequence": "antarchy:spawners/magical_castle/hard" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/magical_castle/medium.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/magical_castle/medium.json new file mode 100644 index 00000000..318733ea --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/magical_castle/medium.json @@ -0,0 +1,292 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 3, + "max": 6 + }, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:peach", + "weight": 16, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:peach_pie", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:cornbread", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:ouranwood_acorn", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:truffalo_log", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:duct_tape", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:bug_spray", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:critter_cage", + "weight": 3 + }, + { + "type": "minecraft:item", + "name": "minecraft:bread", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:emerald", + "weight": 7, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:brutalfly\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:elythia\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:flying_squirrel\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:glimmer\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:king\"}" + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:toreterror_arena\"}" + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:uranium_nugget", + "weight": 7, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:titanium_nugget", + "weight": 7, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:golden_apple", + "weight": 6 + }, + { + "type": "minecraft:item", + "name": "minecraft:book", + "weight": 3, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 8, + "max": 18 + }, + "treasure": false + } + ] + }, + { + "type": "minecraft:item", + "name": "antos:floppy_disk", + "weight": 1, + "functions": [ + { + "function": "minecraft:set_nbt", + "tag": "{AntOSFloppyDisk:\"antarchy:elythia\"}" + } + ] + } + ] + } + ], + "random_sequence": "antarchy:spawners/magical_castle/medium" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/queen_castle/hard.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/queen_castle/hard.json new file mode 100644 index 00000000..21a2f988 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/queen_castle/hard.json @@ -0,0 +1,199 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 6, + "max": 9 + }, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:diamond_sword", + "weight": 8, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 24, + "max": 35 + }, + "treasure": false + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:diamond_pickaxe", + "weight": 8, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 24, + "max": 35 + }, + "treasure": false + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_katana", + "weight": 6 + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_helmet", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_chestplate", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_leggings", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_boots", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:lucid_pearl", + "weight": 5 + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_shard", + "weight": 14, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_apple", + "weight": 22, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:bluestone", + "weight": 14, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 10, + "max": 24 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:nyxite", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:enchanted_golden_apple", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "minecraft:potion", + "weight": 9, + "functions": [ + { + "function": "minecraft:set_potion", + "id": "antarchy:inversion" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:tipped_arrow", + "weight": 9, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 6, + "max": 16 + } + }, + { + "function": "minecraft:set_potion", + "id": "antarchy:inversion" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:book", + "weight": 14, + "functions": [ + { + "function": "minecraft:enchant_randomly", + "enchantments": [ + "minecraft:mending", + "minecraft:unbreaking", + "minecraft:protection", + "minecraft:efficiency", + "minecraft:fortune" + ] + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:titanium_ingot", + "weight": 1 + }, + { + "type": "minecraft:item", + "name": "antarchy:uranium_ingot", + "weight": 1 + } + ] + } + ], + "random_sequence": "antarchy:spawners/queen_castle/hard" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/queen_castle/medium.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/queen_castle/medium.json new file mode 100644 index 00000000..5d512315 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/queen_castle/medium.json @@ -0,0 +1,168 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 5, + "max": 8 + }, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:diamond_sword", + "weight": 8, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 18, + "max": 28 + }, + "treasure": false + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:diamond_pickaxe", + "weight": 7, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 18, + "max": 28 + }, + "treasure": false + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_katana", + "weight": 4 + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_chestplate", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_leggings", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:bluestone", + "weight": 15, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 8, + "max": 18 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:nyxite", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_shard", + "weight": 12, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_apple", + "weight": 21, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:potion", + "weight": 9, + "functions": [ + { + "function": "minecraft:set_potion", + "id": "antarchy:inversion" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:tipped_arrow", + "weight": 9, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 12 + } + }, + { + "function": "minecraft:set_potion", + "id": "antarchy:inversion" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:book", + "weight": 11, + "functions": [ + { + "function": "minecraft:enchant_randomly", + "enchantments": [ + "minecraft:mending", + "minecraft:unbreaking", + "minecraft:protection", + "minecraft:efficiency" + ] + } + ] + } + ] + } + ], + "random_sequence": "antarchy:spawners/queen_castle/medium" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/ruined_arena/hard.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/ruined_arena/hard.json index c2302ea9..a9eaf379 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/ruined_arena/hard.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/ruined_arena/hard.json @@ -30,7 +30,7 @@ "min": 24.0, "max": 30.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -46,7 +46,7 @@ "min": 24.0, "max": 30.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -62,7 +62,7 @@ "min": 24.0, "max": 30.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -161,7 +161,7 @@ "min": 24.0, "max": 30.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -258,7 +258,7 @@ "min": 24.0, "max": 30.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -274,7 +274,7 @@ "min": 24.0, "max": 30.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -290,7 +290,7 @@ "min": 25.0, "max": 30.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/ruined_arena/medium.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/ruined_arena/medium.json index 2169a9cb..b6b1c026 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/ruined_arena/medium.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/ruined_arena/medium.json @@ -15,7 +15,7 @@ "min": 8.0, "max": 20.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -31,7 +31,7 @@ "min": 10.0, "max": 22.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -47,7 +47,7 @@ "min": 10.0, "max": 22.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -230,7 +230,7 @@ "min": 20.0, "max": 30.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -246,7 +246,7 @@ "min": 20.0, "max": 30.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/ruined_prison/hard.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/ruined_prison/hard.json index 827dccb2..37e5ba7a 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/ruined_prison/hard.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/ruined_prison/hard.json @@ -15,7 +15,7 @@ "min": 24.0, "max": 30.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -31,7 +31,7 @@ "min": 24.0, "max": 30.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -91,12 +91,8 @@ "weight": 8, "functions": [ { - "function": "minecraft:set_components", - "components": { - "minecraft:potion_contents": { - "potion": "minecraft:strength" - } - } + "function": "minecraft:set_potion", + "id": "minecraft:strength" } ] }, @@ -106,12 +102,8 @@ "weight": 8, "functions": [ { - "function": "minecraft:set_components", - "components": { - "minecraft:potion_contents": { - "potion": "minecraft:regeneration" - } - } + "function": "minecraft:set_potion", + "id": "minecraft:regeneration" } ] }, @@ -127,7 +119,7 @@ "min": 24.0, "max": 30.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -212,7 +204,7 @@ "min": 24.0, "max": 30.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -228,7 +220,7 @@ "min": 25.0, "max": 30.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/ruined_prison/medium.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/ruined_prison/medium.json index 8ce546a3..10046a4e 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/ruined_prison/medium.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/ruined_prison/medium.json @@ -15,7 +15,7 @@ "min": 8.0, "max": 20.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -31,7 +31,7 @@ "min": 10.0, "max": 22.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -91,12 +91,8 @@ "weight": 8, "functions": [ { - "function": "minecraft:set_components", - "components": { - "minecraft:potion_contents": { - "potion": "minecraft:strength" - } - } + "function": "minecraft:set_potion", + "id": "minecraft:strength" } ] }, @@ -106,12 +102,8 @@ "weight": 8, "functions": [ { - "function": "minecraft:set_components", - "components": { - "minecraft:potion_contents": { - "potion": "minecraft:healing" - } - } + "function": "minecraft:set_potion", + "id": "minecraft:healing" } ] }, @@ -211,7 +203,7 @@ "min": 20.0, "max": 30.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -227,7 +219,7 @@ "min": 20.0, "max": 30.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/scorpion_arena/hard.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/scorpion_arena/hard.json new file mode 100644 index 00000000..65247f34 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/scorpion_arena/hard.json @@ -0,0 +1,163 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 5, + "max": 8 + }, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:diamond_sword", + "weight": 8, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 30 + }, + "treasure": false + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:diamond_pickaxe", + "weight": 7, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 30 + }, + "treasure": false + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_katana", + "weight": 5 + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_chestplate", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_leggings", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:bluestone", + "weight": 14, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 8, + "max": 20 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_shard", + "weight": 12, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_apple", + "weight": 20, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:tipped_arrow", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 10 + } + }, + { + "function": "minecraft:set_potion", + "id": "antarchy:inversion" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:potion", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_potion", + "id": "antarchy:inversion" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:book", + "weight": 10, + "functions": [ + { + "function": "minecraft:enchant_randomly", + "enchantments": [ + "minecraft:mending", + "minecraft:unbreaking", + "minecraft:sharpness", + "minecraft:protection" + ] + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:titanium_ingot", + "weight": 1 + }, + { + "type": "minecraft:item", + "name": "antarchy:uranium_ingot", + "weight": 1 + } + ] + } + ], + "random_sequence": "antarchy:spawners/scorpion_arena/hard" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/scorpion_arena/medium.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/scorpion_arena/medium.json new file mode 100644 index 00000000..162162a5 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/scorpion_arena/medium.json @@ -0,0 +1,140 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 4, + "max": 7 + }, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:arrow", + "weight": 16, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 14, + "max": 36 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:tipped_arrow", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 6 + } + }, + { + "function": "minecraft:set_potion", + "id": "antarchy:inversion" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:iron_sword", + "weight": 9 + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_katana", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_helmet", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_boots", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:bluestone", + "weight": 14, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 5, + "max": 14 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_shard", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_apple", + "weight": 18, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:potion", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_potion", + "id": "antarchy:inversion" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:book", + "weight": 6, + "functions": [ + { + "function": "minecraft:enchant_randomly", + "enchantments": [ + "minecraft:mending", + "minecraft:unbreaking", + "minecraft:sharpness" + ] + } + ] + } + ] + } + ], + "random_sequence": "antarchy:spawners/scorpion_arena/medium" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/stampys_house/hard.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/stampys_house/hard.json index bc533a4b..38d39c8f 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/stampys_house/hard.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/stampys_house/hard.json @@ -75,7 +75,7 @@ "min": 15.0, "max": 30.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, @@ -91,7 +91,7 @@ "min": 15.0, "max": 30.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/stampys_house/medium.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/stampys_house/medium.json index f01c5d6e..90081fc8 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/stampys_house/medium.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/stampys_house/medium.json @@ -114,12 +114,8 @@ "weight": 6, "functions": [ { - "function": "minecraft:set_components", - "components": { - "minecraft:potion_contents": { - "potion": "antarchy:shrinking" - } - } + "function": "minecraft:set_potion", + "id": "antarchy:shrinking" } ] }, @@ -129,12 +125,8 @@ "weight": 6, "functions": [ { - "function": "minecraft:set_components", - "components": { - "minecraft:potion_contents": { - "potion": "antarchy:growing" - } - } + "function": "minecraft:set_potion", + "id": "antarchy:growing" } ] }, @@ -244,7 +236,7 @@ "min": 10.0, "max": 25.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/temple_of_technoblade/hard.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/temple_of_technoblade/hard.json index 3f56bc73..d7f5b493 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/temple_of_technoblade/hard.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/temple_of_technoblade/hard.json @@ -105,7 +105,7 @@ "min": 20.0, "max": 30.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/temple_of_technoblade/medium.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/temple_of_technoblade/medium.json index 673d0075..91767a32 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/temple_of_technoblade/medium.json +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/temple_of_technoblade/medium.json @@ -135,7 +135,7 @@ "min": 12.0, "max": 24.0 }, - "options": "#minecraft:on_random_loot" + "treasure": false } ] }, diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/underside_ruins/hard.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/underside_ruins/hard.json new file mode 100644 index 00000000..26181f1e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/underside_ruins/hard.json @@ -0,0 +1,192 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 5, + "max": 8 + }, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:diamond_pickaxe", + "weight": 8, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 30 + }, + "treasure": false + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:diamond_sword", + "weight": 7, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 30 + }, + "treasure": false + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_katana", + "weight": 4 + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_chestplate", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_leggings", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:lucid_pearl", + "weight": 4 + }, + { + "type": "minecraft:item", + "name": "antarchy:bluestone", + "weight": 14, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 8, + "max": 20 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:nyxite", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_apple", + "weight": 20, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:tipped_arrow", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 10 + } + }, + { + "function": "minecraft:set_potion", + "id": "antarchy:inversion" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:potion", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_potion", + "id": "antarchy:inversion" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:potion", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_potion", + "id": "antarchy:time_contraction" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:potion", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_potion", + "id": "antarchy:time_dilation" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:book", + "weight": 10, + "functions": [ + { + "function": "minecraft:enchant_randomly", + "enchantments": [ + "minecraft:mending", + "minecraft:unbreaking", + "minecraft:efficiency", + "minecraft:fortune", + "antarchy:feather_rising", + "antarchy:chronosphere" + ] + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:titanium_ingot", + "weight": 1 + }, + { + "type": "minecraft:item", + "name": "antarchy:uranium_ingot", + "weight": 1 + } + ] + } + ], + "random_sequence": "antarchy:spawners/underside_ruins/hard" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/underside_ruins/medium.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/underside_ruins/medium.json new file mode 100644 index 00000000..2654ab64 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/underside_ruins/medium.json @@ -0,0 +1,162 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 4, + "max": 7 + }, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:iron_pickaxe", + "weight": 10 + }, + { + "type": "minecraft:item", + "name": "minecraft:arrow", + "weight": 15, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 12, + "max": 32 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:tipped_arrow", + "weight": 9, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 6 + } + }, + { + "function": "minecraft:set_potion", + "id": "antarchy:inversion" + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_katana", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_helmet", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_boots", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:bluestone", + "weight": 15, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 5, + "max": 14 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:nyxite", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:blood_crystal_apple", + "weight": 18, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:potion", + "weight": 9, + "functions": [ + { + "function": "minecraft:set_potion", + "id": "antarchy:inversion" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:potion", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_potion", + "id": "antarchy:time_contraction" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:potion", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_potion", + "id": "antarchy:time_dilation" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:book", + "weight": 7, + "functions": [ + { + "function": "minecraft:enchant_randomly", + "enchantments": [ + "minecraft:mending", + "minecraft:unbreaking", + "minecraft:efficiency" + ] + } + ] + } + ] + } + ], + "random_sequence": "antarchy:spawners/underside_ruins/medium" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/undertrial.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/undertrial.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/undertrial.json rename to common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/undertrial.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/pest_control_trades/trades.json b/common-1.20.1/src/main/resources/data/antarchy/pest_control_trades/trades.json new file mode 100644 index 00000000..803043c0 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/pest_control_trades/trades.json @@ -0,0 +1,216 @@ +{ + "trades": [ + { + "level": 1, + "index": 0, + "buy": { + "item": "antarchy:raw_bug_meat", + "count": 16 + }, + "sell": { + "item": "minecraft:emerald", + "count": 1 + }, + "max_uses": 16, + "villager_xp": 2 + }, + { + "level": 1, + "index": 1, + "buy": { + "item": "antarchy:chitin", + "count": 8 + }, + "sell": { + "item": "minecraft:emerald", + "count": 2 + }, + "max_uses": 12, + "villager_xp": 2 + }, + { + "level": 1, + "index": 2, + "buy": { + "item": "minecraft:emerald", + "count": 3 + }, + "sell": { + "item": "antarchy:bed_bug_egg", + "count": 1 + }, + "max_uses": 12, + "villager_xp": 3 + }, + { + "level": 2, + "index": 0, + "buy": { + "item": "minecraft:emerald", + "count": 5 + }, + "sell": { + "item": "antarchy:bug_spray", + "count": 1 + }, + "max_uses": 8, + "villager_xp": 10 + }, + { + "level": 2, + "index": 1, + "buy": { + "item": "antarchy:raw_bug_meat", + "count": 12 + }, + "sell": { + "item": "minecraft:emerald", + "count": 2 + }, + "max_uses": 16, + "villager_xp": 5 + }, + { + "level": 2, + "index": 2, + "buy": { + "item": "minecraft:emerald", + "count": 5 + }, + "sell": { + "item": "antarchy:springbug_egg", + "count": 1 + }, + "max_uses": 12, + "villager_xp": 5 + }, + { + "level": 2, + "index": 3, + "buy": { + "item": "minecraft:emerald", + "count": 6 + }, + "sell": { + "item": "antarchy:spit_bug_egg", + "count": 1 + }, + "max_uses": 12, + "villager_xp": 5 + }, + { + "level": 3, + "index": 0, + "buy": { + "item": "minecraft:emerald", + "count": 4 + }, + "second_buy": { + "item": "antarchy:chitin", + "count": 4 + }, + "sell": { + "item": "antarchy:bug_spray", + "count": 1 + }, + "max_uses": 8, + "villager_xp": 15 + }, + { + "level": 3, + "index": 1, + "buy": { + "item": "antarchy:chitin", + "count": 6 + }, + "sell": { + "item": "minecraft:emerald", + "count": 3 + }, + "max_uses": 12, + "villager_xp": 10 + }, + { + "level": 3, + "index": 2, + "buy": { + "item": "minecraft:emerald", + "count": 4 + }, + "second_buy": { + "item": "antarchy:chitin", + "count": 2 + }, + "sell": { + "item": "antarchy:ant_trap", + "count": 1 + }, + "max_uses": 8, + "villager_xp": 15 + }, + { + "level": 4, + "index": 0, + "buy": { + "item": "minecraft:emerald", + "count": 3 + }, + "sell": { + "item": "antarchy:bug_spray", + "count": 1 + }, + "max_uses": 12, + "villager_xp": 20 + }, + { + "level": 4, + "index": 1, + "buy": { + "item": "minecraft:emerald", + "count": 8 + }, + "sell": { + "item": "antarchy:crawling_blight_egg", + "count": 1 + }, + "max_uses": 8, + "villager_xp": 20, + "second_buy": { + "item": "antarchy:chitin", + "count": 2 + } + }, + { + "level": 5, + "index": 0, + "buy": { + "item": "minecraft:emerald", + "count": 2 + }, + "sell": { + "item": "antarchy:bug_spray", + "count": 1 + }, + "max_uses": 16, + "villager_xp": 30 + }, + { + "level": 5, + "index": 1, + "buy": { + "item": "minecraft:emerald", + "count": 18 + }, + "sell": { + "item": "antarchy:jerry_nucleus", + "count": 1 + }, + "max_uses": 4, + "villager_xp": 30, + "second_buy": { + "item": "antarchy:chitin", + "count": 4 + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/americanize.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/americanize.json deleted file mode 100644 index ebddb8ef..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/americanize.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type": "antarchy:americanize", - "category": "misc" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/antigravel.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/antigravel.json deleted file mode 100644 index 47b5517f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/antigravel.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "pattern": [ - "GGG", - "GLG", - "GGG" - ], - "key": { - "G": { - "item": "minecraft:gravel" - }, - "L": { - "item": "antarchy:lucid_eye" - } - }, - "result": { - "id": "antarchy:antigravel", - "count": 8 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/antimetal_activator_rail.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/antimetal_activator_rail.json deleted file mode 100644 index cfd750dc..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/antimetal_activator_rail.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "key": { - "X": { "item": "antarchy:polished_antimetal" }, - "Y": { "item": "minecraft:stick" }, - "Z": { "item": "antarchy:bluestone_torch" } - }, - "pattern": [ - "XYX", - "XZX", - "XYX" - ], - "result": { - "id": "antarchy:antimetal_activator_rail", - "count": 6 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/antimetal_detector_rail.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/antimetal_detector_rail.json deleted file mode 100644 index 04343abe..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/antimetal_detector_rail.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "key": { - "X": { "item": "antarchy:polished_antimetal" }, - "Y": { "item": "minecraft:stone_pressure_plate" }, - "Z": { "item": "antarchy:bluestone" } - }, - "pattern": [ - "X X", - "XYX", - "XZX" - ], - "result": { - "id": "antarchy:antimetal_detector_rail", - "count": 6 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/antimetal_powered_rail.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/antimetal_powered_rail.json deleted file mode 100644 index c852fd1a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/antimetal_powered_rail.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "key": { - "X": { "item": "antarchy:blood_crystal_shard" }, - "Y": { "item": "minecraft:stick" }, - "Z": { "item": "antarchy:bluestone" } - }, - "pattern": [ - "X X", - "XYX", - "XZX" - ], - "result": { - "id": "antarchy:antimetal_powered_rail", - "count": 6 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/antimetal_rail.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/antimetal_rail.json deleted file mode 100644 index 86b90d7e..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/antimetal_rail.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "key": { - "X": { "item": "antarchy:polished_antimetal" }, - "Y": { "item": "minecraft:stick" } - }, - "pattern": [ - "X X", - "XYX", - "X X" - ], - "result": { - "id": "antarchy:antimetal_rail", - "count": 16 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/antimetal_scaffolding.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/antimetal_scaffolding.json deleted file mode 100644 index 17b935de..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/antimetal_scaffolding.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "pattern": [ - "PCP", - "P P", - "P P" - ], - "key": { - "P": { - "item": "antarchy:polished_antimetal" - }, - "C": { - "item": "minecraft:chain" - } - }, - "result": { - "id": "antarchy:antimetal_scaffolding", - "count": 16 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/antimetal_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/antimetal_slab.json deleted file mode 100644 index 8df63a72..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/antimetal_slab.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:antimetal" - } - }, - "pattern": [ - "###" - ], - "result": { - "count": 6, - "id": "antarchy:antimetal_slab" - } -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/antimetal_slab_from_antimetal_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/antimetal_slab_from_antimetal_stonecutting.json deleted file mode 100644 index 0a97eb77..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/antimetal_slab_from_antimetal_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:antimetal" - }, - "result": { - "id": "antarchy:antimetal_slab" - } -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/antimetal_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/antimetal_stairs.json deleted file mode 100644 index 081db5ac..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/antimetal_stairs.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:antimetal" - } - }, - "pattern": [ - "# ", - "## ", - "###" - ], - "result": { - "count": 4, - "id": "antarchy:antimetal_stairs" - } -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/antimetal_stairs_from_antimetal_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/antimetal_stairs_from_antimetal_stonecutting.json deleted file mode 100644 index 67998784..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/antimetal_stairs_from_antimetal_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:antimetal" - }, - "result": { - "id": "antarchy:antimetal_stairs" - } -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/antiwater_bucket.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/antiwater_bucket.json deleted file mode 100644 index 14d0c986..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/antiwater_bucket.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { "item": "minecraft:water_bucket" }, - { "item": "antarchy:lucid_eye" } - ], - "result": { - "id": "antarchy:antiwater_bucket", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/attitude_adjuster.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/attitude_adjuster.json deleted file mode 100644 index c2781187..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/attitude_adjuster.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "HUH", - " S ", - " S " - ], - "key": { - "H": { - "item": "antarchy:hercules_horn" - }, - "U": { - "item": "antarchy:uranium_block" - }, - "S": { - "item": "minecraft:netherite_ingot" - } - }, - "result": { - "id": "antarchy:attitude_adjuster", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/basilisk_dagger.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/basilisk_dagger.json deleted file mode 100644 index 745329c2..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/basilisk_dagger.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "combat", - "key": { - "F": { - "item": "antarchy:basilisk_fang" - }, - "S": { - "item": "minecraft:stick" - } - }, - "pattern": [ - "F", - "S" - ], - "result": { - "id": "antarchy:basilisk_dagger", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/battle_axe.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/battle_axe.json deleted file mode 100644 index 86a54290..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/battle_axe.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "AAN", - "ASN", - " N " - ], - "key": { - "A": { - "item": "antarchy:ultimate_axe" - }, - "S": { - "item": "antarchy:ultimate_sword" - }, - "N": { - "item": "minecraft:netherite_ingot" - } - }, - "result": { - "id": "antarchy:battle_axe", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/big_bertha.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/big_bertha.json deleted file mode 100644 index 05e50564..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/big_bertha.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - " B", - " H ", - "A " - ], - "key": { - "B": { - "item": "antarchy:big_bertha_blade" - }, - "H": { - "item": "antarchy:big_bertha_hilt" - }, - "A": { - "item": "antarchy:big_bertha_handle" - } - }, - "result": { - "id": "antarchy:big_bertha", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/big_bertha_blade.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/big_bertha_blade.json deleted file mode 100644 index 9593727f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/big_bertha_blade.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "pattern": [ - " FG", - "CDE", - "AB " - ], - "key": { - "A": { - "item": "antarchy:lucid_eye" - }, - "B": { - "item": "antarchy:basilisk_fang" - }, - "C": { - "item": "antarchy:emperor_scorpion_stinger" - }, - "D": { - "item": "antarchy:ultimate_sword" - }, - "E": { - "item": "antarchy:stratoshark_fin" - }, - "F": { - "item": "antarchy:vortex_charge" - }, - "G": { - "item": "antarchy:kraken_tooth" - } - }, - "result": { - "id": "antarchy:big_bertha_blade", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/big_bertha_handle.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/big_bertha_handle.json deleted file mode 100644 index aded4e9b..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/big_bertha_handle.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "pattern": [ - " G", - "CD ", - "AB " - ], - "key": { - "A": { - "item": "antarchy:mantis_claw" - }, - "B": { - "item": "antarchy:brutalfly_wing" - }, - "C": { - "item": "antarchy:manticore_wing" - }, - "D": { - "item": "antarchy:cooked_corndog" - }, - "G": { - "item": "antarchy:gravity_gun" - } - }, - "result": { - "id": "antarchy:big_bertha_handle", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/big_bertha_hilt.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/big_bertha_hilt.json deleted file mode 100644 index eb198b6e..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/big_bertha_hilt.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "pattern": [ - "AC ", - "DBG", - "HEF" - ], - "key": { - "A": { - "item": "antarchy:nightmare_scale" - }, - "B": { - "item": "antarchy:molevore_nose" - }, - "C": { - "item": "antarchy:springbug_leg" - }, - "D": { - "item": "antarchy:jerry_nucleus" - }, - "E": { - "item": "antarchy:primordial_scute" - }, - "F": { - "item": "antarchy:worm_tooth" - }, - "G": { - "item": "antarchy:hercules_horn" - }, - "H": { - "item": "antarchy:flytrap_goo" - } - }, - "result": { - "id": "antarchy:big_bertha_hilt", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/blood_crystal_apple.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/blood_crystal_apple.json deleted file mode 100644 index 32366787..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/blood_crystal_apple.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "food", - "pattern": [ - "###", - "#A#", - "###" - ], - "key": { - "#": { - "item": "antarchy:blood_crystal_shard" - }, - "A": { - "item": "minecraft:apple" - } - }, - "result": { - "id": "antarchy:blood_crystal_apple", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/blood_crystal_block.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/blood_crystal_block.json deleted file mode 100644 index 38845aa2..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/blood_crystal_block.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:blood_crystal_shard" - } - }, - "pattern": [ - "##", - "##" - ], - "result": { - "id": "antarchy:blood_crystal_block", - "count": 1 - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/blood_crystal_boots.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/blood_crystal_boots.json deleted file mode 100644 index da944f9b..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/blood_crystal_boots.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "S S", - "S S" - ], - "key": { - "S": { - "item": "antarchy:blood_crystal_shard" - } - }, - "result": { - "id": "antarchy:blood_crystal_boots", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/blood_crystal_chestplate.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/blood_crystal_chestplate.json deleted file mode 100644 index 3d9eecac..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/blood_crystal_chestplate.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "S S", - "SSS", - "SSS" - ], - "key": { - "S": { - "item": "antarchy:blood_crystal_shard" - } - }, - "result": { - "id": "antarchy:blood_crystal_chestplate", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/blood_crystal_helmet.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/blood_crystal_helmet.json deleted file mode 100644 index 434d93f3..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/blood_crystal_helmet.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "SSS", - "S S" - ], - "key": { - "S": { - "item": "antarchy:blood_crystal_shard" - } - }, - "result": { - "id": "antarchy:blood_crystal_helmet", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/blood_crystal_katana.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/blood_crystal_katana.json deleted file mode 100644 index 8b8047f2..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/blood_crystal_katana.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "combat", - "pattern": [ - " B", - " B ", - "N " - ], - "key": { - "N": { - "item": "minecraft:netherite_ingot" - }, - "B": { - "item": "antarchy:blood_crystal_shard" - } - }, - "result": { - "id": "antarchy:blood_crystal_katana", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/blood_crystal_leggings.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/blood_crystal_leggings.json deleted file mode 100644 index f187ca03..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/blood_crystal_leggings.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "SSS", - "S S", - "S S" - ], - "key": { - "S": { - "item": "antarchy:blood_crystal_shard" - } - }, - "result": { - "id": "antarchy:blood_crystal_leggings", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/bloodstone.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/bloodstone.json deleted file mode 100644 index f187ca03..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/bloodstone.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "SSS", - "S S", - "S S" - ], - "key": { - "S": { - "item": "antarchy:blood_crystal_shard" - } - }, - "result": { - "id": "antarchy:blood_crystal_leggings", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/bluestone_block.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/bluestone_block.json deleted file mode 100644 index ca039ad4..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/bluestone_block.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "key": { - "#": { "item": "antarchy:bluestone" } - }, - "pattern": [ - "###", - "###", - "###" - ], - "result": { - "id": "antarchy:bluestone_block" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/bluestone_comparator.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/bluestone_comparator.json deleted file mode 100644 index 09897c4d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/bluestone_comparator.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "key": { - "#": { "item": "antarchy:bluestone_torch" }, - "I": { "item": "minecraft:stone" }, - "X": { "item": "minecraft:quartz" } - }, - "pattern": [ - " # ", - "#X#", - "III" - ], - "result": { - "id": "antarchy:bluestone_comparator" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/bluestone_from_blasting_bluestone_ore.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/bluestone_from_blasting_bluestone_ore.json deleted file mode 100644 index f5ef39f4..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/bluestone_from_blasting_bluestone_ore.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:blasting", - "category": "blocks", - "experience": 0.7, - "group": "bluestone", - "ingredient": { "item": "antarchy:bluestone_ore" }, - "result": { - "id": "antarchy:bluestone" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/bluestone_from_smelting_bluestone_ore.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/bluestone_from_smelting_bluestone_ore.json deleted file mode 100644 index 4e84edf1..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/bluestone_from_smelting_bluestone_ore.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:smelting", - "category": "blocks", - "experience": 0.7, - "group": "bluestone", - "ingredient": { "item": "antarchy:bluestone_ore" }, - "result": { - "id": "antarchy:bluestone" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/bluestone_lamp.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/bluestone_lamp.json deleted file mode 100644 index 06769bbb..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/bluestone_lamp.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "key": { - "G": { "item": "minecraft:glowstone" }, - "R": { "item": "antarchy:bluestone" } - }, - "pattern": [ - " R ", - "RGR", - " R " - ], - "result": { - "id": "antarchy:bluestone_lamp", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/bluestone_repeater.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/bluestone_repeater.json deleted file mode 100644 index 50422df3..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/bluestone_repeater.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "key": { - "#": { "item": "antarchy:bluestone_torch" }, - "I": { "item": "minecraft:stone" }, - "X": { "item": "antarchy:bluestone" } - }, - "pattern": [ - "#X#", - "III" - ], - "result": { - "id": "antarchy:bluestone_repeater" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/bluestone_torch.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/bluestone_torch.json deleted file mode 100644 index fdde92fb..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/bluestone_torch.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "key": { - "#": { "item": "minecraft:stick" }, - "X": { "item": "antarchy:bluestone" } - }, - "pattern": [ - "X", - "#" - ], - "result": { - "id": "antarchy:bluestone_torch" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/blush_moss_carpet.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/blush_moss_carpet.json deleted file mode 100644 index 0a73f660..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/blush_moss_carpet.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:blush_moss_block" - } - }, - "pattern": [ - "#", - "#" - ], - "result": { - "count": 3, - "id": "antarchy:blush_moss_carpet" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/bone_meal_from_chitin.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/bone_meal_from_chitin.json deleted file mode 100644 index f8e96c09..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/bone_meal_from_chitin.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "ingredients": [ - { - "item": "antarchy:chitin" - } - ], - "result": { - "id": "minecraft:bone_meal", - "count": 3 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/broodfruit_cobbler.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/broodfruit_cobbler.json deleted file mode 100644 index f3799aee..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/broodfruit_cobbler.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "food", - "pattern": ["BSB", "WEW", "WWW"], - "key": { - "B": { "item": "antarchy:broodfruit" }, - "S": { "item": "minecraft:sugar" }, - "W": { "item": "minecraft:wheat" }, - "E": { "item": "minecraft:egg" } - }, - "result": { "id": "antarchy:broodfruit_cobbler", "count": 1 } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone.json deleted file mode 100644 index 727f95c9..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "D": { - "item": "minecraft:deepslate" - }, - "B": { - "item": "antarchy:broodfruit" - } - }, - "pattern": [ - "DDD", - "DBD", - "DDD" - ], - "result": { - "count": 8, - "id": "antarchy:broodstone" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_brick_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_brick_slab.json deleted file mode 100644 index daeac16f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_brick_slab.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:broodstone_bricks" - } - }, - "pattern": [ - "###" - ], - "result": { - "count": 6, - "id": "antarchy:broodstone_brick_slab" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_brick_slab_from_broodstone_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_brick_slab_from_broodstone_bricks_stonecutting.json deleted file mode 100644 index 48371bba..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_brick_slab_from_broodstone_bricks_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:broodstone_bricks" - }, - "result": { - "count": 2, - "id": "antarchy:broodstone_brick_slab" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_brick_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_brick_stairs.json deleted file mode 100644 index fa36a258..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_brick_stairs.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:broodstone_bricks" - } - }, - "pattern": [ - "# ", - "## ", - "###" - ], - "result": { - "count": 4, - "id": "antarchy:broodstone_brick_stairs" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_brick_stairs_from_broodstone_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_brick_stairs_from_broodstone_bricks_stonecutting.json deleted file mode 100644 index 481801a5..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_brick_stairs_from_broodstone_bricks_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:broodstone_bricks" - }, - "result": { - "id": "antarchy:broodstone_brick_stairs" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_brick_wall.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_brick_wall.json deleted file mode 100644 index d8f7a9c7..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_brick_wall.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:broodstone_bricks" - } - }, - "pattern": [ - "###", - "###" - ], - "result": { - "count": 6, - "id": "antarchy:broodstone_brick_wall" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_brick_wall_from_broodstone_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_brick_wall_from_broodstone_bricks_stonecutting.json deleted file mode 100644 index 5df8a9b7..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_brick_wall_from_broodstone_bricks_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:broodstone_bricks" - }, - "result": { - "id": "antarchy:broodstone_brick_wall" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_bricks.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_bricks.json deleted file mode 100644 index 08290683..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_bricks.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:polished_broodstone" - } - }, - "pattern": [ - "##", - "##" - ], - "result": { - "count": 4, - "id": "antarchy:broodstone_bricks" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_bricks_from_polished_broodstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_bricks_from_polished_broodstone_stonecutting.json deleted file mode 100644 index 064aee73..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_bricks_from_polished_broodstone_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:polished_broodstone" - }, - "result": { - "id": "antarchy:broodstone_bricks" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_pillar.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_pillar.json deleted file mode 100644 index 70308c32..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_pillar.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:polished_broodstone" - } - }, - "pattern": [ - "#", - "#" - ], - "result": { - "id": "antarchy:broodstone_pillar", - "count": 2 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_pillar_from_broodstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_pillar_from_broodstone_stonecutting.json deleted file mode 100644 index e128426b..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_pillar_from_broodstone_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:broodstone" - }, - "result": { - "id": "antarchy:broodstone_pillar" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_slab.json deleted file mode 100644 index 7aa1ba74..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_slab.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:broodstone" - } - }, - "pattern": [ - "###" - ], - "result": { - "count": 6, - "id": "antarchy:broodstone_slab" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_slab_from_broodstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_slab_from_broodstone_stonecutting.json deleted file mode 100644 index f701c62a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_slab_from_broodstone_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:broodstone" - }, - "result": { - "count": 2, - "id": "antarchy:broodstone_slab" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_stairs.json deleted file mode 100644 index bea9e4ba..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_stairs.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:broodstone" - } - }, - "pattern": [ - "# ", - "## ", - "###" - ], - "result": { - "count": 4, - "id": "antarchy:broodstone_stairs" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_stairs_from_broodstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_stairs_from_broodstone_stonecutting.json deleted file mode 100644 index 1ac55f41..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_stairs_from_broodstone_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:broodstone" - }, - "result": { - "id": "antarchy:broodstone_stairs" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_wall.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_wall.json deleted file mode 100644 index e779da0c..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_wall.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:broodstone" - } - }, - "pattern": [ - "###", - "###" - ], - "result": { - "count": 6, - "id": "antarchy:broodstone_wall" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_wall_from_broodstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_wall_from_broodstone_stonecutting.json deleted file mode 100644 index 5a4834f0..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/broodstone_wall_from_broodstone_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:broodstone" - }, - "result": { - "id": "antarchy:broodstone_wall" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/brutalfly_elytra.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/brutalfly_elytra.json deleted file mode 100644 index 60af494f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/brutalfly_elytra.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "BMB", - "BEB" - ], - "key": { - "B": { - "item": "antarchy:brutalfly_wing" - }, - "M": { - "item": "antarchy:duct_tape" - }, - "E": { - "item": "minecraft:elytra" - } - }, - "result": { - "id": "antarchy:brutalfly_elytra", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/chiseled_broodstone.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/chiseled_broodstone.json deleted file mode 100644 index 3f830b8f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/chiseled_broodstone.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:polished_broodstone_slab" - } - }, - "pattern": [ - "#", - "#" - ], - "result": { - "id": "antarchy:chiseled_broodstone" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/chiseled_broodstone_from_polished_broodstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/chiseled_broodstone_from_polished_broodstone_stonecutting.json deleted file mode 100644 index 98b428d4..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/chiseled_broodstone_from_polished_broodstone_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:polished_broodstone" - }, - "result": { - "id": "antarchy:chiseled_broodstone" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/chiseled_dream_sandstone.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/chiseled_dream_sandstone.json deleted file mode 100644 index d69cc351..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/chiseled_dream_sandstone.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:dream_sandstone_slab" - } - }, - "pattern": [ - "#", - "#" - ], - "result": { - "id": "antarchy:chiseled_dream_sandstone" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/chiseled_dream_sandstone_from_dream_sandstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/chiseled_dream_sandstone_from_dream_sandstone_stonecutting.json deleted file mode 100644 index 6487724a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/chiseled_dream_sandstone_from_dream_sandstone_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:dream_sandstone" - }, - "result": { - "id": "antarchy:chiseled_dream_sandstone" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/chiseled_myrmite_from_polished_myrmite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/chiseled_myrmite_from_polished_myrmite_stonecutting.json deleted file mode 100644 index 42110fd1..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/chiseled_myrmite_from_polished_myrmite_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:polished_myrmite" - }, - "result": { - "id": "antarchy:chiseled_myrmite" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/chiseled_nyxite.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/chiseled_nyxite.json deleted file mode 100644 index ae707eb0..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/chiseled_nyxite.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:polished_nyxite_slab" - } - }, - "pattern": [ - "#", - "#" - ], - "result": { - "id": "antarchy:chiseled_nyxite" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/chiseled_nyxite_from_polished_nyxite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/chiseled_nyxite_from_polished_nyxite_stonecutting.json deleted file mode 100644 index 7498fa06..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/chiseled_nyxite_from_polished_nyxite_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:polished_nyxite" - }, - "result": { - "id": "antarchy:chiseled_nyxite" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/chiseled_shellstone.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/chiseled_shellstone.json deleted file mode 100644 index b59d352d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/chiseled_shellstone.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:polished_shellstone_slab" - } - }, - "pattern": [ - "#", - "#" - ], - "result": { - "id": "antarchy:chiseled_shellstone" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/chiseled_shellstone_from_polished_shellstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/chiseled_shellstone_from_polished_shellstone_stonecutting.json deleted file mode 100644 index 24215edb..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/chiseled_shellstone_from_polished_shellstone_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:polished_shellstone" - }, - "result": { - "id": "antarchy:chiseled_shellstone" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/chitin_block.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/chitin_block.json deleted file mode 100644 index 9a22bc0b..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/chitin_block.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:chitin" - } - }, - "pattern": [ - "###", - "###", - "###" - ], - "result": { - "id": "antarchy:chitin_block", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/chitin_from_chitin_block.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/chitin_from_chitin_block.json deleted file mode 100644 index 8ac1b4d7..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/chitin_from_chitin_block.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "ingredients": [ - { - "item": "antarchy:chitin_block" - } - ], - "result": { - "id": "antarchy:chitin", - "count": 9 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/cloud_shark_fin_soup.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/cloud_shark_fin_soup.json deleted file mode 100644 index a222940a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/cloud_shark_fin_soup.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "food", - "ingredients": [ - { - "item": "antarchy:cloud_shark_fin" - }, - { - "item": "minecraft:bowl" - } - ], - "result": { - "id": "antarchy:cloud_shark_fin_soup", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/cooked_bug_meat_from_smelting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/cooked_bug_meat_from_smelting.json deleted file mode 100644 index 56a09fae..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/cooked_bug_meat_from_smelting.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:smelting", - "category": "food", - "cookingtime": 200, - "experience": 0.35, - "ingredient": { - "item": "antarchy:raw_bug_meat" - }, - "result": { - "id": "antarchy:cooked_bug_meat" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/cooked_bug_meat_from_smoking.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/cooked_bug_meat_from_smoking.json deleted file mode 100644 index 6a4798e6..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/cooked_bug_meat_from_smoking.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:smoking", - "category": "food", - "cookingtime": 100, - "experience": 0.35, - "ingredient": { - "item": "antarchy:raw_bug_meat" - }, - "result": { - "id": "antarchy:cooked_bug_meat" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/cooked_cheep_from_smelting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/cooked_cheep_from_smelting.json deleted file mode 100644 index e47ef9a8..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/cooked_cheep_from_smelting.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:smelting", - "category": "food", - "cookingtime": 200, - "experience": 0.35, - "ingredient": { - "item": "antarchy:cheep" - }, - "result": { - "id": "antarchy:cooked_cheep" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/cooked_cheep_from_smoking.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/cooked_cheep_from_smoking.json deleted file mode 100644 index 5dd679c6..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/cooked_cheep_from_smoking.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:smoking", - "category": "food", - "cookingtime": 100, - "experience": 0.35, - "ingredient": { - "item": "antarchy:cheep" - }, - "result": { - "id": "antarchy:cooked_cheep" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/cooked_corndog_from_smelting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/cooked_corndog_from_smelting.json deleted file mode 100644 index 8e6950c1..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/cooked_corndog_from_smelting.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:smelting", - "category": "food", - "cookingtime": 200, - "experience": 0.35, - "ingredient": { - "item": "antarchy:raw_corndog" - }, - "result": { - "id": "antarchy:cooked_corndog" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/cooked_corndog_from_smoking.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/cooked_corndog_from_smoking.json deleted file mode 100644 index b34b2896..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/cooked_corndog_from_smoking.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:smoking", - "category": "food", - "cookingtime": 100, - "experience": 0.35, - "ingredient": { - "item": "antarchy:raw_corndog" - }, - "result": { - "id": "antarchy:cooked_corndog" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/cooked_venison_from_smelting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/cooked_venison_from_smelting.json deleted file mode 100644 index bd3b2c3a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/cooked_venison_from_smelting.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:smelting", - "category": "food", - "cookingtime": 200, - "experience": 0.35, - "ingredient": { - "item": "antarchy:raw_venison" - }, - "result": { - "id": "antarchy:cooked_venison" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/cooked_venison_from_smoking.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/cooked_venison_from_smoking.json deleted file mode 100644 index 00e79a05..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/cooked_venison_from_smoking.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:smoking", - "category": "food", - "cookingtime": 100, - "experience": 0.35, - "ingredient": { - "item": "antarchy:raw_venison" - }, - "result": { - "id": "antarchy:cooked_venison" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/corn_seeds.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/corn_seeds.json deleted file mode 100644 index 2afe7c63..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/corn_seeds.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "ingredients": [ - { - "item": "antarchy:corn" - } - ], - "result": { - "count": 3, - "id": "antarchy:corn_seeds" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/cornbread.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/cornbread.json deleted file mode 100644 index 3a6e3fbb..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/cornbread.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "food", - "key": { - "C": { - "item": "antarchy:corn" - }, - "G": { - "item": "minecraft:egg" - }, - "H": { - "item": "minecraft:honey_bottle" - }, - "W": { - "item": "minecraft:wheat" - } - }, - "pattern": [ - " H ", - "CGC", - "WWW" - ], - "result": { - "count": 1, - "id": "antarchy:cornbread" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/cracked_shellstone_bricks_from_shellstone_bricks_blasting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/cracked_shellstone_bricks_from_shellstone_bricks_blasting.json deleted file mode 100644 index 3892c53f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/cracked_shellstone_bricks_from_shellstone_bricks_blasting.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:blasting", - "category": "blocks", - "experience": 0.1, - "ingredient": { - "item": "antarchy:shellstone_bricks" - }, - "result": { - "id": "antarchy:cracked_shellstone_bricks" - }, - "cookingtime": 100 -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/cracked_shellstone_bricks_from_shellstone_bricks_smelting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/cracked_shellstone_bricks_from_shellstone_bricks_smelting.json deleted file mode 100644 index 7c76f625..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/cracked_shellstone_bricks_from_shellstone_bricks_smelting.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:smelting", - "category": "blocks", - "experience": 0.1, - "ingredient": { - "item": "antarchy:shellstone_bricks" - }, - "result": { - "id": "antarchy:cracked_shellstone_bricks" - }, - "cookingtime": 200 -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/crafter_from_bluestone.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/crafter_from_bluestone.json deleted file mode 100644 index 48869144..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/crafter_from_bluestone.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "key": { - "#": { - "item": "minecraft:iron_ingot" - }, - "C": { - "item": "minecraft:crafting_table" - }, - "D": { - "item": "minecraft:dropper" - }, - "R": { - "item": "antarchy:bluestone" - } - }, - "pattern": [ - "###", - "#C#", - "RDR" - ], - "result": { - "count": 1, - "id": "minecraft:crafter" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/critter_cage.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/critter_cage.json deleted file mode 100644 index 033a8526..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/critter_cage.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "pattern": [ - "ISI", - "SLS", - "ISI" - ], - "key": { - "I": { - "item": "minecraft:iron_nugget" - }, - "S": { - "item": "minecraft:stick" - }, - "L": { - "item": "minecraft:leather" - } - }, - "result": { - "id": "antarchy:critter_cage", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/cut_dream_sandstone.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/cut_dream_sandstone.json deleted file mode 100644 index a121e408..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/cut_dream_sandstone.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:dream_sandstone" - } - }, - "pattern": [ - "##", - "##" - ], - "result": { - "count": 4, - "id": "antarchy:cut_dream_sandstone" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/cut_dream_sandstone_from_dream_sandstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/cut_dream_sandstone_from_dream_sandstone_stonecutting.json deleted file mode 100644 index 1a43db43..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/cut_dream_sandstone_from_dream_sandstone_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:dream_sandstone" - }, - "result": { - "id": "antarchy:cut_dream_sandstone" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/cut_dream_sandstone_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/cut_dream_sandstone_slab.json deleted file mode 100644 index 511672c6..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/cut_dream_sandstone_slab.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:cut_dream_sandstone" - } - }, - "pattern": [ - "###" - ], - "result": { - "count": 6, - "id": "antarchy:cut_dream_sandstone_slab" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/cut_dream_sandstone_slab_from_cut_dream_sandstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/cut_dream_sandstone_slab_from_cut_dream_sandstone_stonecutting.json deleted file mode 100644 index 9cc95cf7..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/cut_dream_sandstone_slab_from_cut_dream_sandstone_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:cut_dream_sandstone" - }, - "result": { - "count": 2, - "id": "antarchy:cut_dream_sandstone_slab" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/cut_dream_sandstone_slab_from_dream_sandstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/cut_dream_sandstone_slab_from_dream_sandstone_stonecutting.json deleted file mode 100644 index dd555ba5..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/cut_dream_sandstone_slab_from_dream_sandstone_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:dream_sandstone" - }, - "result": { - "count": 2, - "id": "antarchy:cut_dream_sandstone_slab" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/dispenser_from_bluestone.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/dispenser_from_bluestone.json deleted file mode 100644 index ba2f4b91..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/dispenser_from_bluestone.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "key": { - "#": { - "item": "minecraft:cobblestone" - }, - "R": { - "item": "antarchy:bluestone" - }, - "X": { - "item": "minecraft:bow" - } - }, - "pattern": [ - "###", - "#X#", - "#R#" - ], - "result": { - "count": 1, - "id": "minecraft:dispenser" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/dream_campfire.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/dream_campfire.json deleted file mode 100644 index 710fbe0c..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/dream_campfire.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "#": { - "item": "antarchy:dream_sand" - }, - "L": { - "tag": "minecraft:logs" - }, - "S": { - "tag": "c:rods/wooden" - } - }, - "pattern": [ - " S ", - "S#S", - "LLL" - ], - "result": { - "count": 1, - "id": "antarchy:dream_campfire" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/dream_lantern.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/dream_lantern.json deleted file mode 100644 index 66dd6083..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/dream_lantern.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "#": { - "item": "antarchy:dream_torch" - }, - "X": { - "tag": "c:nuggets/iron" - } - }, - "pattern": [ - "XXX", - "X#X", - "XXX" - ], - "result": { - "count": 1, - "id": "antarchy:dream_lantern" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/dream_sandstone.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/dream_sandstone.json deleted file mode 100644 index eb7c82d7..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/dream_sandstone.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:dream_sand" - } - }, - "pattern": [ - "##", - "##" - ], - "result": { - "id": "antarchy:dream_sandstone" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/dream_sandstone_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/dream_sandstone_slab.json deleted file mode 100644 index 423e5f07..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/dream_sandstone_slab.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": [ - { - "item": "antarchy:dream_sandstone" - }, - { - "item": "antarchy:chiseled_dream_sandstone" - } - ] - }, - "pattern": [ - "###" - ], - "result": { - "count": 6, - "id": "antarchy:dream_sandstone_slab" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/dream_sandstone_slab_from_dream_sandstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/dream_sandstone_slab_from_dream_sandstone_stonecutting.json deleted file mode 100644 index fe0451f8..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/dream_sandstone_slab_from_dream_sandstone_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:dream_sandstone" - }, - "result": { - "count": 2, - "id": "antarchy:dream_sandstone_slab" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/dream_sandstone_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/dream_sandstone_stairs.json deleted file mode 100644 index bc2aebc7..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/dream_sandstone_stairs.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": [ - { - "item": "antarchy:dream_sandstone" - }, - { - "item": "antarchy:chiseled_dream_sandstone" - }, - { - "item": "antarchy:cut_dream_sandstone" - } - ] - }, - "pattern": [ - "# ", - "## ", - "###" - ], - "result": { - "count": 4, - "id": "antarchy:dream_sandstone_stairs" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/dream_sandstone_stairs_from_dream_sandstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/dream_sandstone_stairs_from_dream_sandstone_stonecutting.json deleted file mode 100644 index 86114028..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/dream_sandstone_stairs_from_dream_sandstone_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:dream_sandstone" - }, - "result": { - "id": "antarchy:dream_sandstone_stairs" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/dream_sandstone_wall.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/dream_sandstone_wall.json deleted file mode 100644 index b83811b9..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/dream_sandstone_wall.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:dream_sandstone" - } - }, - "pattern": [ - "###", - "###" - ], - "result": { - "count": 6, - "id": "antarchy:dream_sandstone_wall" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/dream_sandstone_wall_from_dream_sandstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/dream_sandstone_wall_from_dream_sandstone_stonecutting.json deleted file mode 100644 index 772e1a26..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/dream_sandstone_wall_from_dream_sandstone_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:dream_sandstone" - }, - "result": { - "id": "antarchy:dream_sandstone_wall" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/dream_torch.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/dream_torch.json deleted file mode 100644 index 83931411..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/dream_torch.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "key": { - "#": { - "item": "minecraft:stick" - }, - "S": { - "item": "antarchy:dream_sand" - }, - "X": [ - { - "item": "minecraft:coal" - }, - { - "item": "minecraft:charcoal" - } - ] - }, - "pattern": [ - "X", - "#", - "S" - ], - "result": { - "count": 4, - "id": "antarchy:dream_torch" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/dropper_from_bluestone.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/dropper_from_bluestone.json deleted file mode 100644 index 88807ccc..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/dropper_from_bluestone.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "key": { - "#": { - "item": "minecraft:cobblestone" - }, - "R": { - "item": "antarchy:bluestone" - } - }, - "pattern": [ - "###", - "# #", - "#R#" - ], - "result": { - "count": 1, - "id": "minecraft:dropper" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/duct_tape.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/duct_tape.json deleted file mode 100644 index a03e94ba..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/duct_tape.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "pattern": [ - "SSS", - "PPP" - ], - "key": { - "S": { - "tag": "c:slime_balls" - }, - "P": { - "item": "minecraft:paper" - } - }, - "result": { - "id": "antarchy:duct_tape", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/eye_of_the_storm.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/eye_of_the_storm.json deleted file mode 100644 index 620c2f7b..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/eye_of_the_storm.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "combat", - "pattern": [ - " V", - " T ", - "T " - ], - "key": { - "V": { - "item": "antarchy:vortex_charge" - }, - "T": { - "item": "antarchy:titanium_ingot" - } - }, - "result": { - "id": "antarchy:eye_of_the_storm", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/gravity_gun.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/gravity_gun.json deleted file mode 100644 index 283170a5..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/gravity_gun.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "UGN", - "UCT", - " BT" - ], - "key": { - "U": { - "item": "antarchy:uranium_ingot" - }, - "T": { - "item": "antarchy:titanium_ingot" - }, - "G": { - "item": "antarchy:lucid_eye" - }, - "N": { - "tag": "c:ingots/netherite" - }, - "C": { - "item": "minecraft:comparator" - }, - "B": { - "item": "antarchy:bluestone_comparator" - } - }, - "result": { - "id": "antarchy:gravity_gun", - "count": 1 - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/growth_ray.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/growth_ray.json deleted file mode 100644 index 7c7ad5c1..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/growth_ray.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "TTT", - "TCT", - " N" - ], - "key": { - "T": { - "item": "antarchy:titanium_ingot" - }, - "N": { - "tag": "c:ingots/netherite" - }, - "C": { - "item": "antarchy:bluestone_comparator" - } - }, - "result": { - "id": "antarchy:growth_ray", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/infested_coarse_dirt.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/infested_coarse_dirt.json deleted file mode 100644 index c553ae0c..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/infested_coarse_dirt.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "building", - "ingredients": [ - { - "item": "minecraft:coarse_dirt" - }, - { - "item": "antarchy:moleworm" - } - ], - "result": { - "count": 1, - "id": "antarchy:infested_coarse_dirt" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/infested_rooted_dirt.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/infested_rooted_dirt.json deleted file mode 100644 index fc85bcb0..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/infested_rooted_dirt.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "building", - "ingredients": [ - { - "item": "minecraft:rooted_dirt" - }, - { - "item": "antarchy:moleworm" - } - ], - "result": { - "count": 1, - "id": "antarchy:infested_rooted_dirt" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/kraken_kalamari_from_smelting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/kraken_kalamari_from_smelting.json deleted file mode 100644 index 1b0c153b..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/kraken_kalamari_from_smelting.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:smelting", - "category": "food", - "cookingtime": 200, - "experience": 0.5, - "ingredient": { - "item": "antarchy:kraken_tentacle" - }, - "result": { - "id": "antarchy:kraken_kalamari" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/kraken_kalamari_from_smoking.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/kraken_kalamari_from_smoking.json deleted file mode 100644 index 2dd56eee..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/kraken_kalamari_from_smoking.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:smoking", - "category": "food", - "cookingtime": 100, - "experience": 0.5, - "ingredient": { - "item": "antarchy:kraken_tentacle" - }, - "result": { - "id": "antarchy:kraken_kalamari" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/krakens_grasp.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/krakens_grasp.json deleted file mode 100644 index 45d4c2d6..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/krakens_grasp.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "EEE", - " T ", - " T " - ], - "key": { - "E": { "item": "antarchy:kraken_tooth" }, - "T": { "item": "antarchy:kraken_tentacle" } - }, - "result": { "id": "antarchy:krakens_grasp", "count": 1 } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/loam.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/loam.json deleted file mode 100644 index cfd69d99..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/loam.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "pattern": [ - "MD", - "DM" - ], - "key": { - "M": { - "item": "minecraft:mud" - }, - "D": { - "item": "antarchy:myrmite" - } - }, - "result": { - "count": 1, - "id": "antarchy:loam" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/loam_brick_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/loam_brick_slab.json deleted file mode 100644 index a0efbd12..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/loam_brick_slab.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:loam_bricks" - } - }, - "pattern": [ - "###" - ], - "result": { - "count": 6, - "id": "antarchy:loam_brick_slab" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/loam_brick_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/loam_brick_stairs.json deleted file mode 100644 index ed75a904..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/loam_brick_stairs.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:loam_bricks" - } - }, - "pattern": [ - "# ", - "## ", - "###" - ], - "result": { - "count": 4, - "id": "antarchy:loam_brick_stairs" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/loam_brick_wall.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/loam_brick_wall.json deleted file mode 100644 index d3af987d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/loam_brick_wall.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:loam_bricks" - } - }, - "pattern": [ - "###", - "###" - ], - "result": { - "count": 6, - "id": "antarchy:loam_brick_wall" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/lucid_anchor.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/lucid_anchor.json deleted file mode 100644 index 1fcd5ea6..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/lucid_anchor.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "pattern": [ - "AAA", - "BNB", - "BLB" - ], - "key": { - "A": { - "item": "antarchy:polished_antimetal" - }, - "B": { - "item": "antarchy:blood_crystal_shard" - }, - "N": { - "item": "minecraft:nether_star" - }, - "L": { - "item": "antarchy:lucid_eye" - } - }, - "result": { - "id": "antarchy:lucid_anchor", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/lucid_pearl.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/lucid_pearl.json deleted file mode 100644 index ec950302..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/lucid_pearl.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { "item": "antarchy:lucid_eye" }, - { "item": "minecraft:ender_pearl" } - ], - "result": { - "id": "antarchy:lucid_pearl", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/manticore_wings.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/manticore_wings.json deleted file mode 100644 index 50c0926d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/manticore_wings.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": ["BMB", "BEB"], - "key": { - "B": { "item": "antarchy:manticore_wing" }, - "M": { "item": "antarchy:duct_tape" }, - "E": { "item": "minecraft:elytra" } - }, - "result": { "id": "antarchy:manticore_wings", "count": 1 } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/moggles.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/moggles.json deleted file mode 100644 index 4f7bd24a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/moggles.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "BMB" - ], - "key": { - "B": { - "item": "antarchy:titanium_nugget" - }, - "M": { - "item": "antarchy:molevore_nose" - } - }, - "result": { - "id": "antarchy:moggles", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_broodstone_brick_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_broodstone_brick_slab.json deleted file mode 100644 index 7c6134cc..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_broodstone_brick_slab.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:mossy_broodstone_bricks" - } - }, - "pattern": [ - "###" - ], - "result": { - "count": 6, - "id": "antarchy:mossy_broodstone_brick_slab" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_broodstone_brick_slab_from_mossy_broodstone_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_broodstone_brick_slab_from_mossy_broodstone_bricks_stonecutting.json deleted file mode 100644 index 6c8da0df..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_broodstone_brick_slab_from_mossy_broodstone_bricks_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:mossy_broodstone_bricks" - }, - "result": { - "id": "antarchy:mossy_broodstone_brick_slab" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_broodstone_brick_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_broodstone_brick_stairs.json deleted file mode 100644 index ad51acc1..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_broodstone_brick_stairs.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:mossy_broodstone_bricks" - } - }, - "pattern": [ - "# ", - "## ", - "###" - ], - "result": { - "count": 4, - "id": "antarchy:mossy_broodstone_brick_stairs" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_broodstone_brick_stairs_from_mossy_broodstone_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_broodstone_brick_stairs_from_mossy_broodstone_bricks_stonecutting.json deleted file mode 100644 index 274775f2..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_broodstone_brick_stairs_from_mossy_broodstone_bricks_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:mossy_broodstone_bricks" - }, - "result": { - "id": "antarchy:mossy_broodstone_brick_stairs" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_broodstone_brick_wall.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_broodstone_brick_wall.json deleted file mode 100644 index a091695c..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_broodstone_brick_wall.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:mossy_broodstone_bricks" - } - }, - "pattern": [ - "###", - "###" - ], - "result": { - "count": 6, - "id": "antarchy:mossy_broodstone_brick_wall" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_broodstone_brick_wall_from_mossy_broodstone_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_broodstone_brick_wall_from_mossy_broodstone_bricks_stonecutting.json deleted file mode 100644 index 8da8fdd1..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_broodstone_brick_wall_from_mossy_broodstone_bricks_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:mossy_broodstone_bricks" - }, - "result": { - "id": "antarchy:mossy_broodstone_brick_wall" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_myrmite_brick_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_myrmite_brick_slab.json deleted file mode 100644 index 3898cd91..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_myrmite_brick_slab.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:mossy_myrmite_bricks" - } - }, - "pattern": [ - "###" - ], - "result": { - "count": 6, - "id": "antarchy:mossy_myrmite_brick_slab" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_myrmite_brick_slab_from_mossy_myrmite_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_myrmite_brick_slab_from_mossy_myrmite_bricks_stonecutting.json deleted file mode 100644 index 1b269468..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_myrmite_brick_slab_from_mossy_myrmite_bricks_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:mossy_myrmite_bricks" - }, - "result": { - "id": "antarchy:mossy_myrmite_brick_slab" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_myrmite_brick_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_myrmite_brick_stairs.json deleted file mode 100644 index f11066f5..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_myrmite_brick_stairs.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:mossy_myrmite_bricks" - } - }, - "pattern": [ - "# ", - "## ", - "###" - ], - "result": { - "count": 4, - "id": "antarchy:mossy_myrmite_brick_stairs" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_myrmite_brick_stairs_from_mossy_myrmite_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_myrmite_brick_stairs_from_mossy_myrmite_bricks_stonecutting.json deleted file mode 100644 index ef6ddaa0..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_myrmite_brick_stairs_from_mossy_myrmite_bricks_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:mossy_myrmite_bricks" - }, - "result": { - "id": "antarchy:mossy_myrmite_brick_stairs" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_myrmite_brick_wall.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_myrmite_brick_wall.json deleted file mode 100644 index e7fd8046..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_myrmite_brick_wall.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:mossy_myrmite_bricks" - } - }, - "pattern": [ - "###", - "###" - ], - "result": { - "count": 6, - "id": "antarchy:mossy_myrmite_brick_wall" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_myrmite_brick_wall_from_mossy_myrmite_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_myrmite_brick_wall_from_mossy_myrmite_bricks_stonecutting.json deleted file mode 100644 index 53dcf877..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_myrmite_brick_wall_from_mossy_myrmite_bricks_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:mossy_myrmite_bricks" - }, - "result": { - "id": "antarchy:mossy_myrmite_brick_wall" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_nyxite_brick_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_nyxite_brick_slab.json deleted file mode 100644 index d7dae129..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_nyxite_brick_slab.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:mossy_nyxite_bricks" - } - }, - "pattern": [ - "###" - ], - "result": { - "count": 6, - "id": "antarchy:mossy_nyxite_brick_slab" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_nyxite_brick_slab_from_mossy_nyxite_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_nyxite_brick_slab_from_mossy_nyxite_bricks_stonecutting.json deleted file mode 100644 index 0cb77f17..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_nyxite_brick_slab_from_mossy_nyxite_bricks_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:mossy_nyxite_bricks" - }, - "result": { - "id": "antarchy:mossy_nyxite_brick_slab" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_nyxite_brick_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_nyxite_brick_stairs.json deleted file mode 100644 index 9d57de59..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_nyxite_brick_stairs.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:mossy_nyxite_bricks" - } - }, - "pattern": [ - "# ", - "## ", - "###" - ], - "result": { - "count": 4, - "id": "antarchy:mossy_nyxite_brick_stairs" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_nyxite_brick_stairs_from_mossy_nyxite_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_nyxite_brick_stairs_from_mossy_nyxite_bricks_stonecutting.json deleted file mode 100644 index 33b02515..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_nyxite_brick_stairs_from_mossy_nyxite_bricks_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:mossy_nyxite_bricks" - }, - "result": { - "id": "antarchy:mossy_nyxite_brick_stairs" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_nyxite_brick_wall.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_nyxite_brick_wall.json deleted file mode 100644 index b1b2c905..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_nyxite_brick_wall.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:mossy_nyxite_bricks" - } - }, - "pattern": [ - "###", - "###" - ], - "result": { - "count": 6, - "id": "antarchy:mossy_nyxite_brick_wall" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_nyxite_brick_wall_from_mossy_nyxite_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_nyxite_brick_wall_from_mossy_nyxite_bricks_stonecutting.json deleted file mode 100644 index 15cddcc3..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_nyxite_brick_wall_from_mossy_nyxite_bricks_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:mossy_nyxite_bricks" - }, - "result": { - "id": "antarchy:mossy_nyxite_brick_wall" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_slab.json deleted file mode 100644 index 322153c4..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_slab.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:mossy_shellstone_bricks" - } - }, - "pattern": [ - "###" - ], - "result": { - "count": 6, - "id": "antarchy:mossy_shellstone_brick_slab" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_slab_from_mossy_shellstone_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_slab_from_mossy_shellstone_bricks_stonecutting.json deleted file mode 100644 index 79fac6b2..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_slab_from_mossy_shellstone_bricks_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:mossy_shellstone_bricks" - }, - "result": { - "id": "antarchy:mossy_shellstone_brick_slab" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_stairs.json deleted file mode 100644 index 506f6756..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_stairs.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:mossy_shellstone_bricks" - } - }, - "pattern": [ - "# ", - "## ", - "###" - ], - "result": { - "count": 4, - "id": "antarchy:mossy_shellstone_brick_stairs" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_stairs_from_mossy_shellstone_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_stairs_from_mossy_shellstone_bricks_stonecutting.json deleted file mode 100644 index 01cbc7ab..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_stairs_from_mossy_shellstone_bricks_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:mossy_shellstone_bricks" - }, - "result": { - "id": "antarchy:mossy_shellstone_brick_stairs" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_wall.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_wall.json deleted file mode 100644 index e5a83e72..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_wall.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:mossy_shellstone_bricks" - } - }, - "pattern": [ - "###", - "###" - ], - "result": { - "count": 6, - "id": "antarchy:mossy_shellstone_brick_wall" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_wall_from_mossy_shellstone_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_wall_from_mossy_shellstone_bricks_stonecutting.json deleted file mode 100644 index f93c7359..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_wall_from_mossy_shellstone_bricks_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:mossy_shellstone_bricks" - }, - "result": { - "id": "antarchy:mossy_shellstone_brick_wall" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_shellstone_bricks.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_shellstone_bricks.json deleted file mode 100644 index 8f99e101..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_shellstone_bricks.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "building", - "ingredients": [ - { - "item": "antarchy:shellstone_bricks" - }, - { - "item": "minecraft:moss_block" - } - ], - "result": { - "count": 1, - "id": "antarchy:mossy_shellstone_bricks" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/mud_pie.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/mud_pie.json deleted file mode 100644 index 94e1b982..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/mud_pie.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "food", - "ingredients": [ - { - "item": "minecraft:mud" - }, - { - "item": "antarchy:moleworm" - } - ], - "result": { - "count": 1, - "id": "antarchy:mud_pie" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite.json deleted file mode 100644 index 9ce32863..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "S": { - "item": "minecraft:stone" - }, - "C": { - "item": "antarchy:chitin" - } - }, - "pattern": [ - "SSS", - "SCS", - "SSS" - ], - "result": { - "count": 8, - "id": "antarchy:myrmite" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_brick_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_brick_slab.json deleted file mode 100644 index 72acde9e..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_brick_slab.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:myrmite_bricks" - } - }, - "pattern": [ - "###" - ], - "result": { - "count": 6, - "id": "antarchy:myrmite_brick_slab" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_brick_slab_from_myrmite_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_brick_slab_from_myrmite_bricks_stonecutting.json deleted file mode 100644 index e9bc1ef0..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_brick_slab_from_myrmite_bricks_stonecutting.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:myrmite_bricks" - }, - "result": { - "count": 2, - "id": "antarchy:myrmite_brick_slab" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_brick_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_brick_stairs.json deleted file mode 100644 index 55966bad..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_brick_stairs.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:myrmite_bricks" - } - }, - "pattern": [ - "# ", - "## ", - "###" - ], - "result": { - "count": 4, - "id": "antarchy:myrmite_brick_stairs" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_brick_stairs_from_myrmite_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_brick_stairs_from_myrmite_bricks_stonecutting.json deleted file mode 100644 index 9214e15d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_brick_stairs_from_myrmite_bricks_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:myrmite_bricks" - }, - "result": { - "id": "antarchy:myrmite_brick_stairs" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_brick_wall.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_brick_wall.json deleted file mode 100644 index 9685d72f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_brick_wall.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:myrmite_bricks" - } - }, - "pattern": [ - "###", - "###" - ], - "result": { - "count": 6, - "id": "antarchy:myrmite_brick_wall" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_brick_wall_from_myrmite_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_brick_wall_from_myrmite_bricks_stonecutting.json deleted file mode 100644 index 6152205a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_brick_wall_from_myrmite_bricks_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:myrmite_bricks" - }, - "result": { - "id": "antarchy:myrmite_brick_wall" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_bricks_from_polished_myrmite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_bricks_from_polished_myrmite_stonecutting.json deleted file mode 100644 index 0c25dd69..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_bricks_from_polished_myrmite_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:polished_myrmite" - }, - "result": { - "id": "antarchy:myrmite_bricks" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_pillar_from_polished_myrmite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_pillar_from_polished_myrmite_stonecutting.json deleted file mode 100644 index 0ea1f57a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_pillar_from_polished_myrmite_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:polished_myrmite" - }, - "result": { - "id": "antarchy:myrmite_pillar" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_slab.json deleted file mode 100644 index aee0dd39..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_slab.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:myrmite" - } - }, - "pattern": [ - "###" - ], - "result": { - "count": 6, - "id": "antarchy:myrmite_slab" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_slab_from_myrmite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_slab_from_myrmite_stonecutting.json deleted file mode 100644 index acc3b57f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_slab_from_myrmite_stonecutting.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:myrmite" - }, - "result": { - "count": 2, - "id": "antarchy:myrmite_slab" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_stairs.json deleted file mode 100644 index 6c10fe52..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_stairs.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:myrmite" - } - }, - "pattern": [ - "# ", - "## ", - "###" - ], - "result": { - "count": 4, - "id": "antarchy:myrmite_stairs" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_stairs_from_myrmite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_stairs_from_myrmite_stonecutting.json deleted file mode 100644 index 0e87b519..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_stairs_from_myrmite_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:myrmite" - }, - "result": { - "id": "antarchy:myrmite_stairs" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_wall.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_wall.json deleted file mode 100644 index 283b1821..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_wall.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:myrmite" - } - }, - "pattern": [ - "###", - "###" - ], - "result": { - "count": 6, - "id": "antarchy:myrmite_wall" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_wall_from_myrmite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_wall_from_myrmite_stonecutting.json deleted file mode 100644 index 562bfb52..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_wall_from_myrmite_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:myrmite" - }, - "result": { - "id": "antarchy:myrmite_wall" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_boat.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_boat.json deleted file mode 100644 index c18b5ebd..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_boat.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "key": { - "#": { - "item": "antarchy:nadir_planks" - } - }, - "pattern": [ - "# #", - "###" - ], - "result": { - "count": 1, - "id": "antarchy:nadir_boat" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_button.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_button.json deleted file mode 100644 index 7a67d94c..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_button.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "redstone", - "group": "wooden_button", - "ingredients": [ - { - "item": "antarchy:nadir_planks" - } - ], - "result": { - "count": 1, - "id": "antarchy:nadir_button" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_chest_boat.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_chest_boat.json deleted file mode 100644 index e86215d4..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_chest_boat.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "equipment", - "ingredients": [ - { - "item": "antarchy:nadir_boat" - }, - { - "item": "minecraft:chest" - } - ], - "result": { - "count": 1, - "id": "antarchy:nadir_chest_boat" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_door.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_door.json deleted file mode 100644 index 332d6cad..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_door.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "group": "wooden_door", - "key": { - "#": { - "item": "antarchy:nadir_planks" - } - }, - "pattern": [ - "##", - "##", - "##" - ], - "result": { - "count": 3, - "id": "antarchy:nadir_door" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_fence.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_fence.json deleted file mode 100644 index 3ef5d1d4..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_fence.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "group": "wooden_fence", - "key": { - "#": { - "item": "minecraft:stick" - }, - "W": { - "item": "antarchy:nadir_planks" - } - }, - "pattern": [ - "W#W", - "W#W" - ], - "result": { - "count": 3, - "id": "antarchy:nadir_fence" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_fence_gate.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_fence_gate.json deleted file mode 100644 index 22069690..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_fence_gate.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "group": "wooden_fence_gate", - "key": { - "#": { - "item": "minecraft:stick" - }, - "W": { - "item": "antarchy:nadir_planks" - } - }, - "pattern": [ - "#W#", - "#W#" - ], - "result": { - "count": 1, - "id": "antarchy:nadir_fence_gate" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_hanging_sign.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_hanging_sign.json deleted file mode 100644 index b057918e..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_hanging_sign.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "group": "hanging_sign", - "key": { - "#": { - "item": "antarchy:stripped_nadir_log" - }, - "X": { - "item": "minecraft:chain" - } - }, - "pattern": [ - "X X", - "###", - "###" - ], - "result": { - "count": 6, - "id": "antarchy:nadir_hanging_sign" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_planks.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_planks.json deleted file mode 100644 index 1fd4195f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_planks.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "building", - "group": "planks", - "ingredients": [ - { - "tag": "antarchy:nadir_logs" - } - ], - "result": { - "count": 4, - "id": "antarchy:nadir_planks" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_pressure_plate.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_pressure_plate.json deleted file mode 100644 index 5286fecd..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_pressure_plate.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "group": "wooden_pressure_plate", - "key": { - "#": { - "item": "antarchy:nadir_planks" - } - }, - "pattern": [ - "##" - ], - "result": { - "count": 1, - "id": "antarchy:nadir_pressure_plate" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_sign.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_sign.json deleted file mode 100644 index 6bd91309..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_sign.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "group": "wooden_sign", - "key": { - "#": { - "item": "antarchy:nadir_planks" - }, - "X": { - "item": "minecraft:stick" - } - }, - "pattern": [ - "###", - "###", - " X " - ], - "result": { - "count": 3, - "id": "antarchy:nadir_sign" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_slab.json deleted file mode 100644 index bdb63f65..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_slab.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "group": "wooden_slab", - "key": { - "#": { - "item": "antarchy:nadir_planks" - } - }, - "pattern": [ - "###" - ], - "result": { - "count": 6, - "id": "antarchy:nadir_slab" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_stairs.json deleted file mode 100644 index fbcda572..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_stairs.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "group": "wooden_stairs", - "key": { - "#": { - "item": "antarchy:nadir_planks" - } - }, - "pattern": [ - "# ", - "## ", - "###" - ], - "result": { - "count": 4, - "id": "antarchy:nadir_stairs" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_trapdoor.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_trapdoor.json deleted file mode 100644 index 920c954d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_trapdoor.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "group": "wooden_trapdoor", - "key": { - "#": { - "item": "antarchy:nadir_planks" - } - }, - "pattern": [ - "###", - "###" - ], - "result": { - "count": 2, - "id": "antarchy:nadir_trapdoor" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_wood.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_wood.json deleted file mode 100644 index ba48c303..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/nadir_wood.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "group": "bark", - "key": { - "#": { - "item": "antarchy:nadir_log" - } - }, - "pattern": [ - "##", - "##" - ], - "result": { - "count": 3, - "id": "antarchy:nadir_wood" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/stripped_nadir_wood.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/stripped_nadir_wood.json deleted file mode 100644 index b9b3c293..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/nadir/stripped_nadir_wood.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "group": "bark", - "key": { - "#": { - "item": "antarchy:stripped_nadir_log" - } - }, - "pattern": [ - "##", - "##" - ], - "result": { - "count": 3, - "id": "antarchy:stripped_nadir_wood" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/nightmare/nightmare_boots.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/nightmare/nightmare_boots.json deleted file mode 100644 index ae8a00ef..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/nightmare/nightmare_boots.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "S S", - "S S" - ], - "key": { - "S": { - "item": "antarchy:nightmare_scale" - } - }, - "result": { - "id": "antarchy:nightmare_boots", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/nightmare/nightmare_chestplate.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/nightmare/nightmare_chestplate.json deleted file mode 100644 index 51e8043f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/nightmare/nightmare_chestplate.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "S S", - "SSS", - "SSS" - ], - "key": { - "S": { - "item": "antarchy:nightmare_scale" - } - }, - "result": { - "id": "antarchy:nightmare_chestplate", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/nightmare/nightmare_helmet.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/nightmare/nightmare_helmet.json deleted file mode 100644 index ba635177..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/nightmare/nightmare_helmet.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "SSS", - "S S" - ], - "key": { - "S": { - "item": "antarchy:nightmare_scale" - } - }, - "result": { - "id": "antarchy:nightmare_helmet", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/nightmare/nightmare_leggings.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/nightmare/nightmare_leggings.json deleted file mode 100644 index 880e5211..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/nightmare/nightmare_leggings.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "SSS", - "S S", - "S S" - ], - "key": { - "S": { - "item": "antarchy:nightmare_scale" - } - }, - "result": { - "id": "antarchy:nightmare_leggings", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/nightmare/nightmare_sword.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/nightmare/nightmare_sword.json deleted file mode 100644 index b20efd2b..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/nightmare/nightmare_sword.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - " S ", - " S ", - " N " - ], - "key": { - "N": { - "item": "minecraft:netherite_ingot" - }, - "S": { - "item": "antarchy:nightmare_scale" - } - }, - "result": { - "id": "antarchy:nightmare_sword", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite.json deleted file mode 100644 index 3a75935c..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "SS", - "SS" - ], - "key": { - "S": { - "item": "antarchy:nyxite_spike" - } - }, - "result": { - "id": "antarchy:nyxite", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_brick_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_brick_slab.json deleted file mode 100644 index cb6532ed..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_brick_slab.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:nyxite_bricks" - } - }, - "pattern": [ - "###" - ], - "result": { - "count": 6, - "id": "antarchy:nyxite_brick_slab" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_brick_slab_from_nyxite_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_brick_slab_from_nyxite_bricks_stonecutting.json deleted file mode 100644 index 42a7e0f1..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_brick_slab_from_nyxite_bricks_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:nyxite_bricks" - }, - "result": { - "count": 2, - "id": "antarchy:nyxite_brick_slab" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_brick_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_brick_stairs.json deleted file mode 100644 index cc847260..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_brick_stairs.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:nyxite_bricks" - } - }, - "pattern": [ - "# ", - "## ", - "###" - ], - "result": { - "count": 4, - "id": "antarchy:nyxite_brick_stairs" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_brick_stairs_from_nyxite_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_brick_stairs_from_nyxite_bricks_stonecutting.json deleted file mode 100644 index 5e13f3cb..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_brick_stairs_from_nyxite_bricks_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:nyxite_bricks" - }, - "result": { - "id": "antarchy:nyxite_brick_stairs" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_brick_wall.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_brick_wall.json deleted file mode 100644 index 75a0619e..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_brick_wall.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:nyxite_bricks" - } - }, - "pattern": [ - "###", - "###" - ], - "result": { - "count": 6, - "id": "antarchy:nyxite_brick_wall" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_brick_wall_from_nyxite_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_brick_wall_from_nyxite_bricks_stonecutting.json deleted file mode 100644 index 2f407f96..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_brick_wall_from_nyxite_bricks_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:nyxite_bricks" - }, - "result": { - "id": "antarchy:nyxite_brick_wall" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_bricks.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_bricks.json deleted file mode 100644 index 5e8bf30f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_bricks.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:polished_nyxite" - } - }, - "pattern": [ - "##", - "##" - ], - "result": { - "count": 4, - "id": "antarchy:nyxite_bricks" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_bricks_from_polished_nyxite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_bricks_from_polished_nyxite_stonecutting.json deleted file mode 100644 index 93e278e5..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_bricks_from_polished_nyxite_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:polished_nyxite" - }, - "result": { - "id": "antarchy:nyxite_bricks" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_pillar.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_pillar.json deleted file mode 100644 index b391cff7..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_pillar.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:polished_nyxite" - } - }, - "pattern": [ - "#", - "#" - ], - "result": { - "id": "antarchy:nyxite_pillar", - "count": 2 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_pillar_from_nyxite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_pillar_from_nyxite_stonecutting.json deleted file mode 100644 index 4aa56abc..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_pillar_from_nyxite_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:nyxite" - }, - "result": { - "id": "antarchy:nyxite_pillar" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_slab.json deleted file mode 100644 index d7b2d143..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_slab.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:nyxite" - } - }, - "pattern": [ - "###" - ], - "result": { - "count": 6, - "id": "antarchy:nyxite_slab" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_slab_from_nyxite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_slab_from_nyxite_stonecutting.json deleted file mode 100644 index c84f39a8..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_slab_from_nyxite_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:nyxite" - }, - "result": { - "count": 2, - "id": "antarchy:nyxite_slab" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_spikes.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_spikes.json deleted file mode 100644 index f246fc92..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_spikes.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "N" - ], - "key": { - "N": { - "item": "antarchy:nyxite" - } - }, - "result": { - "id": "antarchy:nyxite_spike", - "count": 4 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_stairs.json deleted file mode 100644 index 033667ea..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_stairs.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:nyxite" - } - }, - "pattern": [ - "# ", - "## ", - "###" - ], - "result": { - "count": 4, - "id": "antarchy:nyxite_stairs" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_stairs_from_nyxite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_stairs_from_nyxite_stonecutting.json deleted file mode 100644 index ea21f5ef..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_stairs_from_nyxite_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:nyxite" - }, - "result": { - "id": "antarchy:nyxite_stairs" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_wall.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_wall.json deleted file mode 100644 index 88ebdb77..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_wall.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:nyxite" - } - }, - "pattern": [ - "###", - "###" - ], - "result": { - "count": 6, - "id": "antarchy:nyxite_wall" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_wall_from_nyxite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_wall_from_nyxite_stonecutting.json deleted file mode 100644 index 5b521034..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/nyxite_wall_from_nyxite_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:nyxite" - }, - "result": { - "id": "antarchy:nyxite_wall" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/observer_from_bluestone.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/observer_from_bluestone.json deleted file mode 100644 index 13c1d7e3..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/observer_from_bluestone.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "key": { - "#": { - "item": "minecraft:cobblestone" - }, - "Q": { - "item": "minecraft:quartz" - }, - "R": { - "item": "antarchy:bluestone" - } - }, - "pattern": [ - "###", - "RRQ", - "###" - ], - "result": { - "count": 1, - "id": "minecraft:observer" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/orange_dye_from_orange_milkweed.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/orange_dye_from_orange_milkweed.json deleted file mode 100644 index 309b1ca3..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/orange_dye_from_orange_milkweed.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "ingredients": [ - { - "item": "antarchy:orange_milkweed" - } - ], - "result": { - "count": 2, - "id": "minecraft:orange_dye" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/mossy_ouranwood_log.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/mossy_ouranwood_log.json deleted file mode 100644 index 5833935c..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/mossy_ouranwood_log.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "building", - "ingredients": [ - { - "item": "antarchy:ouranwood_log" - }, - { - "item": "minecraft:moss_block" - } - ], - "result": { - "count": 1, - "id": "antarchy:mossy_ouranwood_log" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/mossy_ouranwood_wood.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/mossy_ouranwood_wood.json deleted file mode 100644 index a4b4ad87..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/mossy_ouranwood_wood.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "building", - "ingredients": [ - { - "item": "antarchy:ouranwood_wood" - }, - { - "item": "minecraft:moss_block" - } - ], - "result": { - "count": 1, - "id": "antarchy:mossy_ouranwood_wood" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/mossy_ouranwood_wood_from_mossy_ouranwood_log.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/mossy_ouranwood_wood_from_mossy_ouranwood_log.json deleted file mode 100644 index 91b9bfa5..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/mossy_ouranwood_wood_from_mossy_ouranwood_log.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "group": "bark", - "key": { - "#": { - "item": "antarchy:mossy_ouranwood_log" - } - }, - "pattern": [ - "##", - "##" - ], - "result": { - "count": 3, - "id": "antarchy:mossy_ouranwood_wood" - } -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_boat.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_boat.json deleted file mode 100644 index 8cb70b0f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_boat.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "key": { - "#": { - "item": "antarchy:ouranwood_planks" - } - }, - "pattern": [ - "# #", - "###" - ], - "result": { - "count": 1, - "id": "antarchy:ouranwood_boat" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_button.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_button.json deleted file mode 100644 index d3f8a1f7..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_button.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "redstone", - "group": "wooden_button", - "ingredients": [ - { - "item": "antarchy:ouranwood_planks" - } - ], - "result": { - "count": 1, - "id": "antarchy:ouranwood_button" - } -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_chest_boat.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_chest_boat.json deleted file mode 100644 index b25f30dc..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_chest_boat.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "equipment", - "ingredients": [ - { - "item": "antarchy:ouranwood_boat" - }, - { - "item": "minecraft:chest" - } - ], - "result": { - "count": 1, - "id": "antarchy:ouranwood_chest_boat" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_door.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_door.json deleted file mode 100644 index 43dcf499..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_door.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "group": "wooden_door", - "key": { - "#": { - "item": "antarchy:ouranwood_planks" - } - }, - "pattern": [ - "##", - "##", - "##" - ], - "result": { - "count": 3, - "id": "antarchy:ouranwood_door" - } -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_fence.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_fence.json deleted file mode 100644 index f299a517..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_fence.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "group": "wooden_fence", - "key": { - "#": { - "item": "minecraft:stick" - }, - "W": { - "item": "antarchy:ouranwood_planks" - } - }, - "pattern": [ - "W#W", - "W#W" - ], - "result": { - "count": 3, - "id": "antarchy:ouranwood_fence" - } -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_fence_gate.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_fence_gate.json deleted file mode 100644 index 073a844e..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_fence_gate.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "group": "wooden_fence_gate", - "key": { - "#": { - "item": "minecraft:stick" - }, - "W": { - "item": "antarchy:ouranwood_planks" - } - }, - "pattern": [ - "#W#", - "#W#" - ], - "result": { - "count": 1, - "id": "antarchy:ouranwood_fence_gate" - } -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_hanging_sign.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_hanging_sign.json deleted file mode 100644 index 657609c0..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_hanging_sign.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "group": "hanging_sign", - "key": { - "#": { - "item": "antarchy:stripped_ouranwood_log" - }, - "X": { - "item": "minecraft:chain" - } - }, - "pattern": [ - "X X", - "###", - "###" - ], - "result": { - "count": 6, - "id": "antarchy:ouranwood_hanging_sign" - } -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_planks.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_planks.json deleted file mode 100644 index 22a47950..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_planks.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "building", - "group": "planks", - "ingredients": [ - { - "tag": "antarchy:ouranwood_logs" - } - ], - "result": { - "count": 4, - "id": "antarchy:ouranwood_planks" - } -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_pressure_plate.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_pressure_plate.json deleted file mode 100644 index ed263c9a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_pressure_plate.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "group": "wooden_pressure_plate", - "key": { - "#": { - "item": "antarchy:ouranwood_planks" - } - }, - "pattern": [ - "##" - ], - "result": { - "count": 1, - "id": "antarchy:ouranwood_pressure_plate" - } -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_sign.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_sign.json deleted file mode 100644 index 682c866e..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_sign.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "group": "wooden_sign", - "key": { - "#": { - "item": "antarchy:ouranwood_planks" - }, - "X": { - "item": "minecraft:stick" - } - }, - "pattern": [ - "###", - "###", - " X " - ], - "result": { - "count": 3, - "id": "antarchy:ouranwood_sign" - } -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_slab.json deleted file mode 100644 index 3a531f30..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_slab.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "group": "wooden_slab", - "key": { - "#": { - "item": "antarchy:ouranwood_planks" - } - }, - "pattern": [ - "###" - ], - "result": { - "count": 6, - "id": "antarchy:ouranwood_slab" - } -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_stairs.json deleted file mode 100644 index 9d2c0ab1..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_stairs.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "group": "wooden_stairs", - "key": { - "#": { - "item": "antarchy:ouranwood_planks" - } - }, - "pattern": [ - "# ", - "## ", - "###" - ], - "result": { - "count": 4, - "id": "antarchy:ouranwood_stairs" - } -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_trapdoor.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_trapdoor.json deleted file mode 100644 index bd3e0127..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_trapdoor.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "group": "wooden_trapdoor", - "key": { - "#": { - "item": "antarchy:ouranwood_planks" - } - }, - "pattern": [ - "###", - "###" - ], - "result": { - "count": 2, - "id": "antarchy:ouranwood_trapdoor" - } -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_wood.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_wood.json deleted file mode 100644 index 5fb3f4b7..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/ouranwood_wood.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "group": "bark", - "key": { - "#": { - "item": "antarchy:ouranwood_log" - } - }, - "pattern": [ - "##", - "##" - ], - "result": { - "count": 3, - "id": "antarchy:ouranwood_wood" - } -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/stripped_ouranwood_wood.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/stripped_ouranwood_wood.json deleted file mode 100644 index 20833116..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/ouranwood/stripped_ouranwood_wood.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "group": "bark", - "key": { - "#": { - "item": "antarchy:stripped_ouranwood_log" - } - }, - "pattern": [ - "##", - "##" - ], - "result": { - "count": 3, - "id": "antarchy:stripped_ouranwood_wood" - } -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/pale_nyxite.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/pale_nyxite.json deleted file mode 100644 index 10db777a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/pale_nyxite.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "pattern": [ - "NQ", - "QN" - ], - "key": { - "N": { - "item": "antarchy:nyxite" - }, - "Q": { - "item": "minecraft:quartz" - } - }, - "result": { - "id": "antarchy:pale_nyxite", - "count": 2 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_boat.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_boat.json deleted file mode 100644 index 9007e56b..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_boat.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "key": { - "#": { - "item": "antarchy:peach_planks" - } - }, - "pattern": [ - "# #", - "###" - ], - "result": { - "count": 1, - "id": "antarchy:peach_boat" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_button.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_button.json deleted file mode 100644 index 385fea05..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_button.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "redstone", - "group": "wooden_button", - "ingredients": [ - { - "item": "antarchy:peach_planks" - } - ], - "result": { - "count": 1, - "id": "antarchy:peach_button" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_chest_boat.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_chest_boat.json deleted file mode 100644 index c865282a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_chest_boat.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "equipment", - "ingredients": [ - { - "item": "antarchy:peach_boat" - }, - { - "item": "minecraft:chest" - } - ], - "result": { - "count": 1, - "id": "antarchy:peach_chest_boat" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_door.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_door.json deleted file mode 100644 index d912173b..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_door.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "group": "wooden_door", - "key": { - "#": { - "item": "antarchy:peach_planks" - } - }, - "pattern": [ - "##", - "##", - "##" - ], - "result": { - "count": 3, - "id": "antarchy:peach_door" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_fence.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_fence.json deleted file mode 100644 index f86ace23..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_fence.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "group": "wooden_fence", - "key": { - "#": { - "item": "minecraft:stick" - }, - "W": { - "item": "antarchy:peach_planks" - } - }, - "pattern": [ - "W#W", - "W#W" - ], - "result": { - "count": 3, - "id": "antarchy:peach_fence" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_fence_gate.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_fence_gate.json deleted file mode 100644 index 7954228f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_fence_gate.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "group": "wooden_fence_gate", - "key": { - "#": { - "item": "minecraft:stick" - }, - "W": { - "item": "antarchy:peach_planks" - } - }, - "pattern": [ - "#W#", - "#W#" - ], - "result": { - "count": 1, - "id": "antarchy:peach_fence_gate" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_hanging_sign.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_hanging_sign.json deleted file mode 100644 index 8fcc4847..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_hanging_sign.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "group": "hanging_sign", - "key": { - "#": { - "item": "antarchy:stripped_peach_log" - }, - "X": { - "item": "minecraft:chain" - } - }, - "pattern": [ - "X X", - "###", - "###" - ], - "result": { - "count": 6, - "id": "antarchy:peach_hanging_sign" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_planks.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_planks.json deleted file mode 100644 index d0892886..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_planks.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "building", - "group": "planks", - "ingredients": [ - { - "tag": "antarchy:peach_logs" - } - ], - "result": { - "count": 4, - "id": "antarchy:peach_planks" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_pressure_plate.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_pressure_plate.json deleted file mode 100644 index 09fb8352..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_pressure_plate.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "group": "wooden_pressure_plate", - "key": { - "#": { - "item": "antarchy:peach_planks" - } - }, - "pattern": [ - "##" - ], - "result": { - "count": 1, - "id": "antarchy:peach_pressure_plate" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_sign.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_sign.json deleted file mode 100644 index cc36aa0d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_sign.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "group": "wooden_sign", - "key": { - "#": { - "item": "antarchy:peach_planks" - }, - "X": { - "item": "minecraft:stick" - } - }, - "pattern": [ - "###", - "###", - " X " - ], - "result": { - "count": 3, - "id": "antarchy:peach_sign" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_slab.json deleted file mode 100644 index 7cfe2b41..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_slab.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "group": "wooden_slab", - "key": { - "#": { - "item": "antarchy:peach_planks" - } - }, - "pattern": [ - "###" - ], - "result": { - "count": 6, - "id": "antarchy:peach_slab" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_stairs.json deleted file mode 100644 index 84cad977..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_stairs.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "group": "wooden_stairs", - "key": { - "#": { - "item": "antarchy:peach_planks" - } - }, - "pattern": [ - "# ", - "## ", - "###" - ], - "result": { - "count": 4, - "id": "antarchy:peach_stairs" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_trapdoor.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_trapdoor.json deleted file mode 100644 index 3332467d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_trapdoor.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "group": "wooden_trapdoor", - "key": { - "#": { - "item": "antarchy:peach_planks" - } - }, - "pattern": [ - "###", - "###" - ], - "result": { - "count": 2, - "id": "antarchy:peach_trapdoor" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_wood.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_wood.json deleted file mode 100644 index 5fd213ea..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/peach_wood.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "group": "bark", - "key": { - "#": { - "item": "antarchy:peach_log" - } - }, - "pattern": [ - "##", - "##" - ], - "result": { - "count": 3, - "id": "antarchy:peach_wood" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/stripped_peach_wood.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/stripped_peach_wood.json deleted file mode 100644 index 6c28a618..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/peach/stripped_peach_wood.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "group": "bark", - "key": { - "#": { - "item": "antarchy:stripped_peach_log" - } - }, - "pattern": [ - "##", - "##" - ], - "result": { - "count": 3, - "id": "antarchy:stripped_peach_wood" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/peach_pie.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/peach_pie.json deleted file mode 100644 index 9a226ee7..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/peach_pie.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "food", - "ingredients": [ - { - "item": "antarchy:peach" - }, - { - "item": "minecraft:sugar" - }, - { - "item": "minecraft:egg" - } - ], - "result": { - "count": 1, - "id": "antarchy:peach_pie" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/pink_dye_from_camellia.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/pink_dye_from_camellia.json deleted file mode 100644 index 2567622d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/pink_dye_from_camellia.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "ingredients": [ - { - "item": "antarchy:camellia" - } - ], - "result": { - "count": 2, - "id": "minecraft:pink_dye" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/pink_dye_from_lotus.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/pink_dye_from_lotus.json deleted file mode 100644 index e3a7b1a3..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/pink_dye_from_lotus.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "ingredients": [ - { "item": "antarchy:lotus" } - ], - "result": { - "count": 2, - "id": "minecraft:pink_dye" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/pink_dye_from_pink_milkweed.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/pink_dye_from_pink_milkweed.json deleted file mode 100644 index 067771c4..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/pink_dye_from_pink_milkweed.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "ingredients": [ - { - "item": "antarchy:pink_milkweed" - } - ], - "result": { - "count": 2, - "id": "minecraft:pink_dye" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/piston_from_bluestone.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/piston_from_bluestone.json deleted file mode 100644 index def55212..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/piston_from_bluestone.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "key": { - "#": { - "item": "minecraft:cobblestone" - }, - "R": { - "item": "antarchy:bluestone" - }, - "T": { - "tag": "minecraft:planks" - }, - "X": { - "item": "minecraft:iron_ingot" - } - }, - "pattern": [ - "TTT", - "#X#", - "#R#" - ], - "result": { - "count": 1, - "id": "minecraft:piston" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_antimetal.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_antimetal.json deleted file mode 100644 index cacdf649..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_antimetal.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "pattern": [ - "##", - "##" - ], - "key": { - "#": { - "item": "antarchy:antimetal" - } - }, - "result": { - "id": "antarchy:polished_antimetal", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_antimetal_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_antimetal_slab.json deleted file mode 100644 index 9e22ced8..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_antimetal_slab.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:polished_antimetal" - } - }, - "pattern": [ - "###" - ], - "result": { - "count": 6, - "id": "antarchy:polished_antimetal_slab" - } -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_antimetal_slab_from_polished_antimetal_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_antimetal_slab_from_polished_antimetal_stonecutting.json deleted file mode 100644 index 679f2db3..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_antimetal_slab_from_polished_antimetal_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:polished_antimetal" - }, - "result": { - "id": "antarchy:polished_antimetal_slab" - } -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_antimetal_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_antimetal_stairs.json deleted file mode 100644 index 00a089bc..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_antimetal_stairs.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:polished_antimetal" - } - }, - "pattern": [ - "# ", - "## ", - "###" - ], - "result": { - "count": 4, - "id": "antarchy:polished_antimetal_stairs" - } -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_antimetal_stairs_from_polished_antimetal_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_antimetal_stairs_from_polished_antimetal_stonecutting.json deleted file mode 100644 index c4c371aa..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_antimetal_stairs_from_polished_antimetal_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:polished_antimetal" - }, - "result": { - "id": "antarchy:polished_antimetal_stairs" - } -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_broodstone.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_broodstone.json deleted file mode 100644 index 22d25709..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_broodstone.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:broodstone" - } - }, - "pattern": [ - "##", - "##" - ], - "result": { - "count": 4, - "id": "antarchy:polished_broodstone" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_broodstone_from_broodstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_broodstone_from_broodstone_stonecutting.json deleted file mode 100644 index 755f5085..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_broodstone_from_broodstone_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:broodstone" - }, - "result": { - "id": "antarchy:polished_broodstone" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_broodstone_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_broodstone_slab.json deleted file mode 100644 index 885a0efa..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_broodstone_slab.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:polished_broodstone" - } - }, - "pattern": [ - "###" - ], - "result": { - "count": 6, - "id": "antarchy:polished_broodstone_slab" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_broodstone_slab_from_polished_broodstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_broodstone_slab_from_polished_broodstone_stonecutting.json deleted file mode 100644 index 47dc204a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_broodstone_slab_from_polished_broodstone_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:polished_broodstone" - }, - "result": { - "count": 2, - "id": "antarchy:polished_broodstone_slab" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_broodstone_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_broodstone_stairs.json deleted file mode 100644 index aa1a9609..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_broodstone_stairs.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:polished_broodstone" - } - }, - "pattern": [ - "# ", - "## ", - "###" - ], - "result": { - "count": 4, - "id": "antarchy:polished_broodstone_stairs" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_broodstone_stairs_from_polished_broodstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_broodstone_stairs_from_polished_broodstone_stonecutting.json deleted file mode 100644 index 6f366781..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_broodstone_stairs_from_polished_broodstone_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:polished_broodstone" - }, - "result": { - "id": "antarchy:polished_broodstone_stairs" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_broodstone_wall.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_broodstone_wall.json deleted file mode 100644 index 40bac9a7..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_broodstone_wall.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:polished_broodstone" - } - }, - "pattern": [ - "###", - "###" - ], - "result": { - "count": 6, - "id": "antarchy:polished_broodstone_wall" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_broodstone_wall_from_polished_broodstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_broodstone_wall_from_polished_broodstone_stonecutting.json deleted file mode 100644 index 5563a05f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_broodstone_wall_from_polished_broodstone_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:polished_broodstone" - }, - "result": { - "id": "antarchy:polished_broodstone_wall" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_myrmite_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_myrmite_slab.json deleted file mode 100644 index 98ef0993..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_myrmite_slab.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:polished_myrmite" - } - }, - "pattern": [ - "###" - ], - "result": { - "count": 6, - "id": "antarchy:polished_myrmite_slab" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_myrmite_slab_from_polished_myrmite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_myrmite_slab_from_polished_myrmite_stonecutting.json deleted file mode 100644 index abaee8ee..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_myrmite_slab_from_polished_myrmite_stonecutting.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:polished_myrmite" - }, - "result": { - "count": 2, - "id": "antarchy:polished_myrmite_slab" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_myrmite_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_myrmite_stairs.json deleted file mode 100644 index a743810c..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_myrmite_stairs.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:polished_myrmite" - } - }, - "pattern": [ - "# ", - "## ", - "###" - ], - "result": { - "count": 4, - "id": "antarchy:polished_myrmite_stairs" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_myrmite_stairs_from_polished_myrmite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_myrmite_stairs_from_polished_myrmite_stonecutting.json deleted file mode 100644 index 5fe284c5..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_myrmite_stairs_from_polished_myrmite_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:polished_myrmite" - }, - "result": { - "id": "antarchy:polished_myrmite_stairs" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_myrmite_wall.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_myrmite_wall.json deleted file mode 100644 index 5817ba80..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_myrmite_wall.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:polished_myrmite" - } - }, - "pattern": [ - "###", - "###" - ], - "result": { - "count": 6, - "id": "antarchy:polished_myrmite_wall" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_myrmite_wall_from_polished_myrmite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_myrmite_wall_from_polished_myrmite_stonecutting.json deleted file mode 100644 index aa81852d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_myrmite_wall_from_polished_myrmite_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:polished_myrmite" - }, - "result": { - "id": "antarchy:polished_myrmite_wall" - } -} - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_nyxite.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_nyxite.json deleted file mode 100644 index 6d05e925..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_nyxite.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:nyxite" - } - }, - "pattern": [ - "##", - "##" - ], - "result": { - "count": 4, - "id": "antarchy:polished_nyxite" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_nyxite_button.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_nyxite_button.json deleted file mode 100644 index d2761822..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_nyxite_button.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "redstone", - "group": "stone_button", - "ingredients": [ - { - "item": "antarchy:polished_nyxite" - } - ], - "result": { - "count": 1, - "id": "antarchy:polished_nyxite_button" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_nyxite_from_nyxite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_nyxite_from_nyxite_stonecutting.json deleted file mode 100644 index c119aa4d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_nyxite_from_nyxite_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:nyxite" - }, - "result": { - "id": "antarchy:polished_nyxite" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_nyxite_pressure_plate.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_nyxite_pressure_plate.json deleted file mode 100644 index 9795a57f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_nyxite_pressure_plate.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "group": "stone_pressure_plate", - "key": { - "#": { - "item": "antarchy:polished_nyxite" - } - }, - "pattern": [ - "##" - ], - "result": { - "count": 1, - "id": "antarchy:polished_nyxite_pressure_plate" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_nyxite_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_nyxite_slab.json deleted file mode 100644 index 819b981d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_nyxite_slab.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:polished_nyxite" - } - }, - "pattern": [ - "###" - ], - "result": { - "count": 6, - "id": "antarchy:polished_nyxite_slab" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_nyxite_slab_from_polished_nyxite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_nyxite_slab_from_polished_nyxite_stonecutting.json deleted file mode 100644 index edf583e1..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_nyxite_slab_from_polished_nyxite_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:polished_nyxite" - }, - "result": { - "count": 2, - "id": "antarchy:polished_nyxite_slab" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_nyxite_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_nyxite_stairs.json deleted file mode 100644 index d73f6cc8..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_nyxite_stairs.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:polished_nyxite" - } - }, - "pattern": [ - "# ", - "## ", - "###" - ], - "result": { - "count": 4, - "id": "antarchy:polished_nyxite_stairs" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_nyxite_stairs_from_polished_nyxite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_nyxite_stairs_from_polished_nyxite_stonecutting.json deleted file mode 100644 index d07069fd..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_nyxite_stairs_from_polished_nyxite_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:polished_nyxite" - }, - "result": { - "id": "antarchy:polished_nyxite_stairs" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_nyxite_wall.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_nyxite_wall.json deleted file mode 100644 index 3bf99321..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_nyxite_wall.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:polished_nyxite" - } - }, - "pattern": [ - "###", - "###" - ], - "result": { - "count": 6, - "id": "antarchy:polished_nyxite_wall" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_nyxite_wall_from_polished_nyxite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_nyxite_wall_from_polished_nyxite_stonecutting.json deleted file mode 100644 index d162d37a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_nyxite_wall_from_polished_nyxite_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:polished_nyxite" - }, - "result": { - "id": "antarchy:polished_nyxite_wall" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_shellstone.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_shellstone.json deleted file mode 100644 index 4acf3d56..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_shellstone.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:shellstone" - } - }, - "pattern": [ - "##", - "##" - ], - "result": { - "count": 4, - "id": "antarchy:polished_shellstone" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_shellstone_from_shellstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_shellstone_from_shellstone_stonecutting.json deleted file mode 100644 index 4ed6dfed..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_shellstone_from_shellstone_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:shellstone" - }, - "result": { - "id": "antarchy:polished_shellstone" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_shellstone_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_shellstone_slab.json deleted file mode 100644 index 6d91fe8d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_shellstone_slab.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:polished_shellstone" - } - }, - "pattern": [ - "###" - ], - "result": { - "count": 6, - "id": "antarchy:polished_shellstone_slab" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_shellstone_slab_from_polished_shellstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_shellstone_slab_from_polished_shellstone_stonecutting.json deleted file mode 100644 index 766aabb5..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_shellstone_slab_from_polished_shellstone_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:polished_shellstone" - }, - "result": { - "id": "antarchy:polished_shellstone_slab" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_shellstone_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_shellstone_stairs.json deleted file mode 100644 index 8baf0e8c..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_shellstone_stairs.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:polished_shellstone" - } - }, - "pattern": [ - "# ", - "## ", - "###" - ], - "result": { - "count": 4, - "id": "antarchy:polished_shellstone_stairs" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_shellstone_stairs_from_polished_shellstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_shellstone_stairs_from_polished_shellstone_stonecutting.json deleted file mode 100644 index d2b7d1d0..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_shellstone_stairs_from_polished_shellstone_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:polished_shellstone" - }, - "result": { - "id": "antarchy:polished_shellstone_stairs" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_shellstone_wall.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_shellstone_wall.json deleted file mode 100644 index b9e77a08..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_shellstone_wall.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:polished_shellstone" - } - }, - "pattern": [ - "###", - "###" - ], - "result": { - "count": 6, - "id": "antarchy:polished_shellstone_wall" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_shellstone_wall_from_polished_shellstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_shellstone_wall_from_polished_shellstone_stonecutting.json deleted file mode 100644 index 6ca39ad3..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_shellstone_wall_from_polished_shellstone_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:polished_shellstone" - }, - "result": { - "id": "antarchy:polished_shellstone_wall" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_typhonite_slab_from_polished_typhonite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_typhonite_slab_from_polished_typhonite_stonecutting.json deleted file mode 100644 index 83831579..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_typhonite_slab_from_polished_typhonite_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:polished_typhonite" - }, - "result": { - "count": 2, - "id": "antarchy:polished_typhonite_slab" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_typhonite_stairs_from_polished_typhonite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_typhonite_stairs_from_polished_typhonite_stonecutting.json deleted file mode 100644 index deba5762..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_typhonite_stairs_from_polished_typhonite_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:polished_typhonite" - }, - "result": { - "id": "antarchy:polished_typhonite_stairs" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_typhonite_wall_from_polished_typhonite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_typhonite_wall_from_polished_typhonite_stonecutting.json deleted file mode 100644 index 950f484e..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_typhonite_wall_from_polished_typhonite_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:polished_typhonite" - }, - "result": { - "id": "antarchy:polished_typhonite_wall" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/popcorn_from_smelting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/popcorn_from_smelting.json deleted file mode 100644 index 145d1a82..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/popcorn_from_smelting.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:smelting", - "category": "food", - "cookingtime": 200, - "experience": 0.1, - "ingredient": { - "item": "antarchy:corn_seeds" - }, - "result": { - "id": "antarchy:popcorn" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/popcorn_from_smoking.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/popcorn_from_smoking.json deleted file mode 100644 index 529783bb..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/popcorn_from_smoking.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:smoking", - "category": "food", - "cookingtime": 100, - "experience": 0.1, - "ingredient": { - "item": "antarchy:corn_seeds" - }, - "result": { - "id": "antarchy:popcorn" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/portal_gun.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/portal_gun.json deleted file mode 100644 index fff9858d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/portal_gun.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "T N", - "TSN", - "TBT" - ], - "key": { - "T": { - "item": "antarchy:titanium_ingot" - }, - "N": { - "item": "antarchy:nightmare_scale" - }, - "S": { - "item": "minecraft:nether_star" - }, - "B": { - "item": "antarchy:bluestone_comparator" - } - }, - "result": { - "id": "antarchy:portal_gun" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/primordial_boots.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/primordial_boots.json deleted file mode 100644 index df018913..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/primordial_boots.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "S S", - "S S" - ], - "key": { - "S": { - "item": "antarchy:primordial_scute" - } - }, - "result": { - "id": "antarchy:primordial_boots", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/primordial_chestplate.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/primordial_chestplate.json deleted file mode 100644 index 70224df6..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/primordial_chestplate.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "S S", - "SSS", - "SSS" - ], - "key": { - "S": { - "item": "antarchy:primordial_scute" - } - }, - "result": { - "id": "antarchy:primordial_chestplate", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/primordial_helmet.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/primordial_helmet.json deleted file mode 100644 index 50c0087f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/primordial_helmet.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "SSS", - "S S" - ], - "key": { - "S": { - "item": "antarchy:primordial_scute" - } - }, - "result": { - "id": "antarchy:primordial_helmet", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/primordial_leggings.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/primordial_leggings.json deleted file mode 100644 index aa6fa050..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/primordial_leggings.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "SSS", - "S S", - "S S" - ], - "key": { - "S": { - "item": "antarchy:primordial_scute" - } - }, - "result": { - "id": "antarchy:primordial_leggings", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/rainbow_sugar.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/rainbow_sugar.json deleted file mode 100644 index a91e2a53..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/rainbow_sugar.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { "item": "minecraft:sugar" }, - { "item": "antarchy:uranium_nugget" }, - { "item": "antarchy:high_fructose_corn_syrup" } - ], - "result": { - "id": "antarchy:rainbow_sugar", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/raw_corndog.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/raw_corndog.json deleted file mode 100644 index e569ba5c..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/raw_corndog.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "food", - "key": { - "#": { - "tag": "antarchy:corndog_meats" - }, - "C": { - "item": "antarchy:corn" - }, - "S": { - "item": "minecraft:stick" - } - }, - "pattern": [ - " C ", - "C#C", - " S " - ], - "result": { - "count": 1, - "id": "antarchy:raw_corndog" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/red_dye_from_spider_lily.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/red_dye_from_spider_lily.json deleted file mode 100644 index b2c55b48..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/red_dye_from_spider_lily.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "ingredients": [ - { - "item": "antarchy:spider_lily" - } - ], - "result": { - "count": 1, - "id": "minecraft:red_dye" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal_assailant_battleaxe.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/royal_assailant_battleaxe.json deleted file mode 100644 index 99443b9e..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal_assailant_battleaxe.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "SSS", - "SBS", - "SSS" - ], - "key": { - "S": { - "item": "antarchy:queen_scale" - }, - "B": { - "item": "antarchy:big_bertha" - } - }, - "result": { - "id": "antarchy:royal_assailant_battleaxe", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal_assailant_boots.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/royal_assailant_boots.json deleted file mode 100644 index 4f55f725..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal_assailant_boots.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "SSS", - "SUS", - "SSS" - ], - "key": { - "S": { "item": "antarchy:queen_scale" }, - "U": { "item": "antarchy:ultimate_boots" } - }, - "result": { - "id": "antarchy:royal_assailant_boots", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal_assailant_chestplate.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/royal_assailant_chestplate.json deleted file mode 100644 index 0a9b0ae2..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal_assailant_chestplate.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "SSS", - "SUS", - "SSS" - ], - "key": { - "S": { "item": "antarchy:queen_scale" }, - "U": { "item": "antarchy:ultimate_chestplate" } - }, - "result": { - "id": "antarchy:royal_assailant_chestplate", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal_assailant_helmet.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/royal_assailant_helmet.json deleted file mode 100644 index a3a4319e..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal_assailant_helmet.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "SSS", - "SUS", - "SSS" - ], - "key": { - "S": { "item": "antarchy:queen_scale" }, - "U": { "item": "antarchy:ultimate_helmet" } - }, - "result": { - "id": "antarchy:royal_assailant_helmet", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal_assailant_leggings.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/royal_assailant_leggings.json deleted file mode 100644 index 8c510bf4..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal_assailant_leggings.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "SSS", - "SUS", - "SSS" - ], - "key": { - "S": { "item": "antarchy:queen_scale" }, - "U": { "item": "antarchy:ultimate_leggings" } - }, - "result": { - "id": "antarchy:royal_assailant_leggings", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal_assailant_staff.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/royal_assailant_staff.json deleted file mode 100644 index 21d32d94..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal_assailant_staff.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": ["MLM", " Q ", " Q "], - "key": { - "M": { "item": "antarchy:manticore_wing" }, - "L": { "item": "antarchy:lucid_eye" }, - "Q": { "item": "antarchy:queen_scale" } - }, - "result": { "id": "antarchy:royal_assailant_staff", "count": 1 } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal_guardian_boots.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/royal_guardian_boots.json deleted file mode 100644 index d84265f8..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal_guardian_boots.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "SSS", - "SUS", - "SSS" - ], - "key": { - "S": { "item": "antarchy:king_scale" }, - "U": { "item": "antarchy:ultimate_boots" } - }, - "result": { - "id": "antarchy:royal_guardian_boots", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal_guardian_chestplate.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/royal_guardian_chestplate.json deleted file mode 100644 index 5d77f5a3..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal_guardian_chestplate.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "SSS", - "SUS", - "SSS" - ], - "key": { - "S": { "item": "antarchy:king_scale" }, - "U": { "item": "antarchy:ultimate_chestplate" } - }, - "result": { - "id": "antarchy:royal_guardian_chestplate", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal_guardian_helmet.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/royal_guardian_helmet.json deleted file mode 100644 index 37736878..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal_guardian_helmet.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "SSS", - "SUS", - "SSS" - ], - "key": { - "S": { "item": "antarchy:king_scale" }, - "U": { "item": "antarchy:ultimate_helmet" } - }, - "result": { - "id": "antarchy:royal_guardian_helmet", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal_guardian_leggings.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/royal_guardian_leggings.json deleted file mode 100644 index e404dc5d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal_guardian_leggings.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "SSS", - "SUS", - "SSS" - ], - "key": { - "S": { "item": "antarchy:king_scale" }, - "U": { "item": "antarchy:ultimate_leggings" } - }, - "result": { - "id": "antarchy:royal_guardian_leggings", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal_guardian_sword.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/royal_guardian_sword.json deleted file mode 100644 index 5e9cc4b4..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal_guardian_sword.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "SSS", - "SBS", - "SSS" - ], - "key": { - "S": { - "item": "antarchy:king_scale" - }, - "B": { - "item": "antarchy:big_bertha" - } - }, - "result": { - "id": "antarchy:royal_guardian_sword", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/rpo_launcher.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/rpo_launcher.json deleted file mode 100644 index 02ea37b5..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/rpo_launcher.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "TTT", - "III", - "TTT" - ], - "key": { - "T": { - "item": "antarchy:titanium_block" - }, - "I": { - "item": "minecraft:ink_sac" - } - }, - "result": { - "id": "antarchy:rpo_launcher", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/scorpion_whip.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/scorpion_whip.json deleted file mode 100644 index b88292ef..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/scorpion_whip.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - " S", - " L ", - "L " - ], - "key": { - "L": { - "item": "minecraft:lead" - }, - "S": { - "item": "antarchy:emperor_scorpion_stinger" - } - }, - "result": { - "id": "antarchy:scorpion_whip", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone.json deleted file mode 100644 index 2d6dc380..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "S": { - "item": "minecraft:stone" - }, - "P": { - "item": "antarchy:primordial_scute" - } - }, - "pattern": [ - "SSS", - "SPS", - "SSS" - ], - "result": { - "count": 8, - "id": "antarchy:shellstone" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_brick_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_brick_slab.json deleted file mode 100644 index 96a68d4f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_brick_slab.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:shellstone_bricks" - } - }, - "pattern": [ - "###" - ], - "result": { - "count": 6, - "id": "antarchy:shellstone_brick_slab" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_brick_slab_from_shellstone_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_brick_slab_from_shellstone_bricks_stonecutting.json deleted file mode 100644 index 7ac88bab..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_brick_slab_from_shellstone_bricks_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:shellstone_bricks" - }, - "result": { - "id": "antarchy:shellstone_brick_slab" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_brick_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_brick_stairs.json deleted file mode 100644 index a16aae7c..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_brick_stairs.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:shellstone_bricks" - } - }, - "pattern": [ - "# ", - "## ", - "###" - ], - "result": { - "count": 4, - "id": "antarchy:shellstone_brick_stairs" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_brick_stairs_from_shellstone_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_brick_stairs_from_shellstone_bricks_stonecutting.json deleted file mode 100644 index 71245885..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_brick_stairs_from_shellstone_bricks_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:shellstone_bricks" - }, - "result": { - "id": "antarchy:shellstone_brick_stairs" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_brick_wall.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_brick_wall.json deleted file mode 100644 index d5389cc6..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_brick_wall.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:shellstone_bricks" - } - }, - "pattern": [ - "###", - "###" - ], - "result": { - "count": 6, - "id": "antarchy:shellstone_brick_wall" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_brick_wall_from_shellstone_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_brick_wall_from_shellstone_bricks_stonecutting.json deleted file mode 100644 index fb6bade5..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_brick_wall_from_shellstone_bricks_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:shellstone_bricks" - }, - "result": { - "id": "antarchy:shellstone_brick_wall" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_bricks.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_bricks.json deleted file mode 100644 index 456f20a6..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_bricks.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:polished_shellstone" - } - }, - "pattern": [ - "##", - "##" - ], - "result": { - "count": 4, - "id": "antarchy:shellstone_bricks" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_bricks_from_polished_shellstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_bricks_from_polished_shellstone_stonecutting.json deleted file mode 100644 index 2658a28c..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_bricks_from_polished_shellstone_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:polished_shellstone" - }, - "result": { - "id": "antarchy:shellstone_bricks" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_pillar.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_pillar.json deleted file mode 100644 index b44593c8..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_pillar.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:polished_shellstone" - } - }, - "pattern": [ - "#", - "#" - ], - "result": { - "id": "antarchy:shellstone_pillar", - "count": 2 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_pillar_from_shellstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_pillar_from_shellstone_stonecutting.json deleted file mode 100644 index 8f2b2ad6..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_pillar_from_shellstone_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:shellstone" - }, - "result": { - "id": "antarchy:shellstone_pillar" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_slab.json deleted file mode 100644 index 3950b782..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_slab.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:shellstone" - } - }, - "pattern": [ - "###" - ], - "result": { - "count": 6, - "id": "antarchy:shellstone_slab" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_slab_from_shellstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_slab_from_shellstone_stonecutting.json deleted file mode 100644 index 3f437c99..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_slab_from_shellstone_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:shellstone" - }, - "result": { - "id": "antarchy:shellstone_slab" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_stairs.json deleted file mode 100644 index 431bab68..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_stairs.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:shellstone" - } - }, - "pattern": [ - "# ", - "## ", - "###" - ], - "result": { - "count": 4, - "id": "antarchy:shellstone_stairs" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_stairs_from_shellstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_stairs_from_shellstone_stonecutting.json deleted file mode 100644 index d77ae87f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_stairs_from_shellstone_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:shellstone" - }, - "result": { - "id": "antarchy:shellstone_stairs" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_wall.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_wall.json deleted file mode 100644 index ace5ddef..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_wall.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:shellstone" - } - }, - "pattern": [ - "###", - "###" - ], - "result": { - "count": 6, - "id": "antarchy:shellstone_wall" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_wall_from_shellstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_wall_from_shellstone_stonecutting.json deleted file mode 100644 index 9ea99f5f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/shellstone_wall_from_shellstone_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:shellstone" - }, - "result": { - "id": "antarchy:shellstone_wall" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/shrink_ray.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/shrink_ray.json deleted file mode 100644 index 66e3d4c6..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/shrink_ray.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "UUU", - "UCU", - " N" - ], - "key": { - "U": { - "item": "antarchy:uranium_ingot" - }, - "N": { - "tag": "c:ingots/netherite" - }, - "C": { - "item": "minecraft:comparator" - } - }, - "result": { - "id": "antarchy:shrink_ray", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/smooth_dream_sandstone.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/smooth_dream_sandstone.json deleted file mode 100644 index 781c3982..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/smooth_dream_sandstone.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "minecraft:smelting", - "category": "blocks", - "experience": 0.1, - "ingredient": { - "item": "antarchy:dream_sandstone" - }, - "result": { - "id": "antarchy:smooth_dream_sandstone" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/smooth_dream_sandstone_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/smooth_dream_sandstone_slab.json deleted file mode 100644 index ba25e8eb..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/smooth_dream_sandstone_slab.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:smooth_dream_sandstone" - } - }, - "pattern": [ - "###" - ], - "result": { - "count": 6, - "id": "antarchy:smooth_dream_sandstone_slab" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/smooth_dream_sandstone_slab_from_smooth_dream_sandstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/smooth_dream_sandstone_slab_from_smooth_dream_sandstone_stonecutting.json deleted file mode 100644 index 5ed26e56..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/smooth_dream_sandstone_slab_from_smooth_dream_sandstone_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:smooth_dream_sandstone" - }, - "result": { - "count": 2, - "id": "antarchy:smooth_dream_sandstone_slab" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/smooth_dream_sandstone_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/smooth_dream_sandstone_stairs.json deleted file mode 100644 index 1fc1ca0f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/smooth_dream_sandstone_stairs.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:smooth_dream_sandstone" - } - }, - "pattern": [ - "# ", - "## ", - "###" - ], - "result": { - "count": 4, - "id": "antarchy:smooth_dream_sandstone_stairs" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/smooth_dream_sandstone_stairs_from_smooth_dream_sandstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/smooth_dream_sandstone_stairs_from_smooth_dream_sandstone_stonecutting.json deleted file mode 100644 index 92545111..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/smooth_dream_sandstone_stairs_from_smooth_dream_sandstone_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:smooth_dream_sandstone" - }, - "result": { - "id": "antarchy:smooth_dream_sandstone_stairs" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/springy_boots.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/springy_boots.json deleted file mode 100644 index 8c0f2e4f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/springy_boots.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "JBJ", - "J J" - ], - "key": { - "J": { - "item": "antarchy:springbug_leg" - }, - "B": { - "item": "minecraft:netherite_boots" - } - }, - "result": { - "id": "antarchy:springy_boots", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/squidzooka.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/squidzooka.json deleted file mode 100644 index f461dbaf..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/squidzooka.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "TTT", - "III", - "TTT" - ], - "key": { - "T": { - "item": "antarchy:titanium_ingot" - }, - "I": { - "item": "minecraft:ink_sac" - } - }, - "result": { - "id": "antarchy:squidzooka", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/target_from_bluestone.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/target_from_bluestone.json deleted file mode 100644 index f3e8c33f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/target_from_bluestone.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "key": { - "H": { - "item": "minecraft:hay_block" - }, - "R": { - "item": "antarchy:bluestone" - } - }, - "pattern": [ - " R ", - "RHR", - " R " - ], - "result": { - "count": 1, - "id": "minecraft:target" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/tigers_eye_boots.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/tigers_eye_boots.json deleted file mode 100644 index dc67d407..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/tigers_eye_boots.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "S S", - "S S" - ], - "key": { - "S": { - "item": "antarchy:tigers_eye" - } - }, - "result": { - "id": "antarchy:tigers_eye_boots", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/tigers_eye_chestplate.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/tigers_eye_chestplate.json deleted file mode 100644 index 659ce168..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/tigers_eye_chestplate.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "S S", - "SSS", - "SSS" - ], - "key": { - "S": { - "item": "antarchy:tigers_eye" - } - }, - "result": { - "id": "antarchy:tigers_eye_chestplate", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/tigers_eye_helmet.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/tigers_eye_helmet.json deleted file mode 100644 index 9a6cceef..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/tigers_eye_helmet.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "SSS", - "S S" - ], - "key": { - "S": { - "item": "antarchy:tigers_eye" - } - }, - "result": { - "id": "antarchy:tigers_eye_helmet", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/tigers_eye_leggings.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/tigers_eye_leggings.json deleted file mode 100644 index b43d1e71..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/tigers_eye_leggings.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "SSS", - "S S", - "S S" - ], - "key": { - "S": { - "item": "antarchy:tigers_eye" - } - }, - "result": { - "id": "antarchy:tigers_eye_leggings", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/chiseled_titanium.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/chiseled_titanium.json deleted file mode 100644 index 7826f5dd..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/chiseled_titanium.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:cut_titanium_slab" - } - }, - "pattern": [ - "#", - "#" - ], - "result": { - "id": "antarchy:chiseled_titanium" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/chiseled_titanium_from_cut_titanium_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/chiseled_titanium_from_cut_titanium_stonecutting.json deleted file mode 100644 index de7293b9..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/chiseled_titanium_from_cut_titanium_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:cut_titanium" - }, - "result": { - "id": "antarchy:chiseled_titanium" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/chiseled_titanium_from_titanium_block_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/chiseled_titanium_from_titanium_block_stonecutting.json deleted file mode 100644 index 6e587373..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/chiseled_titanium_from_titanium_block_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:titanium_block" - }, - "result": { - "count": 4, - "id": "antarchy:chiseled_titanium" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/cut_titanium.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/cut_titanium.json deleted file mode 100644 index 27b31a8a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/cut_titanium.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:titanium_block" - } - }, - "pattern": [ - "##", - "##" - ], - "result": { - "count": 4, - "id": "antarchy:cut_titanium" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/cut_titanium_from_titanium_block_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/cut_titanium_from_titanium_block_stonecutting.json deleted file mode 100644 index d9dab374..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/cut_titanium_from_titanium_block_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:titanium_block" - }, - "result": { - "count": 4, - "id": "antarchy:cut_titanium" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/cut_titanium_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/cut_titanium_slab.json deleted file mode 100644 index db60b7ad..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/cut_titanium_slab.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:cut_titanium" - } - }, - "pattern": [ - "###" - ], - "result": { - "count": 6, - "id": "antarchy:cut_titanium_slab" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/cut_titanium_slab_from_cut_titanium_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/cut_titanium_slab_from_cut_titanium_stonecutting.json deleted file mode 100644 index 25db603a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/cut_titanium_slab_from_cut_titanium_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:cut_titanium" - }, - "result": { - "count": 2, - "id": "antarchy:cut_titanium_slab" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/cut_titanium_slab_from_titanium_block_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/cut_titanium_slab_from_titanium_block_stonecutting.json deleted file mode 100644 index fc5663ba..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/cut_titanium_slab_from_titanium_block_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:titanium_block" - }, - "result": { - "count": 8, - "id": "antarchy:cut_titanium_slab" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/cut_titanium_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/cut_titanium_stairs.json deleted file mode 100644 index 29a88cbd..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/cut_titanium_stairs.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:cut_titanium" - } - }, - "pattern": [ - "# ", - "## ", - "###" - ], - "result": { - "count": 4, - "id": "antarchy:cut_titanium_stairs" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/cut_titanium_stairs_from_cut_titanium_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/cut_titanium_stairs_from_cut_titanium_stonecutting.json deleted file mode 100644 index 98dc0d43..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/cut_titanium_stairs_from_cut_titanium_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:cut_titanium" - }, - "result": { - "id": "antarchy:cut_titanium_stairs" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/cut_titanium_stairs_from_titanium_block_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/cut_titanium_stairs_from_titanium_block_stonecutting.json deleted file mode 100644 index cec54ed4..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/cut_titanium_stairs_from_titanium_block_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:titanium_block" - }, - "result": { - "count": 4, - "id": "antarchy:cut_titanium_stairs" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/raw_titanium_block.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/raw_titanium_block.json deleted file mode 100644 index bb28dd32..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/raw_titanium_block.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "item": "antarchy:raw_titanium" - } - }, - "result": { - "id": "antarchy:raw_titanium_block", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/raw_titanium_from_block.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/raw_titanium_from_block.json deleted file mode 100644 index 1d2de3ba..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/raw_titanium_from_block.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "ingredients": [ - { - "item": "antarchy:raw_titanium_block" - } - ], - "result": { - "id": "antarchy:raw_titanium", - "count": 9 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/raw_titanium_from_scrap.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/raw_titanium_from_scrap.json deleted file mode 100644 index 53af6e83..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/raw_titanium_from_scrap.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "pattern": [ - "SSS", - "SSS", - "SSS" - ], - "key": { - "S": { - "item": "antarchy:raw_titanium_scrap" - } - }, - "result": { - "id": "antarchy:raw_titanium", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/titanium_bars.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/titanium_bars.json deleted file mode 100644 index 45c5d112..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/titanium_bars.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "key": { - "#": { - "item": "antarchy:titanium_ingot" - } - }, - "pattern": [ - "###", - "###" - ], - "result": { - "count": 16, - "id": "antarchy:titanium_bars" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/titanium_block.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/titanium_block.json deleted file mode 100644 index e1b796e1..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/titanium_block.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "item": "antarchy:titanium_ingot" - } - }, - "result": { - "id": "antarchy:titanium_block", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/titanium_bulb.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/titanium_bulb.json deleted file mode 100644 index d69d24e1..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/titanium_bulb.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "key": { - "B": { - "item": "minecraft:blaze_rod" - }, - "C": { - "item": "antarchy:titanium_block" - }, - "R": { - "item": "minecraft:redstone" - } - }, - "pattern": [ - " C ", - "CBC", - " R " - ], - "result": { - "count": 4, - "id": "antarchy:titanium_bulb" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/titanium_door.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/titanium_door.json deleted file mode 100644 index 07269636..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/titanium_door.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "key": { - "#": { - "item": "antarchy:titanium_ingot" - } - }, - "pattern": [ - "##", - "##", - "##" - ], - "result": { - "count": 3, - "id": "antarchy:titanium_door" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/titanium_ingot_from_nuggets.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/titanium_ingot_from_nuggets.json deleted file mode 100644 index fdc229a0..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/titanium_ingot_from_nuggets.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "pattern": [ - "NNN", - "NNN", - "NNN" - ], - "key": { - "N": { - "item": "antarchy:titanium_nugget" - } - }, - "result": { - "id": "antarchy:titanium_ingot", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/titanium_ingot_from_raw_titanium_blasting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/titanium_ingot_from_raw_titanium_blasting.json deleted file mode 100644 index 18262aea..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/titanium_ingot_from_raw_titanium_blasting.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:blasting", - "category": "misc", - "ingredient": { - "item": "antarchy:raw_titanium" - }, - "result": { - "id": "antarchy:titanium_ingot" - }, - "experience": 2.0, - "cookingtime": 100 -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/titanium_ingot_from_raw_titanium_smelting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/titanium_ingot_from_raw_titanium_smelting.json deleted file mode 100644 index 47855561..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/titanium_ingot_from_raw_titanium_smelting.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:smelting", - "category": "misc", - "ingredient": { - "item": "antarchy:raw_titanium" - }, - "result": { - "id": "antarchy:titanium_ingot" - }, - "experience": 2.0, - "cookingtime": 200 -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/titanium_ingots_from_block.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/titanium_ingots_from_block.json deleted file mode 100644 index 20b49872..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/titanium_ingots_from_block.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "ingredients": [ - { - "item": "antarchy:titanium_block" - } - ], - "result": { - "id": "antarchy:titanium_ingot", - "count": 9 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/titanium_nugget_from_raw_titanium_scrap_blasting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/titanium_nugget_from_raw_titanium_scrap_blasting.json deleted file mode 100644 index 03136581..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/titanium_nugget_from_raw_titanium_scrap_blasting.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:blasting", - "category": "misc", - "ingredient": { - "item": "antarchy:raw_titanium_scrap" - }, - "result": { - "id": "antarchy:titanium_nugget" - }, - "experience": 2.0, - "cookingtime": 100 -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/titanium_nugget_from_raw_titanium_scrap_smelting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/titanium_nugget_from_raw_titanium_scrap_smelting.json deleted file mode 100644 index 5761c6aa..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/titanium_nugget_from_raw_titanium_scrap_smelting.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:smelting", - "category": "misc", - "ingredient": { - "item": "antarchy:raw_titanium_scrap" - }, - "result": { - "id": "antarchy:titanium_nugget" - }, - "experience": 2.0, - "cookingtime": 200 -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/titanium_nuggets_from_ingot.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/titanium_nuggets_from_ingot.json deleted file mode 100644 index b739a5b2..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/titanium_nuggets_from_ingot.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "ingredients": [ - { - "item": "antarchy:titanium_ingot" - } - ], - "result": { - "id": "antarchy:titanium_nugget", - "count": 9 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/titanium_trapdoor.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/titanium_trapdoor.json deleted file mode 100644 index 66732d3d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/titanium/titanium_trapdoor.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "key": { - "#": { - "item": "antarchy:titanium_ingot" - } - }, - "pattern": [ - "##", - "##" - ], - "result": { - "id": "antarchy:titanium_trapdoor" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/triffid_goo_block.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/triffid_goo_block.json deleted file mode 100644 index 77656042..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/triffid_goo_block.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:triffid_goo" - } - }, - "pattern": [ - "###", - "###", - "###" - ], - "result": { - "id": "antarchy:triffid_goo_block" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/black_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/black_truffalo_tuft.json deleted file mode 100644 index 7f8b3432..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/black_truffalo_tuft.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "group": "truffalo_tuft", - "ingredients": [ - { "tag": "antarchy:truffalo_tuft" }, - { "item": "minecraft:black_dye" } - ], - "result": { - "count": 1, - "id": "antarchy:black_truffalo_tuft" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/blue_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/blue_truffalo_tuft.json deleted file mode 100644 index faacf711..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/blue_truffalo_tuft.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "group": "truffalo_tuft", - "ingredients": [ - { "tag": "antarchy:truffalo_tuft" }, - { "item": "minecraft:blue_dye" } - ], - "result": { - "count": 1, - "id": "antarchy:blue_truffalo_tuft" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/brown_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/brown_truffalo_tuft.json deleted file mode 100644 index 6b7ae827..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/brown_truffalo_tuft.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "group": "truffalo_tuft", - "ingredients": [ - { "tag": "antarchy:truffalo_tuft" }, - { "item": "minecraft:brown_dye" } - ], - "result": { - "count": 1, - "id": "antarchy:brown_truffalo_tuft" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/cyan_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/cyan_truffalo_tuft.json deleted file mode 100644 index a14e5601..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/cyan_truffalo_tuft.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "group": "truffalo_tuft", - "ingredients": [ - { "tag": "antarchy:truffalo_tuft" }, - { "item": "minecraft:cyan_dye" } - ], - "result": { - "count": 1, - "id": "antarchy:cyan_truffalo_tuft" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/gray_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/gray_truffalo_tuft.json deleted file mode 100644 index 1301d795..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/gray_truffalo_tuft.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "group": "truffalo_tuft", - "ingredients": [ - { "tag": "antarchy:truffalo_tuft" }, - { "item": "minecraft:gray_dye" } - ], - "result": { - "count": 1, - "id": "antarchy:gray_truffalo_tuft" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/green_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/green_truffalo_tuft.json deleted file mode 100644 index 54916c9f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/green_truffalo_tuft.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "group": "truffalo_tuft", - "ingredients": [ - { "tag": "antarchy:truffalo_tuft" }, - { "item": "minecraft:green_dye" } - ], - "result": { - "count": 1, - "id": "antarchy:green_truffalo_tuft" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/light_blue_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/light_blue_truffalo_tuft.json deleted file mode 100644 index 7132709a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/light_blue_truffalo_tuft.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "group": "truffalo_tuft", - "ingredients": [ - { "tag": "antarchy:truffalo_tuft" }, - { "item": "minecraft:light_blue_dye" } - ], - "result": { - "count": 1, - "id": "antarchy:light_blue_truffalo_tuft" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/light_gray_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/light_gray_truffalo_tuft.json deleted file mode 100644 index 7dad2243..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/light_gray_truffalo_tuft.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "group": "truffalo_tuft", - "ingredients": [ - { "tag": "antarchy:truffalo_tuft" }, - { "item": "minecraft:light_gray_dye" } - ], - "result": { - "count": 1, - "id": "antarchy:light_gray_truffalo_tuft" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/lime_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/lime_truffalo_tuft.json deleted file mode 100644 index 4a5f24a1..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/lime_truffalo_tuft.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "group": "truffalo_tuft", - "ingredients": [ - { "tag": "antarchy:truffalo_tuft" }, - { "item": "minecraft:lime_dye" } - ], - "result": { - "count": 1, - "id": "antarchy:lime_truffalo_tuft" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/magenta_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/magenta_truffalo_tuft.json deleted file mode 100644 index 1495f705..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/magenta_truffalo_tuft.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "group": "truffalo_tuft", - "ingredients": [ - { "tag": "antarchy:truffalo_tuft" }, - { "item": "minecraft:magenta_dye" } - ], - "result": { - "count": 1, - "id": "antarchy:magenta_truffalo_tuft" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/orange_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/orange_truffalo_tuft.json deleted file mode 100644 index c77f2368..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/orange_truffalo_tuft.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "group": "truffalo_tuft", - "ingredients": [ - { "tag": "antarchy:truffalo_tuft" }, - { "item": "minecraft:orange_dye" } - ], - "result": { - "count": 1, - "id": "antarchy:orange_truffalo_tuft" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/pink_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/pink_truffalo_tuft.json deleted file mode 100644 index b048aac6..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/pink_truffalo_tuft.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "group": "truffalo_tuft", - "ingredients": [ - { "tag": "antarchy:truffalo_tuft" }, - { "item": "minecraft:pink_dye" } - ], - "result": { - "count": 1, - "id": "antarchy:pink_truffalo_tuft" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/purple_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/purple_truffalo_tuft.json deleted file mode 100644 index 983a3da2..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/purple_truffalo_tuft.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "group": "truffalo_tuft", - "ingredients": [ - { "tag": "antarchy:truffalo_tuft" }, - { "item": "minecraft:purple_dye" } - ], - "result": { - "count": 1, - "id": "antarchy:purple_truffalo_tuft" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/red_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/red_truffalo_tuft.json deleted file mode 100644 index d57f5d5d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/red_truffalo_tuft.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "group": "truffalo_tuft", - "ingredients": [ - { "tag": "antarchy:truffalo_tuft" }, - { "item": "minecraft:red_dye" } - ], - "result": { - "count": 1, - "id": "antarchy:red_truffalo_tuft" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/white_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/white_truffalo_tuft.json deleted file mode 100644 index 6754020c..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/white_truffalo_tuft.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "group": "truffalo_tuft", - "ingredients": [ - { "tag": "antarchy:truffalo_tuft" }, - { "item": "minecraft:white_dye" } - ], - "result": { - "count": 1, - "id": "antarchy:white_truffalo_tuft" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/yellow_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/yellow_truffalo_tuft.json deleted file mode 100644 index e062bc0f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/yellow_truffalo_tuft.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "group": "truffalo_tuft", - "ingredients": [ - { "tag": "antarchy:truffalo_tuft" }, - { "item": "minecraft:yellow_dye" } - ], - "result": { - "count": 1, - "id": "antarchy:yellow_truffalo_tuft" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_brick_slab_from_typhonite_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_brick_slab_from_typhonite_bricks_stonecutting.json deleted file mode 100644 index 250dfce6..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_brick_slab_from_typhonite_bricks_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:typhonite_bricks" - }, - "result": { - "count": 2, - "id": "antarchy:typhonite_brick_slab" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_brick_stairs_from_typhonite_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_brick_stairs_from_typhonite_bricks_stonecutting.json deleted file mode 100644 index 87dece95..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_brick_stairs_from_typhonite_bricks_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:typhonite_bricks" - }, - "result": { - "id": "antarchy:typhonite_brick_stairs" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_brick_wall_from_typhonite_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_brick_wall_from_typhonite_bricks_stonecutting.json deleted file mode 100644 index cb3a1c22..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_brick_wall_from_typhonite_bricks_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:typhonite_bricks" - }, - "result": { - "id": "antarchy:typhonite_brick_wall" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_pillar_from_typhonite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_pillar_from_typhonite_stonecutting.json deleted file mode 100644 index d35283f0..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_pillar_from_typhonite_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:typhonite" - }, - "result": { - "id": "antarchy:typhonite_pillar" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_slab_from_typhonite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_slab_from_typhonite_stonecutting.json deleted file mode 100644 index caae48ce..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_slab_from_typhonite_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:typhonite" - }, - "result": { - "count": 2, - "id": "antarchy:typhonite_slab" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_stairs_from_typhonite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_stairs_from_typhonite_stonecutting.json deleted file mode 100644 index 3e82a518..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_stairs_from_typhonite_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:typhonite" - }, - "result": { - "id": "antarchy:typhonite_stairs" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_wall_from_typhonite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_wall_from_typhonite_stonecutting.json deleted file mode 100644 index f9db9aa6..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_wall_from_typhonite_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:typhonite" - }, - "result": { - "id": "antarchy:typhonite_wall" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/ultimate/ultimate_axe.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/ultimate/ultimate_axe.json deleted file mode 100644 index 9a141b6c..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/ultimate/ultimate_axe.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "UT ", - "UN ", - " N " - ], - "key": { - "U": { - "item": "antarchy:uranium_ingot" - }, - "T": { - "item": "antarchy:titanium_ingot" - }, - "N": { - "item": "minecraft:netherite_ingot" - } - }, - "result": { - "id": "antarchy:ultimate_axe", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/ultimate/ultimate_boots.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/ultimate/ultimate_boots.json deleted file mode 100644 index 182b8fc2..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/ultimate/ultimate_boots.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "U U", - "T T" - ], - "key": { - "U": { - "item": "antarchy:uranium_ingot" - }, - "T": { - "item": "antarchy:titanium_ingot" - } - }, - "result": { - "id": "antarchy:ultimate_boots", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/ultimate/ultimate_bow.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/ultimate/ultimate_bow.json deleted file mode 100644 index 7a887d40..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/ultimate/ultimate_bow.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "UTS", - "U S", - "UTS" - ], - "key": { - "U": { - "item": "antarchy:uranium_ingot" - }, - "T": { - "item": "antarchy:titanium_ingot" - }, - "S": { - "item": "minecraft:string" - } - }, - "result": { - "id": "antarchy:ultimate_bow", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/ultimate/ultimate_chestplate.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/ultimate/ultimate_chestplate.json deleted file mode 100644 index 024c9f0b..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/ultimate/ultimate_chestplate.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "U U", - "UTU", - "TTT" - ], - "key": { - "U": { - "item": "antarchy:uranium_ingot" - }, - "T": { - "item": "antarchy:titanium_ingot" - } - }, - "result": { - "id": "antarchy:ultimate_chestplate", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/ultimate/ultimate_crossbow.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/ultimate/ultimate_crossbow.json deleted file mode 100644 index 947a12ea..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/ultimate/ultimate_crossbow.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "TUT", - "UCU", - "TUT" - ], - "key": { - "U": { - "item": "antarchy:uranium_ingot" - }, - "T": { - "item": "antarchy:titanium_ingot" - }, - "C": { - "item": "minecraft:crossbow" - } - }, - "result": { - "id": "antarchy:ultimate_crossbow", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/ultimate/ultimate_helmet.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/ultimate/ultimate_helmet.json deleted file mode 100644 index 0d87b860..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/ultimate/ultimate_helmet.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "TUT", - "T T" - ], - "key": { - "U": { - "item": "antarchy:uranium_ingot" - }, - "T": { - "item": "antarchy:titanium_ingot" - } - }, - "result": { - "id": "antarchy:ultimate_helmet", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/ultimate/ultimate_hoe.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/ultimate/ultimate_hoe.json deleted file mode 100644 index 5ff3eb26..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/ultimate/ultimate_hoe.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "UT ", - " N ", - " N " - ], - "key": { - "U": { - "item": "antarchy:uranium_ingot" - }, - "T": { - "item": "antarchy:titanium_ingot" - }, - "N": { - "item": "minecraft:netherite_ingot" - } - }, - "result": { - "id": "antarchy:ultimate_hoe", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/ultimate/ultimate_leggings.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/ultimate/ultimate_leggings.json deleted file mode 100644 index fc141585..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/ultimate/ultimate_leggings.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "UTU", - "T T", - "U U" - ], - "key": { - "U": { - "item": "antarchy:uranium_ingot" - }, - "T": { - "item": "antarchy:titanium_ingot" - } - }, - "result": { - "id": "antarchy:ultimate_leggings", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/ultimate/ultimate_pickaxe.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/ultimate/ultimate_pickaxe.json deleted file mode 100644 index 2be56e04..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/ultimate/ultimate_pickaxe.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - "UTU", - " N ", - " N " - ], - "key": { - "U": { - "item": "antarchy:uranium_ingot" - }, - "T": { - "item": "antarchy:titanium_ingot" - }, - "N": { - "item": "minecraft:netherite_ingot" - } - }, - "result": { - "id": "antarchy:ultimate_pickaxe", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/ultimate/ultimate_shovel.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/ultimate/ultimate_shovel.json deleted file mode 100644 index ebfa5f30..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/ultimate/ultimate_shovel.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - " T ", - " U ", - " N " - ], - "key": { - "U": { - "item": "antarchy:uranium_ingot" - }, - "T": { - "item": "antarchy:titanium_ingot" - }, - "N": { - "item": "minecraft:netherite_ingot" - } - }, - "result": { - "id": "antarchy:ultimate_shovel", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/ultimate/ultimate_sword.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/ultimate/ultimate_sword.json deleted file mode 100644 index 90e4ebdb..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/ultimate/ultimate_sword.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "pattern": [ - " U ", - " T ", - " N " - ], - "key": { - "U": { - "item": "antarchy:uranium_ingot" - }, - "T": { - "item": "antarchy:titanium_ingot" - }, - "N": { - "item": "minecraft:netherite_ingot" - } - }, - "result": { - "id": "antarchy:ultimate_sword", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/ultimate/uranium_block.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/ultimate/uranium_block.json deleted file mode 100644 index e9e990ab..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/ultimate/uranium_block.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "item": "antarchy:uranium_ingot" - } - }, - "result": { - "id": "antarchy:uranium_block", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/umbral_moss_carpet.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/umbral_moss_carpet.json deleted file mode 100644 index 59ee027d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/umbral_moss_carpet.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:umbral_moss_block" - } - }, - "pattern": [ - "#", - "#" - ], - "result": { - "count": 3, - "id": "antarchy:umbral_moss_carpet" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/upper.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/upper.json deleted file mode 100644 index 5163a8cd..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/upper.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "key": { - "I": { "item": "antarchy:polished_antimetal" }, - "C": { "item": "minecraft:chest" } - }, - "pattern": [ - " I ", - "ICI", - "I I" - ], - "result": { - "id": "antarchy:upper", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/chiseled_uranium.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/chiseled_uranium.json deleted file mode 100644 index 1a7c364c..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/chiseled_uranium.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:cut_uranium_slab" - } - }, - "pattern": [ - "#", - "#" - ], - "result": { - "id": "antarchy:chiseled_uranium" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/chiseled_uranium_from_cut_uranium_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/chiseled_uranium_from_cut_uranium_stonecutting.json deleted file mode 100644 index 0d5f43bb..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/chiseled_uranium_from_cut_uranium_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:cut_uranium" - }, - "result": { - "id": "antarchy:chiseled_uranium" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/chiseled_uranium_from_uranium_block_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/chiseled_uranium_from_uranium_block_stonecutting.json deleted file mode 100644 index 7550ec01..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/chiseled_uranium_from_uranium_block_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:uranium_block" - }, - "result": { - "count": 4, - "id": "antarchy:chiseled_uranium" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/cut_uranium.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/cut_uranium.json deleted file mode 100644 index ea4c3962..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/cut_uranium.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:uranium_block" - } - }, - "pattern": [ - "##", - "##" - ], - "result": { - "count": 4, - "id": "antarchy:cut_uranium" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/cut_uranium_from_uranium_block_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/cut_uranium_from_uranium_block_stonecutting.json deleted file mode 100644 index 1cd6ee71..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/cut_uranium_from_uranium_block_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:uranium_block" - }, - "result": { - "count": 4, - "id": "antarchy:cut_uranium" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/cut_uranium_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/cut_uranium_slab.json deleted file mode 100644 index c8ef6043..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/cut_uranium_slab.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:cut_uranium" - } - }, - "pattern": [ - "###" - ], - "result": { - "count": 6, - "id": "antarchy:cut_uranium_slab" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/cut_uranium_slab_from_cut_uranium_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/cut_uranium_slab_from_cut_uranium_stonecutting.json deleted file mode 100644 index 517a39eb..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/cut_uranium_slab_from_cut_uranium_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:cut_uranium" - }, - "result": { - "count": 2, - "id": "antarchy:cut_uranium_slab" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/cut_uranium_slab_from_uranium_block_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/cut_uranium_slab_from_uranium_block_stonecutting.json deleted file mode 100644 index 5749c815..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/cut_uranium_slab_from_uranium_block_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:uranium_block" - }, - "result": { - "count": 8, - "id": "antarchy:cut_uranium_slab" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/cut_uranium_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/cut_uranium_stairs.json deleted file mode 100644 index e0af3de0..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/cut_uranium_stairs.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:cut_uranium" - } - }, - "pattern": [ - "# ", - "## ", - "###" - ], - "result": { - "count": 4, - "id": "antarchy:cut_uranium_stairs" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/cut_uranium_stairs_from_cut_uranium_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/cut_uranium_stairs_from_cut_uranium_stonecutting.json deleted file mode 100644 index 750437f1..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/cut_uranium_stairs_from_cut_uranium_stonecutting.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:cut_uranium" - }, - "result": { - "id": "antarchy:cut_uranium_stairs" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/cut_uranium_stairs_from_uranium_block_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/cut_uranium_stairs_from_uranium_block_stonecutting.json deleted file mode 100644 index f0e060f2..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/cut_uranium_stairs_from_uranium_block_stonecutting.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "antarchy:uranium_block" - }, - "result": { - "count": 4, - "id": "antarchy:cut_uranium_stairs" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/raw_uranium_block.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/raw_uranium_block.json deleted file mode 100644 index 0befce31..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/raw_uranium_block.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "item": "antarchy:raw_uranium" - } - }, - "result": { - "id": "antarchy:raw_uranium_block", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/raw_uranium_from_block.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/raw_uranium_from_block.json deleted file mode 100644 index 15f27640..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/raw_uranium_from_block.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "ingredients": [ - { - "item": "antarchy:raw_uranium_block" - } - ], - "result": { - "id": "antarchy:raw_uranium", - "count": 9 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/raw_uranium_from_scrap.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/raw_uranium_from_scrap.json deleted file mode 100644 index 33fdd110..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/raw_uranium_from_scrap.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "pattern": [ - "SSS", - "SSS", - "SSS" - ], - "key": { - "S": { - "item": "antarchy:raw_uranium_scrap" - } - }, - "result": { - "id": "antarchy:raw_uranium", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/uranium_bars.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/uranium_bars.json deleted file mode 100644 index 3c7d73b1..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/uranium_bars.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "key": { - "#": { - "item": "antarchy:uranium_ingot" - } - }, - "pattern": [ - "###", - "###" - ], - "result": { - "count": 16, - "id": "antarchy:uranium_bars" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/uranium_bulb.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/uranium_bulb.json deleted file mode 100644 index f4c99895..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/uranium_bulb.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "key": { - "B": { - "item": "minecraft:blaze_rod" - }, - "C": { - "item": "antarchy:uranium_block" - }, - "R": { - "item": "minecraft:redstone" - } - }, - "pattern": [ - " C ", - "CBC", - " R " - ], - "result": { - "count": 4, - "id": "antarchy:uranium_bulb" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/uranium_door.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/uranium_door.json deleted file mode 100644 index ba6440a8..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/uranium_door.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "key": { - "#": { - "item": "antarchy:uranium_ingot" - } - }, - "pattern": [ - "##", - "##", - "##" - ], - "result": { - "count": 3, - "id": "antarchy:uranium_door" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/uranium_ingot_from_nuggets.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/uranium_ingot_from_nuggets.json deleted file mode 100644 index 60f51c0e..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/uranium_ingot_from_nuggets.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "pattern": [ - "NNN", - "NNN", - "NNN" - ], - "key": { - "N": { - "item": "antarchy:uranium_nugget" - } - }, - "result": { - "id": "antarchy:uranium_ingot", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/uranium_ingot_from_raw_uranium_blasting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/uranium_ingot_from_raw_uranium_blasting.json deleted file mode 100644 index a95c9764..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/uranium_ingot_from_raw_uranium_blasting.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:blasting", - "category": "misc", - "ingredient": { - "item": "antarchy:raw_uranium" - }, - "result": { - "id": "antarchy:uranium_ingot" - }, - "experience": 2.0, - "cookingtime": 100 -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/uranium_ingot_from_raw_uranium_smelting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/uranium_ingot_from_raw_uranium_smelting.json deleted file mode 100644 index dcf0d1da..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/uranium_ingot_from_raw_uranium_smelting.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:smelting", - "category": "misc", - "ingredient": { - "item": "antarchy:raw_uranium" - }, - "result": { - "id": "antarchy:uranium_ingot" - }, - "experience": 2.0, - "cookingtime": 200 -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/uranium_ingots_from_block.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/uranium_ingots_from_block.json deleted file mode 100644 index 3b89b3c5..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/uranium_ingots_from_block.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "ingredients": [ - { - "item": "antarchy:uranium_block" - } - ], - "result": { - "id": "antarchy:uranium_ingot", - "count": 9 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/uranium_nugget_from_raw_uranium_scrap_blasting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/uranium_nugget_from_raw_uranium_scrap_blasting.json deleted file mode 100644 index a277c7a8..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/uranium_nugget_from_raw_uranium_scrap_blasting.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:blasting", - "category": "misc", - "ingredient": { - "item": "antarchy:raw_uranium_scrap" - }, - "result": { - "id": "antarchy:uranium_nugget" - }, - "experience": 2.0, - "cookingtime": 100 -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/uranium_nugget_from_raw_uranium_scrap_smelting.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/uranium_nugget_from_raw_uranium_scrap_smelting.json deleted file mode 100644 index 5f8d9a95..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/uranium_nugget_from_raw_uranium_scrap_smelting.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:smelting", - "category": "misc", - "ingredient": { - "item": "antarchy:raw_uranium_scrap" - }, - "result": { - "id": "antarchy:uranium_nugget" - }, - "experience": 2.0, - "cookingtime": 200 -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/uranium_nuggets_from_ingot.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/uranium_nuggets_from_ingot.json deleted file mode 100644 index b79bfb14..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/uranium_nuggets_from_ingot.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "ingredients": [ - { - "item": "antarchy:uranium_ingot" - } - ], - "result": { - "id": "antarchy:uranium_nugget", - "count": 9 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/uranium_trapdoor.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/uranium_trapdoor.json deleted file mode 100644 index 87f4a5e9..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/uranium/uranium_trapdoor.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "key": { - "#": { - "item": "antarchy:uranium_ingot" - } - }, - "pattern": [ - "##", - "##" - ], - "result": { - "id": "antarchy:uranium_trapdoor" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/ant_trap.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/ant_trap.json new file mode 100644 index 00000000..a04b948f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ant_trap.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "GS", + "QQ" + ], + "key": { + "G": { + "item": "antarchy:flytrap_goo" + }, + "S": { + "item": "minecraft:sugar" + }, + "Q": { + "item": "minecraft:quartz" + } + }, + "result": { + "item": "antarchy:ant_trap" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/antimetal_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/antimetal_slab.json index b213a6d2..d7905211 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/antimetal_slab.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/antimetal_slab.json @@ -10,7 +10,7 @@ "###" ], "result": { - "count": 6, - "item": "antarchy:antimetal_slab" + "item": "antarchy:antimetal_slab", + "count": 6 } -} \ No newline at end of file +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/antimetal_slab_from_antimetal_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/antimetal_slab_from_antimetal_stonecutting.json index 48fe4a0f..c6d0075e 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/antimetal_slab_from_antimetal_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/antimetal_slab_from_antimetal_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:antimetal" }, - "result": { - "item": "antarchy:antimetal_slab" - } -} \ No newline at end of file + "result": "antarchy:antimetal_slab", + "count": 1 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/antimetal_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/antimetal_stairs.json index 94fe641f..6cc9c44a 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/antimetal_stairs.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/antimetal_stairs.json @@ -12,7 +12,7 @@ "###" ], "result": { - "count": 4, - "item": "antarchy:antimetal_stairs" + "item": "antarchy:antimetal_stairs", + "count": 4 } -} \ No newline at end of file +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/antimetal_stairs_from_antimetal_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/antimetal_stairs_from_antimetal_stonecutting.json index f76beac4..b0ed20f0 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/antimetal_stairs_from_antimetal_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/antimetal_stairs_from_antimetal_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:antimetal" }, - "result": { - "item": "antarchy:antimetal_stairs" - } -} \ No newline at end of file + "result": "antarchy:antimetal_stairs", + "count": 1 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/antiwater_bucket.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/antiwater_bucket.json index aa330c9b..41cebd52 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/antiwater_bucket.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/antiwater_bucket.json @@ -1,11 +1,14 @@ { "type": "minecraft:crafting_shapeless", "ingredients": [ - { "item": "minecraft:water_bucket" }, - { "item": "antarchy:lucid_eye" } + { + "item": "minecraft:water_bucket" + }, + { + "item": "antarchy:lucid_eye" + } ], "result": { - "item": "antarchy:antiwater_bucket", - "count": 1 + "item": "antarchy:antiwater_bucket" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/attitude_adjuster.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/attitude_adjuster.json index f190fe88..09f2d5ff 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/attitude_adjuster.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/attitude_adjuster.json @@ -18,7 +18,6 @@ } }, "result": { - "item": "antarchy:attitude_adjuster", - "count": 1 + "item": "antarchy:attitude_adjuster" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/basilisk_dagger.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/basilisk_dagger.json index a9132600..38de7dbf 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/basilisk_dagger.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/basilisk_dagger.json @@ -1,6 +1,6 @@ { "type": "minecraft:crafting_shaped", - "category": "equipment", + "category": "combat", "key": { "F": { "item": "antarchy:basilisk_fang" @@ -14,7 +14,6 @@ "S" ], "result": { - "item": "antarchy:basilisk_dagger", - "count": 1 + "item": "antarchy:basilisk_dagger" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/battle_axe.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/battle_axe.json index d5fe2981..4894eee8 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/battle_axe.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/battle_axe.json @@ -18,7 +18,6 @@ } }, "result": { - "item": "antarchy:battle_axe", - "count": 1 + "item": "antarchy:battle_axe" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/big_bertha.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/big_bertha.json index 81df4be1..abc8b3fc 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/big_bertha.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/big_bertha.json @@ -18,7 +18,6 @@ } }, "result": { - "item": "antarchy:big_bertha", - "count": 1 + "item": "antarchy:big_bertha" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/big_bertha_blade.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/big_bertha_blade.json index ff542ccc..2f6144bd 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/big_bertha_blade.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/big_bertha_blade.json @@ -20,17 +20,16 @@ "item": "antarchy:ultimate_sword" }, "E": { - "item": "antarchy:cloud_shark_fin" + "item": "antarchy:stratoshark_fin" }, "F": { - "item": "antarchy:kraken_tentacle" + "item": "antarchy:vortex_charge" }, "G": { "item": "antarchy:kraken_tooth" } }, "result": { - "item": "antarchy:big_bertha_blade", - "count": 1 + "item": "antarchy:big_bertha_blade" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/big_bertha_handle.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/big_bertha_handle.json index f273dbb4..1fbdb044 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/big_bertha_handle.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/big_bertha_handle.json @@ -14,7 +14,7 @@ "item": "antarchy:brutalfly_wing" }, "C": { - "item": "antarchy:triffid_goo" + "item": "antarchy:manticore_wing" }, "D": { "item": "antarchy:cooked_corndog" @@ -24,7 +24,6 @@ } }, "result": { - "item": "antarchy:big_bertha_handle", - "count": 1 + "item": "antarchy:big_bertha_handle" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/big_bertha_hilt.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/big_bertha_hilt.json index 007a3258..a322ec88 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/big_bertha_hilt.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/big_bertha_hilt.json @@ -4,7 +4,7 @@ "pattern": [ "AC ", "DBG", - " EF" + "HEF" ], "key": { "A": { @@ -14,23 +14,25 @@ "item": "antarchy:molevore_nose" }, "C": { - "item": "antarchy:jumpy_bug_leg" + "item": "antarchy:springbug_leg" }, "D": { "item": "antarchy:jerry_nucleus" }, "E": { - "item": "antarchy:rainbow_sugar" + "item": "antarchy:primordial_scute" }, "F": { - "item": "antarchy:primordial_scute" + "item": "antarchy:worm_tooth" }, "G": { "item": "antarchy:hercules_horn" + }, + "H": { + "item": "antarchy:flytrap_goo" } }, "result": { - "item": "antarchy:big_bertha_hilt", - "count": 1 + "item": "antarchy:big_bertha_hilt" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/black_banner_from_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/black_banner_from_truffalo_tuft.json similarity index 87% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/black_banner_from_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/black_banner_from_truffalo_tuft.json index a235d532..e2a059f9 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/black_banner_from_truffalo_tuft.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/black_banner_from_truffalo_tuft.json @@ -15,6 +15,6 @@ } }, "result": { - "id": "minecraft:black_banner" + "item": "minecraft:black_banner" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/black_bed_from_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/black_bed_from_truffalo_tuft.json similarity index 88% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/black_bed_from_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/black_bed_from_truffalo_tuft.json index 7b8dfa26..5120f1f8 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/black_bed_from_truffalo_tuft.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/black_bed_from_truffalo_tuft.json @@ -14,6 +14,6 @@ } }, "result": { - "id": "minecraft:black_bed" + "item": "minecraft:black_bed" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/blood_crystal_apple.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/blood_crystal_apple.json index 3fd92a08..4d99e84b 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/blood_crystal_apple.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/blood_crystal_apple.json @@ -1,6 +1,6 @@ { "type": "minecraft:crafting_shaped", - "category": "misc", + "category": "food", "pattern": [ "###", "#A#", @@ -15,7 +15,6 @@ } }, "result": { - "item": "antarchy:blood_crystal_apple", - "count": 1 + "item": "antarchy:blood_crystal_apple" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/blood_crystal_block.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/blood_crystal_block.json index b4ed4c54..642537db 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/blood_crystal_block.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/blood_crystal_block.json @@ -11,7 +11,6 @@ "##" ], "result": { - "item": "antarchy:blood_crystal_block", - "count": 1 + "item": "antarchy:blood_crystal_block" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/blood_crystal_boots.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/blood_crystal_boots.json index 7adb3dc7..79b14dda 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/blood_crystal_boots.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/blood_crystal_boots.json @@ -11,7 +11,6 @@ } }, "result": { - "item": "antarchy:blood_crystal_boots", - "count": 1 + "item": "antarchy:blood_crystal_boots" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/blood_crystal_chestplate.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/blood_crystal_chestplate.json index 3ab13d5f..d2d18810 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/blood_crystal_chestplate.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/blood_crystal_chestplate.json @@ -12,7 +12,6 @@ } }, "result": { - "item": "antarchy:blood_crystal_chestplate", - "count": 1 + "item": "antarchy:blood_crystal_chestplate" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/blood_crystal_helmet.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/blood_crystal_helmet.json index 54678e7f..0374e95b 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/blood_crystal_helmet.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/blood_crystal_helmet.json @@ -11,7 +11,6 @@ } }, "result": { - "item": "antarchy:blood_crystal_helmet", - "count": 1 + "item": "antarchy:blood_crystal_helmet" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/blood_crystal_katana.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/blood_crystal_katana.json index 3b5b2c04..a298c3a0 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/blood_crystal_katana.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/blood_crystal_katana.json @@ -1,6 +1,6 @@ { "type": "minecraft:crafting_shaped", - "category": "equipment", + "category": "combat", "pattern": [ " B", " B ", @@ -15,7 +15,6 @@ } }, "result": { - "item": "antarchy:blood_crystal_katana", - "count": 1 + "item": "antarchy:blood_crystal_katana" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/blood_crystal_leggings.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/blood_crystal_leggings.json index 3ea519aa..7f5c8cbe 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/blood_crystal_leggings.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/blood_crystal_leggings.json @@ -12,7 +12,6 @@ } }, "result": { - "item": "antarchy:blood_crystal_leggings", - "count": 1 + "item": "antarchy:blood_crystal_leggings" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/bloodstone.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/bloodstone.json index 9b0ab008..7f5c8cbe 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/bloodstone.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/bloodstone.json @@ -1,21 +1,17 @@ { "type": "minecraft:crafting_shaped", - "category": "building", + "category": "equipment", + "pattern": [ + "SSS", + "S S", + "S S" + ], "key": { - "D": { - "tag": "c:deepslates" - }, - "B": { - "item": "antarchy:broodfruit" + "S": { + "item": "antarchy:blood_crystal_shard" } }, - "pattern": [ - "DDD", - "DBD", - "DDD" - ], "result": { - "count": 8, - "item": "antarchy:bloodstone" + "item": "antarchy:blood_crystal_leggings" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/blue_banner_from_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/blue_banner_from_truffalo_tuft.json similarity index 88% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/blue_banner_from_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/blue_banner_from_truffalo_tuft.json index 772353ff..0658d9bb 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/blue_banner_from_truffalo_tuft.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/blue_banner_from_truffalo_tuft.json @@ -15,6 +15,6 @@ } }, "result": { - "id": "minecraft:blue_banner" + "item": "minecraft:blue_banner" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/blue_bed_from_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/blue_bed_from_truffalo_tuft.json similarity index 88% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/blue_bed_from_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/blue_bed_from_truffalo_tuft.json index c5de43f6..5f1550fa 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/blue_bed_from_truffalo_tuft.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/blue_bed_from_truffalo_tuft.json @@ -14,6 +14,6 @@ } }, "result": { - "id": "minecraft:blue_bed" + "item": "minecraft:blue_bed" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/bluestone_from_blasting_bluestone_ore.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/bluestone_from_blasting_bluestone_ore.json index fcef1930..af902cac 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/bluestone_from_blasting_bluestone_ore.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/bluestone_from_blasting_bluestone_ore.json @@ -6,7 +6,5 @@ "ingredient": { "item": "antarchy:bluestone_ore" }, - "result": { - "item": "antarchy:bluestone" - } + "result": "antarchy:bluestone" } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/bluestone_from_smelting_bluestone_ore.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/bluestone_from_smelting_bluestone_ore.json index e9af71c3..d2acfc8b 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/bluestone_from_smelting_bluestone_ore.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/bluestone_from_smelting_bluestone_ore.json @@ -6,7 +6,5 @@ "ingredient": { "item": "antarchy:bluestone_ore" }, - "result": { - "item": "antarchy:bluestone" - } + "result": "antarchy:bluestone" } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/bluestone_lamp.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/bluestone_lamp.json index 71e56188..6399d263 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/bluestone_lamp.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/bluestone_lamp.json @@ -2,8 +2,12 @@ "type": "minecraft:crafting_shaped", "category": "redstone", "key": { - "G": { "item": "minecraft:glowstone" }, - "R": { "item": "antarchy:bluestone" } + "G": { + "item": "minecraft:glowstone" + }, + "R": { + "item": "antarchy:bluestone" + } }, "pattern": [ " R ", @@ -11,7 +15,6 @@ " R " ], "result": { - "item": "antarchy:bluestone_lamp", - "count": 1 + "item": "antarchy:bluestone_lamp" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/blush_moss_carpet.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/blush_moss_carpet.json index 2cfbe304..19f83d5c 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/blush_moss_carpet.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/blush_moss_carpet.json @@ -11,7 +11,7 @@ "#" ], "result": { - "count": 3, - "item": "antarchy:blush_moss_carpet" + "item": "antarchy:blush_moss_carpet", + "count": 3 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/broodfruit_cobbler.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodfruit_cobbler.json new file mode 100644 index 00000000..a98d8aa4 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodfruit_cobbler.json @@ -0,0 +1,26 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "food", + "pattern": [ + "BSB", + "WEW", + "WWW" + ], + "key": { + "B": { + "item": "antarchy:broodfruit" + }, + "S": { + "item": "minecraft:sugar" + }, + "W": { + "item": "minecraft:wheat" + }, + "E": { + "item": "minecraft:egg" + } + }, + "result": { + "item": "antarchy:broodfruit_cobbler" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone.json new file mode 100644 index 00000000..6c4681a6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "D": { + "item": "minecraft:deepslate" + }, + "B": { + "item": "antarchy:broodfruit" + } + }, + "pattern": [ + "DDD", + "DBD", + "DDD" + ], + "result": { + "item": "antarchy:broodstone", + "count": 8 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_brick_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_brick_slab.json index e431c40b..1e47e01b 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_brick_slab.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_brick_slab.json @@ -10,7 +10,7 @@ "###" ], "result": { - "count": 6, - "item": "antarchy:broodstone_brick_slab" + "item": "antarchy:broodstone_brick_slab", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_brick_slab_from_broodstone_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_brick_slab_from_broodstone_bricks_stonecutting.json index 1199f40a..660ed1ac 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_brick_slab_from_broodstone_bricks_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_brick_slab_from_broodstone_bricks_stonecutting.json @@ -3,8 +3,6 @@ "ingredient": { "item": "antarchy:broodstone_bricks" }, - "result": { - "count": 2, - "item": "antarchy:broodstone_brick_slab" - } + "result": "antarchy:broodstone_brick_slab", + "count": 2 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_brick_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_brick_stairs.json index 625ef3e2..43844f41 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_brick_stairs.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_brick_stairs.json @@ -12,7 +12,7 @@ "###" ], "result": { - "count": 4, - "item": "antarchy:broodstone_brick_stairs" + "item": "antarchy:broodstone_brick_stairs", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_brick_stairs_from_broodstone_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_brick_stairs_from_broodstone_bricks_stonecutting.json index 2f782e8b..2eb1d53d 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_brick_stairs_from_broodstone_bricks_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_brick_stairs_from_broodstone_bricks_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:broodstone_bricks" }, - "result": { - "item": "antarchy:broodstone_brick_stairs" - } + "result": "antarchy:broodstone_brick_stairs", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_brick_wall.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_brick_wall.json index cf1d844a..d84e952b 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_brick_wall.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_brick_wall.json @@ -11,7 +11,7 @@ "###" ], "result": { - "count": 6, - "item": "antarchy:broodstone_brick_wall" + "item": "antarchy:broodstone_brick_wall", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_brick_wall_from_broodstone_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_brick_wall_from_broodstone_bricks_stonecutting.json index ea5ef4a9..ff85f340 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_brick_wall_from_broodstone_bricks_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_brick_wall_from_broodstone_bricks_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:broodstone_bricks" }, - "result": { - "item": "antarchy:broodstone_brick_wall" - } + "result": "antarchy:broodstone_brick_wall", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_bricks.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_bricks.json index 9173fbfa..07fe7b5f 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_bricks.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_bricks.json @@ -11,7 +11,7 @@ "##" ], "result": { - "count": 4, - "item": "antarchy:broodstone_bricks" + "item": "antarchy:broodstone_bricks", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_bricks_from_polished_broodstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_bricks_from_polished_broodstone_stonecutting.json index abb32374..ee3449cb 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_bricks_from_polished_broodstone_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_bricks_from_polished_broodstone_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:polished_broodstone" }, - "result": { - "item": "antarchy:broodstone_bricks" - } + "result": "antarchy:broodstone_bricks", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_pillar_from_broodstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_pillar_from_broodstone_stonecutting.json index 90d928d8..47be4553 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_pillar_from_broodstone_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_pillar_from_broodstone_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:broodstone" }, - "result": { - "item": "antarchy:broodstone_pillar" - } + "result": "antarchy:broodstone_pillar", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_slab.json index 1f344504..84e3bd31 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_slab.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_slab.json @@ -10,7 +10,7 @@ "###" ], "result": { - "count": 6, - "item": "antarchy:broodstone_slab" + "item": "antarchy:broodstone_slab", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_slab_from_broodstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_slab_from_broodstone_stonecutting.json index f552a508..e7ee4b85 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_slab_from_broodstone_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_slab_from_broodstone_stonecutting.json @@ -3,8 +3,6 @@ "ingredient": { "item": "antarchy:broodstone" }, - "result": { - "count": 2, - "item": "antarchy:broodstone_slab" - } + "result": "antarchy:broodstone_slab", + "count": 2 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_stairs.json index 14103f3e..3dc1e468 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_stairs.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_stairs.json @@ -12,7 +12,7 @@ "###" ], "result": { - "count": 4, - "item": "antarchy:broodstone_stairs" + "item": "antarchy:broodstone_stairs", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_stairs_from_broodstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_stairs_from_broodstone_stonecutting.json index 150e6ba5..14b38454 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_stairs_from_broodstone_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_stairs_from_broodstone_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:broodstone" }, - "result": { - "item": "antarchy:broodstone_stairs" - } + "result": "antarchy:broodstone_stairs", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_wall.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_wall.json index 04017b12..9108a27e 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_wall.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_wall.json @@ -11,7 +11,7 @@ "###" ], "result": { - "count": 6, - "item": "antarchy:broodstone_wall" + "item": "antarchy:broodstone_wall", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_wall_from_broodstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_wall_from_broodstone_stonecutting.json index 8b8ee785..da7963f1 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_wall_from_broodstone_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_wall_from_broodstone_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:broodstone" }, - "result": { - "item": "antarchy:broodstone_wall" - } + "result": "antarchy:broodstone_wall", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/brown_banner_from_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/brown_banner_from_truffalo_tuft.json similarity index 87% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/brown_banner_from_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/brown_banner_from_truffalo_tuft.json index 77f856a8..19d8fb2e 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/brown_banner_from_truffalo_tuft.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/brown_banner_from_truffalo_tuft.json @@ -15,6 +15,6 @@ } }, "result": { - "id": "minecraft:brown_banner" + "item": "minecraft:brown_banner" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/brown_bed_from_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/brown_bed_from_truffalo_tuft.json similarity index 88% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/brown_bed_from_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/brown_bed_from_truffalo_tuft.json index 1eb85457..af8ae1f3 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/brown_bed_from_truffalo_tuft.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/brown_bed_from_truffalo_tuft.json @@ -14,6 +14,6 @@ } }, "result": { - "id": "minecraft:brown_bed" + "item": "minecraft:brown_bed" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/brutalfly_elytra.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/brutalfly_elytra.json index 299249f8..09e24a97 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/brutalfly_elytra.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/brutalfly_elytra.json @@ -17,7 +17,6 @@ } }, "result": { - "item": "antarchy:brutalfly_elytra", - "count": 1 + "item": "antarchy:brutalfly_elytra" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/bug_spray.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/bug_spray.json new file mode 100644 index 00000000..1238a282 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/bug_spray.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "IGI", + " I " + ], + "key": { + "I": { + "item": "minecraft:iron_nugget" + }, + "G": { + "item": "antarchy:flytrap_goo" + } + }, + "result": { + "item": "antarchy:bug_spray" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_broodstone_from_polished_broodstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_broodstone_from_polished_broodstone_stonecutting.json index 489e3222..1d1ac538 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_broodstone_from_polished_broodstone_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_broodstone_from_polished_broodstone_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:polished_broodstone" }, - "result": { - "item": "antarchy:chiseled_broodstone" - } + "result": "antarchy:chiseled_broodstone", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_dream_sandstone_from_dream_sandstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_dream_sandstone_from_dream_sandstone_stonecutting.json index b5f29aa2..64a94aac 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_dream_sandstone_from_dream_sandstone_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_dream_sandstone_from_dream_sandstone_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:dream_sandstone" }, - "result": { - "item": "antarchy:chiseled_dream_sandstone" - } + "result": "antarchy:chiseled_dream_sandstone", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/chiseled_loam_bricks.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_loam_bricks.json similarity index 81% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/chiseled_loam_bricks.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_loam_bricks.json index 574ab2a8..a28e8327 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/chiseled_loam_bricks.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_loam_bricks.json @@ -11,6 +11,6 @@ "#" ], "result": { - "id": "antarchy:chiseled_loam_bricks" + "item": "antarchy:chiseled_loam_bricks" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/chiseled_myrmite.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_myrmite.json similarity index 83% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/chiseled_myrmite.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_myrmite.json index 79bd6fb8..33da8b63 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/chiseled_myrmite.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_myrmite.json @@ -11,7 +11,6 @@ "#" ], "result": { - "id": "antarchy:chiseled_myrmite" + "item": "antarchy:chiseled_myrmite" } } - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_myrmite_from_polished_myrmite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_myrmite_from_polished_myrmite_stonecutting.json new file mode 100644 index 00000000..36dc823b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_myrmite_from_polished_myrmite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:polished_myrmite" + }, + "result": "antarchy:chiseled_myrmite", + "count": 1 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_nyxite_from_polished_nyxite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_nyxite_from_polished_nyxite_stonecutting.json index 8eaf51ce..1a72e8ae 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_nyxite_from_polished_nyxite_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_nyxite_from_polished_nyxite_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:polished_nyxite" }, - "result": { - "item": "antarchy:chiseled_nyxite" - } + "result": "antarchy:chiseled_nyxite", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_shellstone_from_polished_shellstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_shellstone_from_polished_shellstone_stonecutting.json index c14e632d..4279e6ed 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_shellstone_from_polished_shellstone_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_shellstone_from_polished_shellstone_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:polished_shellstone" }, - "result": { - "item": "antarchy:chiseled_shellstone" - } + "result": "antarchy:chiseled_shellstone", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_typhonite.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_typhonite.json new file mode 100644 index 00000000..57422c60 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_typhonite.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:polished_typhonite_slab" + } + }, + "pattern": [ + "#", + "#" + ], + "result": { + "item": "antarchy:chiseled_typhonite" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_typhonite_from_polished_typhonite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_typhonite_from_polished_typhonite_stonecutting.json new file mode 100644 index 00000000..96ad59a3 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_typhonite_from_polished_typhonite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:polished_typhonite" + }, + "result": "antarchy:chiseled_typhonite", + "count": 1 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/chitin_block.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/chitin_block.json index 6292aaf0..f6057ca3 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/chitin_block.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/chitin_block.json @@ -12,7 +12,6 @@ "###" ], "result": { - "item": "antarchy:chitin_block", - "count": 1 + "item": "antarchy:chitin_block" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/cloud_shark_fin_soup.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/cloud_shark_fin_soup.json deleted file mode 100644 index bb342c74..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/cloud_shark_fin_soup.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "ingredients": [ - { - "item": "antarchy:cloud_shark_fin" - }, - { - "item": "minecraft:bowl" - } - ], - "result": { - "item": "antarchy:cloud_shark_fin_soup", - "count": 1 - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/computer.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/computer.json new file mode 100644 index 00000000..49333ed3 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/computer.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:crafting_shaped", + "key": { + "A": { + "item": "minecraft:iron_ingot" + }, + "B": { + "item": "minecraft:copper_ingot" + }, + "C": { + "tag": "c:glass_blocks" + }, + "D": { + "item": "minecraft:repeater" + }, + "E": { + "item": "minecraft:redstone_torch" + } + }, + "pattern": [ + "AAC", + "BDE", + "AAA" + ], + "result": { + "item": "antos:computer" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/cooked_bug_meat_from_smelting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/cooked_bug_meat_from_smelting.json index e748572b..75bd5ee6 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/cooked_bug_meat_from_smelting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/cooked_bug_meat_from_smelting.json @@ -6,7 +6,5 @@ "ingredient": { "item": "antarchy:raw_bug_meat" }, - "result": { - "item": "antarchy:cooked_bug_meat" - } + "result": "antarchy:cooked_bug_meat" } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/cooked_bug_meat_from_smoking.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/cooked_bug_meat_from_smoking.json index 087f4ddb..e43d550b 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/cooked_bug_meat_from_smoking.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/cooked_bug_meat_from_smoking.json @@ -6,7 +6,5 @@ "ingredient": { "item": "antarchy:raw_bug_meat" }, - "result": { - "item": "antarchy:cooked_bug_meat" - } + "result": "antarchy:cooked_bug_meat" } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/cooked_cheep_from_smelting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/cooked_cheep_from_smelting.json new file mode 100644 index 00000000..0a5ac476 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/cooked_cheep_from_smelting.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "category": "food", + "cookingtime": 200, + "experience": 0.35, + "ingredient": { + "item": "antarchy:cheep" + }, + "result": "antarchy:cooked_cheep" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/cooked_cheep_from_smoking.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/cooked_cheep_from_smoking.json new file mode 100644 index 00000000..1db1a26b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/cooked_cheep_from_smoking.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smoking", + "category": "food", + "cookingtime": 100, + "experience": 0.35, + "ingredient": { + "item": "antarchy:cheep" + }, + "result": "antarchy:cooked_cheep" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/cooked_corndog_from_smelting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/cooked_corndog_from_smelting.json index f026b388..0282c58b 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/cooked_corndog_from_smelting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/cooked_corndog_from_smelting.json @@ -6,7 +6,5 @@ "ingredient": { "item": "antarchy:raw_corndog" }, - "result": { - "item": "antarchy:cooked_corndog" - } + "result": "antarchy:cooked_corndog" } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/cooked_corndog_from_smoking.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/cooked_corndog_from_smoking.json index aef145f1..f30f026a 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/cooked_corndog_from_smoking.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/cooked_corndog_from_smoking.json @@ -6,7 +6,5 @@ "ingredient": { "item": "antarchy:raw_corndog" }, - "result": { - "item": "antarchy:cooked_corndog" - } + "result": "antarchy:cooked_corndog" } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/cooked_venison_from_smelting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/cooked_venison_from_smelting.json index e27a0125..c29246a4 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/cooked_venison_from_smelting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/cooked_venison_from_smelting.json @@ -6,7 +6,5 @@ "ingredient": { "item": "antarchy:raw_venison" }, - "result": { - "item": "antarchy:cooked_venison" - } + "result": "antarchy:cooked_venison" } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/cooked_venison_from_smoking.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/cooked_venison_from_smoking.json index dcfb4e53..b2bbde4a 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/cooked_venison_from_smoking.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/cooked_venison_from_smoking.json @@ -6,7 +6,5 @@ "ingredient": { "item": "antarchy:raw_venison" }, - "result": { - "item": "antarchy:cooked_venison" - } + "result": "antarchy:cooked_venison" } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/corn_seeds.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/corn_seeds.json index 8a0a218a..46b6d27b 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/corn_seeds.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/corn_seeds.json @@ -7,7 +7,7 @@ } ], "result": { - "count": 3, - "item": "antarchy:corn_seeds" + "item": "antarchy:corn_seeds", + "count": 3 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/cornbread.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/cornbread.json index 10a834e8..9d3be4c2 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/cornbread.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/cornbread.json @@ -1,6 +1,6 @@ { "type": "minecraft:crafting_shaped", - "category": "misc", + "category": "food", "key": { "C": { "item": "antarchy:corn" @@ -21,7 +21,6 @@ "WWW" ], "result": { - "count": 1, "item": "antarchy:cornbread" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/cracked_shellstone_bricks_from_shellstone_bricks_blasting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/cracked_shellstone_bricks_from_shellstone_bricks_blasting.json index 5431917c..00acee31 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/cracked_shellstone_bricks_from_shellstone_bricks_blasting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/cracked_shellstone_bricks_from_shellstone_bricks_blasting.json @@ -5,8 +5,6 @@ "ingredient": { "item": "antarchy:shellstone_bricks" }, - "result": { - "item": "antarchy:cracked_shellstone_bricks" - }, + "result": "antarchy:cracked_shellstone_bricks", "cookingtime": 100 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/cracked_shellstone_bricks_from_shellstone_bricks_smelting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/cracked_shellstone_bricks_from_shellstone_bricks_smelting.json index 1273a486..5d507366 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/cracked_shellstone_bricks_from_shellstone_bricks_smelting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/cracked_shellstone_bricks_from_shellstone_bricks_smelting.json @@ -5,8 +5,6 @@ "ingredient": { "item": "antarchy:shellstone_bricks" }, - "result": { - "item": "antarchy:cracked_shellstone_bricks" - }, + "result": "antarchy:cracked_shellstone_bricks", "cookingtime": 200 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/crafter_from_bluestone.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/crafter_from_bluestone.json deleted file mode 100644 index 28276706..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/crafter_from_bluestone.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "key": { - "#": { - "item": "minecraft:iron_ingot" - }, - "C": { - "item": "minecraft:crafting_table" - }, - "D": { - "item": "minecraft:dropper" - }, - "R": { - "item": "antarchy:bluestone" - } - }, - "pattern": [ - "###", - "#C#", - "RDR" - ], - "result": { - "count": 1, - "item": "minecraft:crafter" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/critter_cage.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/critter_cage.json index f034ac39..12a4165b 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/critter_cage.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/critter_cage.json @@ -18,7 +18,6 @@ } }, "result": { - "item": "antarchy:critter_cage", - "count": 1 + "item": "antarchy:critter_cage" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/cut_dream_sandstone.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/cut_dream_sandstone.json index 0c8b50aa..40c52c6d 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/cut_dream_sandstone.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/cut_dream_sandstone.json @@ -11,7 +11,7 @@ "##" ], "result": { - "count": 4, - "item": "antarchy:cut_dream_sandstone" + "item": "antarchy:cut_dream_sandstone", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/cut_dream_sandstone_from_dream_sandstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/cut_dream_sandstone_from_dream_sandstone_stonecutting.json index f01e5182..c4f594ac 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/cut_dream_sandstone_from_dream_sandstone_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/cut_dream_sandstone_from_dream_sandstone_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:dream_sandstone" }, - "result": { - "item": "antarchy:cut_dream_sandstone" - } + "result": "antarchy:cut_dream_sandstone", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/cut_dream_sandstone_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/cut_dream_sandstone_slab.json index 8d32fd31..5404c0cf 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/cut_dream_sandstone_slab.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/cut_dream_sandstone_slab.json @@ -10,7 +10,7 @@ "###" ], "result": { - "count": 6, - "item": "antarchy:cut_dream_sandstone_slab" + "item": "antarchy:cut_dream_sandstone_slab", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/cut_dream_sandstone_slab_from_cut_dream_sandstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/cut_dream_sandstone_slab_from_cut_dream_sandstone_stonecutting.json index 22a28424..59c7770c 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/cut_dream_sandstone_slab_from_cut_dream_sandstone_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/cut_dream_sandstone_slab_from_cut_dream_sandstone_stonecutting.json @@ -3,8 +3,6 @@ "ingredient": { "item": "antarchy:cut_dream_sandstone" }, - "result": { - "count": 2, - "item": "antarchy:cut_dream_sandstone_slab" - } + "result": "antarchy:cut_dream_sandstone_slab", + "count": 2 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/cut_dream_sandstone_slab_from_dream_sandstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/cut_dream_sandstone_slab_from_dream_sandstone_stonecutting.json index 14790e40..9d22ab47 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/cut_dream_sandstone_slab_from_dream_sandstone_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/cut_dream_sandstone_slab_from_dream_sandstone_stonecutting.json @@ -3,8 +3,6 @@ "ingredient": { "item": "antarchy:dream_sandstone" }, - "result": { - "count": 2, - "item": "antarchy:cut_dream_sandstone_slab" - } + "result": "antarchy:cut_dream_sandstone_slab", + "count": 2 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/cyan_banner_from_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/cyan_banner_from_truffalo_tuft.json similarity index 88% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/cyan_banner_from_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/cyan_banner_from_truffalo_tuft.json index a8e67871..79a00b39 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/cyan_banner_from_truffalo_tuft.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/cyan_banner_from_truffalo_tuft.json @@ -15,6 +15,6 @@ } }, "result": { - "id": "minecraft:cyan_banner" + "item": "minecraft:cyan_banner" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/cyan_bed_from_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/cyan_bed_from_truffalo_tuft.json similarity index 88% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/cyan_bed_from_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/cyan_bed_from_truffalo_tuft.json index c411eff7..6a93e8ee 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/cyan_bed_from_truffalo_tuft.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/cyan_bed_from_truffalo_tuft.json @@ -14,6 +14,6 @@ } }, "result": { - "id": "minecraft:cyan_bed" + "item": "minecraft:cyan_bed" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/dispenser_from_bluestone.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/dispenser_from_bluestone.json index ffeba87f..c067e50c 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/dispenser_from_bluestone.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/dispenser_from_bluestone.json @@ -18,7 +18,6 @@ "#R#" ], "result": { - "count": 1, "item": "minecraft:dispenser" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_campfire.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_campfire.json index 0b32f3a1..40a1ac9b 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_campfire.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_campfire.json @@ -18,7 +18,6 @@ "LLL" ], "result": { - "count": 1, "item": "antarchy:dream_campfire" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_lantern.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_lantern.json index ac673932..baa63bfc 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_lantern.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_lantern.json @@ -15,7 +15,6 @@ "XXX" ], "result": { - "count": 1, "item": "antarchy:dream_lantern" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_sandstone_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_sandstone_slab.json index c9390c2e..e73d4b5f 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_sandstone_slab.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_sandstone_slab.json @@ -15,7 +15,7 @@ "###" ], "result": { - "count": 6, - "item": "antarchy:dream_sandstone_slab" + "item": "antarchy:dream_sandstone_slab", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_sandstone_slab_from_dream_sandstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_sandstone_slab_from_dream_sandstone_stonecutting.json index bc226150..0ca234b7 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_sandstone_slab_from_dream_sandstone_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_sandstone_slab_from_dream_sandstone_stonecutting.json @@ -3,8 +3,6 @@ "ingredient": { "item": "antarchy:dream_sandstone" }, - "result": { - "count": 2, - "item": "antarchy:dream_sandstone_slab" - } + "result": "antarchy:dream_sandstone_slab", + "count": 2 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_sandstone_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_sandstone_stairs.json index fb28c66d..4ce60d72 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_sandstone_stairs.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_sandstone_stairs.json @@ -20,7 +20,7 @@ "###" ], "result": { - "count": 4, - "item": "antarchy:dream_sandstone_stairs" + "item": "antarchy:dream_sandstone_stairs", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_sandstone_stairs_from_dream_sandstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_sandstone_stairs_from_dream_sandstone_stonecutting.json index cdb4d94a..b2ba8404 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_sandstone_stairs_from_dream_sandstone_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_sandstone_stairs_from_dream_sandstone_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:dream_sandstone" }, - "result": { - "item": "antarchy:dream_sandstone_stairs" - } + "result": "antarchy:dream_sandstone_stairs", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_sandstone_wall.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_sandstone_wall.json index 582005cb..600ddc30 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_sandstone_wall.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_sandstone_wall.json @@ -11,7 +11,7 @@ "###" ], "result": { - "count": 6, - "item": "antarchy:dream_sandstone_wall" + "item": "antarchy:dream_sandstone_wall", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_sandstone_wall_from_dream_sandstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_sandstone_wall_from_dream_sandstone_stonecutting.json index 9e160019..07eff70a 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_sandstone_wall_from_dream_sandstone_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_sandstone_wall_from_dream_sandstone_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:dream_sandstone" }, - "result": { - "item": "antarchy:dream_sandstone_wall" - } + "result": "antarchy:dream_sandstone_wall", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_torch.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_torch.json index e9d8c1b2..858402af 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_torch.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_torch.json @@ -22,7 +22,7 @@ "S" ], "result": { - "count": 4, - "item": "antarchy:dream_torch" + "item": "antarchy:dream_torch", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/dropper_from_bluestone.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/dropper_from_bluestone.json index 0c2558fe..155f5c21 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/dropper_from_bluestone.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/dropper_from_bluestone.json @@ -15,7 +15,6 @@ "#R#" ], "result": { - "count": 1, "item": "minecraft:dropper" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/duct_tape.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/duct_tape.json index ff194a05..b6a0408e 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/duct_tape.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/duct_tape.json @@ -14,7 +14,6 @@ } }, "result": { - "item": "antarchy:duct_tape", - "count": 1 + "item": "antarchy:duct_tape" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/eye_of_the_storm.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/eye_of_the_storm.json new file mode 100644 index 00000000..916b9c7d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/eye_of_the_storm.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "combat", + "pattern": [ + " V", + " T ", + "T " + ], + "key": { + "V": { + "item": "antarchy:vortex_charge" + }, + "T": { + "item": "antarchy:titanium_ingot" + } + }, + "result": { + "item": "antarchy:eye_of_the_storm" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/flytrap_goo_block.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/flytrap_goo_block.json similarity index 83% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/flytrap_goo_block.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/flytrap_goo_block.json index fb572722..537080b1 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/flytrap_goo_block.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/flytrap_goo_block.json @@ -12,6 +12,6 @@ "###" ], "result": { - "id": "antarchy:flytrap_goo_block" + "item": "antarchy:flytrap_goo_block" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/giant_frying_pan.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/giant_frying_pan.json new file mode 100644 index 00000000..7345c8ce --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/giant_frying_pan.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "NNN", + "NNN", + " S " + ], + "key": { + "N": { + "item": "minecraft:netherite_block" + }, + "S": { + "item": "antarchy:ultimate_shovel" + } + }, + "result": { + "item": "antarchy:giant_frying_pan", + "nbt": { + "Enchantments": [ + { + "id": "minecraft:fire_aspect", + "lvl": 2 + } + ] + } + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/gravity_gun.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/gravity_gun.json index 9860e1ef..acdfb0e9 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/gravity_gun.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/gravity_gun.json @@ -27,7 +27,6 @@ } }, "result": { - "item": "antarchy:gravity_gun", - "count": 1 + "item": "antarchy:gravity_gun" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/gray_banner_from_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/gray_banner_from_truffalo_tuft.json similarity index 88% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/gray_banner_from_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/gray_banner_from_truffalo_tuft.json index 393e841f..f3cb815f 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/gray_banner_from_truffalo_tuft.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/gray_banner_from_truffalo_tuft.json @@ -15,6 +15,6 @@ } }, "result": { - "id": "minecraft:gray_banner" + "item": "minecraft:gray_banner" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/gray_bed_from_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/gray_bed_from_truffalo_tuft.json similarity index 88% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/gray_bed_from_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/gray_bed_from_truffalo_tuft.json index 4815c97e..b083816a 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/gray_bed_from_truffalo_tuft.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/gray_bed_from_truffalo_tuft.json @@ -14,6 +14,6 @@ } }, "result": { - "id": "minecraft:gray_bed" + "item": "minecraft:gray_bed" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/green_banner_from_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/green_banner_from_truffalo_tuft.json similarity index 87% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/green_banner_from_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/green_banner_from_truffalo_tuft.json index a4696e0a..266bca74 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/green_banner_from_truffalo_tuft.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/green_banner_from_truffalo_tuft.json @@ -15,6 +15,6 @@ } }, "result": { - "id": "minecraft:green_banner" + "item": "minecraft:green_banner" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/green_bed_from_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/green_bed_from_truffalo_tuft.json similarity index 88% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/green_bed_from_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/green_bed_from_truffalo_tuft.json index dbdbfb6a..11bc1b08 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/green_bed_from_truffalo_tuft.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/green_bed_from_truffalo_tuft.json @@ -14,6 +14,6 @@ } }, "result": { - "id": "minecraft:green_bed" + "item": "minecraft:green_bed" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/growth_ray.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/growth_ray.json index 78e96303..d8b00596 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/growth_ray.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/growth_ray.json @@ -18,7 +18,6 @@ } }, "result": { - "item": "antarchy:growth_ray", - "count": 1 + "item": "antarchy:growth_ray" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard.json similarity index 90% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard.json index 40da4613..ff492a5b 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard.json @@ -24,7 +24,6 @@ } }, "result": { - "id": "antarchy:hoverboard", - "count": 1 + "item": "antarchy:hoverboard" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_black.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_black.json similarity index 81% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_black.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_black.json index b1d03f5f..241fa0e9 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_black.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_black.json @@ -11,7 +11,6 @@ } ], "result": { - "id": "antarchy:hoverboard_black", - "count": 1 + "item": "antarchy:hoverboard_black" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_blue.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_blue.json similarity index 81% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_blue.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_blue.json index eda2639d..f663bdcb 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_blue.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_blue.json @@ -11,7 +11,6 @@ } ], "result": { - "id": "antarchy:hoverboard_blue", - "count": 1 + "item": "antarchy:hoverboard_blue" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_brown.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_brown.json similarity index 81% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_brown.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_brown.json index b836c7d8..30958084 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_brown.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_brown.json @@ -11,7 +11,6 @@ } ], "result": { - "id": "antarchy:hoverboard_brown", - "count": 1 + "item": "antarchy:hoverboard_brown" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_cyan.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_cyan.json similarity index 81% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_cyan.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_cyan.json index cbecf15c..6148c229 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_cyan.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_cyan.json @@ -11,7 +11,6 @@ } ], "result": { - "id": "antarchy:hoverboard_cyan", - "count": 1 + "item": "antarchy:hoverboard_cyan" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_gray.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_gray.json similarity index 81% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_gray.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_gray.json index e9da3e2a..6d027a24 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_gray.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_gray.json @@ -11,7 +11,6 @@ } ], "result": { - "id": "antarchy:hoverboard_gray", - "count": 1 + "item": "antarchy:hoverboard_gray" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_green.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_green.json similarity index 81% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_green.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_green.json index bb4ee9ba..27407a0c 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_green.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_green.json @@ -11,7 +11,6 @@ } ], "result": { - "id": "antarchy:hoverboard_green", - "count": 1 + "item": "antarchy:hoverboard_green" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_light_blue.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_light_blue.json similarity index 80% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_light_blue.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_light_blue.json index e7a6b331..cd0f4d7a 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_light_blue.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_light_blue.json @@ -11,7 +11,6 @@ } ], "result": { - "id": "antarchy:hoverboard_light_blue", - "count": 1 + "item": "antarchy:hoverboard_light_blue" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_light_gray.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_light_gray.json similarity index 80% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_light_gray.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_light_gray.json index d8abce9d..e4bb3a83 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_light_gray.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_light_gray.json @@ -11,7 +11,6 @@ } ], "result": { - "id": "antarchy:hoverboard_light_gray", - "count": 1 + "item": "antarchy:hoverboard_light_gray" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_lime.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_lime.json similarity index 81% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_lime.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_lime.json index 177f74b8..5fa75fd1 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_lime.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_lime.json @@ -11,7 +11,6 @@ } ], "result": { - "id": "antarchy:hoverboard_lime", - "count": 1 + "item": "antarchy:hoverboard_lime" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_magenta.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_magenta.json similarity index 80% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_magenta.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_magenta.json index 3a6a28a6..faa102ce 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_magenta.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_magenta.json @@ -11,7 +11,6 @@ } ], "result": { - "id": "antarchy:hoverboard_magenta", - "count": 1 + "item": "antarchy:hoverboard_magenta" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_orange.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_orange.json similarity index 80% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_orange.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_orange.json index 1464d78b..268d9abe 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_orange.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_orange.json @@ -11,7 +11,6 @@ } ], "result": { - "id": "antarchy:hoverboard_orange", - "count": 1 + "item": "antarchy:hoverboard_orange" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_pink.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_pink.json similarity index 81% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_pink.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_pink.json index d3ec8ca0..7e649f4f 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_pink.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_pink.json @@ -11,7 +11,6 @@ } ], "result": { - "id": "antarchy:hoverboard_pink", - "count": 1 + "item": "antarchy:hoverboard_pink" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_purple.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_purple.json similarity index 80% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_purple.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_purple.json index bc95ba49..4d8c6cd8 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_purple.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_purple.json @@ -11,7 +11,6 @@ } ], "result": { - "id": "antarchy:hoverboard_purple", - "count": 1 + "item": "antarchy:hoverboard_purple" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_red.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_red.json similarity index 81% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_red.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_red.json index 802fb08a..ef410d43 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_red.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_red.json @@ -11,7 +11,6 @@ } ], "result": { - "id": "antarchy:hoverboard_red", - "count": 1 + "item": "antarchy:hoverboard_red" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_white.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_white.json similarity index 81% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_white.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_white.json index 46a48fbd..25ee3a8b 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_white.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_white.json @@ -11,7 +11,6 @@ } ], "result": { - "id": "antarchy:hoverboard_white", - "count": 1 + "item": "antarchy:hoverboard_white" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_yellow.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_yellow.json similarity index 80% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_yellow.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_yellow.json index 90ef8d3f..6279072b 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/hoverboard_yellow.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/hoverboard_yellow.json @@ -11,7 +11,6 @@ } ], "result": { - "id": "antarchy:hoverboard_yellow", - "count": 1 + "item": "antarchy:hoverboard_yellow" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/infested_coarse_dirt.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/infested_coarse_dirt.json index 249410c2..a4c8e42b 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/infested_coarse_dirt.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/infested_coarse_dirt.json @@ -10,7 +10,6 @@ } ], "result": { - "count": 1, "item": "antarchy:infested_coarse_dirt" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/infested_rooted_dirt.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/infested_rooted_dirt.json index 2c46722e..52334fe8 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/infested_rooted_dirt.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/infested_rooted_dirt.json @@ -10,7 +10,6 @@ } ], "result": { - "count": 1, "item": "antarchy:infested_rooted_dirt" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/kraken_kalamari_from_smelting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/kraken_kalamari_from_smelting.json index 8394d128..f058e5fc 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/kraken_kalamari_from_smelting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/kraken_kalamari_from_smelting.json @@ -6,7 +6,5 @@ "ingredient": { "item": "antarchy:kraken_tentacle" }, - "result": { - "item": "antarchy:kraken_kalamari" - } + "result": "antarchy:kraken_kalamari" } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/kraken_kalamari_from_smoking.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/kraken_kalamari_from_smoking.json index bfad9981..e2ed521e 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/kraken_kalamari_from_smoking.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/kraken_kalamari_from_smoking.json @@ -6,7 +6,5 @@ "ingredient": { "item": "antarchy:kraken_tentacle" }, - "result": { - "item": "antarchy:kraken_kalamari" - } + "result": "antarchy:kraken_kalamari" } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/krakens_grasp.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/krakens_grasp.json index 7caf3e7d..d2f89223 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/krakens_grasp.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/krakens_grasp.json @@ -15,7 +15,6 @@ } }, "result": { - "item": "antarchy:krakens_grasp", - "count": 1 + "item": "antarchy:krakens_grasp" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/light_blue_banner_from_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/light_blue_banner_from_truffalo_tuft.json similarity index 86% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/light_blue_banner_from_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/light_blue_banner_from_truffalo_tuft.json index d2fbf92c..497b057c 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/light_blue_banner_from_truffalo_tuft.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/light_blue_banner_from_truffalo_tuft.json @@ -15,6 +15,6 @@ } }, "result": { - "id": "minecraft:light_blue_banner" + "item": "minecraft:light_blue_banner" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/light_blue_bed_from_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/light_blue_bed_from_truffalo_tuft.json similarity index 87% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/light_blue_bed_from_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/light_blue_bed_from_truffalo_tuft.json index 31282c30..27e06ae5 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/light_blue_bed_from_truffalo_tuft.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/light_blue_bed_from_truffalo_tuft.json @@ -14,6 +14,6 @@ } }, "result": { - "id": "minecraft:light_blue_bed" + "item": "minecraft:light_blue_bed" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/light_gray_banner_from_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/light_gray_banner_from_truffalo_tuft.json similarity index 86% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/light_gray_banner_from_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/light_gray_banner_from_truffalo_tuft.json index 0938d974..e1b5704b 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/light_gray_banner_from_truffalo_tuft.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/light_gray_banner_from_truffalo_tuft.json @@ -15,6 +15,6 @@ } }, "result": { - "id": "minecraft:light_gray_banner" + "item": "minecraft:light_gray_banner" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/light_gray_bed_from_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/light_gray_bed_from_truffalo_tuft.json similarity index 87% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/light_gray_bed_from_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/light_gray_bed_from_truffalo_tuft.json index bf1e9769..1f9567d4 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/light_gray_bed_from_truffalo_tuft.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/light_gray_bed_from_truffalo_tuft.json @@ -14,6 +14,6 @@ } }, "result": { - "id": "minecraft:light_gray_bed" + "item": "minecraft:light_gray_bed" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/lime_banner_from_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/lime_banner_from_truffalo_tuft.json similarity index 88% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/lime_banner_from_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/lime_banner_from_truffalo_tuft.json index 0afdf542..a3aff98b 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/lime_banner_from_truffalo_tuft.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/lime_banner_from_truffalo_tuft.json @@ -15,6 +15,6 @@ } }, "result": { - "id": "minecraft:lime_banner" + "item": "minecraft:lime_banner" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/lime_bed_from_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/lime_bed_from_truffalo_tuft.json similarity index 88% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/lime_bed_from_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/lime_bed_from_truffalo_tuft.json index b8deb8a7..54f81ac3 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/lime_bed_from_truffalo_tuft.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/lime_bed_from_truffalo_tuft.json @@ -14,6 +14,6 @@ } }, "result": { - "id": "minecraft:lime_bed" + "item": "minecraft:lime_bed" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/loam.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/loam.json index 18f839e7..2cc04c5f 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/loam.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/loam.json @@ -14,7 +14,6 @@ } }, "result": { - "count": 1, "item": "antarchy:loam" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/loam_brick_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/loam_brick_slab.json new file mode 100644 index 00000000..3dd6fae5 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/loam_brick_slab.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:loam_bricks" + } + }, + "pattern": [ + "###" + ], + "result": { + "item": "antarchy:loam_brick_slab", + "count": 6 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/loam_brick_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/loam_brick_stairs.json new file mode 100644 index 00000000..104d020d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/loam_brick_stairs.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:loam_bricks" + } + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "result": { + "item": "antarchy:loam_brick_stairs", + "count": 4 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/loam_brick_wall.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/loam_brick_wall.json new file mode 100644 index 00000000..811c5042 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/loam_brick_wall.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:loam_bricks" + } + }, + "pattern": [ + "###", + "###" + ], + "result": { + "item": "antarchy:loam_brick_wall", + "count": 6 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/loam_bricks.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/loam_bricks.json similarity index 79% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/loam_bricks.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/loam_bricks.json index d31a26bf..13266382 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/loam_bricks.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/loam_bricks.json @@ -11,7 +11,7 @@ "##" ], "result": { - "count": 4, - "id": "antarchy:loam_bricks" + "item": "antarchy:loam_bricks", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/lucid_anchor.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/lucid_anchor.json index e9e1b53b..6e16837a 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/lucid_anchor.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/lucid_anchor.json @@ -21,7 +21,6 @@ } }, "result": { - "item": "antarchy:lucid_anchor", - "count": 1 + "item": "antarchy:lucid_anchor" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/lucid_pearl.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/lucid_pearl.json index 1142fd9f..fdd2bf20 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/lucid_pearl.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/lucid_pearl.json @@ -9,7 +9,6 @@ } ], "result": { - "item": "antarchy:lucid_pearl", - "count": 1 + "item": "antarchy:lucid_pearl" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/magenta_banner_from_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/magenta_banner_from_truffalo_tuft.json similarity index 87% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/magenta_banner_from_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/magenta_banner_from_truffalo_tuft.json index b306b917..b066d157 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/magenta_banner_from_truffalo_tuft.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/magenta_banner_from_truffalo_tuft.json @@ -15,6 +15,6 @@ } }, "result": { - "id": "minecraft:magenta_banner" + "item": "minecraft:magenta_banner" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/magenta_bed_from_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/magenta_bed_from_truffalo_tuft.json similarity index 87% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/magenta_bed_from_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/magenta_bed_from_truffalo_tuft.json index 880bc08d..5f47b35c 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/magenta_bed_from_truffalo_tuft.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/magenta_bed_from_truffalo_tuft.json @@ -14,6 +14,6 @@ } }, "result": { - "id": "minecraft:magenta_bed" + "item": "minecraft:magenta_bed" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/manticore_wings.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/manticore_wings.json new file mode 100644 index 00000000..e224996a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/manticore_wings.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "BMB", + "BEB" + ], + "key": { + "B": { + "item": "antarchy:manticore_wing" + }, + "M": { + "item": "antarchy:duct_tape" + }, + "E": { + "item": "minecraft:elytra" + } + }, + "result": { + "item": "antarchy:manticore_wings" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/moggles.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/moggles.json index 3b265b0d..e06a4250 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/moggles.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/moggles.json @@ -13,7 +13,6 @@ } }, "result": { - "item": "antarchy:moggles", - "count": 1 + "item": "antarchy:moggles" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_broodstone_brick_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_broodstone_brick_slab.json new file mode 100644 index 00000000..c32a4250 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_broodstone_brick_slab.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:mossy_broodstone_bricks" + } + }, + "pattern": [ + "###" + ], + "result": { + "item": "antarchy:mossy_broodstone_brick_slab", + "count": 6 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_broodstone_brick_slab_from_mossy_broodstone_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_broodstone_brick_slab_from_mossy_broodstone_bricks_stonecutting.json new file mode 100644 index 00000000..23fc9fb8 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_broodstone_brick_slab_from_mossy_broodstone_bricks_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:mossy_broodstone_bricks" + }, + "result": "antarchy:mossy_broodstone_brick_slab", + "count": 1 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_broodstone_brick_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_broodstone_brick_stairs.json new file mode 100644 index 00000000..bf47b11d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_broodstone_brick_stairs.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:mossy_broodstone_bricks" + } + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "result": { + "item": "antarchy:mossy_broodstone_brick_stairs", + "count": 4 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_broodstone_brick_stairs_from_mossy_broodstone_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_broodstone_brick_stairs_from_mossy_broodstone_bricks_stonecutting.json new file mode 100644 index 00000000..9d528295 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_broodstone_brick_stairs_from_mossy_broodstone_bricks_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:mossy_broodstone_bricks" + }, + "result": "antarchy:mossy_broodstone_brick_stairs", + "count": 1 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_broodstone_brick_wall.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_broodstone_brick_wall.json new file mode 100644 index 00000000..17823875 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_broodstone_brick_wall.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:mossy_broodstone_bricks" + } + }, + "pattern": [ + "###", + "###" + ], + "result": { + "item": "antarchy:mossy_broodstone_brick_wall", + "count": 6 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_broodstone_brick_wall_from_mossy_broodstone_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_broodstone_brick_wall_from_mossy_broodstone_bricks_stonecutting.json new file mode 100644 index 00000000..4b9c9728 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_broodstone_brick_wall_from_mossy_broodstone_bricks_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:mossy_broodstone_bricks" + }, + "result": "antarchy:mossy_broodstone_brick_wall", + "count": 1 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_broodstone_bricks.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_broodstone_bricks.json similarity index 78% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_broodstone_bricks.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_broodstone_bricks.json index 080e1b00..c45ee5a0 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_broodstone_bricks.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_broodstone_bricks.json @@ -10,8 +10,6 @@ } ], "result": { - "count": 1, - "id": "antarchy:mossy_broodstone_bricks" + "item": "antarchy:mossy_broodstone_bricks" } } - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_myrmite_brick_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_myrmite_brick_slab.json new file mode 100644 index 00000000..cc5a9ce1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_myrmite_brick_slab.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:mossy_myrmite_bricks" + } + }, + "pattern": [ + "###" + ], + "result": { + "item": "antarchy:mossy_myrmite_brick_slab", + "count": 6 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_myrmite_brick_slab_from_mossy_myrmite_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_myrmite_brick_slab_from_mossy_myrmite_bricks_stonecutting.json new file mode 100644 index 00000000..a78726a1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_myrmite_brick_slab_from_mossy_myrmite_bricks_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:mossy_myrmite_bricks" + }, + "result": "antarchy:mossy_myrmite_brick_slab", + "count": 1 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_myrmite_brick_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_myrmite_brick_stairs.json new file mode 100644 index 00000000..a68dac8b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_myrmite_brick_stairs.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:mossy_myrmite_bricks" + } + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "result": { + "item": "antarchy:mossy_myrmite_brick_stairs", + "count": 4 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_myrmite_brick_stairs_from_mossy_myrmite_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_myrmite_brick_stairs_from_mossy_myrmite_bricks_stonecutting.json new file mode 100644 index 00000000..4fc83da2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_myrmite_brick_stairs_from_mossy_myrmite_bricks_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:mossy_myrmite_bricks" + }, + "result": "antarchy:mossy_myrmite_brick_stairs", + "count": 1 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_myrmite_brick_wall.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_myrmite_brick_wall.json new file mode 100644 index 00000000..77a79d42 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_myrmite_brick_wall.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:mossy_myrmite_bricks" + } + }, + "pattern": [ + "###", + "###" + ], + "result": { + "item": "antarchy:mossy_myrmite_brick_wall", + "count": 6 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_myrmite_brick_wall_from_mossy_myrmite_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_myrmite_brick_wall_from_mossy_myrmite_bricks_stonecutting.json new file mode 100644 index 00000000..3986f7b6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_myrmite_brick_wall_from_mossy_myrmite_bricks_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:mossy_myrmite_bricks" + }, + "result": "antarchy:mossy_myrmite_brick_wall", + "count": 1 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_myrmite_bricks.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_myrmite_bricks.json similarity index 78% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_myrmite_bricks.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_myrmite_bricks.json index 0318a6d8..f863691c 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_myrmite_bricks.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_myrmite_bricks.json @@ -10,8 +10,6 @@ } ], "result": { - "count": 1, - "id": "antarchy:mossy_myrmite_bricks" + "item": "antarchy:mossy_myrmite_bricks" } } - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_nyxite_brick_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_nyxite_brick_slab.json new file mode 100644 index 00000000..4efd0eaf --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_nyxite_brick_slab.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:mossy_nyxite_bricks" + } + }, + "pattern": [ + "###" + ], + "result": { + "item": "antarchy:mossy_nyxite_brick_slab", + "count": 6 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_nyxite_brick_slab_from_mossy_nyxite_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_nyxite_brick_slab_from_mossy_nyxite_bricks_stonecutting.json new file mode 100644 index 00000000..b81c5b6f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_nyxite_brick_slab_from_mossy_nyxite_bricks_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:mossy_nyxite_bricks" + }, + "result": "antarchy:mossy_nyxite_brick_slab", + "count": 1 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_nyxite_brick_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_nyxite_brick_stairs.json new file mode 100644 index 00000000..1a67f57a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_nyxite_brick_stairs.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:mossy_nyxite_bricks" + } + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "result": { + "item": "antarchy:mossy_nyxite_brick_stairs", + "count": 4 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_nyxite_brick_stairs_from_mossy_nyxite_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_nyxite_brick_stairs_from_mossy_nyxite_bricks_stonecutting.json new file mode 100644 index 00000000..d59b88b8 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_nyxite_brick_stairs_from_mossy_nyxite_bricks_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:mossy_nyxite_bricks" + }, + "result": "antarchy:mossy_nyxite_brick_stairs", + "count": 1 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_nyxite_brick_wall.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_nyxite_brick_wall.json new file mode 100644 index 00000000..60d338c9 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_nyxite_brick_wall.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:mossy_nyxite_bricks" + } + }, + "pattern": [ + "###", + "###" + ], + "result": { + "item": "antarchy:mossy_nyxite_brick_wall", + "count": 6 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_nyxite_brick_wall_from_mossy_nyxite_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_nyxite_brick_wall_from_mossy_nyxite_bricks_stonecutting.json new file mode 100644 index 00000000..a7c11be6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_nyxite_brick_wall_from_mossy_nyxite_bricks_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:mossy_nyxite_bricks" + }, + "result": "antarchy:mossy_nyxite_brick_wall", + "count": 1 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_nyxite_bricks.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_nyxite_bricks.json similarity index 79% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_nyxite_bricks.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_nyxite_bricks.json index da1d0543..85dc8b47 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/mossy_nyxite_bricks.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_nyxite_bricks.json @@ -10,8 +10,6 @@ } ], "result": { - "count": 1, - "id": "antarchy:mossy_nyxite_bricks" + "item": "antarchy:mossy_nyxite_bricks" } } - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_shellstone_brick_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_shellstone_brick_slab.json index 87f5a73c..c48c6e44 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_shellstone_brick_slab.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_shellstone_brick_slab.json @@ -10,7 +10,7 @@ "###" ], "result": { - "count": 6, - "item": "antarchy:mossy_shellstone_brick_slab" + "item": "antarchy:mossy_shellstone_brick_slab", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_shellstone_brick_slab_from_mossy_shellstone_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_shellstone_brick_slab_from_mossy_shellstone_bricks_stonecutting.json index 1c08d461..55f1c444 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_shellstone_brick_slab_from_mossy_shellstone_bricks_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_shellstone_brick_slab_from_mossy_shellstone_bricks_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:mossy_shellstone_bricks" }, - "result": { - "item": "antarchy:mossy_shellstone_brick_slab" - } + "result": "antarchy:mossy_shellstone_brick_slab", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_shellstone_brick_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_shellstone_brick_stairs.json index 46df8a66..dbd6083e 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_shellstone_brick_stairs.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_shellstone_brick_stairs.json @@ -12,7 +12,7 @@ "###" ], "result": { - "count": 4, - "item": "antarchy:mossy_shellstone_brick_stairs" + "item": "antarchy:mossy_shellstone_brick_stairs", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_shellstone_brick_stairs_from_mossy_shellstone_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_shellstone_brick_stairs_from_mossy_shellstone_bricks_stonecutting.json index fd8033df..7b76d740 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_shellstone_brick_stairs_from_mossy_shellstone_bricks_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_shellstone_brick_stairs_from_mossy_shellstone_bricks_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:mossy_shellstone_bricks" }, - "result": { - "item": "antarchy:mossy_shellstone_brick_stairs" - } + "result": "antarchy:mossy_shellstone_brick_stairs", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_shellstone_brick_wall.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_shellstone_brick_wall.json index e3a9c574..d575a51a 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_shellstone_brick_wall.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_shellstone_brick_wall.json @@ -11,7 +11,7 @@ "###" ], "result": { - "count": 6, - "item": "antarchy:mossy_shellstone_brick_wall" + "item": "antarchy:mossy_shellstone_brick_wall", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_shellstone_brick_wall_from_mossy_shellstone_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_shellstone_brick_wall_from_mossy_shellstone_bricks_stonecutting.json index 35fe20b6..916a9997 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_shellstone_brick_wall_from_mossy_shellstone_bricks_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_shellstone_brick_wall_from_mossy_shellstone_bricks_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:mossy_shellstone_bricks" }, - "result": { - "item": "antarchy:mossy_shellstone_brick_wall" - } + "result": "antarchy:mossy_shellstone_brick_wall", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_shellstone_bricks.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_shellstone_bricks.json index ab62fe4c..c84ef84c 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_shellstone_bricks.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_shellstone_bricks.json @@ -10,7 +10,6 @@ } ], "result": { - "count": 1, "item": "antarchy:mossy_shellstone_bricks" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/mud_pie.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/mud_pie.json index a8514a84..052a25db 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/mud_pie.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/mud_pie.json @@ -1,6 +1,6 @@ { "type": "minecraft:crafting_shapeless", - "category": "misc", + "category": "food", "ingredients": [ { "item": "minecraft:mud" @@ -10,7 +10,6 @@ } ], "result": { - "count": 1, "item": "antarchy:mud_pie" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite.json index bbc28c01..46c30394 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite.json @@ -3,7 +3,7 @@ "category": "building", "key": { "S": { - "tag": "c:stones" + "item": "minecraft:stone" }, "C": { "item": "antarchy:chitin" @@ -15,7 +15,7 @@ "SSS" ], "result": { - "count": 8, - "item": "antarchy:myrmite" + "item": "antarchy:myrmite", + "count": 8 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_brick_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_brick_slab.json new file mode 100644 index 00000000..23492741 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_brick_slab.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:myrmite_bricks" + } + }, + "pattern": [ + "###" + ], + "result": { + "item": "antarchy:myrmite_brick_slab", + "count": 6 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_brick_slab_from_myrmite_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_brick_slab_from_myrmite_bricks_stonecutting.json new file mode 100644 index 00000000..9c9aede4 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_brick_slab_from_myrmite_bricks_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:myrmite_bricks" + }, + "result": "antarchy:myrmite_brick_slab", + "count": 2 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_brick_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_brick_stairs.json new file mode 100644 index 00000000..402631d5 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_brick_stairs.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:myrmite_bricks" + } + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "result": { + "item": "antarchy:myrmite_brick_stairs", + "count": 4 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_brick_stairs_from_myrmite_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_brick_stairs_from_myrmite_bricks_stonecutting.json new file mode 100644 index 00000000..0b8d4acd --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_brick_stairs_from_myrmite_bricks_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:myrmite_bricks" + }, + "result": "antarchy:myrmite_brick_stairs", + "count": 1 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_brick_wall.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_brick_wall.json new file mode 100644 index 00000000..d548d7f9 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_brick_wall.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:myrmite_bricks" + } + }, + "pattern": [ + "###", + "###" + ], + "result": { + "item": "antarchy:myrmite_brick_wall", + "count": 6 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_brick_wall_from_myrmite_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_brick_wall_from_myrmite_bricks_stonecutting.json new file mode 100644 index 00000000..917e70e4 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_brick_wall_from_myrmite_bricks_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:myrmite_bricks" + }, + "result": "antarchy:myrmite_brick_wall", + "count": 1 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_bricks.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_bricks.json similarity index 78% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_bricks.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_bricks.json index 9a39fea8..5fb5555d 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_bricks.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_bricks.json @@ -11,8 +11,7 @@ "##" ], "result": { - "count": 4, - "id": "antarchy:myrmite_bricks" + "item": "antarchy:myrmite_bricks", + "count": 4 } } - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_bricks_from_polished_myrmite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_bricks_from_polished_myrmite_stonecutting.json new file mode 100644 index 00000000..d9a9b1cc --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_bricks_from_polished_myrmite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:polished_myrmite" + }, + "result": "antarchy:myrmite_bricks", + "count": 1 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_pillar.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_pillar.json similarity index 84% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_pillar.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_pillar.json index 065aa667..e19ec46c 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/myrmite_pillar.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_pillar.json @@ -11,8 +11,7 @@ "#" ], "result": { - "id": "antarchy:myrmite_pillar", + "item": "antarchy:myrmite_pillar", "count": 2 } } - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_pillar_from_polished_myrmite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_pillar_from_polished_myrmite_stonecutting.json new file mode 100644 index 00000000..5f6de0bb --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_pillar_from_polished_myrmite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:polished_myrmite" + }, + "result": "antarchy:myrmite_pillar", + "count": 1 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_slab.json new file mode 100644 index 00000000..4a6a1e5b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_slab.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:myrmite" + } + }, + "pattern": [ + "###" + ], + "result": { + "item": "antarchy:myrmite_slab", + "count": 6 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_slab_from_myrmite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_slab_from_myrmite_stonecutting.json new file mode 100644 index 00000000..5af2645b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_slab_from_myrmite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:myrmite" + }, + "result": "antarchy:myrmite_slab", + "count": 2 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_stairs.json new file mode 100644 index 00000000..7e11319e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_stairs.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:myrmite" + } + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "result": { + "item": "antarchy:myrmite_stairs", + "count": 4 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_stairs_from_myrmite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_stairs_from_myrmite_stonecutting.json new file mode 100644 index 00000000..6f63f5a3 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_stairs_from_myrmite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:myrmite" + }, + "result": "antarchy:myrmite_stairs", + "count": 1 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_wall.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_wall.json new file mode 100644 index 00000000..19431aae --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_wall.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:myrmite" + } + }, + "pattern": [ + "###", + "###" + ], + "result": { + "item": "antarchy:myrmite_wall", + "count": 6 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_wall_from_myrmite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_wall_from_myrmite_stonecutting.json new file mode 100644 index 00000000..8a123b09 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/myrmite_wall_from_myrmite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:myrmite" + }, + "result": "antarchy:myrmite_wall", + "count": 1 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_boat.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_boat.json index c18b5ebd..3c144f14 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_boat.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_boat.json @@ -11,8 +11,6 @@ "###" ], "result": { - "count": 1, - "id": "antarchy:nadir_boat" + "item": "antarchy:nadir_boat" } } - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_button.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_button.json index 7a67d94c..0ab0b751 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_button.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_button.json @@ -8,7 +8,6 @@ } ], "result": { - "count": 1, - "id": "antarchy:nadir_button" + "item": "antarchy:nadir_button" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_chest_boat.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_chest_boat.json index e86215d4..191aa1f1 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_chest_boat.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_chest_boat.json @@ -10,8 +10,6 @@ } ], "result": { - "count": 1, - "id": "antarchy:nadir_chest_boat" + "item": "antarchy:nadir_chest_boat" } } - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_door.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_door.json index 332d6cad..72c1b9f6 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_door.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_door.json @@ -13,7 +13,7 @@ "##" ], "result": { - "count": 3, - "id": "antarchy:nadir_door" + "item": "antarchy:nadir_door", + "count": 3 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_fence.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_fence.json index 3ef5d1d4..5cb0c040 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_fence.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_fence.json @@ -15,7 +15,7 @@ "W#W" ], "result": { - "count": 3, - "id": "antarchy:nadir_fence" + "item": "antarchy:nadir_fence", + "count": 3 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_fence_gate.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_fence_gate.json index 22069690..05a2fa5b 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_fence_gate.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_fence_gate.json @@ -15,7 +15,6 @@ "#W#" ], "result": { - "count": 1, - "id": "antarchy:nadir_fence_gate" + "item": "antarchy:nadir_fence_gate" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_hanging_sign.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_hanging_sign.json index b057918e..ba57b38c 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_hanging_sign.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_hanging_sign.json @@ -16,7 +16,7 @@ "###" ], "result": { - "count": 6, - "id": "antarchy:nadir_hanging_sign" + "item": "antarchy:nadir_hanging_sign", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_planks.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_planks.json index 1fd4195f..8fc89cc5 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_planks.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_planks.json @@ -8,7 +8,7 @@ } ], "result": { - "count": 4, - "id": "antarchy:nadir_planks" + "item": "antarchy:nadir_planks", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_pressure_plate.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_pressure_plate.json index 5286fecd..4a0455d3 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_pressure_plate.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_pressure_plate.json @@ -11,7 +11,6 @@ "##" ], "result": { - "count": 1, - "id": "antarchy:nadir_pressure_plate" + "item": "antarchy:nadir_pressure_plate" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_sign.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_sign.json index 6bd91309..8a477d82 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_sign.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_sign.json @@ -16,7 +16,7 @@ " X " ], "result": { - "count": 3, - "id": "antarchy:nadir_sign" + "item": "antarchy:nadir_sign", + "count": 3 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_slab.json index bdb63f65..05339ba4 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_slab.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_slab.json @@ -11,7 +11,7 @@ "###" ], "result": { - "count": 6, - "id": "antarchy:nadir_slab" + "item": "antarchy:nadir_slab", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_stairs.json index fbcda572..9f80f563 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_stairs.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_stairs.json @@ -13,7 +13,7 @@ "###" ], "result": { - "count": 4, - "id": "antarchy:nadir_stairs" + "item": "antarchy:nadir_stairs", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_trapdoor.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_trapdoor.json index 920c954d..e329dbb6 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_trapdoor.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_trapdoor.json @@ -12,7 +12,7 @@ "###" ], "result": { - "count": 2, - "id": "antarchy:nadir_trapdoor" + "item": "antarchy:nadir_trapdoor", + "count": 2 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_wood.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_wood.json index ba48c303..d1d1cf35 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_wood.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_wood.json @@ -12,7 +12,7 @@ "##" ], "result": { - "count": 3, - "id": "antarchy:nadir_wood" + "item": "antarchy:nadir_wood", + "count": 3 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/stripped_nadir_wood.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/stripped_nadir_wood.json index b9b3c293..6479e7f0 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/stripped_nadir_wood.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/stripped_nadir_wood.json @@ -12,7 +12,7 @@ "##" ], "result": { - "count": 3, - "id": "antarchy:stripped_nadir_wood" + "item": "antarchy:stripped_nadir_wood", + "count": 3 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/nightmare/nightmare_boots.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nightmare/nightmare_boots.json index e2accc79..32bd8e0c 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/nightmare/nightmare_boots.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nightmare/nightmare_boots.json @@ -11,7 +11,6 @@ } }, "result": { - "item": "antarchy:nightmare_boots", - "count": 1 + "item": "antarchy:nightmare_boots" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/nightmare/nightmare_chestplate.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nightmare/nightmare_chestplate.json index 5fe40cbe..7cc7e7ac 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/nightmare/nightmare_chestplate.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nightmare/nightmare_chestplate.json @@ -12,7 +12,6 @@ } }, "result": { - "item": "antarchy:nightmare_chestplate", - "count": 1 + "item": "antarchy:nightmare_chestplate" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/nightmare/nightmare_helmet.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nightmare/nightmare_helmet.json index 5f9209ad..9f729258 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/nightmare/nightmare_helmet.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nightmare/nightmare_helmet.json @@ -11,7 +11,6 @@ } }, "result": { - "item": "antarchy:nightmare_helmet", - "count": 1 + "item": "antarchy:nightmare_helmet" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/nightmare/nightmare_leggings.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nightmare/nightmare_leggings.json index b1a58551..e609e990 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/nightmare/nightmare_leggings.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nightmare/nightmare_leggings.json @@ -12,7 +12,6 @@ } }, "result": { - "item": "antarchy:nightmare_leggings", - "count": 1 + "item": "antarchy:nightmare_leggings" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/nightmare/nightmare_sword.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nightmare/nightmare_sword.json index 2d505e76..8675253c 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/nightmare/nightmare_sword.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nightmare/nightmare_sword.json @@ -15,7 +15,6 @@ } }, "result": { - "item": "antarchy:nightmare_sword", - "count": 1 + "item": "antarchy:nightmare_sword" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite.json index 84791962..f29cf9d6 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite.json @@ -10,7 +10,6 @@ } }, "result": { - "item": "antarchy:nyxite", - "count": 1 + "item": "antarchy:nyxite" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_brick_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_brick_slab.json index 301b8120..c1981c5f 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_brick_slab.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_brick_slab.json @@ -10,7 +10,7 @@ "###" ], "result": { - "count": 6, - "item": "antarchy:nyxite_brick_slab" + "item": "antarchy:nyxite_brick_slab", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_brick_slab_from_nyxite_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_brick_slab_from_nyxite_bricks_stonecutting.json index efa4ee34..67b6d776 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_brick_slab_from_nyxite_bricks_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_brick_slab_from_nyxite_bricks_stonecutting.json @@ -3,8 +3,6 @@ "ingredient": { "item": "antarchy:nyxite_bricks" }, - "result": { - "count": 2, - "item": "antarchy:nyxite_brick_slab" - } + "result": "antarchy:nyxite_brick_slab", + "count": 2 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_brick_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_brick_stairs.json index 9de26593..05fd2f01 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_brick_stairs.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_brick_stairs.json @@ -12,7 +12,7 @@ "###" ], "result": { - "count": 4, - "item": "antarchy:nyxite_brick_stairs" + "item": "antarchy:nyxite_brick_stairs", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_brick_stairs_from_nyxite_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_brick_stairs_from_nyxite_bricks_stonecutting.json index 2aac895f..808cc0f2 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_brick_stairs_from_nyxite_bricks_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_brick_stairs_from_nyxite_bricks_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:nyxite_bricks" }, - "result": { - "item": "antarchy:nyxite_brick_stairs" - } + "result": "antarchy:nyxite_brick_stairs", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_brick_wall.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_brick_wall.json index 6472634d..cf5ed00a 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_brick_wall.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_brick_wall.json @@ -11,7 +11,7 @@ "###" ], "result": { - "count": 6, - "item": "antarchy:nyxite_brick_wall" + "item": "antarchy:nyxite_brick_wall", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_brick_wall_from_nyxite_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_brick_wall_from_nyxite_bricks_stonecutting.json index cf9b83c4..e0198e44 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_brick_wall_from_nyxite_bricks_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_brick_wall_from_nyxite_bricks_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:nyxite_bricks" }, - "result": { - "item": "antarchy:nyxite_brick_wall" - } + "result": "antarchy:nyxite_brick_wall", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_bricks.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_bricks.json index 316f2240..a6755df6 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_bricks.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_bricks.json @@ -11,7 +11,7 @@ "##" ], "result": { - "count": 4, - "item": "antarchy:nyxite_bricks" + "item": "antarchy:nyxite_bricks", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_bricks_from_polished_nyxite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_bricks_from_polished_nyxite_stonecutting.json index 9bcd73d6..d44fa21a 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_bricks_from_polished_nyxite_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_bricks_from_polished_nyxite_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:polished_nyxite" }, - "result": { - "item": "antarchy:nyxite_bricks" - } + "result": "antarchy:nyxite_bricks", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_pillar_from_nyxite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_pillar_from_nyxite_stonecutting.json index 69a6e02d..d1fda8c2 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_pillar_from_nyxite_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_pillar_from_nyxite_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:nyxite" }, - "result": { - "item": "antarchy:nyxite_pillar" - } + "result": "antarchy:nyxite_pillar", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_slab.json index 26f4f0ee..9085ad22 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_slab.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_slab.json @@ -10,7 +10,7 @@ "###" ], "result": { - "count": 6, - "item": "antarchy:nyxite_slab" + "item": "antarchy:nyxite_slab", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_slab_from_nyxite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_slab_from_nyxite_stonecutting.json index d94b7444..74cd05e6 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_slab_from_nyxite_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_slab_from_nyxite_stonecutting.json @@ -3,8 +3,6 @@ "ingredient": { "item": "antarchy:nyxite" }, - "result": { - "count": 2, - "item": "antarchy:nyxite_slab" - } + "result": "antarchy:nyxite_slab", + "count": 2 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_stairs.json index cd7505b3..83358e27 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_stairs.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_stairs.json @@ -12,7 +12,7 @@ "###" ], "result": { - "count": 4, - "item": "antarchy:nyxite_stairs" + "item": "antarchy:nyxite_stairs", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_stairs_from_nyxite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_stairs_from_nyxite_stonecutting.json index 8f60a969..563a1cf3 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_stairs_from_nyxite_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_stairs_from_nyxite_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:nyxite" }, - "result": { - "item": "antarchy:nyxite_stairs" - } + "result": "antarchy:nyxite_stairs", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_wall.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_wall.json index 185671ad..8d7d9ce3 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_wall.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_wall.json @@ -11,7 +11,7 @@ "###" ], "result": { - "count": 6, - "item": "antarchy:nyxite_wall" + "item": "antarchy:nyxite_wall", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_wall_from_nyxite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_wall_from_nyxite_stonecutting.json index 38f7da3a..db42c8b9 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_wall_from_nyxite_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_wall_from_nyxite_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:nyxite" }, - "result": { - "item": "antarchy:nyxite_wall" - } + "result": "antarchy:nyxite_wall", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/observer_from_bluestone.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/observer_from_bluestone.json index 4220684e..c8931fd4 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/observer_from_bluestone.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/observer_from_bluestone.json @@ -18,7 +18,6 @@ "###" ], "result": { - "count": 1, "item": "minecraft:observer" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/orange_banner_from_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/orange_banner_from_truffalo_tuft.json similarity index 87% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/orange_banner_from_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/orange_banner_from_truffalo_tuft.json index fc141f2a..ddca2f90 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/orange_banner_from_truffalo_tuft.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/orange_banner_from_truffalo_tuft.json @@ -15,6 +15,6 @@ } }, "result": { - "id": "minecraft:orange_banner" + "item": "minecraft:orange_banner" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/orange_bed_from_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/orange_bed_from_truffalo_tuft.json similarity index 88% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/orange_bed_from_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/orange_bed_from_truffalo_tuft.json index 3de51a1f..26710daa 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/orange_bed_from_truffalo_tuft.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/orange_bed_from_truffalo_tuft.json @@ -14,6 +14,6 @@ } }, "result": { - "id": "minecraft:orange_bed" + "item": "minecraft:orange_bed" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/orange_dye_from_orange_milkweed.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/orange_dye_from_orange_milkweed.json index d28a43a1..cb3e60a1 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/orange_dye_from_orange_milkweed.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/orange_dye_from_orange_milkweed.json @@ -7,7 +7,7 @@ } ], "result": { - "count": 2, - "item": "minecraft:orange_dye" + "item": "minecraft:orange_dye", + "count": 2 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/mossy_ouranwood_log.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/mossy_ouranwood_log.json index ed82210c..e09ae970 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/mossy_ouranwood_log.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/mossy_ouranwood_log.json @@ -10,7 +10,6 @@ } ], "result": { - "count": 1, "item": "antarchy:mossy_ouranwood_log" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/mossy_ouranwood_wood.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/mossy_ouranwood_wood.json index 40b8e9db..cade5f6f 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/mossy_ouranwood_wood.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/mossy_ouranwood_wood.json @@ -10,7 +10,6 @@ } ], "result": { - "count": 1, "item": "antarchy:mossy_ouranwood_wood" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/mossy_ouranwood_wood_from_mossy_ouranwood_log.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/mossy_ouranwood_wood_from_mossy_ouranwood_log.json index 55d7d017..76476922 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/mossy_ouranwood_wood_from_mossy_ouranwood_log.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/mossy_ouranwood_wood_from_mossy_ouranwood_log.json @@ -12,7 +12,7 @@ "##" ], "result": { - "count": 3, - "item": "antarchy:mossy_ouranwood_wood" + "item": "antarchy:mossy_ouranwood_wood", + "count": 3 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_boat.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_boat.json index cf5d728e..66ef8f64 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_boat.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_boat.json @@ -11,7 +11,6 @@ "###" ], "result": { - "count": 1, "item": "antarchy:ouranwood_boat" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_button.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_button.json index 546495cf..ae7bfda5 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_button.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_button.json @@ -8,7 +8,6 @@ } ], "result": { - "count": 1, "item": "antarchy:ouranwood_button" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_chest_boat.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_chest_boat.json index 5bdac689..a7d0e535 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_chest_boat.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_chest_boat.json @@ -10,7 +10,6 @@ } ], "result": { - "count": 1, "item": "antarchy:ouranwood_chest_boat" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_door.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_door.json index 21cc0041..cd54b5dc 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_door.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_door.json @@ -13,7 +13,7 @@ "##" ], "result": { - "count": 3, - "item": "antarchy:ouranwood_door" + "item": "antarchy:ouranwood_door", + "count": 3 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_fence.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_fence.json index ed56b3a9..c03e73bd 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_fence.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_fence.json @@ -15,7 +15,7 @@ "W#W" ], "result": { - "count": 3, - "item": "antarchy:ouranwood_fence" + "item": "antarchy:ouranwood_fence", + "count": 3 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_fence_gate.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_fence_gate.json index e1919516..47b5cc3d 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_fence_gate.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_fence_gate.json @@ -15,7 +15,6 @@ "#W#" ], "result": { - "count": 1, "item": "antarchy:ouranwood_fence_gate" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_hanging_sign.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_hanging_sign.json index fbb0e9d0..b1eadf8b 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_hanging_sign.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_hanging_sign.json @@ -16,7 +16,7 @@ "###" ], "result": { - "count": 6, - "item": "antarchy:ouranwood_hanging_sign" + "item": "antarchy:ouranwood_hanging_sign", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_planks.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_planks.json index f7346dc2..7bf71d6a 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_planks.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_planks.json @@ -8,7 +8,7 @@ } ], "result": { - "count": 4, - "item": "antarchy:ouranwood_planks" + "item": "antarchy:ouranwood_planks", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_pressure_plate.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_pressure_plate.json index e06cada6..92e54f46 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_pressure_plate.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_pressure_plate.json @@ -11,7 +11,6 @@ "##" ], "result": { - "count": 1, "item": "antarchy:ouranwood_pressure_plate" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_sign.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_sign.json index f4ee1361..ca51e238 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_sign.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_sign.json @@ -16,7 +16,7 @@ " X " ], "result": { - "count": 3, - "item": "antarchy:ouranwood_sign" + "item": "antarchy:ouranwood_sign", + "count": 3 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_slab.json index 29ba8b65..59934550 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_slab.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_slab.json @@ -11,7 +11,7 @@ "###" ], "result": { - "count": 6, - "item": "antarchy:ouranwood_slab" + "item": "antarchy:ouranwood_slab", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_stairs.json index ead992f6..238c0b00 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_stairs.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_stairs.json @@ -13,7 +13,7 @@ "###" ], "result": { - "count": 4, - "item": "antarchy:ouranwood_stairs" + "item": "antarchy:ouranwood_stairs", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_trapdoor.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_trapdoor.json index c27eb9e2..609f0b6b 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_trapdoor.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_trapdoor.json @@ -12,7 +12,7 @@ "###" ], "result": { - "count": 2, - "item": "antarchy:ouranwood_trapdoor" + "item": "antarchy:ouranwood_trapdoor", + "count": 2 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_wood.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_wood.json index 2c5694bf..8e7be66e 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_wood.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_wood.json @@ -12,7 +12,7 @@ "##" ], "result": { - "count": 3, - "item": "antarchy:ouranwood_wood" + "item": "antarchy:ouranwood_wood", + "count": 3 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/stripped_ouranwood_wood.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/stripped_ouranwood_wood.json index 3057eae7..8a9c9dcb 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/stripped_ouranwood_wood.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/stripped_ouranwood_wood.json @@ -12,7 +12,7 @@ "##" ], "result": { - "count": 3, - "item": "antarchy:stripped_ouranwood_wood" + "item": "antarchy:stripped_ouranwood_wood", + "count": 3 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/packed_loam.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/packed_loam.json similarity index 83% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/packed_loam.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/packed_loam.json index 7c647c99..f2c95d76 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/packed_loam.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/packed_loam.json @@ -15,7 +15,6 @@ } }, "result": { - "count": 1, - "id": "antarchy:packed_loam" + "item": "antarchy:packed_loam" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/painting_from_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/painting_from_truffalo_tuft.json similarity index 88% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/painting_from_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/painting_from_truffalo_tuft.json index 386e2acb..feb56236 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/painting_from_truffalo_tuft.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/painting_from_truffalo_tuft.json @@ -15,6 +15,6 @@ } }, "result": { - "id": "minecraft:painting" + "item": "minecraft:painting" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_boat.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_boat.json index 4f2b9635..9dd3f426 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_boat.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_boat.json @@ -11,7 +11,6 @@ "###" ], "result": { - "count": 1, "item": "antarchy:peach_boat" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_button.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_button.json index 1e3ee233..52313220 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_button.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_button.json @@ -8,7 +8,6 @@ } ], "result": { - "count": 1, "item": "antarchy:peach_button" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_chest_boat.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_chest_boat.json index 44109cb6..b7791e40 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_chest_boat.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_chest_boat.json @@ -10,7 +10,6 @@ } ], "result": { - "count": 1, "item": "antarchy:peach_chest_boat" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_door.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_door.json index 4150d10b..63e97404 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_door.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_door.json @@ -13,7 +13,7 @@ "##" ], "result": { - "count": 3, - "item": "antarchy:peach_door" + "item": "antarchy:peach_door", + "count": 3 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_fence.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_fence.json index e0d6dc28..ca41e312 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_fence.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_fence.json @@ -15,7 +15,7 @@ "W#W" ], "result": { - "count": 3, - "item": "antarchy:peach_fence" + "item": "antarchy:peach_fence", + "count": 3 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_fence_gate.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_fence_gate.json index 81988d0a..6bc0ff32 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_fence_gate.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_fence_gate.json @@ -15,7 +15,6 @@ "#W#" ], "result": { - "count": 1, "item": "antarchy:peach_fence_gate" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_hanging_sign.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_hanging_sign.json index 44604b9e..874f9392 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_hanging_sign.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_hanging_sign.json @@ -16,7 +16,7 @@ "###" ], "result": { - "count": 6, - "item": "antarchy:peach_hanging_sign" + "item": "antarchy:peach_hanging_sign", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_planks.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_planks.json index b95f9c00..f924721a 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_planks.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_planks.json @@ -8,7 +8,7 @@ } ], "result": { - "count": 4, - "item": "antarchy:peach_planks" + "item": "antarchy:peach_planks", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_pressure_plate.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_pressure_plate.json index 975fba8f..c1f7e8af 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_pressure_plate.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_pressure_plate.json @@ -11,7 +11,6 @@ "##" ], "result": { - "count": 1, "item": "antarchy:peach_pressure_plate" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_sign.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_sign.json index f45c9072..e21c29ce 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_sign.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_sign.json @@ -16,7 +16,7 @@ " X " ], "result": { - "count": 3, - "item": "antarchy:peach_sign" + "item": "antarchy:peach_sign", + "count": 3 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_slab.json index 1e1946df..591857f7 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_slab.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_slab.json @@ -11,7 +11,7 @@ "###" ], "result": { - "count": 6, - "item": "antarchy:peach_slab" + "item": "antarchy:peach_slab", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_stairs.json index a3db1e42..4fb1af1a 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_stairs.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_stairs.json @@ -13,7 +13,7 @@ "###" ], "result": { - "count": 4, - "item": "antarchy:peach_stairs" + "item": "antarchy:peach_stairs", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_trapdoor.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_trapdoor.json index 0597f17f..d0d492ec 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_trapdoor.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_trapdoor.json @@ -12,7 +12,7 @@ "###" ], "result": { - "count": 2, - "item": "antarchy:peach_trapdoor" + "item": "antarchy:peach_trapdoor", + "count": 2 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_wood.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_wood.json index 26749b3f..978669e5 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_wood.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_wood.json @@ -12,7 +12,7 @@ "##" ], "result": { - "count": 3, - "item": "antarchy:peach_wood" + "item": "antarchy:peach_wood", + "count": 3 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/stripped_peach_wood.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/stripped_peach_wood.json index 3029b62f..ddab563a 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/stripped_peach_wood.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/stripped_peach_wood.json @@ -12,7 +12,7 @@ "##" ], "result": { - "count": 3, - "item": "antarchy:stripped_peach_wood" + "item": "antarchy:stripped_peach_wood", + "count": 3 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/peach_pie.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach_pie.json index 2ed80fa5..ebd3f93b 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/peach_pie.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach_pie.json @@ -1,6 +1,6 @@ { "type": "minecraft:crafting_shapeless", - "category": "misc", + "category": "food", "ingredients": [ { "item": "antarchy:peach" @@ -13,7 +13,6 @@ } ], "result": { - "count": 1, "item": "antarchy:peach_pie" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/pink_banner_from_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/pink_banner_from_truffalo_tuft.json similarity index 88% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/pink_banner_from_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/pink_banner_from_truffalo_tuft.json index 59fb70cd..55f3e1af 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/pink_banner_from_truffalo_tuft.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/pink_banner_from_truffalo_tuft.json @@ -15,6 +15,6 @@ } }, "result": { - "id": "minecraft:pink_banner" + "item": "minecraft:pink_banner" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/pink_bed_from_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/pink_bed_from_truffalo_tuft.json similarity index 88% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/pink_bed_from_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/pink_bed_from_truffalo_tuft.json index 95dce035..37a8957f 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/pink_bed_from_truffalo_tuft.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/pink_bed_from_truffalo_tuft.json @@ -14,6 +14,6 @@ } }, "result": { - "id": "minecraft:pink_bed" + "item": "minecraft:pink_bed" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/pink_dye_from_camellia.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/pink_dye_from_camellia.json index 3fdf703a..51c797a1 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/pink_dye_from_camellia.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/pink_dye_from_camellia.json @@ -7,7 +7,7 @@ } ], "result": { - "count": 2, - "item": "minecraft:pink_dye" + "item": "minecraft:pink_dye", + "count": 2 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/pink_dye_from_lotus.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/pink_dye_from_lotus.json index f280fcf9..7af29339 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/pink_dye_from_lotus.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/pink_dye_from_lotus.json @@ -7,7 +7,7 @@ } ], "result": { - "count": 2, - "item": "minecraft:pink_dye" + "item": "minecraft:pink_dye", + "count": 2 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/pink_dye_from_pink_milkweed.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/pink_dye_from_pink_milkweed.json index d411a2df..9c0e0201 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/pink_dye_from_pink_milkweed.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/pink_dye_from_pink_milkweed.json @@ -7,7 +7,7 @@ } ], "result": { - "count": 2, - "item": "minecraft:pink_dye" + "item": "minecraft:pink_dye", + "count": 2 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/piston_from_bluestone.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/piston_from_bluestone.json index 9397f472..baab6004 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/piston_from_bluestone.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/piston_from_bluestone.json @@ -21,7 +21,6 @@ "#R#" ], "result": { - "count": 1, "item": "minecraft:piston" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_antimetal.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_antimetal.json index c585b6d8..c53e0c40 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_antimetal.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_antimetal.json @@ -11,7 +11,6 @@ } }, "result": { - "item": "antarchy:polished_antimetal", - "count": 1 + "item": "antarchy:polished_antimetal" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_antimetal_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_antimetal_slab.json index 5e9ae380..f7075683 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_antimetal_slab.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_antimetal_slab.json @@ -10,7 +10,7 @@ "###" ], "result": { - "count": 6, - "item": "antarchy:polished_antimetal_slab" + "item": "antarchy:polished_antimetal_slab", + "count": 6 } -} \ No newline at end of file +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_antimetal_slab_from_polished_antimetal_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_antimetal_slab_from_polished_antimetal_stonecutting.json index 4f769eaa..6eb99412 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_antimetal_slab_from_polished_antimetal_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_antimetal_slab_from_polished_antimetal_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:polished_antimetal" }, - "result": { - "item": "antarchy:polished_antimetal_slab" - } -} \ No newline at end of file + "result": "antarchy:polished_antimetal_slab", + "count": 1 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_antimetal_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_antimetal_stairs.json index 008f96b1..0f754d46 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_antimetal_stairs.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_antimetal_stairs.json @@ -12,7 +12,7 @@ "###" ], "result": { - "count": 4, - "item": "antarchy:polished_antimetal_stairs" + "item": "antarchy:polished_antimetal_stairs", + "count": 4 } -} \ No newline at end of file +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_antimetal_stairs_from_polished_antimetal_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_antimetal_stairs_from_polished_antimetal_stonecutting.json index 70f75d2f..3f7db1ab 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_antimetal_stairs_from_polished_antimetal_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_antimetal_stairs_from_polished_antimetal_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:polished_antimetal" }, - "result": { - "item": "antarchy:polished_antimetal_stairs" - } -} \ No newline at end of file + "result": "antarchy:polished_antimetal_stairs", + "count": 1 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone.json index 10a98e7f..d4851a68 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone.json @@ -11,7 +11,7 @@ "##" ], "result": { - "count": 4, - "item": "antarchy:polished_broodstone" + "item": "antarchy:polished_broodstone", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone_from_broodstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone_from_broodstone_stonecutting.json index 6e844c6e..d229e134 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone_from_broodstone_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone_from_broodstone_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:broodstone" }, - "result": { - "item": "antarchy:polished_broodstone" - } + "result": "antarchy:polished_broodstone", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone_slab.json index 889b189e..b8ef2088 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone_slab.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone_slab.json @@ -10,7 +10,7 @@ "###" ], "result": { - "count": 6, - "item": "antarchy:polished_broodstone_slab" + "item": "antarchy:polished_broodstone_slab", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone_slab_from_polished_broodstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone_slab_from_polished_broodstone_stonecutting.json index 2b0f6710..32063384 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone_slab_from_polished_broodstone_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone_slab_from_polished_broodstone_stonecutting.json @@ -3,8 +3,6 @@ "ingredient": { "item": "antarchy:polished_broodstone" }, - "result": { - "count": 2, - "item": "antarchy:polished_broodstone_slab" - } + "result": "antarchy:polished_broodstone_slab", + "count": 2 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone_stairs.json index 301aeea4..c59c6a20 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone_stairs.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone_stairs.json @@ -12,7 +12,7 @@ "###" ], "result": { - "count": 4, - "item": "antarchy:polished_broodstone_stairs" + "item": "antarchy:polished_broodstone_stairs", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone_stairs_from_polished_broodstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone_stairs_from_polished_broodstone_stonecutting.json index fa2fa7a4..624aca68 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone_stairs_from_polished_broodstone_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone_stairs_from_polished_broodstone_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:polished_broodstone" }, - "result": { - "item": "antarchy:polished_broodstone_stairs" - } + "result": "antarchy:polished_broodstone_stairs", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone_wall.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone_wall.json index 30c797e4..6d68e0ca 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone_wall.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone_wall.json @@ -11,7 +11,7 @@ "###" ], "result": { - "count": 6, - "item": "antarchy:polished_broodstone_wall" + "item": "antarchy:polished_broodstone_wall", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone_wall_from_polished_broodstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone_wall_from_polished_broodstone_stonecutting.json index 730f2932..ed181912 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone_wall_from_polished_broodstone_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone_wall_from_polished_broodstone_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:polished_broodstone" }, - "result": { - "item": "antarchy:polished_broodstone_wall" - } + "result": "antarchy:polished_broodstone_wall", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_myrmite.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_myrmite.json similarity index 77% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/polished_myrmite.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/polished_myrmite.json index fc663164..ddc4f7fc 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_myrmite.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_myrmite.json @@ -11,8 +11,7 @@ "##" ], "result": { - "count": 4, - "id": "antarchy:polished_myrmite" + "item": "antarchy:polished_myrmite", + "count": 4 } } - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_myrmite_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_myrmite_slab.json new file mode 100644 index 00000000..2556b434 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_myrmite_slab.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:polished_myrmite" + } + }, + "pattern": [ + "###" + ], + "result": { + "item": "antarchy:polished_myrmite_slab", + "count": 6 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_myrmite_slab_from_polished_myrmite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_myrmite_slab_from_polished_myrmite_stonecutting.json new file mode 100644 index 00000000..962032e3 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_myrmite_slab_from_polished_myrmite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:polished_myrmite" + }, + "result": "antarchy:polished_myrmite_slab", + "count": 2 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_myrmite_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_myrmite_stairs.json new file mode 100644 index 00000000..eea29f3e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_myrmite_stairs.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:polished_myrmite" + } + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "result": { + "item": "antarchy:polished_myrmite_stairs", + "count": 4 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_myrmite_stairs_from_polished_myrmite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_myrmite_stairs_from_polished_myrmite_stonecutting.json new file mode 100644 index 00000000..d639a02d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_myrmite_stairs_from_polished_myrmite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:polished_myrmite" + }, + "result": "antarchy:polished_myrmite_stairs", + "count": 1 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_myrmite_wall.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_myrmite_wall.json new file mode 100644 index 00000000..4427b127 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_myrmite_wall.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:polished_myrmite" + } + }, + "pattern": [ + "###", + "###" + ], + "result": { + "item": "antarchy:polished_myrmite_wall", + "count": 6 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_myrmite_wall_from_polished_myrmite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_myrmite_wall_from_polished_myrmite_stonecutting.json new file mode 100644 index 00000000..8dd87cae --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_myrmite_wall_from_polished_myrmite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:polished_myrmite" + }, + "result": "antarchy:polished_myrmite_wall", + "count": 1 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite.json index e0f385fb..2904ca72 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite.json @@ -11,7 +11,7 @@ "##" ], "result": { - "count": 4, - "item": "antarchy:polished_nyxite" + "item": "antarchy:polished_nyxite", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_button.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_button.json index 9a2a7351..bb41b44b 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_button.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_button.json @@ -8,7 +8,6 @@ } ], "result": { - "count": 1, "item": "antarchy:polished_nyxite_button" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_from_nyxite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_from_nyxite_stonecutting.json index 4f70eeb8..7e6eea66 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_from_nyxite_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_from_nyxite_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:nyxite" }, - "result": { - "item": "antarchy:polished_nyxite" - } + "result": "antarchy:polished_nyxite", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_pressure_plate.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_pressure_plate.json index f7d0998e..49cc3fec 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_pressure_plate.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_pressure_plate.json @@ -11,7 +11,6 @@ "##" ], "result": { - "count": 1, "item": "antarchy:polished_nyxite_pressure_plate" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_slab.json index 583d3ba3..9a816c0b 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_slab.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_slab.json @@ -10,7 +10,7 @@ "###" ], "result": { - "count": 6, - "item": "antarchy:polished_nyxite_slab" + "item": "antarchy:polished_nyxite_slab", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_slab_from_polished_nyxite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_slab_from_polished_nyxite_stonecutting.json index cf47942f..9eef9aa3 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_slab_from_polished_nyxite_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_slab_from_polished_nyxite_stonecutting.json @@ -3,8 +3,6 @@ "ingredient": { "item": "antarchy:polished_nyxite" }, - "result": { - "count": 2, - "item": "antarchy:polished_nyxite_slab" - } + "result": "antarchy:polished_nyxite_slab", + "count": 2 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_stairs.json index b7dfca5c..c3f6d3b8 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_stairs.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_stairs.json @@ -12,7 +12,7 @@ "###" ], "result": { - "count": 4, - "item": "antarchy:polished_nyxite_stairs" + "item": "antarchy:polished_nyxite_stairs", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_stairs_from_polished_nyxite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_stairs_from_polished_nyxite_stonecutting.json index 76543140..700316c2 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_stairs_from_polished_nyxite_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_stairs_from_polished_nyxite_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:polished_nyxite" }, - "result": { - "item": "antarchy:polished_nyxite_stairs" - } + "result": "antarchy:polished_nyxite_stairs", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_wall.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_wall.json index e832bcbf..54aa780b 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_wall.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_wall.json @@ -11,7 +11,7 @@ "###" ], "result": { - "count": 6, - "item": "antarchy:polished_nyxite_wall" + "item": "antarchy:polished_nyxite_wall", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_wall_from_polished_nyxite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_wall_from_polished_nyxite_stonecutting.json index ffbac4b2..6aa89fca 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_wall_from_polished_nyxite_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_wall_from_polished_nyxite_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:polished_nyxite" }, - "result": { - "item": "antarchy:polished_nyxite_wall" - } + "result": "antarchy:polished_nyxite_wall", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone.json index 35952564..9cc09f6c 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone.json @@ -11,7 +11,7 @@ "##" ], "result": { - "count": 4, - "item": "antarchy:polished_shellstone" + "item": "antarchy:polished_shellstone", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone_from_shellstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone_from_shellstone_stonecutting.json index 277918da..2c1243a4 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone_from_shellstone_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone_from_shellstone_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:shellstone" }, - "result": { - "item": "antarchy:polished_shellstone" - } + "result": "antarchy:polished_shellstone", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone_slab.json index c938a4a9..4c72632c 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone_slab.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone_slab.json @@ -10,7 +10,7 @@ "###" ], "result": { - "count": 6, - "item": "antarchy:polished_shellstone_slab" + "item": "antarchy:polished_shellstone_slab", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone_slab_from_polished_shellstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone_slab_from_polished_shellstone_stonecutting.json index f0efa7db..4ae30219 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone_slab_from_polished_shellstone_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone_slab_from_polished_shellstone_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:polished_shellstone" }, - "result": { - "item": "antarchy:polished_shellstone_slab" - } + "result": "antarchy:polished_shellstone_slab", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone_stairs.json index 5357b860..8c0d3d75 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone_stairs.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone_stairs.json @@ -12,7 +12,7 @@ "###" ], "result": { - "count": 4, - "item": "antarchy:polished_shellstone_stairs" + "item": "antarchy:polished_shellstone_stairs", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone_stairs_from_polished_shellstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone_stairs_from_polished_shellstone_stonecutting.json index dada5990..5b65035d 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone_stairs_from_polished_shellstone_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone_stairs_from_polished_shellstone_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:polished_shellstone" }, - "result": { - "item": "antarchy:polished_shellstone_stairs" - } + "result": "antarchy:polished_shellstone_stairs", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone_wall.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone_wall.json index f4c2a7ec..1c6f4ce0 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone_wall.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone_wall.json @@ -11,7 +11,7 @@ "###" ], "result": { - "count": 6, - "item": "antarchy:polished_shellstone_wall" + "item": "antarchy:polished_shellstone_wall", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone_wall_from_polished_shellstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone_wall_from_polished_shellstone_stonecutting.json index b5c5e6ad..78bc764e 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone_wall_from_polished_shellstone_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone_wall_from_polished_shellstone_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:polished_shellstone" }, - "result": { - "item": "antarchy:polished_shellstone_wall" - } + "result": "antarchy:polished_shellstone_wall", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_typhonite.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_typhonite.json new file mode 100644 index 00000000..99b00df0 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_typhonite.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:typhonite" + } + }, + "pattern": [ + "##", + "##" + ], + "result": { + "item": "antarchy:polished_typhonite", + "count": 4 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_typhonite_from_typhonite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_typhonite_from_typhonite_stonecutting.json new file mode 100644 index 00000000..349e8e60 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_typhonite_from_typhonite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:typhonite" + }, + "result": "antarchy:polished_typhonite", + "count": 1 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_typhonite_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_typhonite_slab.json similarity index 75% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/polished_typhonite_slab.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/polished_typhonite_slab.json index c40abf56..ffe2f280 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_typhonite_slab.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_typhonite_slab.json @@ -10,7 +10,7 @@ "###" ], "result": { - "count": 6, - "id": "antarchy:polished_typhonite_slab" + "item": "antarchy:polished_typhonite_slab", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_typhonite_slab_from_polished_typhonite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_typhonite_slab_from_polished_typhonite_stonecutting.json new file mode 100644 index 00000000..55fb5d2b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_typhonite_slab_from_polished_typhonite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:polished_typhonite" + }, + "result": "antarchy:polished_typhonite_slab", + "count": 2 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_typhonite_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_typhonite_stairs.json similarity index 76% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/polished_typhonite_stairs.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/polished_typhonite_stairs.json index 09698879..e4b68727 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_typhonite_stairs.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_typhonite_stairs.json @@ -12,7 +12,7 @@ "###" ], "result": { - "count": 4, - "id": "antarchy:polished_typhonite_stairs" + "item": "antarchy:polished_typhonite_stairs", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_typhonite_stairs_from_polished_typhonite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_typhonite_stairs_from_polished_typhonite_stonecutting.json new file mode 100644 index 00000000..0a4bdfd1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_typhonite_stairs_from_polished_typhonite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:polished_typhonite" + }, + "result": "antarchy:polished_typhonite_stairs", + "count": 1 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_typhonite_wall.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_typhonite_wall.json similarity index 76% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/polished_typhonite_wall.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/polished_typhonite_wall.json index 812a1124..5b5d80b1 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/polished_typhonite_wall.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_typhonite_wall.json @@ -11,7 +11,7 @@ "###" ], "result": { - "count": 6, - "id": "antarchy:polished_typhonite_wall" + "item": "antarchy:polished_typhonite_wall", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_typhonite_wall_from_polished_typhonite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_typhonite_wall_from_polished_typhonite_stonecutting.json new file mode 100644 index 00000000..a62ff962 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_typhonite_wall_from_polished_typhonite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:polished_typhonite" + }, + "result": "antarchy:polished_typhonite_wall", + "count": 1 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/popcorn_from_smelting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/popcorn_from_smelting.json index 8e9711ae..40e78dd2 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/popcorn_from_smelting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/popcorn_from_smelting.json @@ -6,7 +6,5 @@ "ingredient": { "item": "antarchy:corn_seeds" }, - "result": { - "item": "antarchy:popcorn" - } + "result": "antarchy:popcorn" } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/popcorn_from_smoking.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/popcorn_from_smoking.json index 3941edb2..efb858b4 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/popcorn_from_smoking.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/popcorn_from_smoking.json @@ -6,7 +6,5 @@ "ingredient": { "item": "antarchy:corn_seeds" }, - "result": { - "item": "antarchy:popcorn" - } + "result": "antarchy:popcorn" } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/portal_gun.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/portal_gun.json new file mode 100644 index 00000000..bc0714e1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/portal_gun.json @@ -0,0 +1,26 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "T N", + "TSN", + "TBT" + ], + "key": { + "T": { + "item": "antarchy:titanium_ingot" + }, + "N": { + "item": "antarchy:nightmare_scale" + }, + "S": { + "item": "minecraft:nether_star" + }, + "B": { + "item": "antarchy:bluestone_comparator" + } + }, + "result": { + "item": "antarchy:portal_gun" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/portal_gun_atlas.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/portal_gun_atlas.json new file mode 100644 index 00000000..451cfb7a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/portal_gun_atlas.json @@ -0,0 +1,18 @@ +{ + "type": "antarchy:portal_gun_variant", + "category": "equipment", + "ingredients": [ + { + "item": "antarchy:portal_gun" + }, + { + "item": "minecraft:light_blue_dye" + }, + { + "item": "minecraft:purple_dye" + } + ], + "result": { + "item": "antarchy:portal_gun_atlas" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/portal_gun_craisin.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/portal_gun_craisin.json new file mode 100644 index 00000000..002252fc --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/portal_gun_craisin.json @@ -0,0 +1,18 @@ +{ + "type": "antarchy:portal_gun_variant", + "category": "equipment", + "ingredients": [ + { + "item": "antarchy:portal_gun" + }, + { + "item": "minecraft:purple_dye" + }, + { + "item": "minecraft:gold_ingot" + } + ], + "result": { + "item": "antarchy:portal_gun_craisin" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/portal_gun_laynce.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/portal_gun_laynce.json new file mode 100644 index 00000000..798678de --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/portal_gun_laynce.json @@ -0,0 +1,18 @@ +{ + "type": "antarchy:portal_gun_variant", + "category": "equipment", + "ingredients": [ + { + "item": "antarchy:portal_gun" + }, + { + "item": "minecraft:orange_dye" + }, + { + "item": "minecraft:green_dye" + } + ], + "result": { + "item": "antarchy:portal_gun_laynce" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/portal_gun_p_body.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/portal_gun_p_body.json new file mode 100644 index 00000000..968fb8ad --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/portal_gun_p_body.json @@ -0,0 +1,18 @@ +{ + "type": "antarchy:portal_gun_variant", + "category": "equipment", + "ingredients": [ + { + "item": "antarchy:portal_gun" + }, + { + "item": "minecraft:yellow_dye" + }, + { + "item": "minecraft:red_dye" + } + ], + "result": { + "item": "antarchy:portal_gun_p_body" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/primordial_boots.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/primordial_boots.json index 20b945d7..27c4b63e 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/primordial_boots.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/primordial_boots.json @@ -11,7 +11,6 @@ } }, "result": { - "item": "antarchy:primordial_boots", - "count": 1 + "item": "antarchy:primordial_boots" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/primordial_chestplate.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/primordial_chestplate.json index 700240f6..a921ec20 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/primordial_chestplate.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/primordial_chestplate.json @@ -12,7 +12,6 @@ } }, "result": { - "item": "antarchy:primordial_chestplate", - "count": 1 + "item": "antarchy:primordial_chestplate" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/primordial_helmet.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/primordial_helmet.json index c8b45fbf..ae4ae935 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/primordial_helmet.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/primordial_helmet.json @@ -11,7 +11,6 @@ } }, "result": { - "item": "antarchy:primordial_helmet", - "count": 1 + "item": "antarchy:primordial_helmet" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/primordial_leggings.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/primordial_leggings.json index 3a713227..150c9f8b 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/primordial_leggings.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/primordial_leggings.json @@ -12,7 +12,6 @@ } }, "result": { - "item": "antarchy:primordial_leggings", - "count": 1 + "item": "antarchy:primordial_leggings" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/purple_banner_from_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/purple_banner_from_truffalo_tuft.json similarity index 87% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/purple_banner_from_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/purple_banner_from_truffalo_tuft.json index a9bd5e33..cd8f2d4c 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/purple_banner_from_truffalo_tuft.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/purple_banner_from_truffalo_tuft.json @@ -15,6 +15,6 @@ } }, "result": { - "id": "minecraft:purple_banner" + "item": "minecraft:purple_banner" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/purple_bed_from_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/purple_bed_from_truffalo_tuft.json similarity index 88% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/purple_bed_from_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/purple_bed_from_truffalo_tuft.json index 9b622bc2..498fa292 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/purple_bed_from_truffalo_tuft.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/purple_bed_from_truffalo_tuft.json @@ -14,6 +14,6 @@ } }, "result": { - "id": "minecraft:purple_bed" + "item": "minecraft:purple_bed" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/rainbow_sugar.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/rainbow_sugar.json index 82cfb27f..fe69afb1 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/rainbow_sugar.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/rainbow_sugar.json @@ -12,7 +12,6 @@ } ], "result": { - "item": "antarchy:rainbow_sugar", - "count": 1 + "item": "antarchy:rainbow_sugar" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/raw_corndog.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/raw_corndog.json index a629abd4..7b73640b 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/raw_corndog.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/raw_corndog.json @@ -1,6 +1,6 @@ { "type": "minecraft:crafting_shaped", - "category": "misc", + "category": "food", "key": { "#": { "tag": "antarchy:corndog_meats" @@ -18,7 +18,6 @@ " S " ], "result": { - "count": 1, "item": "antarchy:raw_corndog" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/red_banner_from_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/red_banner_from_truffalo_tuft.json similarity index 88% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/red_banner_from_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/red_banner_from_truffalo_tuft.json index 364b05a3..430beb53 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/red_banner_from_truffalo_tuft.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/red_banner_from_truffalo_tuft.json @@ -15,6 +15,6 @@ } }, "result": { - "id": "minecraft:red_banner" + "item": "minecraft:red_banner" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/red_bed_from_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/red_bed_from_truffalo_tuft.json similarity index 88% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/red_bed_from_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/red_bed_from_truffalo_tuft.json index a9ae2183..05d51aff 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/red_bed_from_truffalo_tuft.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/red_bed_from_truffalo_tuft.json @@ -14,6 +14,6 @@ } }, "result": { - "id": "minecraft:red_bed" + "item": "minecraft:red_bed" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/red_dye_from_spider_lily.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/red_dye_from_spider_lily.json index ae718ef0..549b19ae 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/red_dye_from_spider_lily.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/red_dye_from_spider_lily.json @@ -7,7 +7,6 @@ } ], "result": { - "count": 1, "item": "minecraft:red_dye" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_boat.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_boat.json similarity index 80% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_boat.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_boat.json index c649a06d..ce0daa80 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_boat.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_boat.json @@ -11,8 +11,6 @@ "###" ], "result": { - "count": 1, - "id": "antarchy:royal_boat" + "item": "antarchy:royal_boat" } } - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_button.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_button.json similarity index 79% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_button.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_button.json index ac325620..566d72a9 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_button.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_button.json @@ -8,7 +8,6 @@ } ], "result": { - "count": 1, - "id": "antarchy:royal_button" + "item": "antarchy:royal_button" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_chest_boat.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_chest_boat.json similarity index 79% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_chest_boat.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_chest_boat.json index 02145e8f..2d1b0787 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_chest_boat.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_chest_boat.json @@ -10,8 +10,6 @@ } ], "result": { - "count": 1, - "id": "antarchy:royal_chest_boat" + "item": "antarchy:royal_chest_boat" } } - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_door.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_door.json similarity index 82% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_door.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_door.json index b03fd86d..070434d9 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_door.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_door.json @@ -13,7 +13,7 @@ "##" ], "result": { - "count": 3, - "id": "antarchy:royal_door" + "item": "antarchy:royal_door", + "count": 3 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_fence.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_fence.json similarity index 84% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_fence.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_fence.json index 970a1d9d..759bb947 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_fence.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_fence.json @@ -15,7 +15,7 @@ "W#W" ], "result": { - "count": 3, - "id": "antarchy:royal_fence" + "item": "antarchy:royal_fence", + "count": 3 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_fence_gate.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_fence_gate.json similarity index 83% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_fence_gate.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_fence_gate.json index 3960930a..b1c48227 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_fence_gate.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_fence_gate.json @@ -15,7 +15,6 @@ "#W#" ], "result": { - "count": 1, - "id": "antarchy:royal_fence_gate" + "item": "antarchy:royal_fence_gate" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_hanging_sign.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_hanging_sign.json similarity index 83% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_hanging_sign.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_hanging_sign.json index b24e1454..4e0666ae 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_hanging_sign.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_hanging_sign.json @@ -16,7 +16,7 @@ "###" ], "result": { - "count": 6, - "id": "antarchy:royal_hanging_sign" + "item": "antarchy:royal_hanging_sign", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_planks.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_planks.json similarity index 77% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_planks.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_planks.json index 2f5cb9cd..a4d0bee2 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_planks.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_planks.json @@ -8,7 +8,7 @@ } ], "result": { - "count": 4, - "id": "antarchy:royal_planks" + "item": "antarchy:royal_planks", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_pressure_plate.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_pressure_plate.json similarity index 79% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_pressure_plate.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_pressure_plate.json index e1d43821..a3397b00 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_pressure_plate.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_pressure_plate.json @@ -11,7 +11,6 @@ "##" ], "result": { - "count": 1, - "id": "antarchy:royal_pressure_plate" + "item": "antarchy:royal_pressure_plate" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_sign.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_sign.json similarity index 84% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_sign.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_sign.json index c6258e03..d2c79c94 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_sign.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_sign.json @@ -16,7 +16,7 @@ " X " ], "result": { - "count": 3, - "id": "antarchy:royal_sign" + "item": "antarchy:royal_sign", + "count": 3 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_slab.json similarity index 81% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_slab.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_slab.json index 882e3654..f10ea7f6 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_slab.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_slab.json @@ -11,7 +11,7 @@ "###" ], "result": { - "count": 6, - "id": "antarchy:royal_slab" + "item": "antarchy:royal_slab", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_stairs.json similarity index 82% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_stairs.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_stairs.json index 4486b092..753040c5 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_stairs.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_stairs.json @@ -13,7 +13,7 @@ "###" ], "result": { - "count": 4, - "id": "antarchy:royal_stairs" + "item": "antarchy:royal_stairs", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_trapdoor.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_trapdoor.json similarity index 80% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_trapdoor.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_trapdoor.json index b192af5a..c90e3144 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_trapdoor.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_trapdoor.json @@ -12,7 +12,7 @@ "###" ], "result": { - "count": 2, - "id": "antarchy:royal_trapdoor" + "item": "antarchy:royal_trapdoor", + "count": 2 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_wood.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_wood.json similarity index 80% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_wood.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_wood.json index e0e84ab0..66f665d8 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal/royal_wood.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal/royal_wood.json @@ -12,7 +12,7 @@ "##" ], "result": { - "count": 3, - "id": "antarchy:royal_wood" + "item": "antarchy:royal_wood", + "count": 3 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal/stripped_royal_wood.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal/stripped_royal_wood.json similarity index 79% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/royal/stripped_royal_wood.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/royal/stripped_royal_wood.json index 694639d8..45bd25a6 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal/stripped_royal_wood.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal/stripped_royal_wood.json @@ -12,7 +12,7 @@ "##" ], "result": { - "count": 3, - "id": "antarchy:stripped_royal_wood" + "item": "antarchy:stripped_royal_wood", + "count": 3 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/royal_assailant_battleaxe.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal_assailant_battleaxe.json new file mode 100644 index 00000000..9f29ddb1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal_assailant_battleaxe.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "SSS", + "SBS", + "SSS" + ], + "key": { + "S": { + "item": "antarchy:queen_scale" + }, + "B": { + "item": "antarchy:big_bertha" + } + }, + "result": { + "item": "antarchy:royal_assailant_battleaxe" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/royal_assailant_boots.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal_assailant_boots.json new file mode 100644 index 00000000..b2b68d1a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal_assailant_boots.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "SSS", + "SUS", + "SSS" + ], + "key": { + "S": { + "item": "antarchy:queen_scale" + }, + "U": { + "item": "antarchy:ultimate_boots" + } + }, + "result": { + "item": "antarchy:royal_assailant_boots" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/royal_assailant_chestplate.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal_assailant_chestplate.json new file mode 100644 index 00000000..a365a70f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal_assailant_chestplate.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "SSS", + "SUS", + "SSS" + ], + "key": { + "S": { + "item": "antarchy:queen_scale" + }, + "U": { + "item": "antarchy:ultimate_chestplate" + } + }, + "result": { + "item": "antarchy:royal_assailant_chestplate" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/royal_assailant_helmet.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal_assailant_helmet.json new file mode 100644 index 00000000..16a9f1f4 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal_assailant_helmet.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "SSS", + "SUS", + "SSS" + ], + "key": { + "S": { + "item": "antarchy:queen_scale" + }, + "U": { + "item": "antarchy:ultimate_helmet" + } + }, + "result": { + "item": "antarchy:royal_assailant_helmet" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/royal_assailant_leggings.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal_assailant_leggings.json new file mode 100644 index 00000000..64e8a7bf --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal_assailant_leggings.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "SSS", + "SUS", + "SSS" + ], + "key": { + "S": { + "item": "antarchy:queen_scale" + }, + "U": { + "item": "antarchy:ultimate_leggings" + } + }, + "result": { + "item": "antarchy:royal_assailant_leggings" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/royal_assailant_staff.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal_assailant_staff.json new file mode 100644 index 00000000..152bba17 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal_assailant_staff.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "MLM", + " Q ", + " Q " + ], + "key": { + "M": { + "item": "antarchy:manticore_wing" + }, + "L": { + "item": "antarchy:lucid_eye" + }, + "Q": { + "item": "antarchy:queen_scale" + } + }, + "result": { + "item": "antarchy:royal_assailant_staff" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/royal_guardian_boots.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal_guardian_boots.json new file mode 100644 index 00000000..40ad40ef --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal_guardian_boots.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "SSS", + "SUS", + "SSS" + ], + "key": { + "S": { + "item": "antarchy:king_scale" + }, + "U": { + "item": "antarchy:ultimate_boots" + } + }, + "result": { + "item": "antarchy:royal_guardian_boots" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/royal_guardian_chestplate.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal_guardian_chestplate.json new file mode 100644 index 00000000..cc7bf8ba --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal_guardian_chestplate.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "SSS", + "SUS", + "SSS" + ], + "key": { + "S": { + "item": "antarchy:king_scale" + }, + "U": { + "item": "antarchy:ultimate_chestplate" + } + }, + "result": { + "item": "antarchy:royal_guardian_chestplate" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/royal_guardian_helmet.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal_guardian_helmet.json new file mode 100644 index 00000000..2a6537ce --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal_guardian_helmet.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "SSS", + "SUS", + "SSS" + ], + "key": { + "S": { + "item": "antarchy:king_scale" + }, + "U": { + "item": "antarchy:ultimate_helmet" + } + }, + "result": { + "item": "antarchy:royal_guardian_helmet" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/royal_guardian_leggings.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal_guardian_leggings.json new file mode 100644 index 00000000..94c34b9a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal_guardian_leggings.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "SSS", + "SUS", + "SSS" + ], + "key": { + "S": { + "item": "antarchy:king_scale" + }, + "U": { + "item": "antarchy:ultimate_leggings" + } + }, + "result": { + "item": "antarchy:royal_guardian_leggings" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal_guardian_shield.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal_guardian_shield.json similarity index 81% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/royal_guardian_shield.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/royal_guardian_shield.json index a9b884b8..40ef1425 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/royal_guardian_shield.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal_guardian_shield.json @@ -15,7 +15,6 @@ } }, "result": { - "id": "antarchy:royal_guardian_shield", - "count": 1 + "item": "antarchy:royal_guardian_shield" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/royal_guardian_sword.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal_guardian_sword.json new file mode 100644 index 00000000..fe013e9e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/royal_guardian_sword.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "SSS", + "SBS", + "SSS" + ], + "key": { + "S": { + "item": "antarchy:king_scale" + }, + "B": { + "item": "antarchy:big_bertha" + } + }, + "result": { + "item": "antarchy:royal_guardian_sword" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/rpo_launcher.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/rpo_launcher.json index b59798f9..60a7e49c 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/rpo_launcher.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/rpo_launcher.json @@ -15,7 +15,6 @@ } }, "result": { - "item": "antarchy:rpo_launcher", - "count": 1 + "item": "antarchy:rpo_launcher" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/scorpion_whip.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/scorpion_whip.json index 6a2f88a1..d8f9b8a2 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/scorpion_whip.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/scorpion_whip.json @@ -14,7 +14,6 @@ } }, "result": { - "item": "antarchy:scorpion_whip", - "count": 1 + "item": "antarchy:scorpion_whip" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone.json index 88a05d7d..89a7adac 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone.json @@ -15,7 +15,7 @@ "SSS" ], "result": { - "count": 8, - "item": "antarchy:shellstone" + "item": "antarchy:shellstone", + "count": 8 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_brick_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_brick_slab.json index 30ce2d58..8f9db958 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_brick_slab.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_brick_slab.json @@ -10,7 +10,7 @@ "###" ], "result": { - "count": 6, - "item": "antarchy:shellstone_brick_slab" + "item": "antarchy:shellstone_brick_slab", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_brick_slab_from_shellstone_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_brick_slab_from_shellstone_bricks_stonecutting.json index bc9573c6..14d9047d 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_brick_slab_from_shellstone_bricks_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_brick_slab_from_shellstone_bricks_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:shellstone_bricks" }, - "result": { - "item": "antarchy:shellstone_brick_slab" - } + "result": "antarchy:shellstone_brick_slab", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_brick_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_brick_stairs.json index 03237c26..ef98ba88 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_brick_stairs.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_brick_stairs.json @@ -12,7 +12,7 @@ "###" ], "result": { - "count": 4, - "item": "antarchy:shellstone_brick_stairs" + "item": "antarchy:shellstone_brick_stairs", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_brick_stairs_from_shellstone_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_brick_stairs_from_shellstone_bricks_stonecutting.json index 3622e268..c036ba43 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_brick_stairs_from_shellstone_bricks_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_brick_stairs_from_shellstone_bricks_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:shellstone_bricks" }, - "result": { - "item": "antarchy:shellstone_brick_stairs" - } + "result": "antarchy:shellstone_brick_stairs", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_brick_wall.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_brick_wall.json index 903b339c..ddfa5c38 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_brick_wall.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_brick_wall.json @@ -11,7 +11,7 @@ "###" ], "result": { - "count": 6, - "item": "antarchy:shellstone_brick_wall" + "item": "antarchy:shellstone_brick_wall", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_brick_wall_from_shellstone_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_brick_wall_from_shellstone_bricks_stonecutting.json index 1db5b571..efea8f3a 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_brick_wall_from_shellstone_bricks_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_brick_wall_from_shellstone_bricks_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:shellstone_bricks" }, - "result": { - "item": "antarchy:shellstone_brick_wall" - } + "result": "antarchy:shellstone_brick_wall", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_bricks.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_bricks.json index df6e0835..76226991 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_bricks.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_bricks.json @@ -11,7 +11,7 @@ "##" ], "result": { - "count": 4, - "item": "antarchy:shellstone_bricks" + "item": "antarchy:shellstone_bricks", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_bricks_from_polished_shellstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_bricks_from_polished_shellstone_stonecutting.json index e69e1a8a..16c2a7cc 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_bricks_from_polished_shellstone_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_bricks_from_polished_shellstone_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:polished_shellstone" }, - "result": { - "item": "antarchy:shellstone_bricks" - } + "result": "antarchy:shellstone_bricks", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_pillar_from_shellstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_pillar_from_shellstone_stonecutting.json index 069e19f7..24ad22f7 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_pillar_from_shellstone_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_pillar_from_shellstone_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:shellstone" }, - "result": { - "item": "antarchy:shellstone_pillar" - } + "result": "antarchy:shellstone_pillar", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_slab.json index 540d578c..b620c713 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_slab.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_slab.json @@ -10,7 +10,7 @@ "###" ], "result": { - "count": 6, - "item": "antarchy:shellstone_slab" + "item": "antarchy:shellstone_slab", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_slab_from_shellstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_slab_from_shellstone_stonecutting.json index b5e227b6..c08f4c32 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_slab_from_shellstone_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_slab_from_shellstone_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:shellstone" }, - "result": { - "item": "antarchy:shellstone_slab" - } + "result": "antarchy:shellstone_slab", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_stairs.json index a086b669..f69ec6d0 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_stairs.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_stairs.json @@ -12,7 +12,7 @@ "###" ], "result": { - "count": 4, - "item": "antarchy:shellstone_stairs" + "item": "antarchy:shellstone_stairs", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_stairs_from_shellstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_stairs_from_shellstone_stonecutting.json index 42a6f194..7204d502 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_stairs_from_shellstone_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_stairs_from_shellstone_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:shellstone" }, - "result": { - "item": "antarchy:shellstone_stairs" - } + "result": "antarchy:shellstone_stairs", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_wall.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_wall.json index b092b015..b902c3ac 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_wall.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_wall.json @@ -11,7 +11,7 @@ "###" ], "result": { - "count": 6, - "item": "antarchy:shellstone_wall" + "item": "antarchy:shellstone_wall", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_wall_from_shellstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_wall_from_shellstone_stonecutting.json index 25af125f..4a676cb9 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_wall_from_shellstone_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_wall_from_shellstone_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:shellstone" }, - "result": { - "item": "antarchy:shellstone_wall" - } + "result": "antarchy:shellstone_wall", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/shrink_ray.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/shrink_ray.json index 1a545ec0..ed305ccd 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/shrink_ray.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/shrink_ray.json @@ -18,7 +18,6 @@ } }, "result": { - "item": "antarchy:shrink_ray", - "count": 1 + "item": "antarchy:shrink_ray" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/smooth_dream_sandstone.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/smooth_dream_sandstone.json index 8222c2f1..4b23e8b7 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/smooth_dream_sandstone.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/smooth_dream_sandstone.json @@ -5,7 +5,5 @@ "ingredient": { "item": "antarchy:dream_sandstone" }, - "result": { - "item": "antarchy:smooth_dream_sandstone" - } + "result": "antarchy:smooth_dream_sandstone" } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/smooth_dream_sandstone_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/smooth_dream_sandstone_slab.json index 3fd14dae..828477f8 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/smooth_dream_sandstone_slab.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/smooth_dream_sandstone_slab.json @@ -10,7 +10,7 @@ "###" ], "result": { - "count": 6, - "item": "antarchy:smooth_dream_sandstone_slab" + "item": "antarchy:smooth_dream_sandstone_slab", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/smooth_dream_sandstone_slab_from_smooth_dream_sandstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/smooth_dream_sandstone_slab_from_smooth_dream_sandstone_stonecutting.json index 48810580..c73646a4 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/smooth_dream_sandstone_slab_from_smooth_dream_sandstone_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/smooth_dream_sandstone_slab_from_smooth_dream_sandstone_stonecutting.json @@ -3,8 +3,6 @@ "ingredient": { "item": "antarchy:smooth_dream_sandstone" }, - "result": { - "count": 2, - "item": "antarchy:smooth_dream_sandstone_slab" - } + "result": "antarchy:smooth_dream_sandstone_slab", + "count": 2 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/smooth_dream_sandstone_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/smooth_dream_sandstone_stairs.json index fe3b4dd6..46197b44 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/smooth_dream_sandstone_stairs.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/smooth_dream_sandstone_stairs.json @@ -12,7 +12,7 @@ "###" ], "result": { - "count": 4, - "item": "antarchy:smooth_dream_sandstone_stairs" + "item": "antarchy:smooth_dream_sandstone_stairs", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/smooth_dream_sandstone_stairs_from_smooth_dream_sandstone_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/smooth_dream_sandstone_stairs_from_smooth_dream_sandstone_stonecutting.json index 8ad132ea..b227c328 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/smooth_dream_sandstone_stairs_from_smooth_dream_sandstone_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/smooth_dream_sandstone_stairs_from_smooth_dream_sandstone_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:smooth_dream_sandstone" }, - "result": { - "item": "antarchy:smooth_dream_sandstone_stairs" - } + "result": "antarchy:smooth_dream_sandstone_stairs", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/springy_boots.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/springy_boots.json index dd43598d..8314440f 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/springy_boots.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/springy_boots.json @@ -14,7 +14,6 @@ } }, "result": { - "item": "antarchy:springy_boots", - "count": 1 + "item": "antarchy:springy_boots" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/squidzooka.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/squidzooka.json index fb2195bd..d48000d0 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/squidzooka.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/squidzooka.json @@ -15,7 +15,6 @@ } }, "result": { - "item": "antarchy:squidzooka", - "count": 1 + "item": "antarchy:squidzooka" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/stratoshark_fin_soup.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/stratoshark_fin_soup.json similarity index 78% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/stratoshark_fin_soup.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/stratoshark_fin_soup.json index 3b9fb7ac..10b90e30 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/stratoshark_fin_soup.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/stratoshark_fin_soup.json @@ -10,7 +10,6 @@ } ], "result": { - "id": "antarchy:stratoshark_fin_soup", - "count": 1 + "item": "antarchy:stratoshark_fin_soup" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/target_from_bluestone.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/target_from_bluestone.json index 766ee9bd..973b0f83 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/target_from_bluestone.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/target_from_bluestone.json @@ -15,7 +15,6 @@ " R " ], "result": { - "count": 1, "item": "minecraft:target" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/temporal_tuner.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/temporal_tuner.json new file mode 100644 index 00000000..0a945f28 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/temporal_tuner.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "pattern": [ + "QSQ", + "QCQ", + "QQQ" + ], + "key": { + "S": { + "item": "antarchy:blood_crystal_shard" + }, + "Q": { + "item": "antarchy:queen_scale" + }, + "C": { + "item": "minecraft:compass" + } + }, + "result": { + "item": "antarchy:temporal_tuner" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/tigers_eye_block.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/tigers_eye_block.json similarity index 79% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/tigers_eye_block.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/tigers_eye_block.json index 807aa892..389eacb3 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/tigers_eye_block.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/tigers_eye_block.json @@ -12,7 +12,6 @@ } }, "result": { - "id": "antarchy:tigers_eye_block", - "count": 1 + "item": "antarchy:tigers_eye_block" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/tigers_eye_boots.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/tigers_eye_boots.json index 9128a13b..360cbd3a 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/tigers_eye_boots.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/tigers_eye_boots.json @@ -11,7 +11,6 @@ } }, "result": { - "item": "antarchy:tigers_eye_boots", - "count": 1 + "item": "antarchy:tigers_eye_boots" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/tigers_eye_chestplate.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/tigers_eye_chestplate.json index 2ed91702..f8eea780 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/tigers_eye_chestplate.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/tigers_eye_chestplate.json @@ -12,7 +12,6 @@ } }, "result": { - "item": "antarchy:tigers_eye_chestplate", - "count": 1 + "item": "antarchy:tigers_eye_chestplate" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/tigers_eye_from_block.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/tigers_eye_from_block.json similarity index 83% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/tigers_eye_from_block.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/tigers_eye_from_block.json index 17fac43c..80d68ede 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/tigers_eye_from_block.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/tigers_eye_from_block.json @@ -7,7 +7,7 @@ } ], "result": { - "id": "antarchy:tigers_eye", + "item": "antarchy:tigers_eye", "count": 9 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/tigers_eye_helmet.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/tigers_eye_helmet.json index edc7f516..f074d9cb 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/tigers_eye_helmet.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/tigers_eye_helmet.json @@ -11,7 +11,6 @@ } }, "result": { - "item": "antarchy:tigers_eye_helmet", - "count": 1 + "item": "antarchy:tigers_eye_helmet" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/tigers_eye_leggings.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/tigers_eye_leggings.json index 3f1fa6b1..7cdf7c41 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/tigers_eye_leggings.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/tigers_eye_leggings.json @@ -12,7 +12,6 @@ } }, "result": { - "item": "antarchy:tigers_eye_leggings", - "count": 1 + "item": "antarchy:tigers_eye_leggings" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/chiseled_titanium_from_cut_titanium_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/chiseled_titanium_from_cut_titanium_stonecutting.json index 60c119bb..c67cdb11 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/chiseled_titanium_from_cut_titanium_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/chiseled_titanium_from_cut_titanium_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:cut_titanium" }, - "result": { - "item": "antarchy:chiseled_titanium" - } + "result": "antarchy:chiseled_titanium", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/chiseled_titanium_from_titanium_block_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/chiseled_titanium_from_titanium_block_stonecutting.json index 8e88da17..d1f8d1b4 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/chiseled_titanium_from_titanium_block_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/chiseled_titanium_from_titanium_block_stonecutting.json @@ -3,8 +3,6 @@ "ingredient": { "item": "antarchy:titanium_block" }, - "result": { - "count": 4, - "item": "antarchy:chiseled_titanium" - } + "result": "antarchy:chiseled_titanium", + "count": 4 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium.json index dec5c06f..3adc0c3e 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium.json @@ -11,7 +11,7 @@ "##" ], "result": { - "count": 4, - "item": "antarchy:cut_titanium" + "item": "antarchy:cut_titanium", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium_from_titanium_block_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium_from_titanium_block_stonecutting.json index 0877b716..9de02122 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium_from_titanium_block_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium_from_titanium_block_stonecutting.json @@ -3,8 +3,6 @@ "ingredient": { "item": "antarchy:titanium_block" }, - "result": { - "count": 4, - "item": "antarchy:cut_titanium" - } + "result": "antarchy:cut_titanium", + "count": 4 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium_slab.json index b793ec1d..5b7c937c 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium_slab.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium_slab.json @@ -10,7 +10,7 @@ "###" ], "result": { - "count": 6, - "item": "antarchy:cut_titanium_slab" + "item": "antarchy:cut_titanium_slab", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium_slab_from_cut_titanium_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium_slab_from_cut_titanium_stonecutting.json index 5b93f3e2..be25b935 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium_slab_from_cut_titanium_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium_slab_from_cut_titanium_stonecutting.json @@ -3,8 +3,6 @@ "ingredient": { "item": "antarchy:cut_titanium" }, - "result": { - "count": 2, - "item": "antarchy:cut_titanium_slab" - } + "result": "antarchy:cut_titanium_slab", + "count": 2 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium_slab_from_titanium_block_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium_slab_from_titanium_block_stonecutting.json index d42bfc35..1d5552b4 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium_slab_from_titanium_block_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium_slab_from_titanium_block_stonecutting.json @@ -3,8 +3,6 @@ "ingredient": { "item": "antarchy:titanium_block" }, - "result": { - "count": 8, - "item": "antarchy:cut_titanium_slab" - } + "result": "antarchy:cut_titanium_slab", + "count": 8 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium_stairs.json index f8fcc089..8c2f57ac 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium_stairs.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium_stairs.json @@ -12,7 +12,7 @@ "###" ], "result": { - "count": 4, - "item": "antarchy:cut_titanium_stairs" + "item": "antarchy:cut_titanium_stairs", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium_stairs_from_cut_titanium_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium_stairs_from_cut_titanium_stonecutting.json index fc530c89..778c33c4 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium_stairs_from_cut_titanium_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium_stairs_from_cut_titanium_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:cut_titanium" }, - "result": { - "item": "antarchy:cut_titanium_stairs" - } + "result": "antarchy:cut_titanium_stairs", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium_stairs_from_titanium_block_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium_stairs_from_titanium_block_stonecutting.json index cdc5f755..847cad03 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium_stairs_from_titanium_block_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium_stairs_from_titanium_block_stonecutting.json @@ -3,8 +3,6 @@ "ingredient": { "item": "antarchy:titanium_block" }, - "result": { - "count": 4, - "item": "antarchy:cut_titanium_stairs" - } + "result": "antarchy:cut_titanium_stairs", + "count": 4 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/raw_titanium_block.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/raw_titanium_block.json index 88cdda2d..cf5ff1c5 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/raw_titanium_block.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/raw_titanium_block.json @@ -12,7 +12,6 @@ } }, "result": { - "item": "antarchy:raw_titanium_block", - "count": 1 + "item": "antarchy:raw_titanium_block" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/raw_titanium_from_scrap.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/raw_titanium_from_scrap.json index b3a9f6e5..f0a07904 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/raw_titanium_from_scrap.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/raw_titanium_from_scrap.json @@ -12,7 +12,6 @@ } }, "result": { - "item": "antarchy:raw_titanium", - "count": 1 + "item": "antarchy:raw_titanium" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_bars.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_bars.json index 6def8cad..af2128f2 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_bars.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_bars.json @@ -10,7 +10,7 @@ "###" ], "result": { - "count": 16, - "item": "antarchy:titanium_bars" + "item": "antarchy:titanium_bars", + "count": 16 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_block.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_block.json index 2859a08d..73799af7 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_block.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_block.json @@ -12,7 +12,6 @@ } }, "result": { - "item": "antarchy:titanium_block", - "count": 1 + "item": "antarchy:titanium_block" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_bulb.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_bulb.json index 5d8cf951..76da93e5 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_bulb.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_bulb.json @@ -18,7 +18,7 @@ " R " ], "result": { - "count": 4, - "item": "antarchy:titanium_bulb" + "item": "antarchy:titanium_bulb", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_door.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_door.json index f3eeed50..0b3517c5 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_door.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_door.json @@ -12,7 +12,7 @@ "##" ], "result": { - "count": 3, - "item": "antarchy:titanium_door" + "item": "antarchy:titanium_door", + "count": 3 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_ingot_from_nuggets.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_ingot_from_nuggets.json index a3e2488c..75f401bd 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_ingot_from_nuggets.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_ingot_from_nuggets.json @@ -12,7 +12,6 @@ } }, "result": { - "item": "antarchy:titanium_ingot", - "count": 1 + "item": "antarchy:titanium_ingot" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_ingot_from_raw_titanium_blasting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_ingot_from_raw_titanium_blasting.json index 001627c2..965cb2d6 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_ingot_from_raw_titanium_blasting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_ingot_from_raw_titanium_blasting.json @@ -4,9 +4,7 @@ "ingredient": { "item": "antarchy:raw_titanium" }, - "result": { - "item": "antarchy:titanium_ingot" - }, + "result": "antarchy:titanium_ingot", "experience": 2.0, "cookingtime": 100 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_ingot_from_raw_titanium_smelting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_ingot_from_raw_titanium_smelting.json index 3fea4099..f4b09f82 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_ingot_from_raw_titanium_smelting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_ingot_from_raw_titanium_smelting.json @@ -4,9 +4,7 @@ "ingredient": { "item": "antarchy:raw_titanium" }, - "result": { - "item": "antarchy:titanium_ingot" - }, + "result": "antarchy:titanium_ingot", "experience": 2.0, "cookingtime": 200 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_nugget_from_raw_titanium_scrap_blasting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_nugget_from_raw_titanium_scrap_blasting.json index 3bd72866..4307ac32 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_nugget_from_raw_titanium_scrap_blasting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_nugget_from_raw_titanium_scrap_blasting.json @@ -4,9 +4,7 @@ "ingredient": { "item": "antarchy:raw_titanium_scrap" }, - "result": { - "item": "antarchy:titanium_nugget" - }, + "result": "antarchy:titanium_nugget", "experience": 2.0, "cookingtime": 100 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_nugget_from_raw_titanium_scrap_smelting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_nugget_from_raw_titanium_scrap_smelting.json index aabaa6ac..fcd6a0dc 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_nugget_from_raw_titanium_scrap_smelting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_nugget_from_raw_titanium_scrap_smelting.json @@ -4,9 +4,7 @@ "ingredient": { "item": "antarchy:raw_titanium_scrap" }, - "result": { - "item": "antarchy:titanium_nugget" - }, + "result": "antarchy:titanium_nugget", "experience": 2.0, "cookingtime": 200 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/triffid_goo_block.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/triffid_goo_block.json deleted file mode 100644 index 41272e15..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/triffid_goo_block.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "#": { - "item": "antarchy:triffid_goo" - } - }, - "pattern": [ - "###", - "###", - "###" - ], - "result": { - "item": "antarchy:triffid_goo_block" - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/black_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/black_truffalo_tuft.json new file mode 100644 index 00000000..239ab17d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/black_truffalo_tuft.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "group": "truffalo_tuft", + "ingredients": [ + { + "tag": "antarchy:truffalo_tuft" + }, + { + "item": "minecraft:black_dye" + } + ], + "result": { + "item": "antarchy:black_truffalo_tuft" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/blue_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/blue_truffalo_tuft.json new file mode 100644 index 00000000..20c85d0c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/blue_truffalo_tuft.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "group": "truffalo_tuft", + "ingredients": [ + { + "tag": "antarchy:truffalo_tuft" + }, + { + "item": "minecraft:blue_dye" + } + ], + "result": { + "item": "antarchy:blue_truffalo_tuft" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/brown_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/brown_truffalo_tuft.json new file mode 100644 index 00000000..ba2f61e9 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/brown_truffalo_tuft.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "group": "truffalo_tuft", + "ingredients": [ + { + "tag": "antarchy:truffalo_tuft" + }, + { + "item": "minecraft:brown_dye" + } + ], + "result": { + "item": "antarchy:brown_truffalo_tuft" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/cyan_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/cyan_truffalo_tuft.json new file mode 100644 index 00000000..eaa3c786 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/cyan_truffalo_tuft.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "group": "truffalo_tuft", + "ingredients": [ + { + "tag": "antarchy:truffalo_tuft" + }, + { + "item": "minecraft:cyan_dye" + } + ], + "result": { + "item": "antarchy:cyan_truffalo_tuft" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/gray_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/gray_truffalo_tuft.json new file mode 100644 index 00000000..6783edfe --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/gray_truffalo_tuft.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "group": "truffalo_tuft", + "ingredients": [ + { + "tag": "antarchy:truffalo_tuft" + }, + { + "item": "minecraft:gray_dye" + } + ], + "result": { + "item": "antarchy:gray_truffalo_tuft" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/green_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/green_truffalo_tuft.json new file mode 100644 index 00000000..58eb305f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/green_truffalo_tuft.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "group": "truffalo_tuft", + "ingredients": [ + { + "tag": "antarchy:truffalo_tuft" + }, + { + "item": "minecraft:green_dye" + } + ], + "result": { + "item": "antarchy:green_truffalo_tuft" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/light_blue_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/light_blue_truffalo_tuft.json new file mode 100644 index 00000000..76d74091 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/light_blue_truffalo_tuft.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "group": "truffalo_tuft", + "ingredients": [ + { + "tag": "antarchy:truffalo_tuft" + }, + { + "item": "minecraft:light_blue_dye" + } + ], + "result": { + "item": "antarchy:light_blue_truffalo_tuft" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/light_gray_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/light_gray_truffalo_tuft.json new file mode 100644 index 00000000..73c16418 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/light_gray_truffalo_tuft.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "group": "truffalo_tuft", + "ingredients": [ + { + "tag": "antarchy:truffalo_tuft" + }, + { + "item": "minecraft:light_gray_dye" + } + ], + "result": { + "item": "antarchy:light_gray_truffalo_tuft" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/lime_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/lime_truffalo_tuft.json new file mode 100644 index 00000000..c512f2c3 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/lime_truffalo_tuft.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "group": "truffalo_tuft", + "ingredients": [ + { + "tag": "antarchy:truffalo_tuft" + }, + { + "item": "minecraft:lime_dye" + } + ], + "result": { + "item": "antarchy:lime_truffalo_tuft" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/magenta_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/magenta_truffalo_tuft.json new file mode 100644 index 00000000..a231e990 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/magenta_truffalo_tuft.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "group": "truffalo_tuft", + "ingredients": [ + { + "tag": "antarchy:truffalo_tuft" + }, + { + "item": "minecraft:magenta_dye" + } + ], + "result": { + "item": "antarchy:magenta_truffalo_tuft" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/orange_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/orange_truffalo_tuft.json new file mode 100644 index 00000000..e1f76dd2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/orange_truffalo_tuft.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "group": "truffalo_tuft", + "ingredients": [ + { + "tag": "antarchy:truffalo_tuft" + }, + { + "item": "minecraft:orange_dye" + } + ], + "result": { + "item": "antarchy:orange_truffalo_tuft" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/pink_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/pink_truffalo_tuft.json new file mode 100644 index 00000000..964ec92a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/pink_truffalo_tuft.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "group": "truffalo_tuft", + "ingredients": [ + { + "tag": "antarchy:truffalo_tuft" + }, + { + "item": "minecraft:pink_dye" + } + ], + "result": { + "item": "antarchy:pink_truffalo_tuft" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/purple_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/purple_truffalo_tuft.json new file mode 100644 index 00000000..a23980b8 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/purple_truffalo_tuft.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "group": "truffalo_tuft", + "ingredients": [ + { + "tag": "antarchy:truffalo_tuft" + }, + { + "item": "minecraft:purple_dye" + } + ], + "result": { + "item": "antarchy:purple_truffalo_tuft" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/red_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/red_truffalo_tuft.json new file mode 100644 index 00000000..0a342df7 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/red_truffalo_tuft.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "group": "truffalo_tuft", + "ingredients": [ + { + "tag": "antarchy:truffalo_tuft" + }, + { + "item": "minecraft:red_dye" + } + ], + "result": { + "item": "antarchy:red_truffalo_tuft" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/stripped_truffalo_wood.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/stripped_truffalo_wood.json similarity index 78% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/stripped_truffalo_wood.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/stripped_truffalo_wood.json index bd90cb72..2f770426 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/stripped_truffalo_wood.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/stripped_truffalo_wood.json @@ -12,7 +12,7 @@ "##" ], "result": { - "count": 2, - "id": "antarchy:stripped_truffalo_wood" + "item": "antarchy:stripped_truffalo_wood", + "count": 2 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_boat.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_boat.json similarity index 79% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_boat.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_boat.json index d623529b..f7fbad28 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_boat.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_boat.json @@ -11,8 +11,6 @@ "###" ], "result": { - "count": 1, - "id": "antarchy:truffalo_boat" + "item": "antarchy:truffalo_boat" } } - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_button.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_button.json similarity index 78% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_button.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_button.json index 08245cee..f2fa4bc4 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_button.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_button.json @@ -8,7 +8,6 @@ } ], "result": { - "count": 1, - "id": "antarchy:truffalo_button" + "item": "antarchy:truffalo_button" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_chest_boat.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_chest_boat.json similarity index 78% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_chest_boat.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_chest_boat.json index 36953dae..1a805a4a 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_chest_boat.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_chest_boat.json @@ -10,8 +10,6 @@ } ], "result": { - "count": 1, - "id": "antarchy:truffalo_chest_boat" + "item": "antarchy:truffalo_chest_boat" } } - diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_door.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_door.json similarity index 81% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_door.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_door.json index 431ebfb8..19ca57d4 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_door.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_door.json @@ -13,7 +13,7 @@ "##" ], "result": { - "count": 3, - "id": "antarchy:truffalo_door" + "item": "antarchy:truffalo_door", + "count": 3 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_fence.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_fence.json similarity index 83% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_fence.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_fence.json index 6a6f4f07..cdd07ab2 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_fence.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_fence.json @@ -15,7 +15,7 @@ "W#W" ], "result": { - "count": 3, - "id": "antarchy:truffalo_fence" + "item": "antarchy:truffalo_fence", + "count": 3 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_fence_gate.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_fence_gate.json similarity index 83% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_fence_gate.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_fence_gate.json index f721e2d9..10af7e14 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_fence_gate.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_fence_gate.json @@ -15,7 +15,6 @@ "#W#" ], "result": { - "count": 1, - "id": "antarchy:truffalo_fence_gate" + "item": "antarchy:truffalo_fence_gate" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_hanging_sign.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_hanging_sign.json similarity index 82% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_hanging_sign.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_hanging_sign.json index 69f59086..1e7ab56b 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_hanging_sign.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_hanging_sign.json @@ -16,7 +16,7 @@ "###" ], "result": { - "count": 6, - "id": "antarchy:truffalo_hanging_sign" + "item": "antarchy:truffalo_hanging_sign", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_planks.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_planks.json similarity index 77% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_planks.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_planks.json index d967690e..79eea4aa 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_planks.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_planks.json @@ -8,7 +8,7 @@ } ], "result": { - "count": 2, - "id": "antarchy:truffalo_planks" + "item": "antarchy:truffalo_planks", + "count": 2 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_planks_from_stripped_truffalo_log.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_planks_from_stripped_truffalo_log.json similarity index 77% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_planks_from_stripped_truffalo_log.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_planks_from_stripped_truffalo_log.json index 89126f8b..fabc5d4d 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_planks_from_stripped_truffalo_log.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_planks_from_stripped_truffalo_log.json @@ -8,7 +8,7 @@ } ], "result": { - "count": 2, - "id": "antarchy:truffalo_planks" + "item": "antarchy:truffalo_planks", + "count": 2 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_planks_from_stripped_truffalo_wood.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_planks_from_stripped_truffalo_wood.json similarity index 78% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_planks_from_stripped_truffalo_wood.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_planks_from_stripped_truffalo_wood.json index c747de56..eedd2ef4 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_planks_from_stripped_truffalo_wood.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_planks_from_stripped_truffalo_wood.json @@ -8,7 +8,7 @@ } ], "result": { - "count": 4, - "id": "antarchy:truffalo_planks" + "item": "antarchy:truffalo_planks", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_planks_from_truffalo_wood.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_planks_from_truffalo_wood.json similarity index 77% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_planks_from_truffalo_wood.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_planks_from_truffalo_wood.json index 9ef58dff..a63cebe0 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_planks_from_truffalo_wood.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_planks_from_truffalo_wood.json @@ -8,7 +8,7 @@ } ], "result": { - "count": 4, - "id": "antarchy:truffalo_planks" + "item": "antarchy:truffalo_planks", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_pressure_plate.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_pressure_plate.json similarity index 78% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_pressure_plate.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_pressure_plate.json index 5ca36c21..c807418a 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_pressure_plate.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_pressure_plate.json @@ -11,7 +11,6 @@ "##" ], "result": { - "count": 1, - "id": "antarchy:truffalo_pressure_plate" + "item": "antarchy:truffalo_pressure_plate" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_sign.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_sign.json similarity index 84% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_sign.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_sign.json index 9922cee8..3caa8c98 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_sign.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_sign.json @@ -16,7 +16,7 @@ " X " ], "result": { - "count": 3, - "id": "antarchy:truffalo_sign" + "item": "antarchy:truffalo_sign", + "count": 3 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_slab.json similarity index 80% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_slab.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_slab.json index f6da964b..35cf1805 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_slab.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_slab.json @@ -11,7 +11,7 @@ "###" ], "result": { - "count": 6, - "id": "antarchy:truffalo_slab" + "item": "antarchy:truffalo_slab", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_stairs.json similarity index 81% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_stairs.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_stairs.json index 9c4a0650..f3ce0afb 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_stairs.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_stairs.json @@ -13,7 +13,7 @@ "###" ], "result": { - "count": 4, - "id": "antarchy:truffalo_stairs" + "item": "antarchy:truffalo_stairs", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_trapdoor.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_trapdoor.json similarity index 80% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_trapdoor.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_trapdoor.json index 2c8ae9e7..b3505cd3 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_trapdoor.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_trapdoor.json @@ -12,7 +12,7 @@ "###" ], "result": { - "count": 2, - "id": "antarchy:truffalo_trapdoor" + "item": "antarchy:truffalo_trapdoor", + "count": 2 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_wood.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_wood.json similarity index 80% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_wood.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_wood.json index e29c3d5c..8495b8a9 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_wood.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/truffalo_wood.json @@ -12,7 +12,7 @@ "##" ], "result": { - "count": 2, - "id": "antarchy:truffalo_wood" + "item": "antarchy:truffalo_wood", + "count": 2 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/white_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/white_truffalo_tuft.json new file mode 100644 index 00000000..b12f2a63 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/white_truffalo_tuft.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "group": "truffalo_tuft", + "ingredients": [ + { + "tag": "antarchy:truffalo_tuft" + }, + { + "item": "minecraft:white_dye" + } + ], + "result": { + "item": "antarchy:white_truffalo_tuft" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/yellow_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/yellow_truffalo_tuft.json new file mode 100644 index 00000000..eec292aa --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/truffalo/yellow_truffalo_tuft.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "group": "truffalo_tuft", + "ingredients": [ + { + "tag": "antarchy:truffalo_tuft" + }, + { + "item": "minecraft:yellow_dye" + } + ], + "result": { + "item": "antarchy:yellow_truffalo_tuft" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_brick_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_brick_slab.json similarity index 76% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_brick_slab.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_brick_slab.json index 16e31b5a..c52df46f 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_brick_slab.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_brick_slab.json @@ -10,7 +10,7 @@ "###" ], "result": { - "count": 6, - "id": "antarchy:typhonite_brick_slab" + "item": "antarchy:typhonite_brick_slab", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_brick_slab_from_typhonite_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_brick_slab_from_typhonite_bricks_stonecutting.json new file mode 100644 index 00000000..e6888206 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_brick_slab_from_typhonite_bricks_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:typhonite_bricks" + }, + "result": "antarchy:typhonite_brick_slab", + "count": 2 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_brick_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_brick_stairs.json similarity index 77% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_brick_stairs.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_brick_stairs.json index 455a67fa..b5f6c1e2 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_brick_stairs.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_brick_stairs.json @@ -12,7 +12,7 @@ "###" ], "result": { - "count": 4, - "id": "antarchy:typhonite_brick_stairs" + "item": "antarchy:typhonite_brick_stairs", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_brick_stairs_from_typhonite_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_brick_stairs_from_typhonite_bricks_stonecutting.json new file mode 100644 index 00000000..40aa629e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_brick_stairs_from_typhonite_bricks_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:typhonite_bricks" + }, + "result": "antarchy:typhonite_brick_stairs", + "count": 1 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_brick_wall.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_brick_wall.json similarity index 77% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_brick_wall.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_brick_wall.json index 18840b6b..21871915 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_brick_wall.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_brick_wall.json @@ -11,7 +11,7 @@ "###" ], "result": { - "count": 6, - "id": "antarchy:typhonite_brick_wall" + "item": "antarchy:typhonite_brick_wall", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_brick_wall_from_typhonite_bricks_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_brick_wall_from_typhonite_bricks_stonecutting.json new file mode 100644 index 00000000..5ba12249 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_brick_wall_from_typhonite_bricks_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:typhonite_bricks" + }, + "result": "antarchy:typhonite_brick_wall", + "count": 1 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_bricks.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_bricks.json new file mode 100644 index 00000000..beec0763 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_bricks.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:polished_typhonite" + } + }, + "pattern": [ + "##", + "##" + ], + "result": { + "item": "antarchy:typhonite_bricks", + "count": 4 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_bricks_from_polished_typhonite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_bricks_from_polished_typhonite_stonecutting.json new file mode 100644 index 00000000..f64be58c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_bricks_from_polished_typhonite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:polished_typhonite" + }, + "result": "antarchy:typhonite_bricks", + "count": 1 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_pillar.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_pillar.json similarity index 84% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_pillar.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_pillar.json index fd8f2b40..a6d343ea 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_pillar.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_pillar.json @@ -11,7 +11,7 @@ "#" ], "result": { - "id": "antarchy:typhonite_pillar", + "item": "antarchy:typhonite_pillar", "count": 2 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_pillar_from_typhonite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_pillar_from_typhonite_stonecutting.json new file mode 100644 index 00000000..6bf4961b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_pillar_from_typhonite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:typhonite" + }, + "result": "antarchy:typhonite_pillar", + "count": 1 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_slab.json similarity index 77% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_slab.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_slab.json index 2f8f91d7..0726bc76 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_slab.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_slab.json @@ -10,7 +10,7 @@ "###" ], "result": { - "count": 6, - "id": "antarchy:typhonite_slab" + "item": "antarchy:typhonite_slab", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_slab_from_typhonite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_slab_from_typhonite_stonecutting.json new file mode 100644 index 00000000..17e80055 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_slab_from_typhonite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:typhonite" + }, + "result": "antarchy:typhonite_slab", + "count": 2 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_stairs.json similarity index 78% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_stairs.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_stairs.json index a9f7eac8..b9f7be3b 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_stairs.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_stairs.json @@ -12,7 +12,7 @@ "###" ], "result": { - "count": 4, - "id": "antarchy:typhonite_stairs" + "item": "antarchy:typhonite_stairs", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_stairs_from_typhonite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_stairs_from_typhonite_stonecutting.json new file mode 100644 index 00000000..634c5b90 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_stairs_from_typhonite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:typhonite" + }, + "result": "antarchy:typhonite_stairs", + "count": 1 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_wall.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_wall.json similarity index 78% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_wall.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_wall.json index d2457e88..513ef44d 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/typhonite_wall.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_wall.json @@ -11,7 +11,7 @@ "###" ], "result": { - "count": 6, - "id": "antarchy:typhonite_wall" + "item": "antarchy:typhonite_wall", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_wall_from_typhonite_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_wall_from_typhonite_stonecutting.json new file mode 100644 index 00000000..c1a3527d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/typhonite_wall_from_typhonite_stonecutting.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:typhonite" + }, + "result": "antarchy:typhonite_wall", + "count": 1 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_axe.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_axe.json index f642b4b3..14ebea91 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_axe.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_axe.json @@ -18,7 +18,6 @@ } }, "result": { - "item": "antarchy:ultimate_axe", - "count": 1 + "item": "antarchy:ultimate_axe" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_boots.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_boots.json index 450c6cac..78c983de 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_boots.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_boots.json @@ -14,7 +14,6 @@ } }, "result": { - "item": "antarchy:ultimate_boots", - "count": 1 + "item": "antarchy:ultimate_boots" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_bow.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_bow.json index 463d2c86..c058a5b5 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_bow.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_bow.json @@ -18,7 +18,6 @@ } }, "result": { - "item": "antarchy:ultimate_bow", - "count": 1 + "item": "antarchy:ultimate_bow" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_chestplate.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_chestplate.json index d530c5ab..5b62efbb 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_chestplate.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_chestplate.json @@ -15,7 +15,6 @@ } }, "result": { - "item": "antarchy:ultimate_chestplate", - "count": 1 + "item": "antarchy:ultimate_chestplate" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_crossbow.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_crossbow.json index 018e1b42..673b73d3 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_crossbow.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_crossbow.json @@ -18,7 +18,6 @@ } }, "result": { - "item": "antarchy:ultimate_crossbow", - "count": 1 + "item": "antarchy:ultimate_crossbow" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_helmet.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_helmet.json index 61f95984..bda85b21 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_helmet.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_helmet.json @@ -14,7 +14,6 @@ } }, "result": { - "item": "antarchy:ultimate_helmet", - "count": 1 + "item": "antarchy:ultimate_helmet" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_hoe.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_hoe.json index 44f8b771..0ad520d4 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_hoe.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_hoe.json @@ -18,7 +18,6 @@ } }, "result": { - "item": "antarchy:ultimate_hoe", - "count": 1 + "item": "antarchy:ultimate_hoe" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_leggings.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_leggings.json index 6477818d..0889d790 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_leggings.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_leggings.json @@ -15,7 +15,6 @@ } }, "result": { - "item": "antarchy:ultimate_leggings", - "count": 1 + "item": "antarchy:ultimate_leggings" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_pickaxe.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_pickaxe.json index cc414b53..5f115715 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_pickaxe.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_pickaxe.json @@ -18,7 +18,6 @@ } }, "result": { - "item": "antarchy:ultimate_pickaxe", - "count": 1 + "item": "antarchy:ultimate_pickaxe" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_shovel.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_shovel.json index bcfb906b..5e4546f0 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_shovel.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_shovel.json @@ -18,7 +18,6 @@ } }, "result": { - "item": "antarchy:ultimate_shovel", - "count": 1 + "item": "antarchy:ultimate_shovel" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_sword.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_sword.json index aa518b6d..088f1425 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_sword.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_sword.json @@ -18,7 +18,6 @@ } }, "result": { - "item": "antarchy:ultimate_sword", - "count": 1 + "item": "antarchy:ultimate_sword" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/uranium_block.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/uranium_block.json index 366f1958..d96e8a68 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/uranium_block.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/uranium_block.json @@ -12,7 +12,6 @@ } }, "result": { - "item": "antarchy:uranium_block", - "count": 1 + "item": "antarchy:uranium_block" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/umbral_moss_carpet.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/umbral_moss_carpet.json index 7d13f04d..49ea67fc 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/umbral_moss_carpet.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/umbral_moss_carpet.json @@ -11,7 +11,7 @@ "#" ], "result": { - "count": 3, - "item": "antarchy:umbral_moss_carpet" + "item": "antarchy:umbral_moss_carpet", + "count": 3 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/upper.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/upper.json index 646a064a..b612adfe 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/upper.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/upper.json @@ -2,8 +2,12 @@ "type": "minecraft:crafting_shaped", "category": "redstone", "key": { - "I": { "item": "antarchy:polished_antimetal" }, - "C": { "item": "minecraft:chest" } + "I": { + "item": "antarchy:polished_antimetal" + }, + "C": { + "item": "minecraft:chest" + } }, "pattern": [ " I ", @@ -11,7 +15,6 @@ "I I" ], "result": { - "item": "antarchy:upper", - "count": 1 + "item": "antarchy:upper" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/chiseled_uranium_from_cut_uranium_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/chiseled_uranium_from_cut_uranium_stonecutting.json index e0950a21..0039ac38 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/chiseled_uranium_from_cut_uranium_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/chiseled_uranium_from_cut_uranium_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:cut_uranium" }, - "result": { - "item": "antarchy:chiseled_uranium" - } + "result": "antarchy:chiseled_uranium", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/chiseled_uranium_from_uranium_block_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/chiseled_uranium_from_uranium_block_stonecutting.json index 11db7ff2..84b2214f 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/chiseled_uranium_from_uranium_block_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/chiseled_uranium_from_uranium_block_stonecutting.json @@ -3,8 +3,6 @@ "ingredient": { "item": "antarchy:uranium_block" }, - "result": { - "count": 4, - "item": "antarchy:chiseled_uranium" - } + "result": "antarchy:chiseled_uranium", + "count": 4 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium.json index 7e2901db..3109c44d 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium.json @@ -11,7 +11,7 @@ "##" ], "result": { - "count": 4, - "item": "antarchy:cut_uranium" + "item": "antarchy:cut_uranium", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium_from_uranium_block_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium_from_uranium_block_stonecutting.json index 229817c2..14b9d6f7 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium_from_uranium_block_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium_from_uranium_block_stonecutting.json @@ -3,8 +3,6 @@ "ingredient": { "item": "antarchy:uranium_block" }, - "result": { - "count": 4, - "item": "antarchy:cut_uranium" - } + "result": "antarchy:cut_uranium", + "count": 4 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium_slab.json index f0780749..950d874f 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium_slab.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium_slab.json @@ -10,7 +10,7 @@ "###" ], "result": { - "count": 6, - "item": "antarchy:cut_uranium_slab" + "item": "antarchy:cut_uranium_slab", + "count": 6 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium_slab_from_cut_uranium_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium_slab_from_cut_uranium_stonecutting.json index cf8bd948..ae8fc477 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium_slab_from_cut_uranium_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium_slab_from_cut_uranium_stonecutting.json @@ -3,8 +3,6 @@ "ingredient": { "item": "antarchy:cut_uranium" }, - "result": { - "count": 2, - "item": "antarchy:cut_uranium_slab" - } + "result": "antarchy:cut_uranium_slab", + "count": 2 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium_slab_from_uranium_block_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium_slab_from_uranium_block_stonecutting.json index 1ba4c788..7be50193 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium_slab_from_uranium_block_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium_slab_from_uranium_block_stonecutting.json @@ -3,8 +3,6 @@ "ingredient": { "item": "antarchy:uranium_block" }, - "result": { - "count": 8, - "item": "antarchy:cut_uranium_slab" - } + "result": "antarchy:cut_uranium_slab", + "count": 8 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium_stairs.json index 307b2fdd..918e2de3 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium_stairs.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium_stairs.json @@ -12,7 +12,7 @@ "###" ], "result": { - "count": 4, - "item": "antarchy:cut_uranium_stairs" + "item": "antarchy:cut_uranium_stairs", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium_stairs_from_cut_uranium_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium_stairs_from_cut_uranium_stonecutting.json index 37aa88c9..9c6e4b89 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium_stairs_from_cut_uranium_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium_stairs_from_cut_uranium_stonecutting.json @@ -3,7 +3,6 @@ "ingredient": { "item": "antarchy:cut_uranium" }, - "result": { - "item": "antarchy:cut_uranium_stairs" - } + "result": "antarchy:cut_uranium_stairs", + "count": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium_stairs_from_uranium_block_stonecutting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium_stairs_from_uranium_block_stonecutting.json index 2992314c..38e3e486 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium_stairs_from_uranium_block_stonecutting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium_stairs_from_uranium_block_stonecutting.json @@ -3,8 +3,6 @@ "ingredient": { "item": "antarchy:uranium_block" }, - "result": { - "count": 4, - "item": "antarchy:cut_uranium_stairs" - } + "result": "antarchy:cut_uranium_stairs", + "count": 4 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/raw_uranium_block.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/raw_uranium_block.json index 85179d2b..c746bf21 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/raw_uranium_block.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/raw_uranium_block.json @@ -12,7 +12,6 @@ } }, "result": { - "item": "antarchy:raw_uranium_block", - "count": 1 + "item": "antarchy:raw_uranium_block" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/raw_uranium_from_scrap.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/raw_uranium_from_scrap.json index b1513e29..a99e9332 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/raw_uranium_from_scrap.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/raw_uranium_from_scrap.json @@ -12,7 +12,6 @@ } }, "result": { - "item": "antarchy:raw_uranium", - "count": 1 + "item": "antarchy:raw_uranium" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_bars.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_bars.json index a555c96c..4450296a 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_bars.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_bars.json @@ -10,7 +10,7 @@ "###" ], "result": { - "count": 16, - "item": "antarchy:uranium_bars" + "item": "antarchy:uranium_bars", + "count": 16 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_bulb.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_bulb.json index 687e9f4c..b7dc5ee7 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_bulb.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_bulb.json @@ -18,7 +18,7 @@ " R " ], "result": { - "count": 4, - "item": "antarchy:uranium_bulb" + "item": "antarchy:uranium_bulb", + "count": 4 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_door.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_door.json index 78ae7ad1..745fb787 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_door.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_door.json @@ -12,7 +12,7 @@ "##" ], "result": { - "count": 3, - "item": "antarchy:uranium_door" + "item": "antarchy:uranium_door", + "count": 3 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_ingot_from_nuggets.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_ingot_from_nuggets.json index 44ba418e..f3c11ba7 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_ingot_from_nuggets.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_ingot_from_nuggets.json @@ -12,7 +12,6 @@ } }, "result": { - "item": "antarchy:uranium_ingot", - "count": 1 + "item": "antarchy:uranium_ingot" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_ingot_from_raw_uranium_blasting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_ingot_from_raw_uranium_blasting.json index 26289231..abb8cde5 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_ingot_from_raw_uranium_blasting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_ingot_from_raw_uranium_blasting.json @@ -4,9 +4,7 @@ "ingredient": { "item": "antarchy:raw_uranium" }, - "result": { - "item": "antarchy:uranium_ingot" - }, + "result": "antarchy:uranium_ingot", "experience": 2.0, "cookingtime": 100 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_ingot_from_raw_uranium_smelting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_ingot_from_raw_uranium_smelting.json index c4983363..62e164ad 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_ingot_from_raw_uranium_smelting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_ingot_from_raw_uranium_smelting.json @@ -4,9 +4,7 @@ "ingredient": { "item": "antarchy:raw_uranium" }, - "result": { - "item": "antarchy:uranium_ingot" - }, + "result": "antarchy:uranium_ingot", "experience": 2.0, "cookingtime": 200 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_nugget_from_raw_uranium_scrap_blasting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_nugget_from_raw_uranium_scrap_blasting.json index a6d7fc52..01f329ef 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_nugget_from_raw_uranium_scrap_blasting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_nugget_from_raw_uranium_scrap_blasting.json @@ -4,9 +4,7 @@ "ingredient": { "item": "antarchy:raw_uranium_scrap" }, - "result": { - "item": "antarchy:uranium_nugget" - }, + "result": "antarchy:uranium_nugget", "experience": 2.0, "cookingtime": 100 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_nugget_from_raw_uranium_scrap_smelting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_nugget_from_raw_uranium_scrap_smelting.json index 6694387e..bbd5e481 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_nugget_from_raw_uranium_scrap_smelting.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_nugget_from_raw_uranium_scrap_smelting.json @@ -4,9 +4,7 @@ "ingredient": { "item": "antarchy:raw_uranium_scrap" }, - "result": { - "item": "antarchy:uranium_nugget" - }, + "result": "antarchy:uranium_nugget", "experience": 2.0, "cookingtime": 200 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/vortex_lens.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/vortex_lens.json similarity index 88% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/vortex_lens.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/vortex_lens.json index dcc8bd5f..3c974491 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/vortex_lens.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/vortex_lens.json @@ -21,7 +21,6 @@ } }, "result": { - "id": "antarchy:vortex_lens", - "count": 1 + "item": "antarchy:vortex_lens" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/white_banner_from_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/white_banner_from_truffalo_tuft.json similarity index 87% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/white_banner_from_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/white_banner_from_truffalo_tuft.json index 63aa0d04..0df0befa 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/white_banner_from_truffalo_tuft.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/white_banner_from_truffalo_tuft.json @@ -15,6 +15,6 @@ } }, "result": { - "id": "minecraft:white_banner" + "item": "minecraft:white_banner" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/white_bed_from_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/white_bed_from_truffalo_tuft.json similarity index 88% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/white_bed_from_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/white_bed_from_truffalo_tuft.json index 2fbd1d4c..10833cae 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/white_bed_from_truffalo_tuft.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/white_bed_from_truffalo_tuft.json @@ -14,6 +14,6 @@ } }, "result": { - "id": "minecraft:white_bed" + "item": "minecraft:white_bed" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/worm_hook.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/worm_hook.json similarity index 83% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/worm_hook.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/worm_hook.json index 37814015..28988513 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/worm_hook.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/worm_hook.json @@ -14,7 +14,6 @@ } }, "result": { - "id": "antarchy:worm_hook", - "count": 1 + "item": "antarchy:worm_hook" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/yellow_banner_from_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/yellow_banner_from_truffalo_tuft.json similarity index 87% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/yellow_banner_from_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/yellow_banner_from_truffalo_tuft.json index d312ab66..91e7b46e 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/yellow_banner_from_truffalo_tuft.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/yellow_banner_from_truffalo_tuft.json @@ -15,6 +15,6 @@ } }, "result": { - "id": "minecraft:yellow_banner" + "item": "minecraft:yellow_banner" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/yellow_bed_from_truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/yellow_bed_from_truffalo_tuft.json similarity index 88% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/yellow_bed_from_truffalo_tuft.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/yellow_bed_from_truffalo_tuft.json index 6a8783ce..55e72459 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/yellow_bed_from_truffalo_tuft.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/yellow_bed_from_truffalo_tuft.json @@ -14,6 +14,6 @@ } }, "result": { - "id": "minecraft:yellow_bed" + "item": "minecraft:yellow_bed" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/basilisk_lair/basilisk_lair.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/basilisk_lair/basilisk_lair.nbt deleted file mode 100644 index b0c247a3..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/basilisk_lair/basilisk_lair.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/fallen_kingdom_castle/fallen_kingdom_castle1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/fallen_kingdom_castle/fallen_kingdom_castle1.nbt deleted file mode 100644 index 1670c567..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/fallen_kingdom_castle/fallen_kingdom_castle1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/fallen_kingdom_castle/fallen_kingdom_castle2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/fallen_kingdom_castle/fallen_kingdom_castle2.nbt deleted file mode 100644 index 868098a9..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/fallen_kingdom_castle/fallen_kingdom_castle2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/fallen_kingdom_castle/fallen_kingdom_castle3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/fallen_kingdom_castle/fallen_kingdom_castle3.nbt deleted file mode 100644 index b40629ac..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/fallen_kingdom_castle/fallen_kingdom_castle3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree/kings_tree1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree/kings_tree1.nbt deleted file mode 100644 index 0428fd2c..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree/kings_tree1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree/kings_tree2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree/kings_tree2.nbt deleted file mode 100644 index d1083259..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree/kings_tree2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree/kings_tree3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree/kings_tree3.nbt deleted file mode 100644 index 3de2728b..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree/kings_tree3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree/kings_tree4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree/kings_tree4.nbt deleted file mode 100644 index 6eb3f458..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree/kings_tree4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree/kings_tree_bottom.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree/kings_tree_bottom.nbt deleted file mode 100644 index d8ef4332..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree/kings_tree_bottom.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m10_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m10_m1.nbt deleted file mode 100644 index a8b9fc2d..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m10_m1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m10_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m10_m2.nbt deleted file mode 100644 index 7fdcf804..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m10_m2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m10_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m10_m3.nbt deleted file mode 100644 index 8f78e875..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m10_m3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m10_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m10_m4.nbt deleted file mode 100644 index be838b89..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m10_m4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m10_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m10_m5.nbt deleted file mode 100644 index d6270df3..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m10_m5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m10_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m10_p0.nbt deleted file mode 100644 index f6f16685..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m10_p0.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m10_p1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m10_p1.nbt deleted file mode 100644 index 73c32e69..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m10_p1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m10_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m10_p14.nbt deleted file mode 100644 index 640bcc35..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m10_p14.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m11_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m11_m2.nbt deleted file mode 100644 index 0e57eb8e..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m11_m2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m11_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m11_m3.nbt deleted file mode 100644 index 738686db..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m11_m3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m11_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m11_m4.nbt deleted file mode 100644 index 72a55ef0..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m11_m4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m11_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m11_p14.nbt deleted file mode 100644 index 640bcc35..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m11_p14.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m12_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m12_m2.nbt deleted file mode 100644 index 9b150b18..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m12_m2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m12_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m12_m3.nbt deleted file mode 100644 index 3dd1a084..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m12_m3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m12_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m12_p14.nbt deleted file mode 100644 index 2ef1bb7a..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m12_p14.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m1.nbt deleted file mode 100644 index 4c825d04..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m10.nbt deleted file mode 100644 index 05921807..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m10.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m11.nbt deleted file mode 100644 index aadcab8a..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m11.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m12.nbt deleted file mode 100644 index d2d80f7f..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m12.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m13.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m13.nbt deleted file mode 100644 index 61887500..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m13.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m14.nbt deleted file mode 100644 index 59b21a1f..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m14.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m2.nbt deleted file mode 100644 index 9cd896cd..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m3.nbt deleted file mode 100644 index 8bce10b2..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m4.nbt deleted file mode 100644 index af97de2d..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m5.nbt deleted file mode 100644 index f0a75732..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m6.nbt deleted file mode 100644 index 83e7a294..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m6.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m7.nbt deleted file mode 100644 index 82da7f0c..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m7.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m8.nbt deleted file mode 100644 index a5cc093d..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m8.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m9.nbt deleted file mode 100644 index 99cd7d0c..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_m9.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_p0.nbt deleted file mode 100644 index 30f56d22..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_p0.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_p1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_p1.nbt deleted file mode 100644 index 1814a9e2..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_p1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_p10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_p10.nbt deleted file mode 100644 index a482993d..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_p10.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_p11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_p11.nbt deleted file mode 100644 index 783244e7..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_p11.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_p14.nbt deleted file mode 100644 index 640bcc35..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_p14.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_p2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_p2.nbt deleted file mode 100644 index 5c1a6ebd..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_p2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_p3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_p3.nbt deleted file mode 100644 index e7f298d5..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_p3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_p4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_p4.nbt deleted file mode 100644 index dd00785d..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_p4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_p5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_p5.nbt deleted file mode 100644 index 76c498e7..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_p5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_p6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_p6.nbt deleted file mode 100644 index 7e21bca0..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_p6.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_p7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_p7.nbt deleted file mode 100644 index 04fed1d1..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_p7.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_p8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_p8.nbt deleted file mode 100644 index f30a50ef..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_p8.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_p9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_p9.nbt deleted file mode 100644 index d54b22c1..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m1_p9.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_m1.nbt deleted file mode 100644 index 8d2c933a..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_m1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_m10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_m10.nbt deleted file mode 100644 index 4b144acd..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_m10.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_m11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_m11.nbt deleted file mode 100644 index 81a19917..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_m11.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_m12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_m12.nbt deleted file mode 100644 index 58597c85..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_m12.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_m13.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_m13.nbt deleted file mode 100644 index 2b05bceb..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_m13.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_m2.nbt deleted file mode 100644 index 4cd16d1f..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_m2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_m3.nbt deleted file mode 100644 index aa83392b..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_m3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_m4.nbt deleted file mode 100644 index e0853aba..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_m4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_m5.nbt deleted file mode 100644 index d3dbb78a..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_m5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_m6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_m6.nbt deleted file mode 100644 index 72be1008..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_m6.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_m7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_m7.nbt deleted file mode 100644 index 1e9def73..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_m7.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_m8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_m8.nbt deleted file mode 100644 index 90c6783d..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_m8.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_m9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_m9.nbt deleted file mode 100644 index 937b8d04..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_m9.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_p0.nbt deleted file mode 100644 index 989f85c8..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_p0.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_p1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_p1.nbt deleted file mode 100644 index 6cbeb913..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_p1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_p10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_p10.nbt deleted file mode 100644 index 91331990..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_p10.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_p11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_p11.nbt deleted file mode 100644 index e0632b03..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_p11.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_p14.nbt deleted file mode 100644 index 640bcc35..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_p14.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_p2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_p2.nbt deleted file mode 100644 index 9303cdc9..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_p2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_p3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_p3.nbt deleted file mode 100644 index 544b0a00..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_p3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_p4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_p4.nbt deleted file mode 100644 index d60da68a..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_p4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_p5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_p5.nbt deleted file mode 100644 index f7b72a68..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_p5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_p6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_p6.nbt deleted file mode 100644 index 1f139e4d..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_p6.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_p7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_p7.nbt deleted file mode 100644 index e0cd1ab8..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_p7.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_p8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_p8.nbt deleted file mode 100644 index bb59af25..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_p8.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_p9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_p9.nbt deleted file mode 100644 index 7f2a8684..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m2_p9.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_m1.nbt deleted file mode 100644 index c81bfc9f..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_m1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_m10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_m10.nbt deleted file mode 100644 index 5b810c3e..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_m10.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_m11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_m11.nbt deleted file mode 100644 index e694b78c..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_m11.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_m12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_m12.nbt deleted file mode 100644 index 2accb997..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_m12.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_m13.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_m13.nbt deleted file mode 100644 index 4a36c549..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_m13.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_m2.nbt deleted file mode 100644 index a86e6f5e..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_m2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_m3.nbt deleted file mode 100644 index e1e840c8..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_m3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_m4.nbt deleted file mode 100644 index 2f2caddc..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_m4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_m5.nbt deleted file mode 100644 index a183604e..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_m5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_m6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_m6.nbt deleted file mode 100644 index 350ee217..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_m6.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_m7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_m7.nbt deleted file mode 100644 index ea129e59..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_m7.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_m8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_m8.nbt deleted file mode 100644 index d6b8b717..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_m8.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_m9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_m9.nbt deleted file mode 100644 index 35ddf28a..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_m9.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p0.nbt deleted file mode 100644 index 04348da6..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p0.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p1.nbt deleted file mode 100644 index caa16db0..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p10.nbt deleted file mode 100644 index 1fef5e67..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p10.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p11.nbt deleted file mode 100644 index 90579b17..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p11.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p12.nbt deleted file mode 100644 index 15a3c9d9..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p12.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p14.nbt deleted file mode 100644 index 640bcc35..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p14.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p2.nbt deleted file mode 100644 index 730e80da..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p3.nbt deleted file mode 100644 index cc642193..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p4.nbt deleted file mode 100644 index 2307e392..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p5.nbt deleted file mode 100644 index 577a895a..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p6.nbt deleted file mode 100644 index bb1e2df9..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p6.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p7.nbt deleted file mode 100644 index 0c9e4f43..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p7.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p8.nbt deleted file mode 100644 index c7647352..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p8.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p9.nbt deleted file mode 100644 index 1fa2ffa2..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m3_p9.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_m1.nbt deleted file mode 100644 index 8086403c..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_m1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_m10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_m10.nbt deleted file mode 100644 index 321a76c2..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_m10.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_m11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_m11.nbt deleted file mode 100644 index 66b4396c..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_m11.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_m12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_m12.nbt deleted file mode 100644 index 361d2055..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_m12.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_m13.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_m13.nbt deleted file mode 100644 index db6aaec5..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_m13.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_m2.nbt deleted file mode 100644 index a23ea5a0..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_m2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_m3.nbt deleted file mode 100644 index c6ee76fd..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_m3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_m4.nbt deleted file mode 100644 index d1d27cc5..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_m4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_m5.nbt deleted file mode 100644 index 30d22aa3..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_m5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_m6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_m6.nbt deleted file mode 100644 index 0ccb4a1a..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_m6.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_m7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_m7.nbt deleted file mode 100644 index acdad21a..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_m7.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_m8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_m8.nbt deleted file mode 100644 index d6728149..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_m8.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_m9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_m9.nbt deleted file mode 100644 index 1248ee35..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_m9.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p0.nbt deleted file mode 100644 index c98f06ec..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p0.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p1.nbt deleted file mode 100644 index 34b8ff85..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p10.nbt deleted file mode 100644 index a543de10..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p10.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p11.nbt deleted file mode 100644 index 4e66ed0b..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p11.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p12.nbt deleted file mode 100644 index bf164301..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p12.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p14.nbt deleted file mode 100644 index 640bcc35..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p14.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p2.nbt deleted file mode 100644 index c6630e73..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p3.nbt deleted file mode 100644 index 7cc906e6..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p4.nbt deleted file mode 100644 index 79e3a876..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p5.nbt deleted file mode 100644 index 82fbcb7e..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p6.nbt deleted file mode 100644 index fef72688..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p6.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p7.nbt deleted file mode 100644 index f2f9f691..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p7.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p8.nbt deleted file mode 100644 index 9532565c..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p8.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p9.nbt deleted file mode 100644 index 94a31d26..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m4_p9.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_m1.nbt deleted file mode 100644 index 9d5d3d53..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_m1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_m10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_m10.nbt deleted file mode 100644 index 41d5ee33..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_m10.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_m11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_m11.nbt deleted file mode 100644 index 077b2710..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_m11.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_m12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_m12.nbt deleted file mode 100644 index d90fbf84..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_m12.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_m13.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_m13.nbt deleted file mode 100644 index 875de447..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_m13.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_m2.nbt deleted file mode 100644 index 08866ac1..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_m2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_m3.nbt deleted file mode 100644 index 19cd78c1..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_m3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_m4.nbt deleted file mode 100644 index 448a281d..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_m4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_m5.nbt deleted file mode 100644 index 27882086..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_m5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_m6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_m6.nbt deleted file mode 100644 index 31b5c69e..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_m6.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_m7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_m7.nbt deleted file mode 100644 index 692b6ad8..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_m7.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_m8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_m8.nbt deleted file mode 100644 index efb0b3b6..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_m8.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_m9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_m9.nbt deleted file mode 100644 index d0aab4c5..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_m9.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_p0.nbt deleted file mode 100644 index 5b9a333e..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_p0.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_p1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_p1.nbt deleted file mode 100644 index c0da43b4..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_p1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_p10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_p10.nbt deleted file mode 100644 index f74857ab..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_p10.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_p11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_p11.nbt deleted file mode 100644 index cab9e0f5..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_p11.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_p14.nbt deleted file mode 100644 index 640bcc35..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_p14.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_p2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_p2.nbt deleted file mode 100644 index 53392088..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_p2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_p3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_p3.nbt deleted file mode 100644 index 320abd66..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_p3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_p4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_p4.nbt deleted file mode 100644 index 653fd149..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_p4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_p5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_p5.nbt deleted file mode 100644 index 4fc85ed9..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_p5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_p6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_p6.nbt deleted file mode 100644 index 0212420a..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_p6.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_p7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_p7.nbt deleted file mode 100644 index 5a3dd9bc..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_p7.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_p8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_p8.nbt deleted file mode 100644 index e0c8267d..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_p8.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_p9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_p9.nbt deleted file mode 100644 index 72943351..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m5_p9.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_m1.nbt deleted file mode 100644 index 5f92da5b..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_m1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_m10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_m10.nbt deleted file mode 100644 index 115a0ed4..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_m10.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_m11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_m11.nbt deleted file mode 100644 index b816c66a..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_m11.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_m12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_m12.nbt deleted file mode 100644 index 8da549cc..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_m12.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_m2.nbt deleted file mode 100644 index 3d9265fd..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_m2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_m3.nbt deleted file mode 100644 index c1c79e99..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_m3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_m4.nbt deleted file mode 100644 index b30fbfa0..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_m4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_m5.nbt deleted file mode 100644 index 755fec02..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_m5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_m6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_m6.nbt deleted file mode 100644 index 8eed1fb2..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_m6.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_m7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_m7.nbt deleted file mode 100644 index e3f1f85d..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_m7.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_m8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_m8.nbt deleted file mode 100644 index 900848f6..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_m8.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_m9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_m9.nbt deleted file mode 100644 index 024381a1..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_m9.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_p0.nbt deleted file mode 100644 index 522d6b2a..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_p0.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_p1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_p1.nbt deleted file mode 100644 index 36b1410b..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_p1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_p10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_p10.nbt deleted file mode 100644 index 8b115024..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_p10.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_p11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_p11.nbt deleted file mode 100644 index 4ec19990..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_p11.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_p14.nbt deleted file mode 100644 index 640bcc35..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_p14.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_p2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_p2.nbt deleted file mode 100644 index a86969f5..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_p2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_p3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_p3.nbt deleted file mode 100644 index d3a4ccab..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_p3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_p4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_p4.nbt deleted file mode 100644 index af3b4160..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_p4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_p5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_p5.nbt deleted file mode 100644 index c0dc01cc..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_p5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_p6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_p6.nbt deleted file mode 100644 index b85c3bb2..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_p6.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_p7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_p7.nbt deleted file mode 100644 index 7f45119d..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_p7.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_p8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_p8.nbt deleted file mode 100644 index 460b09ca..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_p8.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_p9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_p9.nbt deleted file mode 100644 index 35182d31..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m6_p9.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_m1.nbt deleted file mode 100644 index ad57d66a..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_m1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_m10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_m10.nbt deleted file mode 100644 index 3e546770..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_m10.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_m11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_m11.nbt deleted file mode 100644 index 03de2473..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_m11.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_m12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_m12.nbt deleted file mode 100644 index 050c90ff..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_m12.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_m2.nbt deleted file mode 100644 index 3db90175..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_m2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_m3.nbt deleted file mode 100644 index 1262db96..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_m3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_m4.nbt deleted file mode 100644 index b8c4f6dc..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_m4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_m5.nbt deleted file mode 100644 index 3cf16abb..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_m5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_m6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_m6.nbt deleted file mode 100644 index 87ca97b9..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_m6.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_m7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_m7.nbt deleted file mode 100644 index f218c5f4..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_m7.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_m8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_m8.nbt deleted file mode 100644 index 24b229a7..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_m8.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_m9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_m9.nbt deleted file mode 100644 index fb062037..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_m9.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_p0.nbt deleted file mode 100644 index 2dab9e8f..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_p0.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_p1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_p1.nbt deleted file mode 100644 index 85b9d6f7..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_p1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_p10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_p10.nbt deleted file mode 100644 index 5d89f84c..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_p10.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_p11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_p11.nbt deleted file mode 100644 index d85a5aab..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_p11.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_p14.nbt deleted file mode 100644 index 640bcc35..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_p14.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_p2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_p2.nbt deleted file mode 100644 index 2d41fc5f..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_p2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_p3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_p3.nbt deleted file mode 100644 index d408edb0..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_p3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_p4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_p4.nbt deleted file mode 100644 index 415b629a..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_p4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_p5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_p5.nbt deleted file mode 100644 index 9895e3ae..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_p5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_p6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_p6.nbt deleted file mode 100644 index 14337856..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_p6.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_p7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_p7.nbt deleted file mode 100644 index 389bac01..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_p7.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_p8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_p8.nbt deleted file mode 100644 index cbc3a06c..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_p8.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_p9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_p9.nbt deleted file mode 100644 index e775a115..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m7_p9.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_m1.nbt deleted file mode 100644 index 9b2ab7a0..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_m1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_m10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_m10.nbt deleted file mode 100644 index 94a507ae..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_m10.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_m11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_m11.nbt deleted file mode 100644 index dd7363d0..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_m11.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_m2.nbt deleted file mode 100644 index c9bcb9f8..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_m2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_m3.nbt deleted file mode 100644 index 71e67918..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_m3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_m4.nbt deleted file mode 100644 index ad084f41..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_m4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_m5.nbt deleted file mode 100644 index 755b1bc8..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_m5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_m6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_m6.nbt deleted file mode 100644 index a0400c29..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_m6.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_m7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_m7.nbt deleted file mode 100644 index f3d41d77..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_m7.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_m8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_m8.nbt deleted file mode 100644 index fde60ed5..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_m8.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_m9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_m9.nbt deleted file mode 100644 index 681febdf..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_m9.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_p0.nbt deleted file mode 100644 index a784d036..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_p0.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_p1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_p1.nbt deleted file mode 100644 index edef91f2..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_p1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_p10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_p10.nbt deleted file mode 100644 index 23334ce2..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_p10.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_p11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_p11.nbt deleted file mode 100644 index 02c4db07..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_p11.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_p14.nbt deleted file mode 100644 index 640bcc35..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_p14.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_p2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_p2.nbt deleted file mode 100644 index 7754f29f..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_p2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_p3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_p3.nbt deleted file mode 100644 index 1d6e3144..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_p3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_p4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_p4.nbt deleted file mode 100644 index b1220eb1..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_p4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_p5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_p5.nbt deleted file mode 100644 index 968ee63e..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_p5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_p6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_p6.nbt deleted file mode 100644 index 455606f9..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_p6.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_p7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_p7.nbt deleted file mode 100644 index 51880fa4..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_p7.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_p8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_p8.nbt deleted file mode 100644 index b13da1e5..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_p8.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_p9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_p9.nbt deleted file mode 100644 index 2f72c022..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m8_p9.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_m1.nbt deleted file mode 100644 index f5f98380..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_m1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_m10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_m10.nbt deleted file mode 100644 index b985e94f..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_m10.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_m11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_m11.nbt deleted file mode 100644 index 8e160c15..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_m11.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_m2.nbt deleted file mode 100644 index e6f6d132..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_m2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_m3.nbt deleted file mode 100644 index 7e718ad2..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_m3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_m4.nbt deleted file mode 100644 index 8d8dcde5..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_m4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_m5.nbt deleted file mode 100644 index 363a6421..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_m5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_m6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_m6.nbt deleted file mode 100644 index 17bcb944..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_m6.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_m7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_m7.nbt deleted file mode 100644 index d1244bbf..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_m7.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_m8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_m8.nbt deleted file mode 100644 index 285e9cb8..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_m8.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_m9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_m9.nbt deleted file mode 100644 index 891fb8f1..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_m9.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_p0.nbt deleted file mode 100644 index 26c4c166..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_p0.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_p1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_p1.nbt deleted file mode 100644 index acb6e9ba..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_p1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_p10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_p10.nbt deleted file mode 100644 index 56603812..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_p10.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_p11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_p11.nbt deleted file mode 100644 index 814108f4..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_p11.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_p14.nbt deleted file mode 100644 index 640bcc35..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_p14.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_p2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_p2.nbt deleted file mode 100644 index 738ca0fb..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_p2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_p3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_p3.nbt deleted file mode 100644 index 28bc6367..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_p3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_p4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_p4.nbt deleted file mode 100644 index 4910857b..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_p4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_p5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_p5.nbt deleted file mode 100644 index a47e4ce7..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_p5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_p6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_p6.nbt deleted file mode 100644 index 1d61daa1..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_p6.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_p7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_p7.nbt deleted file mode 100644 index 6818276d..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_p7.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_p8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_p8.nbt deleted file mode 100644 index 4f85ba1e..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_p8.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_p9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_p9.nbt deleted file mode 100644 index bcd5fd70..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/m9_p9.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m1.nbt deleted file mode 100644 index e5998509..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m10.nbt deleted file mode 100644 index 18455c1d..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m10.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m11.nbt deleted file mode 100644 index 1b3efc1c..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m11.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m12.nbt deleted file mode 100644 index 52c9e9dc..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m12.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m13.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m13.nbt deleted file mode 100644 index 68c97a90..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m13.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m14.nbt deleted file mode 100644 index 07fe3808..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m14.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m2.nbt deleted file mode 100644 index b81bb055..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m3.nbt deleted file mode 100644 index c239a924..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m4.nbt deleted file mode 100644 index 1a74c893..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m5.nbt deleted file mode 100644 index 93d4529c..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m6.nbt deleted file mode 100644 index ef4f163b..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m6.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m7.nbt deleted file mode 100644 index c75be083..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m7.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m8.nbt deleted file mode 100644 index 1049620b..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m8.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m9.nbt deleted file mode 100644 index 433d5ed5..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_m9.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p0.nbt deleted file mode 100644 index 7460d207..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p0.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p1.nbt deleted file mode 100644 index d88338cd..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p10.nbt deleted file mode 100644 index 3c736091..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p10.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p11.nbt deleted file mode 100644 index 332abfaa..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p11.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p12.nbt deleted file mode 100644 index 07db7f83..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p12.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p14.nbt deleted file mode 100644 index 640bcc35..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p14.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p2.nbt deleted file mode 100644 index 8aeab647..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p3.nbt deleted file mode 100644 index cd6a9323..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p4.nbt deleted file mode 100644 index 51af32db..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p5.nbt deleted file mode 100644 index 61f6d7c1..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p6.nbt deleted file mode 100644 index 268bd3fb..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p6.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p7.nbt deleted file mode 100644 index 9203d748..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p7.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p8.nbt deleted file mode 100644 index 9077f920..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p8.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p9.nbt deleted file mode 100644 index 29cb5464..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p0_p9.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p10_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p10_m1.nbt deleted file mode 100644 index 8080a9f1..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p10_m1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p10_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p10_m2.nbt deleted file mode 100644 index 79ec26b3..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p10_m2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p10_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p10_m3.nbt deleted file mode 100644 index 20763ea7..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p10_m3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p10_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p10_m4.nbt deleted file mode 100644 index 640a632d..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p10_m4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p10_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p10_m5.nbt deleted file mode 100644 index 7aa56436..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p10_m5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p10_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p10_p0.nbt deleted file mode 100644 index bed992d1..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p10_p0.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p11_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p11_m1.nbt deleted file mode 100644 index 41df6d90..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p11_m1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_m1.nbt deleted file mode 100644 index 6bfe9340..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_m1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_m10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_m10.nbt deleted file mode 100644 index 404feadb..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_m10.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_m11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_m11.nbt deleted file mode 100644 index 5445e78a..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_m11.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_m12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_m12.nbt deleted file mode 100644 index 6c0d2720..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_m12.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_m13.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_m13.nbt deleted file mode 100644 index 027f1f8d..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_m13.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_m2.nbt deleted file mode 100644 index 56c73413..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_m2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_m3.nbt deleted file mode 100644 index 2ef4b35c..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_m3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_m4.nbt deleted file mode 100644 index 6ab4187f..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_m4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_m5.nbt deleted file mode 100644 index 6d9269ad..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_m5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_m6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_m6.nbt deleted file mode 100644 index 03dffe2a..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_m6.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_m7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_m7.nbt deleted file mode 100644 index 3289e8d0..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_m7.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_m8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_m8.nbt deleted file mode 100644 index e6d185f1..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_m8.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_m9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_m9.nbt deleted file mode 100644 index dd0a5950..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_m9.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p0.nbt deleted file mode 100644 index cb3e6ccb..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p0.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p1.nbt deleted file mode 100644 index 6e6d3e81..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p10.nbt deleted file mode 100644 index e6aa9a3f..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p10.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p11.nbt deleted file mode 100644 index 71d2eb55..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p11.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p12.nbt deleted file mode 100644 index 4dd7d1b5..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p12.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p13.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p13.nbt deleted file mode 100644 index 6e0ce2b8..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p13.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p14.nbt deleted file mode 100644 index 640bcc35..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p14.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p2.nbt deleted file mode 100644 index 9cb8ca5c..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p3.nbt deleted file mode 100644 index d8aff916..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p4.nbt deleted file mode 100644 index 907a6676..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p5.nbt deleted file mode 100644 index 7aa63c18..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p6.nbt deleted file mode 100644 index 879e7cf6..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p6.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p7.nbt deleted file mode 100644 index b2c9ff99..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p7.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p8.nbt deleted file mode 100644 index 10bf40ed..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p8.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p9.nbt deleted file mode 100644 index 4a1d476a..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p1_p9.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m1.nbt deleted file mode 100644 index 402b82a1..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m10.nbt deleted file mode 100644 index c53b6597..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m10.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m11.nbt deleted file mode 100644 index 0c21ab63..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m11.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m12.nbt deleted file mode 100644 index d278121b..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m12.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m13.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m13.nbt deleted file mode 100644 index 94c0f443..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m13.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m14.nbt deleted file mode 100644 index 3f566e18..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m14.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m2.nbt deleted file mode 100644 index 0bee3cc8..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m3.nbt deleted file mode 100644 index 69b724ce..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m4.nbt deleted file mode 100644 index 22c827f8..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m5.nbt deleted file mode 100644 index 1a8d917e..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m6.nbt deleted file mode 100644 index afa803ef..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m6.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m7.nbt deleted file mode 100644 index 37dbf597..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m7.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m8.nbt deleted file mode 100644 index 99517865..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m8.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m9.nbt deleted file mode 100644 index fed0f20d..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_m9.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p0.nbt deleted file mode 100644 index 229ed1d6..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p0.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p1.nbt deleted file mode 100644 index 6214f51e..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p10.nbt deleted file mode 100644 index dcde4f4b..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p10.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p11.nbt deleted file mode 100644 index 6476490e..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p11.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p12.nbt deleted file mode 100644 index 8b215517..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p12.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p13.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p13.nbt deleted file mode 100644 index d63e41b6..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p13.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p14.nbt deleted file mode 100644 index 640bcc35..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p14.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p2.nbt deleted file mode 100644 index e1a4de01..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p3.nbt deleted file mode 100644 index 75cf9a33..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p4.nbt deleted file mode 100644 index eea02379..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p5.nbt deleted file mode 100644 index 2b1a2af6..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p6.nbt deleted file mode 100644 index e67550d1..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p6.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p7.nbt deleted file mode 100644 index d0e9ed51..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p7.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p8.nbt deleted file mode 100644 index 88c21479..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p8.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p9.nbt deleted file mode 100644 index 02d0597d..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p2_p9.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_m1.nbt deleted file mode 100644 index 3befd74b..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_m1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_m10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_m10.nbt deleted file mode 100644 index f9e0b8b8..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_m10.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_m11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_m11.nbt deleted file mode 100644 index 0ca3a235..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_m11.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_m12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_m12.nbt deleted file mode 100644 index a5bcf5a3..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_m12.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_m2.nbt deleted file mode 100644 index 53a333c7..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_m2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_m3.nbt deleted file mode 100644 index 9f9ba11d..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_m3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_m4.nbt deleted file mode 100644 index 4b8885e2..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_m4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_m5.nbt deleted file mode 100644 index 2cb3bfe6..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_m5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_m6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_m6.nbt deleted file mode 100644 index 48c68fcd..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_m6.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_m7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_m7.nbt deleted file mode 100644 index 7bb57877..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_m7.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_m8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_m8.nbt deleted file mode 100644 index eb45507e..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_m8.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_m9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_m9.nbt deleted file mode 100644 index 4e309d0f..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_m9.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p0.nbt deleted file mode 100644 index c60eef4c..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p0.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p1.nbt deleted file mode 100644 index 0ff3f33e..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p10.nbt deleted file mode 100644 index 4fdb765c..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p10.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p11.nbt deleted file mode 100644 index adf2e457..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p11.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p12.nbt deleted file mode 100644 index 6cdac1b3..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p12.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p13.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p13.nbt deleted file mode 100644 index b0a9d71e..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p13.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p14.nbt deleted file mode 100644 index 640bcc35..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p14.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p2.nbt deleted file mode 100644 index 4b14a0de..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p3.nbt deleted file mode 100644 index 0313f5f8..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p4.nbt deleted file mode 100644 index 450fd7c2..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p5.nbt deleted file mode 100644 index d9b5ba7f..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p6.nbt deleted file mode 100644 index 9c614794..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p6.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p7.nbt deleted file mode 100644 index 701c80e1..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p7.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p8.nbt deleted file mode 100644 index 55b608b6..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p8.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p9.nbt deleted file mode 100644 index 329940d6..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p3_p9.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_m1.nbt deleted file mode 100644 index 5e018672..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_m1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_m10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_m10.nbt deleted file mode 100644 index 7538c50f..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_m10.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_m11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_m11.nbt deleted file mode 100644 index 8c729645..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_m11.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_m12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_m12.nbt deleted file mode 100644 index b5a22dff..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_m12.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_m2.nbt deleted file mode 100644 index cfd2cca6..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_m2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_m3.nbt deleted file mode 100644 index e154b41a..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_m3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_m4.nbt deleted file mode 100644 index 3d03b2d6..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_m4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_m5.nbt deleted file mode 100644 index 35b6ac0e..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_m5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_m6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_m6.nbt deleted file mode 100644 index 2b242d78..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_m6.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_m7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_m7.nbt deleted file mode 100644 index 07dd3865..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_m7.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_m8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_m8.nbt deleted file mode 100644 index 811edd17..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_m8.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_m9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_m9.nbt deleted file mode 100644 index ffd5a7c8..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_m9.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p0.nbt deleted file mode 100644 index 74401973..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p0.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p1.nbt deleted file mode 100644 index 9c72a350..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p10.nbt deleted file mode 100644 index 79610387..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p10.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p11.nbt deleted file mode 100644 index ee0a4427..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p11.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p12.nbt deleted file mode 100644 index 97caff0e..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p12.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p13.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p13.nbt deleted file mode 100644 index 073052ae..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p13.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p14.nbt deleted file mode 100644 index bba066ee..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p14.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p2.nbt deleted file mode 100644 index 87e8c7e5..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p3.nbt deleted file mode 100644 index c606a43c..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p4.nbt deleted file mode 100644 index 8c893022..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p5.nbt deleted file mode 100644 index 5b1dec37..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p6.nbt deleted file mode 100644 index a4034055..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p6.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p7.nbt deleted file mode 100644 index ce51cfee..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p7.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p8.nbt deleted file mode 100644 index 4f2c711b..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p8.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p9.nbt deleted file mode 100644 index e5261c93..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p4_p9.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_m1.nbt deleted file mode 100644 index 53a34e4c..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_m1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_m10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_m10.nbt deleted file mode 100644 index 48c6beae..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_m10.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_m11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_m11.nbt deleted file mode 100644 index 9001e260..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_m11.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_m2.nbt deleted file mode 100644 index 32fb07f5..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_m2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_m3.nbt deleted file mode 100644 index 22a9de63..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_m3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_m4.nbt deleted file mode 100644 index 612777fe..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_m4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_m5.nbt deleted file mode 100644 index 0a64d1ec..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_m5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_m6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_m6.nbt deleted file mode 100644 index 24103baf..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_m6.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_m7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_m7.nbt deleted file mode 100644 index d4ef54a5..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_m7.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_m8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_m8.nbt deleted file mode 100644 index 25031873..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_m8.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_m9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_m9.nbt deleted file mode 100644 index 1e73c16f..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_m9.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p0.nbt deleted file mode 100644 index 0bd7227f..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p0.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p1.nbt deleted file mode 100644 index 53e2f455..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p10.nbt deleted file mode 100644 index 874a7534..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p10.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p11.nbt deleted file mode 100644 index ea561d70..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p11.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p12.nbt deleted file mode 100644 index 4d3e4482..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p12.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p13.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p13.nbt deleted file mode 100644 index 7adc5310..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p13.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p14.nbt deleted file mode 100644 index 640bcc35..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p14.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p2.nbt deleted file mode 100644 index efada274..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p3.nbt deleted file mode 100644 index 358ad963..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p4.nbt deleted file mode 100644 index 985dbb65..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p5.nbt deleted file mode 100644 index 6fc1ef75..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p6.nbt deleted file mode 100644 index 6a12c4ba..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p6.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p7.nbt deleted file mode 100644 index ac37c18c..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p7.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p8.nbt deleted file mode 100644 index abc6a472..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p8.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p9.nbt deleted file mode 100644 index 6a93a7df..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p5_p9.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_m1.nbt deleted file mode 100644 index 8ebc0b8f..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_m1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_m10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_m10.nbt deleted file mode 100644 index 0fd8c418..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_m10.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_m2.nbt deleted file mode 100644 index 63adadf0..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_m2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_m3.nbt deleted file mode 100644 index b647ccdf..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_m3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_m4.nbt deleted file mode 100644 index 4c363f8e..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_m4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_m5.nbt deleted file mode 100644 index 46bdfc3e..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_m5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_m6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_m6.nbt deleted file mode 100644 index 1f0a4e71..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_m6.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_m7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_m7.nbt deleted file mode 100644 index f4237dc8..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_m7.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_m8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_m8.nbt deleted file mode 100644 index 3faa5d43..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_m8.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_m9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_m9.nbt deleted file mode 100644 index 4d6c31de..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_m9.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p0.nbt deleted file mode 100644 index 1bb8d63d..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p0.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p1.nbt deleted file mode 100644 index 2bce3847..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p10.nbt deleted file mode 100644 index cd7fe17a..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p10.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p11.nbt deleted file mode 100644 index 544f3406..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p11.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p12.nbt deleted file mode 100644 index b68c1da8..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p12.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p14.nbt deleted file mode 100644 index 640bcc35..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p14.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p2.nbt deleted file mode 100644 index 8eb7461b..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p3.nbt deleted file mode 100644 index b6f770a8..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p4.nbt deleted file mode 100644 index f436cec0..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p5.nbt deleted file mode 100644 index b417ff48..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p6.nbt deleted file mode 100644 index a59f15cf..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p6.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p7.nbt deleted file mode 100644 index 50359a28..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p7.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p8.nbt deleted file mode 100644 index ef7ae843..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p8.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p9.nbt deleted file mode 100644 index 9eb7319f..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p6_p9.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_m1.nbt deleted file mode 100644 index 82695ce2..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_m1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_m10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_m10.nbt deleted file mode 100644 index 9967cf3b..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_m10.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_m2.nbt deleted file mode 100644 index b6022f5b..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_m2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_m3.nbt deleted file mode 100644 index e667ec00..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_m3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_m4.nbt deleted file mode 100644 index cc1b7324..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_m4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_m5.nbt deleted file mode 100644 index 55fd9e3b..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_m5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_m6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_m6.nbt deleted file mode 100644 index 637f9696..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_m6.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_m7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_m7.nbt deleted file mode 100644 index 09162ef8..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_m7.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_m8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_m8.nbt deleted file mode 100644 index 3cf62caf..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_m8.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_m9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_m9.nbt deleted file mode 100644 index 653cc630..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_m9.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_p0.nbt deleted file mode 100644 index 4eb4d147..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_p0.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_p1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_p1.nbt deleted file mode 100644 index 48433e0b..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_p1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_p10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_p10.nbt deleted file mode 100644 index c0f727a5..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_p10.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_p14.nbt deleted file mode 100644 index 640bcc35..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_p14.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_p2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_p2.nbt deleted file mode 100644 index 7edf0aa5..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_p2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_p3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_p3.nbt deleted file mode 100644 index a3f210d2..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_p3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_p4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_p4.nbt deleted file mode 100644 index 864d371b..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_p4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_p5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_p5.nbt deleted file mode 100644 index ffcb7497..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_p5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_p6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_p6.nbt deleted file mode 100644 index 01cce988..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_p6.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_p7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_p7.nbt deleted file mode 100644 index 4a5141d0..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_p7.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_p8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_p8.nbt deleted file mode 100644 index c473c5e8..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_p8.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_p9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_p9.nbt deleted file mode 100644 index 2a36b829..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p7_p9.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_m1.nbt deleted file mode 100644 index 4d5588ae..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_m1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_m2.nbt deleted file mode 100644 index 020243cf..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_m2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_m3.nbt deleted file mode 100644 index 8723b0f9..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_m3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_m4.nbt deleted file mode 100644 index 82fc2d17..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_m4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_m5.nbt deleted file mode 100644 index 80a1cb66..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_m5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_m6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_m6.nbt deleted file mode 100644 index aee28190..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_m6.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_m7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_m7.nbt deleted file mode 100644 index c9433c23..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_m7.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_m8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_m8.nbt deleted file mode 100644 index 89a32e1c..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_m8.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_p0.nbt deleted file mode 100644 index 0f04d095..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_p0.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_p1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_p1.nbt deleted file mode 100644 index cc1b35db..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_p1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_p14.nbt deleted file mode 100644 index bcd2f22b..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_p14.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_p2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_p2.nbt deleted file mode 100644 index d1de3f6e..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_p2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_p3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_p3.nbt deleted file mode 100644 index 58a93cda..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_p3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_p4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_p4.nbt deleted file mode 100644 index 7df92c0c..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_p4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_p5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_p5.nbt deleted file mode 100644 index df3b6be6..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_p5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_p6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_p6.nbt deleted file mode 100644 index 6ea6dddc..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_p6.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_p7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_p7.nbt deleted file mode 100644 index b9b92d73..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_p7.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_p8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_p8.nbt deleted file mode 100644 index 64e3f048..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p8_p8.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p9_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p9_m1.nbt deleted file mode 100644 index e9cc8c2b..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p9_m1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p9_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p9_m2.nbt deleted file mode 100644 index 0957b55c..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p9_m2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p9_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p9_m3.nbt deleted file mode 100644 index e526562e..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p9_m3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p9_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p9_m4.nbt deleted file mode 100644 index 9960dded..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p9_m4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p9_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p9_m5.nbt deleted file mode 100644 index 2b5df36b..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p9_m5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p9_m6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p9_m6.nbt deleted file mode 100644 index d81d9b03..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p9_m6.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p9_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p9_p0.nbt deleted file mode 100644 index 5a4f467c..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p9_p0.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p9_p2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p9_p2.nbt deleted file mode 100644 index d708c521..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p9_p2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p9_p3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p9_p3.nbt deleted file mode 100644 index bd4274d2..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p9_p3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p9_p4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p9_p4.nbt deleted file mode 100644 index 3e2deb1c..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/kings_tree_tiles/p9_p4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/ruined_arena/ruined_arena.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/ruined_arena/ruined_arena.nbt deleted file mode 100644 index fefb1778..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/ruined_arena/ruined_arena.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/ruined_prison/ruined_prison.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/ruined_prison/ruined_prison.nbt deleted file mode 100644 index d53488e6..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/ruined_prison/ruined_prison.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/sign/sign.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/sign/sign.nbt deleted file mode 100644 index a61633bf..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/sign/sign.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/stampys_house/stampys_house.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/stampys_house/stampys_house.nbt deleted file mode 100644 index dcb7e63d..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/stampys_house/stampys_house.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/stampys_house/stampys_house_bottom1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/stampys_house/stampys_house_bottom1.nbt deleted file mode 100644 index 80d3b7ba..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/stampys_house/stampys_house_bottom1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/stampys_house/stampys_house_bottom2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/stampys_house/stampys_house_bottom2.nbt deleted file mode 100644 index aa9db842..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/stampys_house/stampys_house_bottom2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/temple_of_technoblade/temple_of_technoblade1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/temple_of_technoblade/temple_of_technoblade1.nbt deleted file mode 100644 index 1304268e..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/temple_of_technoblade/temple_of_technoblade1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/temple_of_technoblade/temple_of_technoblade2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/temple_of_technoblade/temple_of_technoblade2.nbt deleted file mode 100644 index cf52b35c..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/temple_of_technoblade/temple_of_technoblade2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/temple_of_technoblade/temple_of_technoblade3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/temple_of_technoblade/temple_of_technoblade3.nbt deleted file mode 100644 index d9aacfb7..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/temple_of_technoblade/temple_of_technoblade3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/tigers_eye_shrine/tigers_eye_shrine.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/tigers_eye_shrine/tigers_eye_shrine.nbt deleted file mode 100644 index dd2c9b17..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/tigers_eye_shrine/tigers_eye_shrine.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/toreterror_arena/toreterror_arena.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/toreterror_arena/toreterror_arena.nbt deleted file mode 100644 index 2a2e871f..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/toreterror_arena/toreterror_arena.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/toreterror_arena/toreterror_arena_bottom.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/toreterror_arena/toreterror_arena_bottom.nbt deleted file mode 100644 index c02c9e2f..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/toreterror_arena/toreterror_arena_bottom.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/trayaurus_lab/trayaurus_lab.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/trayaurus_lab/trayaurus_lab.nbt deleted file mode 100644 index 46d6f375..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/trayaurus_lab/trayaurus_lab.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/trayaurus_lab/trayaurus_lab_bottom.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/trayaurus_lab/trayaurus_lab_bottom.nbt deleted file mode 100644 index e30dedf0..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/trayaurus_lab/trayaurus_lab_bottom.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/underside_castle/underside_castle1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/underside_castle/underside_castle1.nbt deleted file mode 100644 index 744c57f8..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/underside_castle/underside_castle1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/underside_castle/underside_castle2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/underside_castle/underside_castle2.nbt deleted file mode 100644 index a479d68e..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/underside_castle/underside_castle2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/underside_castle/underside_castle3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/underside_castle/underside_castle3.nbt deleted file mode 100644 index d306cb1c..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/underside_castle/underside_castle3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/underside_castle/underside_castle4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/underside_castle/underside_castle4.nbt deleted file mode 100644 index 6c7ce256..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/underside_castle/underside_castle4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins1.nbt deleted file mode 100644 index af7af582..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins1.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins2.nbt deleted file mode 100644 index b135357f..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins2.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins3.nbt deleted file mode 100644 index aac127dd..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins3.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins4.nbt deleted file mode 100644 index 2af8c37d..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins4.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins5.nbt deleted file mode 100644 index e5567a22..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins5.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins6.nbt deleted file mode 100644 index 88af2955..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins6.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins7.nbt deleted file mode 100644 index 82e4c41c..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins7.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins8.nbt deleted file mode 100644 index 9c40094a..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins8.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins9.nbt deleted file mode 100644 index 5e3eee4f..00000000 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins9.nbt and /dev/null differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure_pool_additions/computer_scientist_house.json b/common-1.20.1/src/main/resources/data/antarchy/structure_pool_additions/computer_scientist_house.json new file mode 100644 index 00000000..7bc949e1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/structure_pool_additions/computer_scientist_house.json @@ -0,0 +1,9 @@ +{ + "pool": "minecraft:village/plains/houses", + "element": { + "location": "antarchy:village/computer_scientist_house", + "processors": "minecraft:empty", + "projection": "rigid" + }, + "weight": 1 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/apple_cow_orchard/apple_cow_orchard.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/apple_cow_orchard/apple_cow_orchard.nbt new file mode 100644 index 00000000..b368c28a Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/apple_cow_orchard/apple_cow_orchard.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/basilisk_lair/basilisk_lair.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/basilisk_lair/basilisk_lair.nbt index ce30a0c7..2f794cec 100644 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structures/basilisk_lair/basilisk_lair.nbt and b/common-1.20.1/src/main/resources/data/antarchy/structures/basilisk_lair/basilisk_lair.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/fallen_kingdom_castle/fallen_kingdom_castle1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/fallen_kingdom_castle/fallen_kingdom_castle1.nbt index fe79deaa..26ef4387 100644 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structures/fallen_kingdom_castle/fallen_kingdom_castle1.nbt and b/common-1.20.1/src/main/resources/data/antarchy/structures/fallen_kingdom_castle/fallen_kingdom_castle1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/fallen_kingdom_castle/fallen_kingdom_castle2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/fallen_kingdom_castle/fallen_kingdom_castle2.nbt index e25b6a92..0b6237fd 100644 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structures/fallen_kingdom_castle/fallen_kingdom_castle2.nbt and b/common-1.20.1/src/main/resources/data/antarchy/structures/fallen_kingdom_castle/fallen_kingdom_castle2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/fallen_kingdom_castle/fallen_kingdom_castle3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/fallen_kingdom_castle/fallen_kingdom_castle3.nbt index b40629ac..c0301601 100644 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structures/fallen_kingdom_castle/fallen_kingdom_castle3.nbt and b/common-1.20.1/src/main/resources/data/antarchy/structures/fallen_kingdom_castle/fallen_kingdom_castle3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/greenhouse/greenhouse.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/greenhouse/greenhouse.nbt new file mode 100644 index 00000000..323ed735 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/greenhouse/greenhouse.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m10_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m10_m1.nbt new file mode 100644 index 00000000..0361c675 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m10_m1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m10_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m10_m2.nbt new file mode 100644 index 00000000..0996f99f Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m10_m2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m10_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m10_m3.nbt new file mode 100644 index 00000000..b2a0abb3 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m10_m3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m10_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m10_m4.nbt new file mode 100644 index 00000000..7905f0c1 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m10_m4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m10_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m10_m5.nbt new file mode 100644 index 00000000..0d11b82c Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m10_m5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m10_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m10_p0.nbt new file mode 100644 index 00000000..b58cfc03 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m10_p0.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m10_p1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m10_p1.nbt new file mode 100644 index 00000000..884890da Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m10_p1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m10_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m10_p14.nbt new file mode 100644 index 00000000..c8dc2a57 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m10_p14.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m11_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m11_m2.nbt new file mode 100644 index 00000000..e57dfbd5 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m11_m2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m11_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m11_m3.nbt new file mode 100644 index 00000000..645b6a53 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m11_m3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m11_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m11_m4.nbt new file mode 100644 index 00000000..b481d591 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m11_m4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m11_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m11_p14.nbt new file mode 100644 index 00000000..2877865e Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m11_p14.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m12_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m12_m2.nbt new file mode 100644 index 00000000..c118cf34 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m12_m2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m12_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m12_m3.nbt new file mode 100644 index 00000000..da3062cc Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m12_m3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m12_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m12_p14.nbt new file mode 100644 index 00000000..e132a749 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m12_p14.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m1.nbt new file mode 100644 index 00000000..d0f15fd1 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m10.nbt new file mode 100644 index 00000000..208ebd69 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m10.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m11.nbt new file mode 100644 index 00000000..03001433 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m11.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m12.nbt new file mode 100644 index 00000000..dd9915a7 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m12.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m13.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m13.nbt new file mode 100644 index 00000000..3ff48bd8 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m13.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m14.nbt new file mode 100644 index 00000000..82240ab2 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m14.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m2.nbt new file mode 100644 index 00000000..086ea1b8 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m3.nbt new file mode 100644 index 00000000..acf15349 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m4.nbt new file mode 100644 index 00000000..25ae20ef Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m5.nbt new file mode 100644 index 00000000..5e7fd1f5 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m6.nbt new file mode 100644 index 00000000..5bf078b0 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m6.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m7.nbt new file mode 100644 index 00000000..7cb82d1c Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m7.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m8.nbt new file mode 100644 index 00000000..276cab84 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m8.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m9.nbt new file mode 100644 index 00000000..55168293 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_m9.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_p0.nbt new file mode 100644 index 00000000..2dc4c5da Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_p0.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_p1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_p1.nbt new file mode 100644 index 00000000..fcd3a69b Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_p1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_p10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_p10.nbt new file mode 100644 index 00000000..1cfe75c4 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_p10.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_p11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_p11.nbt new file mode 100644 index 00000000..daf7bc33 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_p11.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_p14.nbt new file mode 100644 index 00000000..06d6072c Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_p14.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_p2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_p2.nbt new file mode 100644 index 00000000..33e7e9af Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_p2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_p3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_p3.nbt new file mode 100644 index 00000000..5370f285 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_p3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_p4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_p4.nbt new file mode 100644 index 00000000..834757c2 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_p4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_p5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_p5.nbt new file mode 100644 index 00000000..08de5958 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_p5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_p6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_p6.nbt new file mode 100644 index 00000000..0a261caa Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_p6.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_p7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_p7.nbt new file mode 100644 index 00000000..0dbcb08a Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_p7.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_p8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_p8.nbt new file mode 100644 index 00000000..e9cb1e7d Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_p8.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_p9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_p9.nbt new file mode 100644 index 00000000..a2ec7ccc Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m1_p9.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_m1.nbt new file mode 100644 index 00000000..f3667251 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_m1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_m10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_m10.nbt new file mode 100644 index 00000000..5ba2bb8d Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_m10.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_m11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_m11.nbt new file mode 100644 index 00000000..3026fd22 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_m11.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_m12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_m12.nbt new file mode 100644 index 00000000..43271e1c Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_m12.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_m13.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_m13.nbt new file mode 100644 index 00000000..90908708 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_m13.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_m2.nbt new file mode 100644 index 00000000..484f226e Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_m2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_m3.nbt new file mode 100644 index 00000000..a8bf54f9 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_m3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_m4.nbt new file mode 100644 index 00000000..f1ab4b71 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_m4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_m5.nbt new file mode 100644 index 00000000..cda2634e Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_m5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_m6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_m6.nbt new file mode 100644 index 00000000..456d659d Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_m6.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_m7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_m7.nbt new file mode 100644 index 00000000..b7301e84 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_m7.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_m8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_m8.nbt new file mode 100644 index 00000000..bc4bb0b5 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_m8.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_m9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_m9.nbt new file mode 100644 index 00000000..985dc137 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_m9.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_p0.nbt new file mode 100644 index 00000000..a25421e1 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_p0.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_p1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_p1.nbt new file mode 100644 index 00000000..75fb9b4c Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_p1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_p10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_p10.nbt new file mode 100644 index 00000000..12d397a1 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_p10.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_p11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_p11.nbt new file mode 100644 index 00000000..a1bc1fb2 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_p11.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_p14.nbt new file mode 100644 index 00000000..4c6d9648 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_p14.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_p2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_p2.nbt new file mode 100644 index 00000000..919a51e2 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_p2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_p3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_p3.nbt new file mode 100644 index 00000000..891f399d Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_p3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_p4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_p4.nbt new file mode 100644 index 00000000..ae32f2a2 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_p4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_p5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_p5.nbt new file mode 100644 index 00000000..19ee8ac7 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_p5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_p6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_p6.nbt new file mode 100644 index 00000000..94e444b9 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_p6.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_p7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_p7.nbt new file mode 100644 index 00000000..e4d6aecb Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_p7.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_p8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_p8.nbt new file mode 100644 index 00000000..b1299bce Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_p8.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_p9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_p9.nbt new file mode 100644 index 00000000..1c7b5e3b Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m2_p9.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_m1.nbt new file mode 100644 index 00000000..114303a6 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_m1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_m10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_m10.nbt new file mode 100644 index 00000000..799fc311 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_m10.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_m11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_m11.nbt new file mode 100644 index 00000000..051fe738 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_m11.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_m12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_m12.nbt new file mode 100644 index 00000000..d5dfe764 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_m12.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_m13.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_m13.nbt new file mode 100644 index 00000000..fafa1abf Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_m13.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_m2.nbt new file mode 100644 index 00000000..e7eb1083 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_m2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_m3.nbt new file mode 100644 index 00000000..fe867c51 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_m3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_m4.nbt new file mode 100644 index 00000000..98311257 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_m4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_m5.nbt new file mode 100644 index 00000000..65f2c4bb Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_m5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_m6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_m6.nbt new file mode 100644 index 00000000..1d9cd173 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_m6.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_m7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_m7.nbt new file mode 100644 index 00000000..f228ec74 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_m7.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_m8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_m8.nbt new file mode 100644 index 00000000..36aed84a Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_m8.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_m9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_m9.nbt new file mode 100644 index 00000000..a4f17b59 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_m9.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p0.nbt new file mode 100644 index 00000000..e2327792 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p0.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p1.nbt new file mode 100644 index 00000000..2067aa92 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p10.nbt new file mode 100644 index 00000000..ae6b3831 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p10.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p11.nbt new file mode 100644 index 00000000..eb16fd25 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p11.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p12.nbt new file mode 100644 index 00000000..8025eebf Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p12.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p14.nbt new file mode 100644 index 00000000..f3072632 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p14.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p2.nbt new file mode 100644 index 00000000..626878ec Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p3.nbt new file mode 100644 index 00000000..f96f75df Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p4.nbt new file mode 100644 index 00000000..f2e26ea4 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p5.nbt new file mode 100644 index 00000000..de908b2d Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p6.nbt new file mode 100644 index 00000000..cd03b995 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p6.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p7.nbt new file mode 100644 index 00000000..e5354e51 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p7.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p8.nbt new file mode 100644 index 00000000..8d39c39c Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p8.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p9.nbt new file mode 100644 index 00000000..e8fabdde Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m3_p9.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_m1.nbt new file mode 100644 index 00000000..a4ed7174 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_m1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_m10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_m10.nbt new file mode 100644 index 00000000..05111c66 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_m10.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_m11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_m11.nbt new file mode 100644 index 00000000..61ece66a Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_m11.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_m12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_m12.nbt new file mode 100644 index 00000000..ee2bfc11 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_m12.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_m13.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_m13.nbt new file mode 100644 index 00000000..31651084 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_m13.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_m2.nbt new file mode 100644 index 00000000..9482fd74 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_m2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_m3.nbt new file mode 100644 index 00000000..ca36bd16 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_m3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_m4.nbt new file mode 100644 index 00000000..3e4c2984 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_m4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_m5.nbt new file mode 100644 index 00000000..a677ac88 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_m5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_m6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_m6.nbt new file mode 100644 index 00000000..b013f088 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_m6.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_m7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_m7.nbt new file mode 100644 index 00000000..a88e72d7 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_m7.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_m8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_m8.nbt new file mode 100644 index 00000000..54ca29dc Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_m8.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_m9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_m9.nbt new file mode 100644 index 00000000..0f7f30c2 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_m9.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p0.nbt new file mode 100644 index 00000000..a3f9cb85 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p0.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p1.nbt new file mode 100644 index 00000000..2f6c031a Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p10.nbt new file mode 100644 index 00000000..57261267 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p10.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p11.nbt new file mode 100644 index 00000000..6221c522 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p11.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p12.nbt new file mode 100644 index 00000000..ccb769ba Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p12.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p14.nbt new file mode 100644 index 00000000..07a7b975 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p14.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p2.nbt new file mode 100644 index 00000000..8dd8cd57 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p3.nbt new file mode 100644 index 00000000..62dc1d3b Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p4.nbt new file mode 100644 index 00000000..bde3d4a5 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p5.nbt new file mode 100644 index 00000000..07f244ff Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p6.nbt new file mode 100644 index 00000000..6f4d84c9 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p6.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p7.nbt new file mode 100644 index 00000000..df223358 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p7.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p8.nbt new file mode 100644 index 00000000..761e3e95 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p8.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p9.nbt new file mode 100644 index 00000000..f030bf3e Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m4_p9.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_m1.nbt new file mode 100644 index 00000000..195e8999 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_m1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_m10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_m10.nbt new file mode 100644 index 00000000..effcf9d6 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_m10.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_m11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_m11.nbt new file mode 100644 index 00000000..2b5d8418 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_m11.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_m12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_m12.nbt new file mode 100644 index 00000000..61c71565 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_m12.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_m13.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_m13.nbt new file mode 100644 index 00000000..20b12a76 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_m13.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_m2.nbt new file mode 100644 index 00000000..5d808d71 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_m2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_m3.nbt new file mode 100644 index 00000000..1c9815db Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_m3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_m4.nbt new file mode 100644 index 00000000..672c8b1a Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_m4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_m5.nbt new file mode 100644 index 00000000..fb6bb0f8 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_m5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_m6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_m6.nbt new file mode 100644 index 00000000..d96f333f Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_m6.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_m7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_m7.nbt new file mode 100644 index 00000000..d02956cf Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_m7.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_m8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_m8.nbt new file mode 100644 index 00000000..1df3b1b8 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_m8.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_m9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_m9.nbt new file mode 100644 index 00000000..ba457aab Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_m9.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_p0.nbt new file mode 100644 index 00000000..3a483a56 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_p0.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_p1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_p1.nbt new file mode 100644 index 00000000..d5a3b7b0 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_p1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_p10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_p10.nbt new file mode 100644 index 00000000..bd6b83e7 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_p10.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_p11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_p11.nbt new file mode 100644 index 00000000..572129a1 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_p11.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_p14.nbt new file mode 100644 index 00000000..437c8147 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_p14.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_p2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_p2.nbt new file mode 100644 index 00000000..f946ab22 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_p2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_p3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_p3.nbt new file mode 100644 index 00000000..ccb94c25 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_p3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_p4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_p4.nbt new file mode 100644 index 00000000..60bde0c7 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_p4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_p5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_p5.nbt new file mode 100644 index 00000000..26b48971 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_p5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_p6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_p6.nbt new file mode 100644 index 00000000..59b9d119 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_p6.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_p7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_p7.nbt new file mode 100644 index 00000000..7d898b0c Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_p7.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_p8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_p8.nbt new file mode 100644 index 00000000..9b054d6a Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_p8.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_p9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_p9.nbt new file mode 100644 index 00000000..732a6afa Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m5_p9.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_m1.nbt new file mode 100644 index 00000000..98f44101 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_m1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_m10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_m10.nbt new file mode 100644 index 00000000..6ada56b9 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_m10.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_m11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_m11.nbt new file mode 100644 index 00000000..666a89d9 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_m11.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_m12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_m12.nbt new file mode 100644 index 00000000..3e244313 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_m12.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_m2.nbt new file mode 100644 index 00000000..94695425 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_m2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_m3.nbt new file mode 100644 index 00000000..374ac24c Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_m3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_m4.nbt new file mode 100644 index 00000000..98054c2d Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_m4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_m5.nbt new file mode 100644 index 00000000..112a11ee Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_m5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_m6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_m6.nbt new file mode 100644 index 00000000..620a2e80 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_m6.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_m7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_m7.nbt new file mode 100644 index 00000000..b2e48d3b Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_m7.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_m8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_m8.nbt new file mode 100644 index 00000000..1b1d014b Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_m8.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_m9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_m9.nbt new file mode 100644 index 00000000..364cf31f Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_m9.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_p0.nbt new file mode 100644 index 00000000..ed5a7d19 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_p0.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_p1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_p1.nbt new file mode 100644 index 00000000..7ff9881c Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_p1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_p10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_p10.nbt new file mode 100644 index 00000000..c42719f9 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_p10.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_p11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_p11.nbt new file mode 100644 index 00000000..944897d6 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_p11.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_p14.nbt new file mode 100644 index 00000000..e090a46b Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_p14.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_p2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_p2.nbt new file mode 100644 index 00000000..b4af7c35 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_p2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_p3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_p3.nbt new file mode 100644 index 00000000..deb3daf0 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_p3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_p4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_p4.nbt new file mode 100644 index 00000000..99343e2a Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_p4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_p5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_p5.nbt new file mode 100644 index 00000000..acf45e35 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_p5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_p6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_p6.nbt new file mode 100644 index 00000000..5e6fb259 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_p6.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_p7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_p7.nbt new file mode 100644 index 00000000..3865d549 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_p7.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_p8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_p8.nbt new file mode 100644 index 00000000..cb66c051 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_p8.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_p9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_p9.nbt new file mode 100644 index 00000000..d8cbc83f Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m6_p9.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_m1.nbt new file mode 100644 index 00000000..35536bb7 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_m1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_m10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_m10.nbt new file mode 100644 index 00000000..d84d707b Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_m10.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_m11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_m11.nbt new file mode 100644 index 00000000..72465843 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_m11.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_m12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_m12.nbt new file mode 100644 index 00000000..c6c25575 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_m12.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_m2.nbt new file mode 100644 index 00000000..62fcd929 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_m2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_m3.nbt new file mode 100644 index 00000000..5af8e580 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_m3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_m4.nbt new file mode 100644 index 00000000..a9f16144 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_m4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_m5.nbt new file mode 100644 index 00000000..527324a2 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_m5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_m6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_m6.nbt new file mode 100644 index 00000000..9553b0e8 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_m6.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_m7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_m7.nbt new file mode 100644 index 00000000..03a276ff Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_m7.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_m8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_m8.nbt new file mode 100644 index 00000000..35cc43a2 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_m8.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_m9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_m9.nbt new file mode 100644 index 00000000..cfbf876a Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_m9.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_p0.nbt new file mode 100644 index 00000000..273f12d8 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_p0.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_p1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_p1.nbt new file mode 100644 index 00000000..0b598b7a Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_p1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_p10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_p10.nbt new file mode 100644 index 00000000..e1ce1b4c Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_p10.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_p11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_p11.nbt new file mode 100644 index 00000000..94d8c817 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_p11.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_p14.nbt new file mode 100644 index 00000000..daf52ae9 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_p14.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_p2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_p2.nbt new file mode 100644 index 00000000..bde492e2 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_p2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_p3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_p3.nbt new file mode 100644 index 00000000..7e45954b Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_p3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_p4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_p4.nbt new file mode 100644 index 00000000..f5019eb9 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_p4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_p5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_p5.nbt new file mode 100644 index 00000000..177fa77d Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_p5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_p6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_p6.nbt new file mode 100644 index 00000000..6c0183fe Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_p6.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_p7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_p7.nbt new file mode 100644 index 00000000..15f497dc Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_p7.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_p8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_p8.nbt new file mode 100644 index 00000000..13ab522b Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_p8.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_p9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_p9.nbt new file mode 100644 index 00000000..2dbd0943 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m7_p9.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_m1.nbt new file mode 100644 index 00000000..5b2eef95 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_m1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_m10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_m10.nbt new file mode 100644 index 00000000..244297c2 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_m10.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_m11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_m11.nbt new file mode 100644 index 00000000..f110b997 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_m11.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_m2.nbt new file mode 100644 index 00000000..2284b2ca Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_m2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_m3.nbt new file mode 100644 index 00000000..8fd4a73f Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_m3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_m4.nbt new file mode 100644 index 00000000..b54e10d9 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_m4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_m5.nbt new file mode 100644 index 00000000..e8b0e6bf Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_m5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_m6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_m6.nbt new file mode 100644 index 00000000..b7227bd7 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_m6.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_m7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_m7.nbt new file mode 100644 index 00000000..3467c3f1 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_m7.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_m8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_m8.nbt new file mode 100644 index 00000000..41ced67e Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_m8.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_m9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_m9.nbt new file mode 100644 index 00000000..010a8b2a Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_m9.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_p0.nbt new file mode 100644 index 00000000..a4c83728 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_p0.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_p1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_p1.nbt new file mode 100644 index 00000000..95f5eb58 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_p1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_p10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_p10.nbt new file mode 100644 index 00000000..d24f8501 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_p10.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_p11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_p11.nbt new file mode 100644 index 00000000..c1b9edfa Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_p11.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_p14.nbt new file mode 100644 index 00000000..f234a600 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_p14.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_p2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_p2.nbt new file mode 100644 index 00000000..0c5c6f89 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_p2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_p3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_p3.nbt new file mode 100644 index 00000000..a9609c38 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_p3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_p4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_p4.nbt new file mode 100644 index 00000000..ccbd87ba Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_p4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_p5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_p5.nbt new file mode 100644 index 00000000..10bc9e18 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_p5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_p6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_p6.nbt new file mode 100644 index 00000000..ea029200 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_p6.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_p7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_p7.nbt new file mode 100644 index 00000000..1be3ba7f Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_p7.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_p8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_p8.nbt new file mode 100644 index 00000000..0e8b59b2 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_p8.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_p9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_p9.nbt new file mode 100644 index 00000000..7b8b9fbe Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m8_p9.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_m1.nbt new file mode 100644 index 00000000..e8bec308 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_m1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_m10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_m10.nbt new file mode 100644 index 00000000..15836550 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_m10.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_m11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_m11.nbt new file mode 100644 index 00000000..beb2b941 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_m11.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_m2.nbt new file mode 100644 index 00000000..324e198d Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_m2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_m3.nbt new file mode 100644 index 00000000..9b19de4f Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_m3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_m4.nbt new file mode 100644 index 00000000..3e9b9aba Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_m4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_m5.nbt new file mode 100644 index 00000000..a8086ec8 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_m5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_m6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_m6.nbt new file mode 100644 index 00000000..5045c176 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_m6.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_m7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_m7.nbt new file mode 100644 index 00000000..0979e0ad Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_m7.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_m8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_m8.nbt new file mode 100644 index 00000000..30328fa9 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_m8.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_m9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_m9.nbt new file mode 100644 index 00000000..d2440892 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_m9.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_p0.nbt new file mode 100644 index 00000000..8b09b6bd Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_p0.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_p1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_p1.nbt new file mode 100644 index 00000000..081d4aef Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_p1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_p10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_p10.nbt new file mode 100644 index 00000000..0ab14a19 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_p10.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_p11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_p11.nbt new file mode 100644 index 00000000..305a7e6a Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_p11.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_p14.nbt new file mode 100644 index 00000000..667dee2d Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_p14.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_p2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_p2.nbt new file mode 100644 index 00000000..341c4e53 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_p2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_p3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_p3.nbt new file mode 100644 index 00000000..2a6af998 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_p3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_p4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_p4.nbt new file mode 100644 index 00000000..406ae343 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_p4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_p5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_p5.nbt new file mode 100644 index 00000000..a82e3310 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_p5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_p6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_p6.nbt new file mode 100644 index 00000000..eaac3e68 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_p6.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_p7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_p7.nbt new file mode 100644 index 00000000..719cbd15 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_p7.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_p8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_p8.nbt new file mode 100644 index 00000000..d02c4ed8 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_p8.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_p9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_p9.nbt new file mode 100644 index 00000000..efa97dd1 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/m9_p9.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m1.nbt new file mode 100644 index 00000000..2b7d5e4e Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m10.nbt new file mode 100644 index 00000000..fd056ffd Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m10.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m11.nbt new file mode 100644 index 00000000..a534549f Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m11.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m12.nbt new file mode 100644 index 00000000..fb335ba5 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m12.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m13.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m13.nbt new file mode 100644 index 00000000..d15cf530 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m13.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m14.nbt new file mode 100644 index 00000000..61c69af8 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m14.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m2.nbt new file mode 100644 index 00000000..011962fa Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m3.nbt new file mode 100644 index 00000000..10129b5d Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m4.nbt new file mode 100644 index 00000000..d6be6185 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m5.nbt new file mode 100644 index 00000000..323c669b Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m6.nbt new file mode 100644 index 00000000..ed47d7c8 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m6.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m7.nbt new file mode 100644 index 00000000..77a4b011 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m7.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m8.nbt new file mode 100644 index 00000000..7d7d472b Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m8.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m9.nbt new file mode 100644 index 00000000..cbe4a7d1 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_m9.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p0.nbt new file mode 100644 index 00000000..53160484 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p0.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p1.nbt new file mode 100644 index 00000000..832aa20c Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p10.nbt new file mode 100644 index 00000000..0c4f6fce Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p10.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p11.nbt new file mode 100644 index 00000000..0ef32b8c Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p11.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p12.nbt new file mode 100644 index 00000000..0564b067 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p12.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p14.nbt new file mode 100644 index 00000000..2e19ee37 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p14.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p2.nbt new file mode 100644 index 00000000..d006b256 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p3.nbt new file mode 100644 index 00000000..adc13915 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p4.nbt new file mode 100644 index 00000000..1a208e70 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p5.nbt new file mode 100644 index 00000000..c47be867 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p6.nbt new file mode 100644 index 00000000..bec01656 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p6.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p7.nbt new file mode 100644 index 00000000..4e538c19 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p7.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p8.nbt new file mode 100644 index 00000000..0a4e10e3 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p8.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p9.nbt new file mode 100644 index 00000000..ebf29e2a Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p0_p9.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p10_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p10_m1.nbt new file mode 100644 index 00000000..435a54ef Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p10_m1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p10_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p10_m2.nbt new file mode 100644 index 00000000..cfaa9c7d Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p10_m2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p10_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p10_m3.nbt new file mode 100644 index 00000000..a8927b4b Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p10_m3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p10_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p10_m4.nbt new file mode 100644 index 00000000..148ea0ad Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p10_m4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p10_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p10_m5.nbt new file mode 100644 index 00000000..772b958c Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p10_m5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p10_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p10_p0.nbt new file mode 100644 index 00000000..f517b599 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p10_p0.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p11_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p11_m1.nbt new file mode 100644 index 00000000..6589e255 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p11_m1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_m1.nbt new file mode 100644 index 00000000..fc187b04 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_m1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_m10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_m10.nbt new file mode 100644 index 00000000..f956a48f Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_m10.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_m11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_m11.nbt new file mode 100644 index 00000000..fda0000d Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_m11.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_m12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_m12.nbt new file mode 100644 index 00000000..87cd780e Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_m12.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_m13.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_m13.nbt new file mode 100644 index 00000000..b371ceeb Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_m13.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_m2.nbt new file mode 100644 index 00000000..30c836f4 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_m2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_m3.nbt new file mode 100644 index 00000000..c1f323ef Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_m3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_m4.nbt new file mode 100644 index 00000000..cefc0638 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_m4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_m5.nbt new file mode 100644 index 00000000..3c335e1f Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_m5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_m6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_m6.nbt new file mode 100644 index 00000000..07ec0f42 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_m6.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_m7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_m7.nbt new file mode 100644 index 00000000..1542bb36 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_m7.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_m8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_m8.nbt new file mode 100644 index 00000000..b6222054 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_m8.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_m9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_m9.nbt new file mode 100644 index 00000000..e80e1d9c Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_m9.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p0.nbt new file mode 100644 index 00000000..8a9519cb Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p0.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p1.nbt new file mode 100644 index 00000000..fb7ae67e Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p10.nbt new file mode 100644 index 00000000..abe98971 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p10.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p11.nbt new file mode 100644 index 00000000..3e88c290 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p11.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p12.nbt new file mode 100644 index 00000000..0e6c32bd Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p12.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p13.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p13.nbt new file mode 100644 index 00000000..d5b76f72 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p13.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p14.nbt new file mode 100644 index 00000000..1bfae295 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p14.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p2.nbt new file mode 100644 index 00000000..cba99045 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p3.nbt new file mode 100644 index 00000000..e9219e19 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p4.nbt new file mode 100644 index 00000000..cd28baab Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p5.nbt new file mode 100644 index 00000000..fc47d426 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p6.nbt new file mode 100644 index 00000000..cb78b888 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p6.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p7.nbt new file mode 100644 index 00000000..2dec9bd1 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p7.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p8.nbt new file mode 100644 index 00000000..10d2c885 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p8.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p9.nbt new file mode 100644 index 00000000..e5eaca25 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p1_p9.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m1.nbt new file mode 100644 index 00000000..c63062ea Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m10.nbt new file mode 100644 index 00000000..93ffb5d1 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m10.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m11.nbt new file mode 100644 index 00000000..f7323630 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m11.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m12.nbt new file mode 100644 index 00000000..9412f0ad Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m12.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m13.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m13.nbt new file mode 100644 index 00000000..9f754470 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m13.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m14.nbt new file mode 100644 index 00000000..0cff2f88 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m14.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m2.nbt new file mode 100644 index 00000000..a3a99287 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m3.nbt new file mode 100644 index 00000000..c592e1b6 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m4.nbt new file mode 100644 index 00000000..9844452d Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m5.nbt new file mode 100644 index 00000000..24d38664 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m6.nbt new file mode 100644 index 00000000..255cc685 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m6.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m7.nbt new file mode 100644 index 00000000..fed5da60 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m7.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m8.nbt new file mode 100644 index 00000000..993078ee Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m8.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m9.nbt new file mode 100644 index 00000000..3ef512fa Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_m9.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p0.nbt new file mode 100644 index 00000000..3d0a3c8e Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p0.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p1.nbt new file mode 100644 index 00000000..8f73df64 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p10.nbt new file mode 100644 index 00000000..ae0167c0 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p10.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p11.nbt new file mode 100644 index 00000000..e5a94054 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p11.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p12.nbt new file mode 100644 index 00000000..0a026a0f Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p12.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p13.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p13.nbt new file mode 100644 index 00000000..23ae2988 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p13.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p14.nbt new file mode 100644 index 00000000..17385b0d Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p14.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p2.nbt new file mode 100644 index 00000000..e2539637 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p3.nbt new file mode 100644 index 00000000..577c40dd Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p4.nbt new file mode 100644 index 00000000..0ad1530a Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p5.nbt new file mode 100644 index 00000000..894c6b18 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p6.nbt new file mode 100644 index 00000000..ba257877 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p6.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p7.nbt new file mode 100644 index 00000000..70d76b1a Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p7.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p8.nbt new file mode 100644 index 00000000..eb98db1c Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p8.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p9.nbt new file mode 100644 index 00000000..94613d96 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p2_p9.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_m1.nbt new file mode 100644 index 00000000..b4e1d249 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_m1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_m10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_m10.nbt new file mode 100644 index 00000000..a7814f5e Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_m10.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_m11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_m11.nbt new file mode 100644 index 00000000..51bc2711 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_m11.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_m12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_m12.nbt new file mode 100644 index 00000000..e4bdb48b Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_m12.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_m2.nbt new file mode 100644 index 00000000..6b43cf26 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_m2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_m3.nbt new file mode 100644 index 00000000..627528d4 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_m3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_m4.nbt new file mode 100644 index 00000000..3af5e839 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_m4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_m5.nbt new file mode 100644 index 00000000..d042d28e Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_m5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_m6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_m6.nbt new file mode 100644 index 00000000..9f6e776d Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_m6.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_m7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_m7.nbt new file mode 100644 index 00000000..56bddab2 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_m7.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_m8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_m8.nbt new file mode 100644 index 00000000..823d3056 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_m8.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_m9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_m9.nbt new file mode 100644 index 00000000..b7ac20c1 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_m9.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p0.nbt new file mode 100644 index 00000000..322a7a58 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p0.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p1.nbt new file mode 100644 index 00000000..7e56d676 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p10.nbt new file mode 100644 index 00000000..10b551c9 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p10.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p11.nbt new file mode 100644 index 00000000..63673d76 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p11.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p12.nbt new file mode 100644 index 00000000..a168c4e1 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p12.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p13.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p13.nbt new file mode 100644 index 00000000..bf6fa749 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p13.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p14.nbt new file mode 100644 index 00000000..f9213811 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p14.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p2.nbt new file mode 100644 index 00000000..1ca8ebee Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p3.nbt new file mode 100644 index 00000000..b49997df Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p4.nbt new file mode 100644 index 00000000..09eccad3 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p5.nbt new file mode 100644 index 00000000..9d5603cd Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p6.nbt new file mode 100644 index 00000000..9060320d Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p6.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p7.nbt new file mode 100644 index 00000000..04fa08f2 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p7.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p8.nbt new file mode 100644 index 00000000..4b4c38ad Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p8.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p9.nbt new file mode 100644 index 00000000..8129ed10 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p3_p9.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_m1.nbt new file mode 100644 index 00000000..10eca713 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_m1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_m10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_m10.nbt new file mode 100644 index 00000000..ccdc0315 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_m10.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_m11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_m11.nbt new file mode 100644 index 00000000..da0c0974 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_m11.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_m12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_m12.nbt new file mode 100644 index 00000000..17dba2aa Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_m12.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_m2.nbt new file mode 100644 index 00000000..edfb5c6f Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_m2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_m3.nbt new file mode 100644 index 00000000..72f81ab5 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_m3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_m4.nbt new file mode 100644 index 00000000..645bbe44 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_m4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_m5.nbt new file mode 100644 index 00000000..e1106f57 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_m5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_m6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_m6.nbt new file mode 100644 index 00000000..e3643830 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_m6.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_m7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_m7.nbt new file mode 100644 index 00000000..07fb2fb5 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_m7.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_m8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_m8.nbt new file mode 100644 index 00000000..56c57b9c Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_m8.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_m9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_m9.nbt new file mode 100644 index 00000000..be3eb863 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_m9.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p0.nbt new file mode 100644 index 00000000..f29d0494 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p0.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p1.nbt new file mode 100644 index 00000000..f43b357f Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p10.nbt new file mode 100644 index 00000000..f5c4bfb3 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p10.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p11.nbt new file mode 100644 index 00000000..5162f108 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p11.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p12.nbt new file mode 100644 index 00000000..6e8cd509 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p12.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p13.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p13.nbt new file mode 100644 index 00000000..ec647fa7 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p13.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p14.nbt new file mode 100644 index 00000000..a7c4a975 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p14.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p2.nbt new file mode 100644 index 00000000..eb455bf8 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p3.nbt new file mode 100644 index 00000000..3311c8c4 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p4.nbt new file mode 100644 index 00000000..53b453b6 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p5.nbt new file mode 100644 index 00000000..0a7c63d0 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p6.nbt new file mode 100644 index 00000000..c1d3a0e3 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p6.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p7.nbt new file mode 100644 index 00000000..22ec0840 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p7.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p8.nbt new file mode 100644 index 00000000..854a3d61 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p8.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p9.nbt new file mode 100644 index 00000000..9778d4fc Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p4_p9.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_m1.nbt new file mode 100644 index 00000000..b48cd98f Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_m1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_m10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_m10.nbt new file mode 100644 index 00000000..1a030b7b Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_m10.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_m11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_m11.nbt new file mode 100644 index 00000000..c52a5304 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_m11.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_m2.nbt new file mode 100644 index 00000000..a8eff72b Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_m2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_m3.nbt new file mode 100644 index 00000000..112f9980 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_m3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_m4.nbt new file mode 100644 index 00000000..20a8016f Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_m4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_m5.nbt new file mode 100644 index 00000000..bec750d8 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_m5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_m6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_m6.nbt new file mode 100644 index 00000000..967104ff Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_m6.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_m7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_m7.nbt new file mode 100644 index 00000000..e789708b Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_m7.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_m8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_m8.nbt new file mode 100644 index 00000000..93109ee2 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_m8.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_m9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_m9.nbt new file mode 100644 index 00000000..f48dbfe5 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_m9.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p0.nbt new file mode 100644 index 00000000..10798efb Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p0.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p1.nbt new file mode 100644 index 00000000..5e0fb01b Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p10.nbt new file mode 100644 index 00000000..b372ceeb Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p10.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p11.nbt new file mode 100644 index 00000000..980908cd Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p11.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p12.nbt new file mode 100644 index 00000000..25194265 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p12.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p13.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p13.nbt new file mode 100644 index 00000000..4411c532 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p13.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p14.nbt new file mode 100644 index 00000000..f74008c4 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p14.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p2.nbt new file mode 100644 index 00000000..ec85e794 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p3.nbt new file mode 100644 index 00000000..8942087d Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p4.nbt new file mode 100644 index 00000000..925240dc Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p5.nbt new file mode 100644 index 00000000..5a9e18cf Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p6.nbt new file mode 100644 index 00000000..042abb07 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p6.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p7.nbt new file mode 100644 index 00000000..dc430d23 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p7.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p8.nbt new file mode 100644 index 00000000..d7920b25 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p8.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p9.nbt new file mode 100644 index 00000000..04d2ad15 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p5_p9.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_m1.nbt new file mode 100644 index 00000000..b7554e00 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_m1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_m10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_m10.nbt new file mode 100644 index 00000000..22d423d9 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_m10.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_m2.nbt new file mode 100644 index 00000000..01ccb1d2 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_m2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_m3.nbt new file mode 100644 index 00000000..5383d763 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_m3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_m4.nbt new file mode 100644 index 00000000..46a80c4f Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_m4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_m5.nbt new file mode 100644 index 00000000..70bfa570 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_m5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_m6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_m6.nbt new file mode 100644 index 00000000..b2826270 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_m6.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_m7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_m7.nbt new file mode 100644 index 00000000..e8996a38 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_m7.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_m8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_m8.nbt new file mode 100644 index 00000000..ff48f37f Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_m8.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_m9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_m9.nbt new file mode 100644 index 00000000..8c443310 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_m9.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p0.nbt new file mode 100644 index 00000000..1d5c74dd Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p0.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p1.nbt new file mode 100644 index 00000000..6e59f5c6 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p10.nbt new file mode 100644 index 00000000..5c2653e2 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p10.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p11.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p11.nbt new file mode 100644 index 00000000..a03e7a29 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p11.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p12.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p12.nbt new file mode 100644 index 00000000..fa242f0a Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p12.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p14.nbt new file mode 100644 index 00000000..f82a363b Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p14.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p2.nbt new file mode 100644 index 00000000..fea6f9a5 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p3.nbt new file mode 100644 index 00000000..535dfa93 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p4.nbt new file mode 100644 index 00000000..ffe40f2f Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p5.nbt new file mode 100644 index 00000000..d3cafdf2 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p6.nbt new file mode 100644 index 00000000..a6dbd267 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p6.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p7.nbt new file mode 100644 index 00000000..efaa8713 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p7.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p8.nbt new file mode 100644 index 00000000..4d425210 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p8.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p9.nbt new file mode 100644 index 00000000..072ac5e3 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p6_p9.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_m1.nbt new file mode 100644 index 00000000..26188011 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_m1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_m10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_m10.nbt new file mode 100644 index 00000000..de8164a1 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_m10.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_m2.nbt new file mode 100644 index 00000000..2c8486f9 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_m2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_m3.nbt new file mode 100644 index 00000000..eba027a0 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_m3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_m4.nbt new file mode 100644 index 00000000..2feefae9 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_m4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_m5.nbt new file mode 100644 index 00000000..fd5892c5 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_m5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_m6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_m6.nbt new file mode 100644 index 00000000..75211ac8 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_m6.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_m7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_m7.nbt new file mode 100644 index 00000000..7e60f699 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_m7.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_m8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_m8.nbt new file mode 100644 index 00000000..78ad04af Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_m8.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_m9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_m9.nbt new file mode 100644 index 00000000..274e646e Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_m9.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_p0.nbt new file mode 100644 index 00000000..53a4eb23 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_p0.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_p1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_p1.nbt new file mode 100644 index 00000000..92f74606 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_p1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_p10.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_p10.nbt new file mode 100644 index 00000000..d5d94521 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_p10.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_p14.nbt new file mode 100644 index 00000000..bd86c114 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_p14.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_p2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_p2.nbt new file mode 100644 index 00000000..37aa3901 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_p2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_p3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_p3.nbt new file mode 100644 index 00000000..e58d0a0a Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_p3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_p4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_p4.nbt new file mode 100644 index 00000000..f5ad2e6d Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_p4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_p5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_p5.nbt new file mode 100644 index 00000000..61014b5c Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_p5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_p6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_p6.nbt new file mode 100644 index 00000000..218b421b Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_p6.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_p7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_p7.nbt new file mode 100644 index 00000000..635102c6 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_p7.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_p8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_p8.nbt new file mode 100644 index 00000000..b479e18f Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_p8.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_p9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_p9.nbt new file mode 100644 index 00000000..c2f45e37 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p7_p9.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_m1.nbt new file mode 100644 index 00000000..cdb3468d Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_m1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_m2.nbt new file mode 100644 index 00000000..f1daefa1 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_m2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_m3.nbt new file mode 100644 index 00000000..4181c34e Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_m3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_m4.nbt new file mode 100644 index 00000000..d4826730 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_m4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_m5.nbt new file mode 100644 index 00000000..d6121939 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_m5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_m6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_m6.nbt new file mode 100644 index 00000000..db21cebf Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_m6.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_m7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_m7.nbt new file mode 100644 index 00000000..67deddb2 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_m7.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_m8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_m8.nbt new file mode 100644 index 00000000..b845027b Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_m8.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_p0.nbt new file mode 100644 index 00000000..ed86ba3c Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_p0.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_p1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_p1.nbt new file mode 100644 index 00000000..8f228a26 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_p1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_p14.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_p14.nbt new file mode 100644 index 00000000..e122267e Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_p14.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_p2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_p2.nbt new file mode 100644 index 00000000..c6314ba5 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_p2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_p3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_p3.nbt new file mode 100644 index 00000000..d81faec1 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_p3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_p4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_p4.nbt new file mode 100644 index 00000000..ebacf631 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_p4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_p5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_p5.nbt new file mode 100644 index 00000000..7161a6e4 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_p5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_p6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_p6.nbt new file mode 100644 index 00000000..32af83b0 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_p6.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_p7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_p7.nbt new file mode 100644 index 00000000..6aef4fc1 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_p7.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_p8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_p8.nbt new file mode 100644 index 00000000..3a86fbac Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p8_p8.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p9_m1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p9_m1.nbt new file mode 100644 index 00000000..364a9946 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p9_m1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p9_m2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p9_m2.nbt new file mode 100644 index 00000000..217582f9 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p9_m2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p9_m3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p9_m3.nbt new file mode 100644 index 00000000..ceebca87 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p9_m3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p9_m4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p9_m4.nbt new file mode 100644 index 00000000..f76280b8 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p9_m4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p9_m5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p9_m5.nbt new file mode 100644 index 00000000..7dbedc12 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p9_m5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p9_m6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p9_m6.nbt new file mode 100644 index 00000000..d674b230 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p9_m6.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p9_p0.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p9_p0.nbt new file mode 100644 index 00000000..dafd7064 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p9_p0.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p9_p2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p9_p2.nbt new file mode 100644 index 00000000..1a95eacb Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p9_p2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p9_p3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p9_p3.nbt new file mode 100644 index 00000000..173d2ba8 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p9_p3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p9_p4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p9_p4.nbt new file mode 100644 index 00000000..c4e43337 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/kings_tree_tiles/p9_p4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/magical_castle/magical_castle.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/magical_castle/magical_castle.nbt new file mode 100644 index 00000000..5c590fea Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/magical_castle/magical_castle.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/magical_castle/magical_castle_path.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/magical_castle/magical_castle_path.nbt new file mode 100644 index 00000000..e6e0c71e Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/magical_castle/magical_castle_path.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/royal_shrine/king_shrine1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/royal_shrine/king_shrine1.nbt new file mode 100644 index 00000000..7eb98231 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/royal_shrine/king_shrine1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/royal_shrine/king_shrine2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/royal_shrine/king_shrine2.nbt new file mode 100644 index 00000000..78151021 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/royal_shrine/king_shrine2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/royal_shrine/queen_shrine1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/royal_shrine/queen_shrine1.nbt new file mode 100644 index 00000000..50723ebc Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/royal_shrine/queen_shrine1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/royal_shrine/queen_shrine2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/royal_shrine/queen_shrine2.nbt new file mode 100644 index 00000000..4a02ca1b Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/royal_shrine/queen_shrine2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/ruined_arena/ruined_arena.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/ruined_arena/ruined_arena.nbt index e523fb70..1fd12693 100644 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structures/ruined_arena/ruined_arena.nbt and b/common-1.20.1/src/main/resources/data/antarchy/structures/ruined_arena/ruined_arena.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/ruined_prison/ruined_prison.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/ruined_prison/ruined_prison.nbt index 19b8ea84..a1f91dfc 100644 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structures/ruined_prison/ruined_prison.nbt and b/common-1.20.1/src/main/resources/data/antarchy/structures/ruined_prison/ruined_prison.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/sign/sign.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/sign/sign.nbt index a61633bf..1cd1b5e1 100644 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structures/sign/sign.nbt and b/common-1.20.1/src/main/resources/data/antarchy/structures/sign/sign.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/stampys_house/stampys_house.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/stampys_house/stampys_house.nbt index e626f191..41136636 100644 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structures/stampys_house/stampys_house.nbt and b/common-1.20.1/src/main/resources/data/antarchy/structures/stampys_house/stampys_house.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/stampys_house/stampys_house_bottom1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/stampys_house/stampys_house_bottom1.nbt index 622db2cc..637dec23 100644 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structures/stampys_house/stampys_house_bottom1.nbt and b/common-1.20.1/src/main/resources/data/antarchy/structures/stampys_house/stampys_house_bottom1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/stampys_house/stampys_house_bottom2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/stampys_house/stampys_house_bottom2.nbt index b63c03e4..8b634834 100644 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structures/stampys_house/stampys_house_bottom2.nbt and b/common-1.20.1/src/main/resources/data/antarchy/structures/stampys_house/stampys_house_bottom2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/temple_of_technoblade/temple_of_technoblade1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/temple_of_technoblade/temple_of_technoblade1.nbt index f83aef26..1269aed1 100644 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structures/temple_of_technoblade/temple_of_technoblade1.nbt and b/common-1.20.1/src/main/resources/data/antarchy/structures/temple_of_technoblade/temple_of_technoblade1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/temple_of_technoblade/temple_of_technoblade2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/temple_of_technoblade/temple_of_technoblade2.nbt index ac024fd7..1813e3e1 100644 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structures/temple_of_technoblade/temple_of_technoblade2.nbt and b/common-1.20.1/src/main/resources/data/antarchy/structures/temple_of_technoblade/temple_of_technoblade2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/temple_of_technoblade/temple_of_technoblade3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/temple_of_technoblade/temple_of_technoblade3.nbt index 873704bf..037b54fb 100644 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structures/temple_of_technoblade/temple_of_technoblade3.nbt and b/common-1.20.1/src/main/resources/data/antarchy/structures/temple_of_technoblade/temple_of_technoblade3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/tigers_eye_shrine/tigers_eye_shrine.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/tigers_eye_shrine/tigers_eye_shrine.nbt new file mode 100644 index 00000000..37be6c09 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/tigers_eye_shrine/tigers_eye_shrine.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/toreterror_arena/toreterror_arena.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/toreterror_arena/toreterror_arena.nbt index 2a2e871f..92298ebc 100644 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structures/toreterror_arena/toreterror_arena.nbt and b/common-1.20.1/src/main/resources/data/antarchy/structures/toreterror_arena/toreterror_arena.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/toreterror_arena/toreterror_arena_bottom.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/toreterror_arena/toreterror_arena_bottom.nbt index c02c9e2f..f74ef941 100644 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structures/toreterror_arena/toreterror_arena_bottom.nbt and b/common-1.20.1/src/main/resources/data/antarchy/structures/toreterror_arena/toreterror_arena_bottom.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/trayaurus_lab/trayaurus_lab.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/trayaurus_lab/trayaurus_lab.nbt index 46d6f375..8256d693 100644 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structures/trayaurus_lab/trayaurus_lab.nbt and b/common-1.20.1/src/main/resources/data/antarchy/structures/trayaurus_lab/trayaurus_lab.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/trayaurus_lab/trayaurus_lab_bottom.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/trayaurus_lab/trayaurus_lab_bottom.nbt index e30dedf0..eaaa5d16 100644 Binary files a/common-1.20.1/src/main/resources/data/antarchy/structures/trayaurus_lab/trayaurus_lab_bottom.nbt and b/common-1.20.1/src/main/resources/data/antarchy/structures/trayaurus_lab/trayaurus_lab_bottom.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/underside_castle/underside_castle1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/underside_castle/underside_castle1.nbt new file mode 100644 index 00000000..2c5e6460 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/underside_castle/underside_castle1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/underside_castle/underside_castle2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/underside_castle/underside_castle2.nbt new file mode 100644 index 00000000..e1cc4e4f Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/underside_castle/underside_castle2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/underside_castle/underside_castle3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/underside_castle/underside_castle3.nbt new file mode 100644 index 00000000..6caca77d Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/underside_castle/underside_castle3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/underside_castle/underside_castle4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/underside_castle/underside_castle4.nbt new file mode 100644 index 00000000..cf5e775d Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/underside_castle/underside_castle4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/underside_ruins/underside_ruins1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/underside_ruins/underside_ruins1.nbt new file mode 100644 index 00000000..54e017e1 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/underside_ruins/underside_ruins1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/underside_ruins/underside_ruins2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/underside_ruins/underside_ruins2.nbt new file mode 100644 index 00000000..8c12dd32 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/underside_ruins/underside_ruins2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/underside_ruins/underside_ruins3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/underside_ruins/underside_ruins3.nbt new file mode 100644 index 00000000..a5e0c386 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/underside_ruins/underside_ruins3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/underside_ruins/underside_ruins4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/underside_ruins/underside_ruins4.nbt new file mode 100644 index 00000000..0de49ab6 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/underside_ruins/underside_ruins4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/underside_ruins/underside_ruins5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/underside_ruins/underside_ruins5.nbt new file mode 100644 index 00000000..97b2e95b Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/underside_ruins/underside_ruins5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/underside_ruins/underside_ruins6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/underside_ruins/underside_ruins6.nbt new file mode 100644 index 00000000..643ebb04 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/underside_ruins/underside_ruins6.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/underside_ruins/underside_ruins7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/underside_ruins/underside_ruins7.nbt new file mode 100644 index 00000000..6490a171 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/underside_ruins/underside_ruins7.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/underside_ruins/underside_ruins8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/underside_ruins/underside_ruins8.nbt new file mode 100644 index 00000000..5c78ba19 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/underside_ruins/underside_ruins8.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/underside_ruins/underside_ruins9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/underside_ruins/underside_ruins9.nbt new file mode 100644 index 00000000..7e21eeb0 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/underside_ruins/underside_ruins9.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/village/computer_scientist_basement.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/village/computer_scientist_basement.nbt new file mode 100644 index 00000000..c20a7a82 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/village/computer_scientist_basement.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structures/village/computer_scientist_house.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/village/computer_scientist_house.nbt new file mode 100644 index 00000000..e75950bb Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structures/village/computer_scientist_house.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/amber_moss_replaceable.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/amber_moss_replaceable.json deleted file mode 100644 index 7c1185df..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/amber_moss_replaceable.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "values": [ - "#minecraft:moss_replaceable", - "antarchy:myrmite", - "antarchy:broodstone", - "antarchy:amber_moss_block" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/antimetal_inversion_blocks.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/antimetal_inversion_blocks.json deleted file mode 100644 index 9ae6d24b..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/antimetal_inversion_blocks.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "values": [ - "antarchy:antimetal", - "antarchy:polished_antimetal", - "antarchy:antimetal_stairs", - "antarchy:antimetal_slab", - "antarchy:polished_antimetal_stairs", - "antarchy:polished_antimetal_slab" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/biowart_replaceable.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/biowart_replaceable.json deleted file mode 100644 index 883c1482..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/biowart_replaceable.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:biomite", - "antarchy:biomite_turf" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/biowart_tendrils_plantable.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/biowart_tendrils_plantable.json deleted file mode 100644 index 3629673d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/biowart_tendrils_plantable.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:biomite_turf" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/bluestone_components.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/bluestone_components.json deleted file mode 100644 index 88779158..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/bluestone_components.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:bluestone_wire", - "antarchy:bluestone_block", - "antarchy:bluestone_repeater", - "antarchy:bluestone_comparator", - "antarchy:bluestone_torch" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/bluestone_connectable.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/bluestone_connectable.json deleted file mode 100644 index 88779158..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/bluestone_connectable.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:bluestone_wire", - "antarchy:bluestone_block", - "antarchy:bluestone_repeater", - "antarchy:bluestone_comparator", - "antarchy:bluestone_torch" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/blush_moss_replaceable.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/blush_moss_replaceable.json deleted file mode 100644 index 9ccd3add..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/blush_moss_replaceable.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "values": [ - "#minecraft:moss_replaceable", - "antarchy:nyxite", - "minecraft:blackstone", - "antarchy:blush_moss_block" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/caterpillar_foods.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/caterpillar_foods.json deleted file mode 100644 index 02f823bf..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/caterpillar_foods.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:orange_milkweed", - "antarchy:pink_milkweed" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/cavaryn_portal_frames.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/cavaryn_portal_frames.json deleted file mode 100644 index 2976b86e..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/cavaryn_portal_frames.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:myrmite" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/coral_blocks.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/coral_blocks.json deleted file mode 100644 index 731c04f2..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/coral_blocks.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:star_coral_block" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/coral_plants.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/coral_plants.json deleted file mode 100644 index 964b717d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/coral_plants.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:star_coral" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/corals.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/corals.json deleted file mode 100644 index d900f62f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/corals.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:star_coral", - "antarchy:star_coral_fan" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/cornea_stalk_nyxite.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/cornea_stalk_nyxite.json deleted file mode 100644 index deca3ec2..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/cornea_stalk_nyxite.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:nyxite", - "antarchy:pale_nyxite" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/cornea_stalk_plantable.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/cornea_stalk_plantable.json deleted file mode 100644 index f38f0dec..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/cornea_stalk_plantable.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:nyxite", - "antarchy:pale_nyxite", - "antarchy:umbral_moss_block", - "antarchy:dream_sand" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/dream_fire_base_blocks.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/dream_fire_base_blocks.json deleted file mode 100644 index 195afc30..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/dream_fire_base_blocks.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "values": [ - "antarchy:nyxite", - "antarchy:polished_nyxite", - "antarchy:chiseled_nyxite", - "antarchy:nyxite_bricks", - "antarchy:mossy_nyxite_bricks", - "antarchy:nyxite_stairs", - "antarchy:nyxite_slab", - "antarchy:nyxite_wall", - "antarchy:polished_nyxite_stairs", - "antarchy:polished_nyxite_slab", - "antarchy:polished_nyxite_wall", - "antarchy:polished_nyxite_pressure_plate", - "antarchy:polished_nyxite_button", - "antarchy:nyxite_brick_stairs", - "antarchy:nyxite_brick_slab", - "antarchy:nyxite_brick_wall", - "antarchy:mossy_nyxite_brick_stairs", - "antarchy:mossy_nyxite_brick_slab", - "antarchy:mossy_nyxite_brick_wall", - "antarchy:nyxite_pillar", - "antarchy:pale_nyxite", - "antarchy:nyxite_spike", - "antarchy:potent_nyxite", - "antarchy:dream_sand", - "antarchy:dream_sandstone", - "antarchy:chiseled_dream_sandstone", - "antarchy:cut_dream_sandstone", - "antarchy:smooth_dream_sandstone", - "antarchy:typhonite", - "antarchy:veined_typhonite", - "antarchy:typhonite_spike", - "antarchy:typhonite_bricks", - "antarchy:chiseled_typhonite", - "antarchy:polished_typhonite", - "antarchy:typhonite_stairs", - "antarchy:typhonite_slab", - "antarchy:typhonite_wall", - "antarchy:typhonite_brick_stairs", - "antarchy:typhonite_brick_slab", - "antarchy:typhonite_brick_wall", - "antarchy:polished_typhonite_stairs", - "antarchy:polished_typhonite_slab", - "antarchy:polished_typhonite_wall" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/duplicator_tree_blacklist.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/duplicator_tree_blacklist.json deleted file mode 100644 index af2fbd55..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/duplicator_tree_blacklist.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "replace": false, - "values": [ - "minecraft:bedrock", - "minecraft:barrier", - "minecraft:light", - "minecraft:spawner", - "minecraft:end_portal_frame", - "minecraft:end_portal", - "minecraft:nether_portal", - "minecraft:command_block", - "minecraft:chain_command_block", - "minecraft:repeating_command_block", - "minecraft:structure_block", - "minecraft:structure_void", - "minecraft:jigsaw", - "minecraft:moving_piston", - "minecraft:piston_head" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/elythia_portal_frames.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/elythia_portal_frames.json deleted file mode 100644 index 76a695aa..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/elythia_portal_frames.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:mossy_ouranwood_wood", - "antarchy:mossy_ouranwood_log" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/gravity_gun_blacklist.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/gravity_gun_blacklist.json deleted file mode 100644 index af2fbd55..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/gravity_gun_blacklist.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "replace": false, - "values": [ - "minecraft:bedrock", - "minecraft:barrier", - "minecraft:light", - "minecraft:spawner", - "minecraft:end_portal_frame", - "minecraft:end_portal", - "minecraft:nether_portal", - "minecraft:command_block", - "minecraft:chain_command_block", - "minecraft:repeating_command_block", - "minecraft:structure_block", - "minecraft:structure_void", - "minecraft:jigsaw", - "minecraft:moving_piston", - "minecraft:piston_head" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/hercules_beetle_charge_immune_blocks.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/hercules_beetle_charge_immune_blocks.json deleted file mode 100644 index 5234c475..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/hercules_beetle_charge_immune_blocks.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "replace": false, - "values": [ - "minecraft:bedrock", - "minecraft:obsidian", - "minecraft:crying_obsidian", - "minecraft:barrier", - "minecraft:command_block", - "minecraft:chain_command_block", - "minecraft:repeating_command_block", - "minecraft:structure_block", - "minecraft:jigsaw", - "minecraft:structure_void", - "minecraft:end_portal_frame", - "minecraft:end_portal", - "minecraft:end_gateway" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/infinity_dimension_rare_ores.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/infinity_dimension_rare_ores.json deleted file mode 100644 index 639de1a7..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/infinity_dimension_rare_ores.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:uranium_ore", - "antarchy:deepslate_uranium_ore", - "antarchy:broodstone_uranium_ore", - "antarchy:titanium_ore", - "antarchy:deepslate_titanium_ore", - "antarchy:broodstone_titanium_ore", - "antarchy:uranium_block", - "antarchy:titanium_block" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/lucid_anchor_base_blocks.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/lucid_anchor_base_blocks.json deleted file mode 100644 index b68760f5..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/lucid_anchor_base_blocks.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:antimetal", - "antarchy:polished_antimetal", - "antarchy:antimetal_stairs", - "antarchy:antimetal_slab", - "antarchy:polished_antimetal_stairs", - "antarchy:polished_antimetal_slab" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/molevore_breakable_blocks.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/molevore_breakable_blocks.json deleted file mode 100644 index 74865fb9..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/molevore_breakable_blocks.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "replace": false, - "values": [ - "minecraft:coarse_dirt", - "minecraft:dirt", - "minecraft:dirt_path", - "minecraft:farmland", - "minecraft:grass_block", - "minecraft:rooted_dirt", - "minecraft:mud", - "minecraft:mycelium", - "minecraft:podzol", - "minecraft:grass_block", - "minecraft:moss_block", - "antarchy:infested_coarse_dirt", - "antarchy:infested_rooted_dirt" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/molevore_see_through_blocks.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/molevore_see_through_blocks.json deleted file mode 100644 index 74865fb9..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/molevore_see_through_blocks.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "replace": false, - "values": [ - "minecraft:coarse_dirt", - "minecraft:dirt", - "minecraft:dirt_path", - "minecraft:farmland", - "minecraft:grass_block", - "minecraft:rooted_dirt", - "minecraft:mud", - "minecraft:mycelium", - "minecraft:podzol", - "minecraft:grass_block", - "minecraft:moss_block", - "antarchy:infested_coarse_dirt", - "antarchy:infested_rooted_dirt" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/molevore_spawn_surfaces.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/molevore_spawn_surfaces.json deleted file mode 100644 index ea10945e..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/molevore_spawn_surfaces.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "replace": false, - "values": [ - "minecraft:coarse_dirt", - "minecraft:dirt", - "minecraft:dirt_path", - "minecraft:farmland", - "minecraft:grass_block", - "minecraft:rooted_dirt", - "minecraft:mud", - "minecraft:packed_mud", - "minecraft:mycelium", - "minecraft:podzol", - "minecraft:moss_block", - "minecraft:clay", - "minecraft:gravel", - "minecraft:stone", - "minecraft:granite", - "minecraft:diorite", - "minecraft:andesite", - "minecraft:tuff", - "minecraft:calcite", - "minecraft:dripstone_block", - "minecraft:deepslate", - "minecraft:cobbled_deepslate", - "antarchy:infested_coarse_dirt", - "antarchy:infested_rooted_dirt" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/nadir_logs.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/nadir_logs.json deleted file mode 100644 index 23dece7d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/nadir_logs.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:nadir_log", - "antarchy:nadir_wood", - "antarchy:stripped_nadir_log", - "antarchy:stripped_nadir_wood" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/nightmare_breakable.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/nightmare_breakable.json deleted file mode 100644 index 0ecd95ec..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/nightmare_breakable.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "replace": false, - "values": [ - "#minecraft:leaves", - "#minecraft:dirt", - "#minecraft:base_stone_overworld", - "antarchy:dream_sand", - "antarchy:dream_sandstone", - "antarchy:nyxite", - "antarchy:pale_nyxite", - "antarchy:potent_nyxite" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/nyxite.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/nyxite.json deleted file mode 100644 index 51e4f7ea..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/nyxite.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:nyxite", - "antarchy:pale_nyxite", - "antarchy:potent_nyxite" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/ouranwood_logs.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/ouranwood_logs.json deleted file mode 100644 index 01800b33..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/ouranwood_logs.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_log", - "antarchy:ouranwood_wood", - "antarchy:mossy_ouranwood_log", - "antarchy:mossy_ouranwood_wood", - "antarchy:stripped_ouranwood_log", - "antarchy:stripped_ouranwood_wood" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/peach_logs.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/peach_logs.json deleted file mode 100644 index 5a1d9ec3..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/peach_logs.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:peach_log", - "antarchy:peach_wood", - "antarchy:stripped_peach_log", - "antarchy:stripped_peach_wood" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/potent_nyxite_activation_blocks.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/potent_nyxite_activation_blocks.json deleted file mode 100644 index 5bbff63d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/potent_nyxite_activation_blocks.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "minecraft:magma_block" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/rainbow_portal_frames.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/rainbow_portal_frames.json deleted file mode 100644 index 129433a5..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/rainbow_portal_frames.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "minecraft:obsidian" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/rolly_cavern_carveable.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/rolly_cavern_carveable.json deleted file mode 100644 index d57688a4..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/rolly_cavern_carveable.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "values": [ - "antarchy:myrmite", - "antarchy:broodstone", - "antarchy:amber_moss_block", - "antarchy:amber_moss_carpet", - "minecraft:stone", - "minecraft:deepslate", - "minecraft:dirt", - "minecraft:moss_block", - "minecraft:moss_carpet", - "minecraft:short_grass", - "minecraft:tall_grass", - "minecraft:clay" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/royal_logs.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/royal_logs.json deleted file mode 100644 index a93ee69f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/royal_logs.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:royal_log", - "antarchy:royal_wood", - "antarchy:stripped_royal_log", - "antarchy:stripped_royal_wood" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/termite_foods.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/termite_foods.json deleted file mode 100644 index 54c986bb..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/termite_foods.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "replace": false, - "values": [ - "#minecraft:planks", - "#minecraft:logs", - "#minecraft:wooden_slabs", - "#minecraft:wooden_stairs", - "#minecraft:wooden_doors", - "#minecraft:wooden_trapdoors", - "#minecraft:wooden_fences", - "#minecraft:wooden_pressure_plates", - "#minecraft:wooden_buttons" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/thoraxis_portal_frames.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/thoraxis_portal_frames.json deleted file mode 100644 index f622ee69..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/thoraxis_portal_frames.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:nyxite" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/tiger_eye_camouflage_blacklist.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/tiger_eye_camouflage_blacklist.json deleted file mode 100644 index 7d4a90b8..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/tiger_eye_camouflage_blacklist.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "replace": false, - "values": [ - "minecraft:barrier", - "minecraft:light", - "minecraft:structure_void", - "minecraft:end_portal", - "minecraft:end_gateway", - "minecraft:nether_portal" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/truffalo_logs.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/truffalo_logs.json deleted file mode 100644 index 5cfc4d49..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/truffalo_logs.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:truffalo_log", - "antarchy:truffalo_wood", - "antarchy:stripped_truffalo_log", - "antarchy:stripped_truffalo_wood" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/truffalo_tuft.json deleted file mode 100644 index 3f73a76c..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/truffalo_tuft.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:white_truffalo_tuft", - "antarchy:orange_truffalo_tuft", - "antarchy:magenta_truffalo_tuft", - "antarchy:light_blue_truffalo_tuft", - "antarchy:yellow_truffalo_tuft", - "antarchy:lime_truffalo_tuft", - "antarchy:pink_truffalo_tuft", - "antarchy:gray_truffalo_tuft", - "antarchy:light_gray_truffalo_tuft", - "antarchy:cyan_truffalo_tuft", - "antarchy:purple_truffalo_tuft", - "antarchy:blue_truffalo_tuft", - "antarchy:brown_truffalo_tuft", - "antarchy:green_truffalo_tuft", - "antarchy:red_truffalo_tuft", - "antarchy:black_truffalo_tuft" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/umbral_moss_replaceable.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/umbral_moss_replaceable.json deleted file mode 100644 index dd3155a9..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/umbral_moss_replaceable.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "values": [ - "#minecraft:moss_replaceable", - "antarchy:nyxite", - "minecraft:blackstone", - "antarchy:umbral_moss_block" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/wall_corals.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/wall_corals.json deleted file mode 100644 index a42a8397..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/block/wall_corals.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:star_coral_wall_fan" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/dream_fire_base_blocks.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/dream_fire_base_blocks.json index 9fa5cb1f..195afc30 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/dream_fire_base_blocks.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/dream_fire_base_blocks.json @@ -1,10 +1,47 @@ { "values": [ "antarchy:nyxite", + "antarchy:polished_nyxite", + "antarchy:chiseled_nyxite", + "antarchy:nyxite_bricks", + "antarchy:mossy_nyxite_bricks", + "antarchy:nyxite_stairs", + "antarchy:nyxite_slab", + "antarchy:nyxite_wall", + "antarchy:polished_nyxite_stairs", + "antarchy:polished_nyxite_slab", + "antarchy:polished_nyxite_wall", + "antarchy:polished_nyxite_pressure_plate", + "antarchy:polished_nyxite_button", + "antarchy:nyxite_brick_stairs", + "antarchy:nyxite_brick_slab", + "antarchy:nyxite_brick_wall", + "antarchy:mossy_nyxite_brick_stairs", + "antarchy:mossy_nyxite_brick_slab", + "antarchy:mossy_nyxite_brick_wall", + "antarchy:nyxite_pillar", + "antarchy:pale_nyxite", + "antarchy:nyxite_spike", + "antarchy:potent_nyxite", "antarchy:dream_sand", "antarchy:dream_sandstone", "antarchy:chiseled_dream_sandstone", "antarchy:cut_dream_sandstone", - "antarchy:smooth_dream_sandstone" + "antarchy:smooth_dream_sandstone", + "antarchy:typhonite", + "antarchy:veined_typhonite", + "antarchy:typhonite_spike", + "antarchy:typhonite_bricks", + "antarchy:chiseled_typhonite", + "antarchy:polished_typhonite", + "antarchy:typhonite_stairs", + "antarchy:typhonite_slab", + "antarchy:typhonite_wall", + "antarchy:typhonite_brick_stairs", + "antarchy:typhonite_brick_slab", + "antarchy:typhonite_brick_wall", + "antarchy:polished_typhonite_stairs", + "antarchy:polished_typhonite_slab", + "antarchy:polished_typhonite_wall" ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/elythia_portal_frames.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/elythia_portal_frames.json index 364e809d..76a695aa 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/elythia_portal_frames.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/elythia_portal_frames.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:mossy_ouranwood_wood" + "antarchy:mossy_ouranwood_wood", + "antarchy:mossy_ouranwood_log" ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/nadir_logs.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/nadir_logs.json index 23dece7d..69bc6ce3 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/nadir_logs.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/nadir_logs.json @@ -1,9 +1,9 @@ { - "replace": false, - "values": [ - "antarchy:nadir_log", - "antarchy:nadir_wood", - "antarchy:stripped_nadir_log", - "antarchy:stripped_nadir_wood" - ] + "replace": false, + "values": [ + "antarchy:nadir_log", + "antarchy:nadir_wood", + "antarchy:stripped_nadir_log", + "antarchy:stripped_nadir_wood" + ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/nadir_sapling_supports.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/nadir_sapling_supports.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/tags/block/nadir_sapling_supports.json rename to common-1.20.1/src/main/resources/data/antarchy/tags/blocks/nadir_sapling_supports.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/nyxium.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/nyxium.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/tags/block/nyxium.json rename to common-1.20.1/src/main/resources/data/antarchy/tags/blocks/nyxium.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/queen_grabbable_blocks.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/queen_grabbable_blocks.json new file mode 100644 index 00000000..bd4773ed --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/queen_grabbable_blocks.json @@ -0,0 +1,16 @@ +{ + "replace": false, + "values": [ + "minecraft:grass_block", + "minecraft:gravel", + "minecraft:sand", + "minecraft:dirt", + "minecraft:mud", + "minecraft:coarse_dirt", + "antarchy:dream_sand", + "antarchy:antigravel", + "antarchy:nyxite", + "antarchy:verdant_nyxium", + "antarchy:nadir_nyxium" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/rolly_cavern_carveable.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/rolly_cavern_carveable.json index d57688a4..17dd3cb9 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/rolly_cavern_carveable.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/rolly_cavern_carveable.json @@ -9,7 +9,7 @@ "minecraft:dirt", "minecraft:moss_block", "minecraft:moss_carpet", - "minecraft:short_grass", + "minecraft:grass", "minecraft:tall_grass", "minecraft:clay" ] diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/royal_logs.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/royal_logs.json new file mode 100644 index 00000000..311fc493 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/royal_logs.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "antarchy:royal_log", + "antarchy:royal_wood", + "antarchy:stripped_royal_log", + "antarchy:stripped_royal_wood" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/truffalo_logs.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/truffalo_logs.json new file mode 100644 index 00000000..61d1ef59 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/truffalo_logs.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "antarchy:truffalo_log", + "antarchy:truffalo_wood", + "antarchy:stripped_truffalo_log", + "antarchy:stripped_truffalo_wood" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/block/truffalo_sapling_supports.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/truffalo_sapling_supports.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/tags/block/truffalo_sapling_supports.json rename to common-1.20.1/src/main/resources/data/antarchy/tags/blocks/truffalo_sapling_supports.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/truffalo_tufts.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/truffalo_tuft.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/tags/item/truffalo_tufts.json rename to common-1.20.1/src/main/resources/data/antarchy/tags/blocks/truffalo_tuft.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/damage_types/bypasses_bloodglass.json b/common-1.20.1/src/main/resources/data/antarchy/tags/damage_types/bypasses_bloodglass.json deleted file mode 100644 index 1dd0b488..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/damage_types/bypasses_bloodglass.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "replace": false, - "values": [ - "minecraft:out_of_world", - "minecraft:starve", - "minecraft:drown", - "minecraft:magic", - "minecraft:indirect_magic", - "minecraft:wither", - "minecraft:generic_kill", - "minecraft:in_wall" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/basilisk_prey.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/basilisk_prey.json deleted file mode 100644 index 73079119..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/basilisk_prey.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "replace": false, - "values": [ - "minecraft:rabbit", - "minecraft:pig", - "minecraft:chicken", - "minecraft:sheep", - "minecraft:cow", - "minecraft:mooshroom", - "minecraft:frog", - "antarchy:flying_squirrel", - "antarchy:moleworm", - "antarchy:red_ant", - "antarchy:brown_ant", - "antarchy:rainbow_ant", - "antarchy:apple_cow", - "antarchy:golden_apple_cow", - "antarchy:enchanted_golden_apple_cow", - "antarchy:caterpillar", - "antarchy:ouranwood_deer" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/dilated_blacklist.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/dilated_blacklist.json deleted file mode 100644 index 40b41861..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/dilated_blacklist.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "#antarchy:time_dilation_immune" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/dimensional_tear_common_spawns.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/dimensional_tear_common_spawns.json deleted file mode 100644 index 5a2b9482..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/dimensional_tear_common_spawns.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:lucid" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/dimensional_tear_rare_spawns.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/dimensional_tear_rare_spawns.json deleted file mode 100644 index 479d4395..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/dimensional_tear_rare_spawns.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:nightmare" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/dread_hallucination_mobs.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/dread_hallucination_mobs.json deleted file mode 100644 index 5f5b3a37..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/dread_hallucination_mobs.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:nightmare", - "antarchy:kraken", - "antarchy:emperor_scorpion", - "antarchy:basilisk", - "antarchy:molevore", - "minecraft:wither", - "minecraft:creeper", - "minecraft:skeleton", - "minecraft:spider", - "antarchy:toreterror", - "antarchy:crawling_blight", - "antarchy:skulking_fright" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/dream_sand_low_gravity_blacklist.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/dream_sand_low_gravity_blacklist.json deleted file mode 100644 index 66a9f668..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/dream_sand_low_gravity_blacklist.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:bed_bug", - "antarchy:emperor_scorpion", - "antarchy:nightmare", - "antarchy:scorpion" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/duct_tape_stick_blacklist.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/duct_tape_stick_blacklist.json deleted file mode 100644 index f716692b..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/duct_tape_stick_blacklist.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "minecraft:ender_dragon", - "minecraft:wither", - "antarchy:nightmare", - "antarchy:kraken", - "antarchy:brutalfly" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/frog_glimmer_no_eat.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/frog_glimmer_no_eat.json deleted file mode 100644 index 976b13a2..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/frog_glimmer_no_eat.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "values": [ - "antarchy:kraken", - "antarchy:toreterror", - "antarchy:emperor_scorpion", - "antarchy:alpha_mantis", - "antarchy:brutalfly", - "antarchy:king", - "antarchy:queen" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/gravity_gun_blacklist.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/gravity_gun_blacklist.json deleted file mode 100644 index e89c1547..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/gravity_gun_blacklist.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "minecraft:wither", - "minecraft:ender_dragon", - "antarchy:kraken", - "antarchy:king", - "antarchy:queen" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/horde_bosses.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/horde_bosses.json deleted file mode 100644 index 69e3896e..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/horde_bosses.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "antarchy:hercules_beetle" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/horde_common.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/horde_common.json deleted file mode 100644 index fb7759ba..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/horde_common.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "values": [ - "antarchy:crawling_blight", - "antarchy:skulking_fright" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/horde_jerry.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/horde_jerry.json deleted file mode 100644 index f81b2826..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/horde_jerry.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "antarchy:jerry" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/horde_jumpers.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/horde_jumpers.json deleted file mode 100644 index aaf442db..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/horde_jumpers.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "antarchy:springbug" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/horde_molevore.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/horde_molevore.json deleted file mode 100644 index ece7739d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/horde_molevore.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "antarchy:molevore" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/horde_moleworm.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/horde_moleworm.json deleted file mode 100644 index 8d9eb37b..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/horde_moleworm.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "antarchy:moleworm" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/horde_spitters.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/horde_spitters.json deleted file mode 100644 index 39f6a107..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/horde_spitters.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "antarchy:spit_bug" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/hushweed_targets.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/hushweed_targets.json deleted file mode 100644 index ea9c3156..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/hushweed_targets.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "minecraft:player" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/inverted_immune.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/inverted_immune.json deleted file mode 100644 index 472cb199..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/inverted_immune.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "replace": false, - "values": [ - "minecraft:ender_dragon", - "antarchy:kraken", - "antarchy:reverie", - "antarchy:lucid", - "antarchy:flytrap", - "antarchy:king" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/lucid_anchor_immune.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/lucid_anchor_immune.json deleted file mode 100644 index bc3a319e..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/lucid_anchor_immune.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:king", - "antarchy:queen" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/lucid_bolt_immune.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/lucid_bolt_immune.json deleted file mode 100644 index 687bfa85..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/lucid_bolt_immune.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:reverie" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/nightmare_no_attack.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/nightmare_no_attack.json deleted file mode 100644 index 0ec21525..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/nightmare_no_attack.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:lucid", - "antarchy:reverie" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/paralysis_immune.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/paralysis_immune.json deleted file mode 100644 index 883ca88e..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/paralysis_immune.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "antarchy:basilisk" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/queen_does_not_attack.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/queen_does_not_attack.json deleted file mode 100644 index 59264160..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/queen_does_not_attack.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:manticore", - "antarchy:nightmare", - "antarchy:lucid", - "antarchy:reverie", - "antarchy:bed_bug", - "antarchy:creeping_horror", - "antarchy:lurking_terror", - "antarchy:jumpy_bug" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/scorpion_whip_blacklist.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/scorpion_whip_blacklist.json deleted file mode 100644 index bc3a319e..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/scorpion_whip_blacklist.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:king", - "antarchy:queen" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/size_changing_immune.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/size_changing_immune.json deleted file mode 100644 index bc3a319e..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/size_changing_immune.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:king", - "antarchy:queen" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/stinky_repelled_hostiles.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/stinky_repelled_hostiles.json deleted file mode 100644 index 8d81eb57..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/stinky_repelled_hostiles.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "minecraft:enderman", - "minecraft:piglin", - "minecraft:piglin", - "minecraft:hoglin", - "minecraft:piglin_brute" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/tiger_eye_detection_immune.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/tiger_eye_detection_immune.json deleted file mode 100644 index 2217668a..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/tiger_eye_detection_immune.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:kraken", - "antarchy:nightmare", - "antarchy:toreterror", - "antarchy:emperor_scorpion", - "antarchy:king", - "antarchy:queen" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/time_dilation_immune.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/time_dilation_immune.json deleted file mode 100644 index 40d7c4a7..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/time_dilation_immune.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "minecraft:marker", - "minecraft:area_effect_cloud" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/triffid_prey.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/triffid_prey.json deleted file mode 100644 index c6fb3f7c..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/triffid_prey.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:flying_squirrel", - "antarchy:caterpillar", - "antarchy:butterfly", - "minecraft:chicken", - "minecraft:rabbit", - "minecraft:frog", - "minecraft:parrot" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/wind_vortex_immune.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/wind_vortex_immune.json deleted file mode 100644 index 80cd88ae..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/wind_vortex_immune.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:vortex", - "minecraft:breeze", - "antarchy:king", - "antarchy:queen" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/arthropods.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/arthropods.json new file mode 100644 index 00000000..717f111b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/arthropods.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "antarchy:alpha_mantis", + "antarchy:bed_bug", + "antarchy:bomber", + "antarchy:brutalfly", + "antarchy:butterfly", + "antarchy:caterpillar", + "antarchy:emperor_scorpion", + "antarchy:flytrap", + "antarchy:hercules_beetle", + "antarchy:mantis", + "antarchy:rolly_polly", + "antarchy:scorpion", + "antarchy:spit_bug", + "antarchy:springbug", + "antarchy:stink_bug", + "antarchy:wasp" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/commanded_blacklist.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/commanded_blacklist.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/commanded_blacklist.json rename to common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/commanded_blacklist.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/critter_cage_blacklist.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/critter_cage_blacklist.json index 5d341ba2..bc3a319e 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/critter_cage_blacklist.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/critter_cage_blacklist.json @@ -1,4 +1,7 @@ { "replace": false, - "values": [] + "values": [ + "antarchy:king", + "antarchy:queen" + ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/dilated_blacklist.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/dilated_blacklist.json new file mode 100644 index 00000000..c3d9a718 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/dilated_blacklist.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "#anthology:time_dilation_immune" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/dread_hallucination_mobs.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/dread_hallucination_mobs.json index c3129700..5f5b3a37 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/dread_hallucination_mobs.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/dread_hallucination_mobs.json @@ -11,7 +11,7 @@ "minecraft:skeleton", "minecraft:spider", "antarchy:toreterror", - "antarchy:creeping_horror", - "antarchy:lurking_terror" + "antarchy:crawling_blight", + "antarchy:skulking_fright" ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/flytrap_prey.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/flytrap_prey.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/flytrap_prey.json rename to common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/flytrap_prey.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/frog_glimmer_no_eat.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/frog_glimmer_no_eat.json index abe11627..976b13a2 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/frog_glimmer_no_eat.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/frog_glimmer_no_eat.json @@ -4,6 +4,8 @@ "antarchy:toreterror", "antarchy:emperor_scorpion", "antarchy:alpha_mantis", - "antarchy:brutalfly" + "antarchy:brutalfly", + "antarchy:king", + "antarchy:queen" ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/gravity_gun_blacklist.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/gravity_gun_blacklist.json index 5ec6d6a2..e89c1547 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/gravity_gun_blacklist.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/gravity_gun_blacklist.json @@ -3,6 +3,8 @@ "values": [ "minecraft:wither", "minecraft:ender_dragon", - "antarchy:kraken" + "antarchy:kraken", + "antarchy:king", + "antarchy:queen" ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/horde_common.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/horde_common.json index 3cc117aa..fb7759ba 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/horde_common.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/horde_common.json @@ -1,6 +1,6 @@ { "values": [ - "antarchy:creeping_horror", - "antarchy:lurking_terror" + "antarchy:crawling_blight", + "antarchy:skulking_fright" ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/horde_jumpers.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/horde_jumpers.json index 298fd78a..aaf442db 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/horde_jumpers.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/horde_jumpers.json @@ -1,5 +1,5 @@ { "values": [ - "antarchy:jumpy_bug" + "antarchy:springbug" ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/inverted_immune.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/inverted_immune.json index 186c34bc..472cb199 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/inverted_immune.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/inverted_immune.json @@ -2,11 +2,10 @@ "replace": false, "values": [ "minecraft:ender_dragon", - "antarchy:emperor_scorpion", "antarchy:kraken", - "antarchy:nightmare", "antarchy:reverie", "antarchy:lucid", - "antarchy:triffid" + "antarchy:flytrap", + "antarchy:king" ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/lucid_anchor_immune.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/lucid_anchor_immune.json index 5d341ba2..bc3a319e 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/lucid_anchor_immune.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/lucid_anchor_immune.json @@ -1,4 +1,7 @@ { "replace": false, - "values": [] + "values": [ + "antarchy:king", + "antarchy:queen" + ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/nightmare_no_attack.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/nightmare_no_attack.json index 0ec21525..c8ff2d80 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/nightmare_no_attack.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/nightmare_no_attack.json @@ -2,6 +2,11 @@ "replace": false, "values": [ "antarchy:lucid", - "antarchy:reverie" + "antarchy:reverie", + "antarchy:scorpion", + "antarchy:bed_bug", + "antarchy:queen", + "antarchy:princess", + "antarchy:manticore" ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/queen_does_not_attack.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/queen_does_not_attack.json new file mode 100644 index 00000000..f40bea9f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/queen_does_not_attack.json @@ -0,0 +1,12 @@ +{ + "replace": false, + "values": [ + "antarchy:manticore", + "antarchy:nightmare", + "antarchy:lucid", + "antarchy:reverie", + "antarchy:bed_bug", + "antarchy:scorpion", + "antarchy:emperor_scorpion" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/scorpion_whip_blacklist.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/scorpion_whip_blacklist.json index 5d341ba2..bc3a319e 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/scorpion_whip_blacklist.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/scorpion_whip_blacklist.json @@ -1,4 +1,7 @@ { "replace": false, - "values": [] + "values": [ + "antarchy:king", + "antarchy:queen" + ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/size_changing_immune.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/size_changing_immune.json index 5d341ba2..bc3a319e 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/size_changing_immune.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/size_changing_immune.json @@ -1,4 +1,7 @@ { "replace": false, - "values": [] + "values": [ + "antarchy:king", + "antarchy:queen" + ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/spell_resistant_boss.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/spell_resistant_boss.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/spell_resistant_boss.json rename to common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/spell_resistant_boss.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/tiger_eye_detection_immune.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/tiger_eye_detection_immune.json index 6becc3cd..2217668a 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/tiger_eye_detection_immune.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/tiger_eye_detection_immune.json @@ -4,6 +4,8 @@ "antarchy:kraken", "antarchy:nightmare", "antarchy:toreterror", - "antarchy:emperor_scorpion" + "antarchy:emperor_scorpion", + "antarchy:king", + "antarchy:queen" ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/triffid_prey.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/triffid_prey.json deleted file mode 100644 index c6fb3f7c..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/triffid_prey.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:flying_squirrel", - "antarchy:caterpillar", - "antarchy:butterfly", - "minecraft:chicken", - "minecraft:rabbit", - "minecraft:frog", - "minecraft:parrot" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/underside_ceiling_short_gap.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/underside_ceiling_short_gap.json new file mode 100644 index 00000000..893d2c0e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/underside_ceiling_short_gap.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:scorpion" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/underside_ceiling_spawners.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/underside_ceiling_spawners.json new file mode 100644 index 00000000..945a67e1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/underside_ceiling_spawners.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "antarchy:scorpion", + "antarchy:emperor_scorpion", + "antarchy:manticore" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/wind_vortex_immune.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/wind_vortex_immune.json new file mode 100644 index 00000000..c77052f9 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/wind_vortex_immune.json @@ -0,0 +1,12 @@ +{ + "replace": false, + "values": [ + "antarchy:vortex", + { + "id": "minecraft:breeze", + "required": false + }, + "antarchy:king", + "antarchy:queen" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/fluid/antiwater.json b/common-1.20.1/src/main/resources/data/antarchy/tags/fluid/antiwater.json deleted file mode 100644 index cb0c3b1f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/fluid/antiwater.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:antiwater", - "antarchy:flowing_antiwater" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/fluid/giant_lily_pad_supporting_fluids.json b/common-1.20.1/src/main/resources/data/antarchy/tags/fluid/giant_lily_pad_supporting_fluids.json deleted file mode 100644 index ba96d3e9..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/fluid/giant_lily_pad_supporting_fluids.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "replace": false, - "values": [ - "minecraft:water", - "minecraft:flowing_water", - "antarchy:lumen" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/fluid/lumen.json b/common-1.20.1/src/main/resources/data/antarchy/tags/fluid/lumen.json deleted file mode 100644 index f44595c4..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/fluid/lumen.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:lumen", - "antarchy:flowing_lumen" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/brown_ant_activation_items.json b/common-1.20.1/src/main/resources/data/antarchy/tags/item/brown_ant_activation_items.json deleted file mode 100644 index bc87462f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/item/brown_ant_activation_items.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "minecraft:sugar" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/brown_ant_breeding_foods.json b/common-1.20.1/src/main/resources/data/antarchy/tags/item/brown_ant_breeding_foods.json deleted file mode 100644 index bc87462f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/item/brown_ant_breeding_foods.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "minecraft:sugar" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/butterfly_breeding_foods.json b/common-1.20.1/src/main/resources/data/antarchy/tags/item/butterfly_breeding_foods.json deleted file mode 100644 index 02f823bf..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/item/butterfly_breeding_foods.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:orange_milkweed", - "antarchy:pink_milkweed" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/caterpillar_foods.json b/common-1.20.1/src/main/resources/data/antarchy/tags/item/caterpillar_foods.json deleted file mode 100644 index 02f823bf..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/item/caterpillar_foods.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:orange_milkweed", - "antarchy:pink_milkweed" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/corndog_meats.json b/common-1.20.1/src/main/resources/data/antarchy/tags/item/corndog_meats.json deleted file mode 100644 index e7b7233e..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/item/corndog_meats.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "replace": false, - "values": [ - "minecraft:chicken", - "minecraft:porkchop", - { - "id": "c:foods/raw_meat", - "required": false - }, - { - "id": "c:foods/raw_chicken", - "required": false - }, - { - "id": "c:foods/raw_pork", - "required": false - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/dream_fire_base_blocks.json b/common-1.20.1/src/main/resources/data/antarchy/tags/item/dream_fire_base_blocks.json deleted file mode 100644 index b27038b4..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/item/dream_fire_base_blocks.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "values": [ - "antarchy:dream_sand", - "antarchy:dream_sandstone" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/easter_bunny_spawn_egg_blacklist.json b/common-1.20.1/src/main/resources/data/antarchy/tags/item/easter_bunny_spawn_egg_blacklist.json deleted file mode 100644 index 9f62d724..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/item/easter_bunny_spawn_egg_blacklist.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "minecraft:ender_dragon_spawn_egg", - "minecraft:wither_spawn_egg" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/flying_squirrel_nuts.json b/common-1.20.1/src/main/resources/data/antarchy/tags/item/flying_squirrel_nuts.json deleted file mode 100644 index 2af25ce5..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/item/flying_squirrel_nuts.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_acorn" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/glimmer_augment_ant.json b/common-1.20.1/src/main/resources/data/antarchy/tags/item/glimmer_augment_ant.json deleted file mode 100644 index 2bee141d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/item/glimmer_augment_ant.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:bread" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/glimmer_augment_apple_cow.json b/common-1.20.1/src/main/resources/data/antarchy/tags/item/glimmer_augment_apple_cow.json deleted file mode 100644 index 3fa00a6b..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/item/glimmer_augment_apple_cow.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:apple" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/glimmer_augment_elka.json b/common-1.20.1/src/main/resources/data/antarchy/tags/item/glimmer_augment_elka.json deleted file mode 100644 index b11da3ed..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/item/glimmer_augment_elka.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "antarchy:peach" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/glimmer_augment_frog.json b/common-1.20.1/src/main/resources/data/antarchy/tags/item/glimmer_augment_frog.json deleted file mode 100644 index d9233809..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/item/glimmer_augment_frog.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:slime_ball" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/glimmer_augment_ouranwood_deer.json b/common-1.20.1/src/main/resources/data/antarchy/tags/item/glimmer_augment_ouranwood_deer.json deleted file mode 100644 index f0885728..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/item/glimmer_augment_ouranwood_deer.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:glow_berries" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/hercules_beetle_food.json b/common-1.20.1/src/main/resources/data/antarchy/tags/item/hercules_beetle_food.json deleted file mode 100644 index 445d82b1..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/item/hercules_beetle_food.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:broodfruit" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/hfcs_cannot_americanize.json b/common-1.20.1/src/main/resources/data/antarchy/tags/item/hfcs_cannot_americanize.json deleted file mode 100644 index 86dde3df..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/item/hfcs_cannot_americanize.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "values": [] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/multishot_enchantable.json b/common-1.20.1/src/main/resources/data/antarchy/tags/item/multishot_enchantable.json deleted file mode 100644 index 1b6b505d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/item/multishot_enchantable.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "replace": false, - "values": [ - "#minecraft:enchantable/crossbow", - "antarchy:squidzooka", - "antarchy:rpo_launcher" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/nadir_logs.json b/common-1.20.1/src/main/resources/data/antarchy/tags/item/nadir_logs.json deleted file mode 100644 index 23dece7d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/item/nadir_logs.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:nadir_log", - "antarchy:nadir_wood", - "antarchy:stripped_nadir_log", - "antarchy:stripped_nadir_wood" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/ouranwood_deer_food.json b/common-1.20.1/src/main/resources/data/antarchy/tags/item/ouranwood_deer_food.json deleted file mode 100644 index 6c67336b..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/item/ouranwood_deer_food.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "replace": false, - "values": [ - "minecraft:glow_berries", - "minecraft:sweet_berries", - "minecraft:apple", - "antarchy:ouranwood_acorn" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/ouranwood_logs.json b/common-1.20.1/src/main/resources/data/antarchy/tags/item/ouranwood_logs.json deleted file mode 100644 index 01800b33..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/item/ouranwood_logs.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_log", - "antarchy:ouranwood_wood", - "antarchy:mossy_ouranwood_log", - "antarchy:mossy_ouranwood_wood", - "antarchy:stripped_ouranwood_log", - "antarchy:stripped_ouranwood_wood" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/peach_logs.json b/common-1.20.1/src/main/resources/data/antarchy/tags/item/peach_logs.json deleted file mode 100644 index 5a1d9ec3..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/item/peach_logs.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:peach_log", - "antarchy:peach_wood", - "antarchy:stripped_peach_log", - "antarchy:stripped_peach_wood" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/rainbow_ant_activation_items.json b/common-1.20.1/src/main/resources/data/antarchy/tags/item/rainbow_ant_activation_items.json deleted file mode 100644 index 4277b9ed..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/item/rainbow_ant_activation_items.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:rainbow_sugar" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/rainbow_ant_breeding_foods.json b/common-1.20.1/src/main/resources/data/antarchy/tags/item/rainbow_ant_breeding_foods.json deleted file mode 100644 index 4277b9ed..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/item/rainbow_ant_breeding_foods.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:rainbow_sugar" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/red_ant_activation_items.json b/common-1.20.1/src/main/resources/data/antarchy/tags/item/red_ant_activation_items.json deleted file mode 100644 index bc87462f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/item/red_ant_activation_items.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "minecraft:sugar" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/red_ant_breeding_foods.json b/common-1.20.1/src/main/resources/data/antarchy/tags/item/red_ant_breeding_foods.json deleted file mode 100644 index bc87462f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/item/red_ant_breeding_foods.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "minecraft:sugar" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/reverie_duplication_items.json b/common-1.20.1/src/main/resources/data/antarchy/tags/item/reverie_duplication_items.json deleted file mode 100644 index fa1bf6b6..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/item/reverie_duplication_items.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:blood_crystal_shard" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/rolly_polly_food.json b/common-1.20.1/src/main/resources/data/antarchy/tags/item/rolly_polly_food.json deleted file mode 100644 index 445d82b1..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/item/rolly_polly_food.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:broodfruit" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/roots.json b/common-1.20.1/src/main/resources/data/antarchy/tags/item/roots.json deleted file mode 100644 index 5760628e..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/item/roots.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "minecraft:hanging_roots", - "minecraft:crimson_roots", - "minecraft:warped_roots", - "antarchy:nadir_roots", - "antarchy:verdant_roots" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/royal_logs.json b/common-1.20.1/src/main/resources/data/antarchy/tags/item/royal_logs.json deleted file mode 100644 index a93ee69f..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/item/royal_logs.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:royal_log", - "antarchy:royal_wood", - "antarchy:stripped_royal_log", - "antarchy:stripped_royal_wood" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/royal_mount_food.json b/common-1.20.1/src/main/resources/data/antarchy/tags/item/royal_mount_food.json deleted file mode 100644 index 309a6662..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/item/royal_mount_food.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "replace": false, - "values": [ - "minecraft:golden_apple", - "minecraft:enchanted_golden_apple", - "minecraft:golden_carrot", - "minecraft:glistering_melon_slice", - "antarchy:king_scale", - "antarchy:queen_scale" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/termite_activation_items.json b/common-1.20.1/src/main/resources/data/antarchy/tags/item/termite_activation_items.json deleted file mode 100644 index 90f5f079..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/item/termite_activation_items.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "minecraft:stick" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/termite_breeding_foods.json b/common-1.20.1/src/main/resources/data/antarchy/tags/item/termite_breeding_foods.json deleted file mode 100644 index d280b15e..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/item/termite_breeding_foods.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "replace": false, - "values": [ - "#minecraft:logs", - "#minecraft:planks", - "#minecraft:wooden_slabs", - "#minecraft:wooden_stairs", - "#minecraft:wooden_fences", - "#minecraft:fence_gates", - "#minecraft:wooden_doors", - "#minecraft:wooden_trapdoors", - "#minecraft:wooden_pressure_plates", - "#minecraft:wooden_buttons", - "minecraft:stick", - "minecraft:bowl", - "minecraft:ladder", - "minecraft:crafting_table", - "minecraft:chest", - "minecraft:barrel" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/tigers_eye_armor.json b/common-1.20.1/src/main/resources/data/antarchy/tags/item/tigers_eye_armor.json deleted file mode 100644 index e2b2f6b2..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/item/tigers_eye_armor.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:tigers_eye_helmet", - "antarchy:tigers_eye_chestplate", - "antarchy:tigers_eye_leggings", - "antarchy:tigers_eye_boots" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/truffalo_logs.json b/common-1.20.1/src/main/resources/data/antarchy/tags/item/truffalo_logs.json deleted file mode 100644 index 5cfc4d49..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/item/truffalo_logs.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:truffalo_log", - "antarchy:truffalo_wood", - "antarchy:stripped_truffalo_log", - "antarchy:stripped_truffalo_wood" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/truffalo_tuft.json b/common-1.20.1/src/main/resources/data/antarchy/tags/item/truffalo_tuft.json deleted file mode 100644 index 3f73a76c..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/item/truffalo_tuft.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:white_truffalo_tuft", - "antarchy:orange_truffalo_tuft", - "antarchy:magenta_truffalo_tuft", - "antarchy:light_blue_truffalo_tuft", - "antarchy:yellow_truffalo_tuft", - "antarchy:lime_truffalo_tuft", - "antarchy:pink_truffalo_tuft", - "antarchy:gray_truffalo_tuft", - "antarchy:light_gray_truffalo_tuft", - "antarchy:cyan_truffalo_tuft", - "antarchy:purple_truffalo_tuft", - "antarchy:blue_truffalo_tuft", - "antarchy:brown_truffalo_tuft", - "antarchy:green_truffalo_tuft", - "antarchy:red_truffalo_tuft", - "antarchy:black_truffalo_tuft" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/venison_foods.json b/common-1.20.1/src/main/resources/data/antarchy/tags/item/venison_foods.json deleted file mode 100644 index 43bb9bec..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/item/venison_foods.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:raw_venison", - "antarchy:cooked_venison" - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/big_bertha_ingredient.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/big_bertha_ingredient.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/tags/item/big_bertha_ingredient.json rename to common-1.20.1/src/main/resources/data/antarchy/tags/items/big_bertha_ingredient.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/hoverboards.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/hoverboards.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/tags/item/hoverboards.json rename to common-1.20.1/src/main/resources/data/antarchy/tags/items/hoverboards.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/items/nadir_logs.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/nadir_logs.json index 23dece7d..69bc6ce3 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/items/nadir_logs.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/nadir_logs.json @@ -1,9 +1,9 @@ { - "replace": false, - "values": [ - "antarchy:nadir_log", - "antarchy:nadir_wood", - "antarchy:stripped_nadir_log", - "antarchy:stripped_nadir_wood" - ] + "replace": false, + "values": [ + "antarchy:nadir_log", + "antarchy:nadir_wood", + "antarchy:stripped_nadir_log", + "antarchy:stripped_nadir_wood" + ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/items/rainbow_ant_breeding_foods.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/rainbow_ant_breeding_foods.json index bc87462f..4277b9ed 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/items/rainbow_ant_breeding_foods.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/rainbow_ant_breeding_foods.json @@ -1,6 +1,6 @@ { "replace": false, "values": [ - "minecraft:sugar" + "antarchy:rainbow_sugar" ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/items/rolly_polly_food.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/rolly_polly_food.json index 4c6d4e2a..445d82b1 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/items/rolly_polly_food.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/rolly_polly_food.json @@ -1,7 +1,6 @@ { "replace": false, "values": [ - "minecraft:glow_berries", - "minecraft:sweet_berries" + "antarchy:broodfruit" ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/items/roots.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/roots.json index 149abdd0..5760628e 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/items/roots.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/roots.json @@ -3,6 +3,8 @@ "values": [ "minecraft:hanging_roots", "minecraft:crimson_roots", - "minecraft:warped_roots" + "minecraft:warped_roots", + "antarchy:nadir_roots", + "antarchy:verdant_roots" ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/items/royal_logs.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/royal_logs.json new file mode 100644 index 00000000..311fc493 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/royal_logs.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "antarchy:royal_log", + "antarchy:royal_wood", + "antarchy:stripped_royal_log", + "antarchy:stripped_royal_wood" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/items/royal_mount_food.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/royal_mount_food.json new file mode 100644 index 00000000..cc88f921 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/royal_mount_food.json @@ -0,0 +1,22 @@ +{ + "replace": false, + "values": [ + "minecraft:golden_apple", + "minecraft:enchanted_golden_apple", + "minecraft:golden_carrot", + "minecraft:glistering_melon_slice", + "minecraft:gold_ingot", + "minecraft:gold_nugget", + "minecraft:gold_block", + "minecraft:golden_sword", + "minecraft:golden_pickaxe", + "minecraft:golden_axe", + "minecraft:golden_shovel", + "minecraft:golden_hoe", + "minecraft:golden_helmet", + "minecraft:golden_chestplate", + "minecraft:golden_leggings", + "minecraft:golden_boots", + "minecraft:golden_horse_armor" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/items/truffalo_logs.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/truffalo_logs.json new file mode 100644 index 00000000..61d1ef59 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/truffalo_logs.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "antarchy:truffalo_log", + "antarchy:truffalo_wood", + "antarchy:stripped_truffalo_log", + "antarchy:stripped_truffalo_wood" + ] +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/wool.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/truffalo_tuft.json similarity index 100% rename from common-1.20.1/src/main/resources/data/minecraft/tags/item/wool.json rename to common-1.20.1/src/main/resources/data/antarchy/tags/items/truffalo_tuft.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/items/truffalo_tufts.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/truffalo_tufts.json new file mode 100644 index 00000000..5035174d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/truffalo_tufts.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "antarchy:white_truffalo_tuft", + "antarchy:orange_truffalo_tuft", + "antarchy:magenta_truffalo_tuft", + "antarchy:light_blue_truffalo_tuft", + "antarchy:yellow_truffalo_tuft", + "antarchy:lime_truffalo_tuft", + "antarchy:pink_truffalo_tuft", + "antarchy:gray_truffalo_tuft", + "antarchy:light_gray_truffalo_tuft", + "antarchy:cyan_truffalo_tuft", + "antarchy:purple_truffalo_tuft", + "antarchy:blue_truffalo_tuft", + "antarchy:brown_truffalo_tuft", + "antarchy:green_truffalo_tuft", + "antarchy:red_truffalo_tuft", + "antarchy:black_truffalo_tuft" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/apple_cow_spawn_biomes.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/apple_cow_spawn_biomes.json index 98db4759..2f7b6bec 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/apple_cow_spawn_biomes.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/apple_cow_spawn_biomes.json @@ -1,8 +1,35 @@ { "replace": false, "values": [ - "#c:is_plains", - "#c:is_forest", - "#c:is_taiga" + { + "id": "#c:is_plains", + "required": false + }, + { + "id": "#c:plains", + "required": false + }, + { + "id": "#forge:is_plains", + "required": false + }, + { + "id": "#c:is_forest", + "required": false + }, + "#minecraft:is_forest", + { + "id": "#c:forest", + "required": false + }, + { + "id": "#c:is_taiga", + "required": false + }, + "#minecraft:is_taiga", + { + "id": "#c:taiga", + "required": false + } ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/elythia_firefly_particle_biomes.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/elythia_firefly_particle_biomes.json index 6e759e17..00bf6aae 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/elythia_firefly_particle_biomes.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/elythia_firefly_particle_biomes.json @@ -2,6 +2,7 @@ "replace": false, "values": [ "antarchy:elythia_meadow", + "antarchy:truffalo_forest", "antarchy:butterfly_fields", "antarchy:ouranwood_forest", "antarchy:peach_forest", diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/enchanted_golden_apple_cow_spawn_biomes.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/enchanted_golden_apple_cow_spawn_biomes.json index 8d8c39a8..d78507aa 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/enchanted_golden_apple_cow_spawn_biomes.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/enchanted_golden_apple_cow_spawn_biomes.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:elythia_meadow" + "antarchy:elythia_meadow", + "antarchy:truffalo_forest" ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/golden_apple_cow_spawn_biomes.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/golden_apple_cow_spawn_biomes.json index 98db4759..2f7b6bec 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/golden_apple_cow_spawn_biomes.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/golden_apple_cow_spawn_biomes.json @@ -1,8 +1,35 @@ { "replace": false, "values": [ - "#c:is_plains", - "#c:is_forest", - "#c:is_taiga" + { + "id": "#c:is_plains", + "required": false + }, + { + "id": "#c:plains", + "required": false + }, + { + "id": "#forge:is_plains", + "required": false + }, + { + "id": "#c:is_forest", + "required": false + }, + "#minecraft:is_forest", + { + "id": "#c:forest", + "required": false + }, + { + "id": "#c:is_taiga", + "required": false + }, + "#minecraft:is_taiga", + { + "id": "#c:taiga", + "required": false + } ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/apple_cow_orchard_biomes.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/apple_cow_orchard_biomes.json new file mode 100644 index 00000000..f3d5d531 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/apple_cow_orchard_biomes.json @@ -0,0 +1,17 @@ +{ + "replace": false, + "values": [ + { + "id": "#c:is_plains", + "required": false + }, + { + "id": "#c:plains", + "required": false + }, + { + "id": "#forge:is_plains", + "required": false + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/fallen_kingdom_castle_biomes.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/fallen_kingdom_castle_biomes.json index 8d8c39a8..d78507aa 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/fallen_kingdom_castle_biomes.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/fallen_kingdom_castle_biomes.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:elythia_meadow" + "antarchy:elythia_meadow", + "antarchy:truffalo_forest" ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/greenhouse_biomes.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/greenhouse_biomes.json new file mode 100644 index 00000000..d78507aa --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/greenhouse_biomes.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:elythia_meadow", + "antarchy:truffalo_forest" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/magical_castle_biomes.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/magical_castle_biomes.json new file mode 100644 index 00000000..d78507aa --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/magical_castle_biomes.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:elythia_meadow", + "antarchy:truffalo_forest" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/royal_shrine_biomes.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/royal_shrine_biomes.json new file mode 100644 index 00000000..a76da885 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/royal_shrine_biomes.json @@ -0,0 +1,10 @@ +{ + "replace": false, + "values": [ + "antarchy:ouranwood_forest", + "antarchy:sparse_ouranwood_forest", + "antarchy:fungal_ouranwood_forest", + "antarchy:peach_forest", + "antarchy:truffalo_forest" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/ruined_arena_biomes.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/ruined_arena_biomes.json index 8d8c39a8..d78507aa 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/ruined_arena_biomes.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/ruined_arena_biomes.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:elythia_meadow" + "antarchy:elythia_meadow", + "antarchy:truffalo_forest" ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/ruined_prison_biomes.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/ruined_prison_biomes.json index 8d8c39a8..d78507aa 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/ruined_prison_biomes.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/ruined_prison_biomes.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:elythia_meadow" + "antarchy:elythia_meadow", + "antarchy:truffalo_forest" ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/sign_biomes.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/sign_biomes.json index 8d8c39a8..d78507aa 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/sign_biomes.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/sign_biomes.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:elythia_meadow" + "antarchy:elythia_meadow", + "antarchy:truffalo_forest" ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/stampys_house_biomes.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/stampys_house_biomes.json index 8d8c39a8..d78507aa 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/stampys_house_biomes.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/stampys_house_biomes.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:elythia_meadow" + "antarchy:elythia_meadow", + "antarchy:truffalo_forest" ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/temple_of_technoblade_biomes.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/temple_of_technoblade_biomes.json index 8d8c39a8..d78507aa 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/temple_of_technoblade_biomes.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/temple_of_technoblade_biomes.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:elythia_meadow" + "antarchy:elythia_meadow", + "antarchy:truffalo_forest" ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/trayaurus_lab_biomes.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/trayaurus_lab_biomes.json index 89bf2423..d78507aa 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/trayaurus_lab_biomes.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/trayaurus_lab_biomes.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:elythia_meadow" + "antarchy:elythia_meadow", + "antarchy:truffalo_forest" ] -} \ No newline at end of file +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/is_cavaryn.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/is_cavaryn.json index 8f87b48f..c10edc3a 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/is_cavaryn.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/is_cavaryn.json @@ -1,6 +1,8 @@ { "values": [ "antarchy:cavaryn", + "antarchy:cavaryn_moleworm_caves", + "antarchy:wormy_caves", "antarchy:glowcap_caves", "antarchy:biowart_caves", "antarchy:brooding_tunnels", diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/is_elythia.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/is_elythia.json index e115fe0e..dce89191 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/is_elythia.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/is_elythia.json @@ -4,6 +4,7 @@ "antarchy:butterfly_fields", "antarchy:elythia_lush_caves", "antarchy:elythia_meadow", + "antarchy:truffalo_forest", "antarchy:elythia_river", "antarchy:moleworm_caves", "antarchy:ouranwood_forest", diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/mantis_overworld_spawn_biomes.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/mantis_overworld_spawn_biomes.json index 21d751d9..ede10b93 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/mantis_overworld_spawn_biomes.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/mantis_overworld_spawn_biomes.json @@ -1,9 +1,44 @@ { "replace": false, "values": [ - "#c:is_forest", - "#c:is_jungle", - "#c:is_savanna", - "#c:is_plains" + { + "id": "#c:is_forest", + "required": false + }, + "#minecraft:is_forest", + { + "id": "#c:forest", + "required": false + }, + { + "id": "#c:is_jungle", + "required": false + }, + "#minecraft:is_jungle", + { + "id": "#c:jungle", + "required": false + }, + { + "id": "#c:is_savanna", + "required": false + }, + "#minecraft:is_savanna", + { + "id": "#c:savanna", + "required": false + }, + { + "id": "#c:is_plains", + "required": false + }, + { + "id": "#c:plains", + "required": false + }, + { + "id": "#forge:is_plains", + "required": false + } ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/mantis_spawn_biomes.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/mantis_spawn_biomes.json index 8076f444..d78507aa 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/mantis_spawn_biomes.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/mantis_spawn_biomes.json @@ -1,7 +1,7 @@ { "replace": false, "values": [ - "antarchy:elythia_meadow" + "antarchy:elythia_meadow", + "antarchy:truffalo_forest" ] } - diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/overworld_ant_nest_spawn_biomes.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/overworld_ant_nest_spawn_biomes.json index 60dbe479..1ec8d159 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/overworld_ant_nest_spawn_biomes.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/overworld_ant_nest_spawn_biomes.json @@ -14,7 +14,6 @@ "id": "#c:forest", "required": false }, - { "id": "biomesoplenty:redwood_forest", "required": false @@ -199,7 +198,6 @@ "id": "wythers:thermal_taiga", "required": false }, - { "id": "terralith:brushland", "required": false @@ -212,6 +210,10 @@ "id": "#c:plains", "required": false }, + { + "id": "#forge:is_plains", + "required": false + }, { "id": "regions_unexplored:lupine_plains", "required": false @@ -245,4 +247,4 @@ "required": false } ] -} \ No newline at end of file +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/wild_corn_spawn_biomes.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/wild_corn_spawn_biomes.json index 44db277a..77eb54cc 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/wild_corn_spawn_biomes.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/wild_corn_spawn_biomes.json @@ -1,7 +1,14 @@ { "replace": false, "values": [ - "#c:is_plains", + { + "id": "#c:is_plains", + "required": false + }, + { + "id": "#forge:is_plains", + "required": false + }, "minecraft:plains", "minecraft:sunflower_plains", "minecraft:meadow", diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/structure/toreterror_arena_locator.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/structure/toreterror_arena_locator.json new file mode 100644 index 00000000..967cd68f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/structure/toreterror_arena_locator.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:toreterror_arena" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/trim_material/blood_crystal.json b/common-1.20.1/src/main/resources/data/antarchy/trim_material/blood_crystal.json index d5c30781..16796712 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/trim_material/blood_crystal.json +++ b/common-1.20.1/src/main/resources/data/antarchy/trim_material/blood_crystal.json @@ -7,4 +7,3 @@ "translate": "trim_material.antarchy.blood_crystal" } } - diff --git a/common-1.20.1/src/main/resources/data/antarchy/weapon_attributes/attitude_adjuster.json b/common-1.20.1/src/main/resources/data/antarchy/weapon_attributes/attitude_adjuster.json index 8670a024..1138fe0b 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/weapon_attributes/attitude_adjuster.json +++ b/common-1.20.1/src/main/resources/data/antarchy/weapon_attributes/attitude_adjuster.json @@ -1,6 +1,6 @@ { "parent": "bettercombat:heavy_axe", - "attributes" : { + "attributes": { "attack_range": 3.5, "pose": "bettercombat:pose_two_handed_heavy", "category": "greathammer", @@ -38,4 +38,4 @@ } ] } -} \ No newline at end of file +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/weapon_attributes/blood_gods_blade.json b/common-1.20.1/src/main/resources/data/antarchy/weapon_attributes/blood_gods_blade.json new file mode 100644 index 00000000..d9bee8f9 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/weapon_attributes/blood_gods_blade.json @@ -0,0 +1,39 @@ +{ + "attributes": { + "attack_range": 3.0, + "category": "sword", + "attacks": [ + { + "hitbox": "HORIZONTAL_PLANE", + "damage_multiplier": 1, + "angle": 120, + "upswing": 0.5, + "animation": "bettercombat:one_handed_slash_horizontal_right", + "swing_sound": { + "id": "bettercombat:sword_slash" + } + }, + { + "hitbox": "HORIZONTAL_PLANE", + "damage_multiplier": 1, + "angle": 120, + "upswing": 0.5, + "animation": "bettercombat:one_handed_slash_horizontal_left", + "swing_sound": { + "id": "bettercombat:sword_slash" + } + }, + { + "hitbox": "FORWARD_BOX", + "damage_multiplier": 1.4, + "angle": 0, + "upswing": 0.5, + "animation": "bettercombat:one_handed_stab", + "swing_sound": { + "id": "bettercombat:sword_slash", + "pitch": 1.2 + } + } + ] + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/weapon_attributes/giant_frying_pan.json b/common-1.20.1/src/main/resources/data/antarchy/weapon_attributes/giant_frying_pan.json new file mode 100644 index 00000000..885dfb90 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/weapon_attributes/giant_frying_pan.json @@ -0,0 +1,41 @@ +{ + "attributes": { + "attack_range": 4.5, + "category": "greathammer", + "attacks": [ + { + "hitbox": "HORIZONTAL_PLANE", + "damage_multiplier": 1, + "angle": 150, + "upswing": 0.55, + "animation": "bettercombat:two_handed_slash_horizontal_right", + "swing_sound": { + "id": "bettercombat:double_axe_swing", + "pitch": 0.8 + } + }, + { + "hitbox": "HORIZONTAL_PLANE", + "damage_multiplier": 1, + "angle": 150, + "upswing": 0.55, + "animation": "bettercombat:two_handed_slash_horizontal_left", + "swing_sound": { + "id": "bettercombat:double_axe_swing", + "pitch": 0.8 + } + }, + { + "hitbox": "FORWARD_BOX", + "damage_multiplier": 1.5, + "angle": 0, + "upswing": 0.6, + "animation": "bettercombat:two_handed_slam", + "swing_sound": { + "id": "bettercombat:hammer_slam", + "pitch": 0.9 + } + } + ] + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/weapon_attributes/krakens_grasp.json b/common-1.20.1/src/main/resources/data/antarchy/weapon_attributes/krakens_grasp.json index 8d3980c1..514bde32 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/weapon_attributes/krakens_grasp.json +++ b/common-1.20.1/src/main/resources/data/antarchy/weapon_attributes/krakens_grasp.json @@ -1,3 +1,3 @@ { "parent": "bettercombat:rapier" -} \ No newline at end of file +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/biowart_caves.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/biowart_caves.json index c5b8bd84..8f155f43 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/biowart_caves.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/biowart_caves.json @@ -21,6 +21,12 @@ "options": { "type": "antarchy:orange_ash" } + }, + "music": { + "sound": "antarchy:music.game.cavaryn", + "min_delay": 600, + "max_delay": 1800, + "replace_current_music": true } }, "spawn_costs": { @@ -54,10 +60,9 @@ "antarchy:biowart_patch", "antarchy:cavaryn_creepvine", "antarchy:cavaryn_hanging_creeproots" - ], - [] + ] ], - "creature_spawn_probability": 0.08, + "creature_spawn_probability": 0.98, "spawners": { "monster": [ { @@ -70,15 +75,15 @@ "creature": [ { "type": "antarchy:rolly_polly", - "weight": 25, - "minCount": 1, - "maxCount": 3 + "weight": 320, + "minCount": 4, + "maxCount": 8 }, { "type": "antarchy:stink_bug", - "weight": 35, - "minCount": 2, - "maxCount": 4 + "weight": 420, + "minCount": 4, + "maxCount": 8 } ], "ambient": [], diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/brooding_tunnels.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/brooding_tunnels.json index fdaf9a4a..192a6b49 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/brooding_tunnels.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/brooding_tunnels.json @@ -28,8 +28,7 @@ "replace_current_music": true } }, - "spawn_costs": { - }, + "spawn_costs": {}, "carvers": { "air": [], "liquid": [] @@ -62,8 +61,7 @@ ], "creature_spawn_probability": 0.98, "spawners": { - "monster": [ - ], + "monster": [], "creature": [ { "type": "antarchy:rolly_polly", @@ -76,9 +74,9 @@ "weight": 450, "minCount": 4, "maxCount": 8 - }], - "ambient": [ + } ], + "ambient": [], "axolotls": [], "underground_water_creature": [], "water_creature": [], diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/butterfly_fields.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/butterfly_fields.json index 9bad1184..f8ae590a 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/butterfly_fields.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/butterfly_fields.json @@ -15,6 +15,12 @@ "tick_delay": 8000, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "antarchy:music.game.elythia", + "min_delay": 600, + "max_delay": 1800, + "replace_current_music": true } }, "spawn_costs": {}, @@ -80,7 +86,7 @@ }, { "type": "antarchy:enchanted_golden_apple_cow", - "weight": 4, + "weight": 1, "minCount": 1, "maxCount": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/cavaryn.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/cavaryn.json index 0d28f52e..29586931 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/cavaryn.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/cavaryn.json @@ -20,6 +20,12 @@ "options": { "type": "antarchy:orange_ash" } + }, + "music": { + "sound": "antarchy:music.game.cavaryn", + "min_delay": 600, + "max_delay": 1800, + "replace_current_music": true } }, "spawn_costs": { @@ -58,25 +64,24 @@ "antarchy:cavaryn_hanging_creeproots" ] ], - "creature_spawn_probability": 0.06, + "creature_spawn_probability": 0.98, "spawners": { - "monster": [ - ], + "monster": [], "creature": [ { "type": "antarchy:rolly_polly", - "weight": 25, - "minCount": 1, - "maxCount": 3 + "weight": 320, + "minCount": 4, + "maxCount": 8 }, { "type": "antarchy:stink_bug", - "weight": 35, - "minCount": 2, - "maxCount": 4 - }], - "ambient": [ + "weight": 420, + "minCount": 4, + "maxCount": 8 + } ], + "ambient": [], "axolotls": [], "underground_water_creature": [], "water_creature": [], diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/dream_dunes.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/dream_dunes.json index 4d9a7cc0..35f678bf 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/dream_dunes.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/dream_dunes.json @@ -24,9 +24,9 @@ "offset": 2.0 }, "music": { - "sound": "antarchy:lucid_lullaby", - "min_delay": 12000, - "max_delay": 24000, + "sound": "antarchy:music.game.thoraxis", + "min_delay": 600, + "max_delay": 1800, "replace_current_music": true } }, @@ -48,29 +48,32 @@ [], [], [ - "antarchy:bluestone_ore" + "antarchy:bluestone_ore", + "antarchy:thoraxis_ichor_lake", + "antarchy:thoraxis_transition_throat", + "antarchy:thoraxis_transition_throat_large", + "antarchy:dimensional_tears" ], [], [ "antarchy:patch_fire" ], [ + "antarchy:queen_havoc_trail", "antarchy:nyxite_spikes", - "antarchy:patch_ceiling_fire", - "antarchy:patch_ceiling_antigravel" + "antarchy:patch_ceiling_fire" ], [ "antarchy:cornea_stalk_patch", "antarchy:patch_ceiling_cornea_stalk" - ], - [] + ] ], "creature_spawn_probability": 0.03, "spawners": { "monster": [ { "type": "antarchy:scorpion", - "weight": 20, + "weight": 40, "minCount": 2, "maxCount": 5 }, @@ -79,6 +82,12 @@ "weight": 3, "minCount": 1, "maxCount": 1 + }, + { + "type": "antarchy:manticore", + "weight": 12, + "minCount": 1, + "maxCount": 2 } ], "creature": [ diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/elythia_beach.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/elythia_beach.json index 050be664..1c00940a 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/elythia_beach.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/elythia_beach.json @@ -15,6 +15,12 @@ "tick_delay": 7000, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "antarchy:music.game.elythia", + "min_delay": 600, + "max_delay": 1800, + "replace_current_music": true } }, "spawn_costs": {}, diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/elythia_cloud_sea.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/elythia_cloud_sea.json deleted file mode 100644 index e04a1a26..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/elythia_cloud_sea.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "has_precipitation": false, - "temperature": 0.6, - "downfall": 0.2, - "effects": { - "fog_color": 983040, - "water_color": 327680, - "water_fog_color": 0, - "sky_color": 8084735, - "particle": { - "probability": 0.02, - "options": { - "type": "minecraft:cloud" - } - } - }, - "spawn_costs": { - "antarchy:cloud_shark": { - "energy_budget": 0.2, - "charge": 9 - } - }, - "carvers": { - "air": [], - "liquid": [] - }, - "features": [ - [], - [], - [], - [], - [ - "antarchy:elythia_clouds" - ], - [], - [], - [], - [], - [], - [] - ], - "creature_spawn_probability": 0.03, - "spawners": { - "creature": [], - "ambient": [], - "monster": [ - { - "type": "antarchy:cloud_shark", - "weight": 40, - "minCount": 2, - "maxCount": 5 - } - ], - "axolotls": [], - "underground_water_creature": [], - "water_creature": [], - "water_ambient": [], - "misc": [] - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/elythia_coral_spikes.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/elythia_coral_spikes.json index 852ff0f7..96c87340 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/elythia_coral_spikes.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/elythia_coral_spikes.json @@ -15,6 +15,12 @@ "tick_delay": 6000, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "antarchy:music.game.elythia", + "min_delay": 600, + "max_delay": 1800, + "replace_current_music": true } }, "spawn_costs": {}, diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/elythia_lush_caves.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/elythia_lush_caves.json index 48be0038..bb95383b 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/elythia_lush_caves.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/elythia_lush_caves.json @@ -21,6 +21,12 @@ "tick_delay": 60000, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "antarchy:music.game.elythia", + "min_delay": 600, + "max_delay": 1800, + "replace_current_music": true } }, "spawn_costs": {}, diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/elythia_meadow.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/elythia_meadow.json index 4e865464..0643e517 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/elythia_meadow.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/elythia_meadow.json @@ -15,6 +15,12 @@ "tick_delay": 8000, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "antarchy:music.game.elythia", + "min_delay": 600, + "max_delay": 1800, + "replace_current_music": true } }, "spawn_costs": { @@ -25,10 +31,6 @@ "antarchy:mantis": { "energy_budget": 0.1, "charge": 15.0 - }, - "antarchy:glimmer": { - "energy_budget": 0.1, - "charge": 9 } }, "carvers": { @@ -87,19 +89,19 @@ }, { "type": "antarchy:apple_cow", - "weight": 24, - "minCount": 1, - "maxCount": 3 - }, - { - "type": "antarchy:golden_apple_cow", "weight": 20, "minCount": 1, "maxCount": 3 }, + { + "type": "antarchy:golden_apple_cow", + "weight": 16, + "minCount": 1, + "maxCount": 3 + }, { "type": "antarchy:enchanted_golden_apple_cow", - "weight": 2, + "weight": 1, "minCount": 1, "maxCount": 1 }, diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/elythia_ocean.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/elythia_ocean.json index a365532b..648bdae3 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/elythia_ocean.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/elythia_ocean.json @@ -15,6 +15,12 @@ "tick_delay": 6000, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "antarchy:music.game.elythia", + "min_delay": 600, + "max_delay": 1800, + "replace_current_music": true } }, "spawn_costs": {}, diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/elythia_river.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/elythia_river.json index bc4dd507..1846e83e 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/elythia_river.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/elythia_river.json @@ -15,6 +15,12 @@ "tick_delay": 7000, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "antarchy:music.game.elythia", + "min_delay": 600, + "max_delay": 1800, + "replace_current_music": true } }, "spawn_costs": {}, diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/fungal_ouranwood_forest.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/fungal_ouranwood_forest.json index 3c822d2d..f81799ca 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/fungal_ouranwood_forest.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/fungal_ouranwood_forest.json @@ -25,12 +25,18 @@ "tick_delay": 6000, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "antarchy:music.game.elythia", + "min_delay": 600, + "max_delay": 1800, + "replace_current_music": true } }, "spawn_costs": { - "antarchy:glimmer": { + "antarchy:basilisk": { "energy_budget": 0.1, - "charge": 9 + "charge": 14.0 } }, "carvers": { @@ -79,7 +85,14 @@ ], "creature_spawn_probability": 0.07, "spawners": { - "monster": [], + "monster": [ + { + "type": "antarchy:basilisk", + "weight": 10, + "minCount": 1, + "maxCount": 1 + } + ], "creature": [ { "type": "minecraft:frog", diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/glimmering_pools.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/glimmering_pools.json index 81896bc3..2a195448 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/glimmering_pools.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/glimmering_pools.json @@ -15,6 +15,12 @@ "tick_delay": 6000, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "antarchy:music.game.elythia", + "min_delay": 600, + "max_delay": 1800, + "replace_current_music": true } }, "spawn_costs": {}, @@ -28,6 +34,7 @@ "antarchy:lumen_pools", "antarchy:lumen_streams", "antarchy:lumen_lily_pads", + "antarchy:glimmering_reeds", "antarchy:giant_lily_pad_patch_common" ], [], diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/glowcap_caves.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/glowcap_caves.json index 0addf183..1db5a557 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/glowcap_caves.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/glowcap_caves.json @@ -21,6 +21,12 @@ "options": { "type": "antarchy:orange_ash" } + }, + "music": { + "sound": "antarchy:music.game.cavaryn", + "min_delay": 600, + "max_delay": 1800, + "replace_current_music": true } }, "spawn_costs": {}, @@ -47,25 +53,24 @@ ], [] ], - "creature_spawn_probability": 0.09, + "creature_spawn_probability": 0.98, "spawners": { - "monster": [ - ], + "monster": [], "creature": [ { "type": "antarchy:rolly_polly", - "weight": 25, - "minCount": 1, - "maxCount": 3 + "weight": 280, + "minCount": 4, + "maxCount": 8 }, { "type": "antarchy:stink_bug", - "weight": 40, - "minCount": 2, - "maxCount": 4 - }], - "ambient": [ + "weight": 380, + "minCount": 4, + "maxCount": 8 + } ], + "ambient": [], "axolotls": [], "underground_water_creature": [], "water_creature": [], diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/lucid_pools.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/lucid_pools.json index fe18f88a..7458c109 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/lucid_pools.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/lucid_pools.json @@ -24,9 +24,9 @@ "offset": 2.0 }, "music": { - "sound": "antarchy:lucid_lullaby", - "min_delay": 12000, - "max_delay": 24000, + "sound": "antarchy:music.game.thoraxis", + "min_delay": 600, + "max_delay": 1800, "replace_current_music": true } }, @@ -36,8 +36,8 @@ }, "spawn_costs": { "antarchy:lucid": { - "energy_budget": 0.10, - "charge": 15.0 + "energy_budget": 0.1, + "charge": 17.0 } }, "features": [ @@ -46,12 +46,14 @@ [], [], [ - "antarchy:bluestone_ore" + "antarchy:bluestone_ore", + "antarchy:thoraxis_ichor_lake" ], [ "antarchy:lucid_blood_crystal_spires", "antarchy:lucid_medium_blood_crystal_spires", - "antarchy:lucid_large_blood_crystal_spires" + "antarchy:lucid_large_blood_crystal_spires", + "antarchy:dimensional_tears" ], [], [ @@ -61,13 +63,13 @@ "antarchy:red_ant_nest_magma", "antarchy:nyxite_spikes", "antarchy:patch_fire_sparse", - "antarchy:patch_ceiling_fire", - "antarchy:patch_ceiling_antigravel" + "antarchy:patch_ceiling_fire" ], [], [ "antarchy:cornea_stalk_patch", "antarchy:patch_ceiling_cornea_stalk", + "antarchy:gorevines", "antarchy:bed_bug_nest" ], [] @@ -77,7 +79,7 @@ "monster": [ { "type": "antarchy:lucid", - "weight": 7, + "weight": 1, "minCount": 1, "maxCount": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/moleworm_caves.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/moleworm_caves.json index 7efaca3e..dfa86033 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/moleworm_caves.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/moleworm_caves.json @@ -15,6 +15,12 @@ "options": { "type": "minecraft:ash" } + }, + "music": { + "sound": "antarchy:music.game.elythia", + "min_delay": 600, + "max_delay": 1800, + "replace_current_music": true } }, "spawn_costs": { diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/nightmare_wastes.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/nightmare_wastes.json index 8e672ad0..c853f78f 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/nightmare_wastes.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/nightmare_wastes.json @@ -24,9 +24,9 @@ "offset": 2.0 }, "music": { - "sound": "antarchy:lucid_lullaby", - "min_delay": 12000, - "max_delay": 24000, + "sound": "antarchy:music.game.thoraxis", + "min_delay": 600, + "max_delay": 1800, "replace_current_music": true } }, @@ -46,13 +46,15 @@ [], [], [ - "antarchy:bluestone_ore" + "antarchy:bluestone_ore", + "antarchy:thoraxis_ichor_lake" ], [ "antarchy:thoraxis_floor_rib_columns", "antarchy:thoraxis_roof_rib_columns", "antarchy:thoraxis_floor_spikes", - "antarchy:thoraxis_roof_spikes" + "antarchy:thoraxis_roof_spikes", + "antarchy:dimensional_tears" ], [], [], @@ -63,8 +65,7 @@ "antarchy:bed_bug_nest", "antarchy:nyxite_spikes", "antarchy:patch_fire_sparse", - "antarchy:patch_ceiling_fire", - "antarchy:patch_ceiling_antigravel" + "antarchy:patch_ceiling_fire" ], [ "antarchy:cornea_stalk_patch", @@ -77,7 +78,7 @@ "monster": [ { "type": "antarchy:nightmare", - "weight": 6, + "weight": 1, "minCount": 1, "maxCount": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/ouranwood_forest.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/ouranwood_forest.json index c8b8a736..173b0df4 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/ouranwood_forest.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/ouranwood_forest.json @@ -37,10 +37,6 @@ "antarchy:basilisk": { "energy_budget": 0.1, "charge": 14.0 - }, - "antarchy:glimmer": { - "energy_budget": 0.1, - "charge": 9 } }, "carvers": { @@ -65,7 +61,6 @@ "minecraft:ore_redstone", "minecraft:ore_redstone_lower", "minecraft:ore_diamond", - "minecraft:ore_diamond_medium", "minecraft:ore_diamond_large", "minecraft:ore_diamond_buried", "minecraft:ore_lapis", @@ -93,7 +88,7 @@ "monster": [ { "type": "antarchy:basilisk", - "weight": 20, + "weight": 24, "minCount": 1, "maxCount": 1 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/peach_forest.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/peach_forest.json index 7c74ec9c..89f09ce3 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/peach_forest.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/peach_forest.json @@ -15,14 +15,15 @@ "tick_delay": 6000, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "antarchy:music.game.elythia", + "min_delay": 600, + "max_delay": 1800, + "replace_current_music": true } }, - "spawn_costs": { - "antarchy:glimmer": { - "energy_budget": 0.1, - "charge": 9 - } - }, + "spawn_costs": {}, "carvers": { "air": [], "liquid": [] diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/rolly_caves.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/rolly_caves.json index 33d8d16b..2a532b40 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/rolly_caves.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/rolly_caves.json @@ -20,6 +20,12 @@ "options": { "type": "minecraft:spore_blossom_air" } + }, + "music": { + "sound": "antarchy:music.game.cavaryn", + "min_delay": 600, + "max_delay": 1800, + "replace_current_music": true } }, "spawn_costs": {}, diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/sparse_ouranwood_forest.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/sparse_ouranwood_forest.json index 0fb33db1..25614626 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/sparse_ouranwood_forest.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/sparse_ouranwood_forest.json @@ -25,14 +25,15 @@ "tick_delay": 6000, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "antarchy:music.game.elythia", + "min_delay": 600, + "max_delay": 1800, + "replace_current_music": true } }, - "spawn_costs": { - "antarchy:glimmer": { - "energy_budget": 0.1, - "charge": 9 - } - }, + "spawn_costs": {}, "carvers": { "air": [], "liquid": [] diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/truffalo_forest.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/truffalo_forest.json index 65623f09..9375450d 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/truffalo_forest.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/truffalo_forest.json @@ -31,10 +31,6 @@ "antarchy:mantis": { "energy_budget": 0.1, "charge": 15.0 - }, - "antarchy:glimmer": { - "energy_budget": 0.1, - "charge": 9 } }, "carvers": { @@ -59,7 +55,6 @@ "minecraft:ore_redstone", "minecraft:ore_redstone_lower", "minecraft:ore_diamond", - "minecraft:ore_diamond_medium", "minecraft:ore_diamond_large", "minecraft:ore_diamond_buried", "minecraft:ore_lapis", @@ -96,13 +91,13 @@ }, { "type": "antarchy:apple_cow", - "weight": 24, + "weight": 20, "minCount": 1, "maxCount": 3 }, { "type": "antarchy:golden_apple_cow", - "weight": 20, + "weight": 16, "minCount": 1, "maxCount": 3 }, diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/umbral_hills.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/umbral_hills.json index 1d06e420..618f7bb7 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/umbral_hills.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/umbral_hills.json @@ -24,9 +24,9 @@ "offset": 2.0 }, "music": { - "sound": "antarchy:lucid_lullaby", - "min_delay": 12000, - "max_delay": 24000, + "sound": "antarchy:music.game.thoraxis", + "min_delay": 600, + "max_delay": 1800, "replace_current_music": true } }, @@ -46,7 +46,8 @@ [], [], [ - "antarchy:bluestone_ore" + "antarchy:bluestone_ore", + "antarchy:thoraxis_ichor_lake" ], [ "antarchy:thoraxis_floor_spikes", @@ -57,8 +58,7 @@ "antarchy:bed_bug_surface_cluster", "antarchy:nyxite_spikes", "antarchy:patch_fire_sparse", - "antarchy:patch_ceiling_fire", - "antarchy:patch_ceiling_antigravel" + "antarchy:patch_ceiling_fire" ], [], [ diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/vortex_expanse.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/vortex_expanse.json index 8d2563e2..4a714098 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/vortex_expanse.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/vortex_expanse.json @@ -81,12 +81,6 @@ "minCount": 2, "maxCount": 5 }, - { - "type": "antarchy:emperor_scorpion", - "weight": 3, - "minCount": 1, - "maxCount": 1 - }, { "type": "antarchy:vortex", "weight": 1, diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/antigravel_ceiling.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/antigravel_ceiling.json deleted file mode 100644 index 66785c1e..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/antigravel_ceiling.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "minecraft:simple_block", - "config": { - "to_place": { - "type": "minecraft:simple_state_provider", - "state": { - "Name": "antarchy:antigravel" - } - } - } -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/blood_crystal_cluster.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/blood_crystal_cluster.json index c5d9a0fd..a7327bf1 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/blood_crystal_cluster.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/blood_crystal_cluster.json @@ -23,5 +23,3 @@ "branch_chance": 0.08 } } - - diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/blush_moss_vegetation.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/blush_moss_vegetation.json index bcf78e9a..cd11bca8 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/blush_moss_vegetation.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/blush_moss_vegetation.json @@ -16,6 +16,12 @@ } }, "weight": 25 + }, + { + "data": { + "Name": "antarchy:truffalo_sapling" + }, + "weight": 1 } ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/glowcap_caves_floor_patch.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/glowcap_caves_floor_patch.json index dc6a4cc8..050669d6 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/glowcap_caves_floor_patch.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/glowcap_caves_floor_patch.json @@ -48,7 +48,7 @@ { "weight": 12, "data": { - "Name": "minecraft:short_grass" + "Name": "minecraft:grass" } }, { diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/jumpy_bug_egg_ceiling.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/jumpy_bug_egg_ceiling.json deleted file mode 100644 index f63327da..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/jumpy_bug_egg_ceiling.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type": "antarchy:jumpy_bug_egg_ceiling", - "config": {} -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/large_blood_crystal_cluster.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/large_blood_crystal_cluster.json index 3787ac71..1f550236 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/large_blood_crystal_cluster.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/large_blood_crystal_cluster.json @@ -23,5 +23,3 @@ "branch_chance": 0.16 } } - - diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/medium_blood_crystal_cluster.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/medium_blood_crystal_cluster.json index aba0d210..f0cbc7fe 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/medium_blood_crystal_cluster.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/medium_blood_crystal_cluster.json @@ -23,5 +23,3 @@ "branch_chance": 0.12 } } - - diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/nadir_tree.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/nadir_tree.json index 2dc06c48..4f73e9c3 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/nadir_tree.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/nadir_tree.json @@ -18,28 +18,38 @@ }, "height": { "type": "minecraft:uniform", - "min_inclusive": 10, - "max_inclusive": 16 + "value": { + "min_inclusive": 10, + "max_inclusive": 16 + } }, "bottom_radius": { "type": "minecraft:uniform", - "min_inclusive": 2, - "max_inclusive": 4 + "value": { + "min_inclusive": 2, + "max_inclusive": 4 + } }, "branch_count": { "type": "minecraft:uniform", - "min_inclusive": 4, - "max_inclusive": 7 + "value": { + "min_inclusive": 4, + "max_inclusive": 7 + } }, "branch_length": { "type": "minecraft:uniform", - "min_inclusive": 4, - "max_inclusive": 7 + "value": { + "min_inclusive": 4, + "max_inclusive": 7 + } }, "veil_radius": { "type": "minecraft:uniform", - "min_inclusive": 2, - "max_inclusive": 3 + "value": { + "min_inclusive": 2, + "max_inclusive": 3 + } } } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/ouranwood_tree_selector.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/ouranwood_tree_selector.json index bb766731..24233db0 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/ouranwood_tree_selector.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/ouranwood_tree_selector.json @@ -2,9 +2,18 @@ "type": "minecraft:random_selector", "config": { "features": [ - { "chance": 0.001, "feature": "antarchy:ouranwood_cocoon_trees" }, - { "chance": 0.08, "feature": "antarchy:ouranwood_medium_trees" }, - { "chance": 0.027, "feature": "antarchy:ouranwood_young_trees" } + { + "chance": 0.001, + "feature": "antarchy:ouranwood_cocoon_trees" + }, + { + "chance": 0.08, + "feature": "antarchy:ouranwood_medium_trees" + }, + { + "chance": 0.027, + "feature": "antarchy:ouranwood_young_trees" + } ], "default": "antarchy:ouranwood_large_trees" } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/ouranwood_tree_selector_sparse.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/ouranwood_tree_selector_sparse.json index db71d906..04c722f6 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/ouranwood_tree_selector_sparse.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/ouranwood_tree_selector_sparse.json @@ -2,8 +2,14 @@ "type": "minecraft:random_selector", "config": { "features": [ - { "chance": 0.0002, "feature": "antarchy:ouranwood_cocoon_trees" }, - { "chance": 0.133, "feature": "antarchy:ouranwood_young_trees" } + { + "chance": 0.0002, + "feature": "antarchy:ouranwood_cocoon_trees" + }, + { + "chance": 0.133, + "feature": "antarchy:ouranwood_young_trees" + } ], "default": "antarchy:ouranwood_medium_trees" } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/rolly_caves_amber_moss_patch.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/rolly_caves_amber_moss_patch.json index 2e18b002..981246c6 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/rolly_caves_amber_moss_patch.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/rolly_caves_amber_moss_patch.json @@ -54,7 +54,7 @@ { "weight": 2, "data": { - "Name": "minecraft:short_grass" + "Name": "minecraft:grass" } }, { diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/royal_tree_large.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/royal_tree_large.json index ee418feb..aba773ec 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/royal_tree_large.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/royal_tree_large.json @@ -4,7 +4,7 @@ "trunk_provider": { "type": "minecraft:simple_state_provider", "state": { - "Name": "antarchy:royal_wood", + "Name": "antarchy:royal_log", "Properties": { "axis": "y" } @@ -29,33 +29,45 @@ }, "height": { "type": "minecraft:uniform", - "min_inclusive": 27, - "max_inclusive": 30 + "value": { + "min_inclusive": 27, + "max_inclusive": 30 + } }, "trunk_drift": { "type": "minecraft:uniform", - "min_inclusive": 4, - "max_inclusive": 5 + "value": { + "min_inclusive": 4, + "max_inclusive": 5 + } }, "canopy_radius": { "type": "minecraft:uniform", - "min_inclusive": 6, - "max_inclusive": 7 + "value": { + "min_inclusive": 6, + "max_inclusive": 7 + } }, "canopy_layers": { "type": "minecraft:uniform", - "min_inclusive": 4, - "max_inclusive": 5 + "value": { + "min_inclusive": 4, + "max_inclusive": 5 + } }, "branch_count": { "type": "minecraft:uniform", - "min_inclusive": 3, - "max_inclusive": 4 + "value": { + "min_inclusive": 3, + "max_inclusive": 4 + } }, "strut_count": { "type": "minecraft:uniform", - "min_inclusive": 3, - "max_inclusive": 4 + "value": { + "min_inclusive": 3, + "max_inclusive": 4 + } } } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/royal_tree_medium.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/royal_tree_medium.json index 5c65ced6..9f946e9b 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/royal_tree_medium.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/royal_tree_medium.json @@ -4,7 +4,7 @@ "trunk_provider": { "type": "minecraft:simple_state_provider", "state": { - "Name": "antarchy:royal_wood", + "Name": "antarchy:royal_log", "Properties": { "axis": "y" } @@ -29,33 +29,45 @@ }, "height": { "type": "minecraft:uniform", - "min_inclusive": 23, - "max_inclusive": 27 + "value": { + "min_inclusive": 23, + "max_inclusive": 27 + } }, "trunk_drift": { "type": "minecraft:uniform", - "min_inclusive": 3, - "max_inclusive": 5 + "value": { + "min_inclusive": 3, + "max_inclusive": 5 + } }, "canopy_radius": { "type": "minecraft:uniform", - "min_inclusive": 5, - "max_inclusive": 6 + "value": { + "min_inclusive": 5, + "max_inclusive": 6 + } }, "canopy_layers": { "type": "minecraft:uniform", - "min_inclusive": 4, - "max_inclusive": 4 + "value": { + "min_inclusive": 4, + "max_inclusive": 4 + } }, "branch_count": { "type": "minecraft:uniform", - "min_inclusive": 2, - "max_inclusive": 3 + "value": { + "min_inclusive": 2, + "max_inclusive": 3 + } }, "strut_count": { "type": "minecraft:uniform", - "min_inclusive": 3, - "max_inclusive": 4 + "value": { + "min_inclusive": 3, + "max_inclusive": 4 + } } } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/royal_tree_small.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/royal_tree_small.json index 71e4810c..960f1673 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/royal_tree_small.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/royal_tree_small.json @@ -4,7 +4,7 @@ "trunk_provider": { "type": "minecraft:simple_state_provider", "state": { - "Name": "antarchy:royal_wood", + "Name": "antarchy:royal_log", "Properties": { "axis": "y" } @@ -29,33 +29,45 @@ }, "height": { "type": "minecraft:uniform", - "min_inclusive": 20, - "max_inclusive": 23 + "value": { + "min_inclusive": 20, + "max_inclusive": 23 + } }, "trunk_drift": { "type": "minecraft:uniform", - "min_inclusive": 3, - "max_inclusive": 4 + "value": { + "min_inclusive": 3, + "max_inclusive": 4 + } }, "canopy_radius": { "type": "minecraft:uniform", - "min_inclusive": 4, - "max_inclusive": 5 + "value": { + "min_inclusive": 4, + "max_inclusive": 5 + } }, "canopy_layers": { "type": "minecraft:uniform", - "min_inclusive": 3, - "max_inclusive": 4 + "value": { + "min_inclusive": 3, + "max_inclusive": 4 + } }, "branch_count": { "type": "minecraft:uniform", - "min_inclusive": 1, - "max_inclusive": 2 + "value": { + "min_inclusive": 1, + "max_inclusive": 2 + } }, "strut_count": { "type": "minecraft:uniform", - "min_inclusive": 2, - "max_inclusive": 3 + "value": { + "min_inclusive": 2, + "max_inclusive": 3 + } } } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/thoraxis_transition_throat.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/thoraxis_transition_throat.json index e82cb683..0e96a4af 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/thoraxis_transition_throat.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/thoraxis_transition_throat.json @@ -1,4 +1,6 @@ { "type": "antarchy:thoraxis_transition_throat", - "config": {} + "config": { + "large": false + } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/thoraxis_transition_throat_large.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/thoraxis_transition_throat_large.json new file mode 100644 index 00000000..3a6d2f9e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/thoraxis_transition_throat_large.json @@ -0,0 +1,6 @@ +{ + "type": "antarchy:thoraxis_transition_throat", + "config": { + "large": true + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/triffid_patch.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/triffid_patch.json deleted file mode 100644 index 055de6bc..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/triffid_patch.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type": "antarchy:triffid_patch", - "config": {} -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/truffalo_large_tree.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/truffalo_large_tree.json index b19984b5..9a280699 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/truffalo_large_tree.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/truffalo_large_tree.json @@ -12,8 +12,10 @@ }, "height": { "type": "minecraft:uniform", - "min_inclusive": 8, - "max_inclusive": 18 + "value": { + "min_inclusive": 8, + "max_inclusive": 18 + } }, "tuft_radius": 2, "tuft_height": 5 diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/truffalo_tree.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/truffalo_tree.json index 60e1232e..e49f2d91 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/truffalo_tree.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/truffalo_tree.json @@ -12,8 +12,10 @@ }, "height": { "type": "minecraft:uniform", - "min_inclusive": 4, - "max_inclusive": 9 + "value": { + "min_inclusive": 4, + "max_inclusive": 9 + } } } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/density_function/elythia_surface.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/density_function/elythia_surface.json index 62c0bc38..4188d5f2 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/density_function/elythia_surface.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/density_function/elythia_surface.json @@ -1,86 +1,137 @@ { "type": "minecraft:cache_once", "argument": { - "type": "minecraft:clamp", - "min": -10.0, - "max": 10.0, - "input": { - "type": "minecraft:add", - "argument1": { - "type": "minecraft:y_clamped_gradient", - "from_y": -64, - "to_y": 220, - "from_value": 2.20, - "to_value": -1.90 - }, - "argument2": { - "type": "minecraft:add", - "argument1": { + "type": "minecraft:clamp", + "min": -10.0, + "max": 10.0, + "input": { "type": "minecraft:add", "argument1": { - "type": "minecraft:mul", - "argument1": 0.565, - "argument2": { - "type": "minecraft:noise", - "noise": "antarchy:elythia_surface", - "xz_scale": 0.65, - "y_scale": 0 - } + "type": "minecraft:y_clamped_gradient", + "from_y": -64, + "to_y": 220, + "from_value": 2.2, + "to_value": -1.9 }, "argument2": { "type": "minecraft:add", "argument1": { - "type": "minecraft:mul", - "argument1": 0.01, - "argument2": { - "type": "minecraft:noise", - "noise": "antarchy:elythia_surface_detail", - "xz_scale": 1.8, - "y_scale": 0 + "type": "minecraft:add", + "argument1": { + "type": "minecraft:add", + "argument1": { + "type": "minecraft:mul", + "argument1": 0.565, + "argument2": { + "type": "minecraft:noise", + "noise": "antarchy:elythia_surface", + "xz_scale": 0.65, + "y_scale": 0 + } + }, + "argument2": { + "type": "minecraft:add", + "argument1": { + "type": "minecraft:mul", + "argument1": 0.01, + "argument2": { + "type": "minecraft:noise", + "noise": "antarchy:elythia_surface_detail", + "xz_scale": 1.8, + "y_scale": 0 + } + }, + "argument2": { + "type": "minecraft:mul", + "argument1": 0.002, + "argument2": { + "type": "minecraft:noise", + "noise": "antarchy:elythia_surface_edge", + "xz_scale": 4.2, + "y_scale": 0 + } + } + } + }, + "argument2": { + "type": "minecraft:add", + "argument1": { + "type": "minecraft:mul", + "argument1": 0.17, + "argument2": "minecraft:overworld/depth" + }, + "argument2": { + "type": "minecraft:add", + "argument1": { + "type": "minecraft:mul", + "argument1": 0.003, + "argument2": "minecraft:overworld/ridges" + }, + "argument2": { + "type": "minecraft:add", + "argument1": { + "type": "antarchy:elythia_river_carve", + "erosion": "minecraft:overworld/erosion", + "ridges": "minecraft:overworld/ridges" + }, + "argument2": { + "type": "minecraft:mul", + "argument1": 0.58, + "argument2": "minecraft:overworld/continents" + } + } + } } }, - "argument2": { - "type": "minecraft:mul", - "argument1": 0.002, - "argument2": { - "type": "minecraft:noise", - "noise": "antarchy:elythia_surface_edge", - "xz_scale": 4.2, - "y_scale": 0 - } - } - } - }, - "argument2": { - "type": "minecraft:add", - "argument1": { - "type": "minecraft:mul", - "argument1": 0.17, - "argument2": "minecraft:overworld/depth" - }, - "argument2": { - "type": "minecraft:add", - "argument1": { - "type": "minecraft:mul", - "argument1": 0.003, - "argument2": "minecraft:overworld/ridges" - }, "argument2": { "type": "minecraft:add", "argument1": { - "type": "minecraft:mul", - "argument1": -0.06, - "argument2": "minecraft:overworld/erosion" + "type": "minecraft:range_choice", + "input": "minecraft:overworld/continents", + "min_inclusive": -1.0, + "max_exclusive": -0.93, + "when_in_range": { + "type": "minecraft:add", + "argument1": -0.85, + "argument2": { + "type": "minecraft:mul", + "argument1": 0.05, + "argument2": { + "type": "minecraft:noise", + "noise": "antarchy:elythia_terrain_roughness", + "xz_scale": 0.55, + "y_scale": 0 + } + } + }, + "when_out_of_range": 0.0 }, "argument2": { - "type": "minecraft:mul", - "argument1": 0.58, - "argument2": "minecraft:overworld/continents" + "type": "minecraft:range_choice", + "input": "minecraft:overworld/depth", + "min_inclusive": 0.35, + "max_exclusive": 0.52, + "when_in_range": { + "type": "minecraft:range_choice", + "input": "minecraft:overworld/ridges", + "min_inclusive": -0.8, + "max_exclusive": -0.3, + "when_in_range": { + "type": "minecraft:mul", + "argument1": 0.07, + "argument2": { + "type": "minecraft:noise", + "noise": "antarchy:elythia_terrain_roughness", + "xz_scale": 0.75, + "y_scale": 0 + } + }, + "when_out_of_range": 0.0 + }, + "when_out_of_range": 0.0 } } } } } - } - } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/noise/surface_blend.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/noise/surface_blend.json index 765d1bdd..3dee4eee 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/noise/surface_blend.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/noise/surface_blend.json @@ -1,4 +1,8 @@ { "firstOctave": -3, - "amplitudes": [1.0, 0.5, 0.25] + "amplitudes": [ + 1.0, + 0.5, + 0.25 + ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/noise_settings/cavaryn.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/noise_settings/cavaryn.json index 5f4002c4..a787d096 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/noise_settings/cavaryn.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/noise_settings/cavaryn.json @@ -173,7 +173,9 @@ "type": "minecraft:condition", "if_true": { "type": "minecraft:biome", - "biome_is": ["antarchy:biowart_caves"] + "biome_is": [ + "antarchy:biowart_caves" + ] }, "then_run": { "type": "minecraft:sequence", @@ -207,7 +209,183 @@ "type": "minecraft:condition", "if_true": { "type": "minecraft:biome", - "biome_is": ["antarchy:brooding_tunnels"] + "biome_is": [ + "antarchy:wormy_caves" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "floor", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "antarchy:surface_blend", + "min_threshold": -0.28, + "max_threshold": 0.18 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:mud" + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "floor", + "add_surface_depth": true, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "antarchy:loam" + } + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "antarchy:cavaryn_moleworm_caves" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "floor", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "antarchy:surface_blend", + "min_threshold": -1.0, + "max_threshold": -0.18 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:podzol", + "Properties": { + "snowy": "false" + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "antarchy:surface_blend", + "min_threshold": -0.055, + "max_threshold": 0.195 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:rooted_dirt" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "antarchy:surface_blend", + "min_threshold": 0.32, + "max_threshold": 0.68 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:coarse_dirt" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:coarse_dirt" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": -1, + "surface_depth_multiplier": 2, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:rooted_dirt" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": -4, + "surface_depth_multiplier": 3, + "add_stone_depth": true + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:coarse_dirt" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:rooted_dirt" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "antarchy:brooding_tunnels" + ] }, "then_run": { "type": "minecraft:block", diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/noise_settings/elythia.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/noise_settings/elythia.json index 90c87438..7407b1a5 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/noise_settings/elythia.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/noise_settings/elythia.json @@ -515,12 +515,6 @@ "Name": "minecraft:sand" } } - }, - { - "type": "minecraft:block", - "result_state": { - "Name": "minecraft:sand" - } } ] } @@ -537,7 +531,7 @@ "then_run": { "type": "minecraft:block", "result_state": { - "Name": "antarchy:shellstone" + "Name": "minecraft:gravel" } } }, diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/noise_settings/thoraxis.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/noise_settings/thoraxis.json index 117178af..bb019643 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/noise_settings/thoraxis.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/noise_settings/thoraxis.json @@ -1,5 +1,5 @@ { - "sea_level": 32, + "sea_level": -256, "disable_mob_generation": false, "aquifers_enabled": false, "ore_veins_enabled": false, @@ -14,8 +14,8 @@ } }, "noise": { - "min_y": 0, - "height": 256, + "min_y": -256, + "height": 512, "size_horizontal": 1, "size_vertical": 2 }, @@ -48,46 +48,53 @@ "ridges": 0, "initial_density_without_jaggedness": 0, "final_density": { - "type": "minecraft:squeeze", - "argument": { - "type": "minecraft:interpolated", + "type": "minecraft:range_choice", + "input": "minecraft:y", + "min_inclusive": -256, + "max_exclusive": 0, + "when_in_range": "antarchy:thoraxis_underside_density", + "when_out_of_range": { + "type": "minecraft:squeeze", "argument": { - "type": "minecraft:mul", - "argument1": 0.64, - "argument2": { - "type": "minecraft:blend_density", - "argument": { - "type": "minecraft:add", - "argument1": 2.5, - "argument2": { + "type": "minecraft:interpolated", + "argument": { + "type": "minecraft:mul", + "argument1": 0.64, + "argument2": { + "type": "minecraft:blend_density", + "argument": { "type": "minecraft:add", - "argument1": { - "type": "minecraft:mul", - "argument1": { - "type": "minecraft:y_clamped_gradient", - "from_value": 0.0, - "from_y": -8, - "to_value": 1.0, - "to_y": 24 - }, - "argument2": -2.5 - }, + "argument1": 2.5, "argument2": { "type": "minecraft:add", - "argument1": 0.9375, - "argument2": { + "argument1": { "type": "minecraft:mul", "argument1": { "type": "minecraft:y_clamped_gradient", - "from_value": 1.0, - "from_y": 208, - "to_value": 0.0, - "to_y": 256 + "from_value": 0.0, + "from_y": -23, + "to_value": 1.0, + "to_y": -11 }, + "argument2": -2.5 + }, + "argument2": { + "type": "minecraft:add", + "argument1": 0.9375, "argument2": { - "type": "minecraft:add", - "argument1": -0.9375, - "argument2": "antarchy:thoraxis_base_3d_noise" + "type": "minecraft:mul", + "argument1": { + "type": "minecraft:y_clamped_gradient", + "from_value": 1.0, + "from_y": 208, + "to_value": 0.0, + "to_y": 256 + }, + "argument2": { + "type": "minecraft:add", + "argument1": -0.9375, + "argument2": "antarchy:thoraxis_base_3d_noise" + } } } } @@ -113,7 +120,7 @@ "type": "minecraft:y_above", "add_stone_depth": false, "anchor": { - "absolute": 4 + "absolute": -252 }, "surface_depth_multiplier": 0 } @@ -125,6 +132,134 @@ } } }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:not", + "invert": { + "type": "minecraft:vertical_gradient", + "random_name": "antarchy:thoraxis_border_bedrock_lower", + "true_at_and_below": { + "absolute": -4 + }, + "false_at_and_above": { + "absolute": -1 + } + } + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:vertical_gradient", + "random_name": "antarchy:thoraxis_border_bedrock_upper", + "true_at_and_below": { + "absolute": 1 + }, + "false_at_and_above": { + "absolute": 4 + } + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:bedrock" + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:not", + "invert": { + "type": "minecraft:y_above", + "add_stone_depth": false, + "anchor": { + "absolute": 0 + }, + "surface_depth_multiplier": 0 + } + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": true, + "offset": 0, + "secondary_depth_range": 0, + "surface_type": "ceiling" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "antarchy:dream_sand" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": false, + "offset": 0, + "secondary_depth_range": 0, + "surface_type": "ceiling" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "antarchy:dream_sand" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "antarchy:dream_sandstone", + "Properties": { + "vertical_direction": "down" + } + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "antarchy:nadir_forest" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": false, + "offset": 0, + "secondary_depth_range": 0, + "surface_type": "ceiling" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "antarchy:nadir_nyxium", + "Properties": { + "vertical_direction": "down" + } + } + } + } + ] + } + }, { "type": "minecraft:condition", "if_true": { @@ -191,6 +326,45 @@ ] } }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "antarchy:vortex_expanse" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": false, + "offset": 0, + "secondary_depth_range": 0, + "surface_type": "floor" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "antarchy:verdant_nyxium", + "Properties": { + "vertical_direction": "up" + } + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "antarchy:typhonite" + } + } + ] + } + }, { "type": "minecraft:condition", "if_true": { @@ -233,6 +407,31 @@ } } }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": false, + "offset": 0, + "secondary_depth_range": 0, + "surface_type": "ceiling" + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:gravel", + "min_threshold": -0.018, + "max_threshold": 0.018 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "antarchy:antigravel" + } + } + } + }, { "type": "minecraft:block", "result_state": { diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/dimensional_tears.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/dimensional_tears.json index f2b49a38..1763b0ce 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/dimensional_tears.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/dimensional_tears.json @@ -12,8 +12,12 @@ "type": "minecraft:height_range", "height": { "type": "minecraft:uniform", - "min_inclusive": { "absolute": 24 }, - "max_inclusive": { "absolute": 170 } + "min_inclusive": { + "absolute": 24 + }, + "max_inclusive": { + "absolute": 170 + } } }, { diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/duskbells.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/duskbells.json index 71fddb62..4c7f38c2 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/duskbells.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/duskbells.json @@ -5,8 +5,10 @@ "type": "minecraft:count", "count": { "type": "minecraft:uniform", - "min_inclusive": 1, - "max_inclusive": 3 + "value": { + "min_inclusive": 1, + "max_inclusive": 3 + } } }, { diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_underground.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_underground.json index e7cd0ebf..676693f1 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_underground.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_underground.json @@ -16,7 +16,7 @@ "absolute": -48 }, "max_inclusive": { - "absolute": 96 + "absolute": 32 } } }, diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/fallen_ouranwood_tree.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/fallen_ouranwood_tree.json index de592a7f..306faa83 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/fallen_ouranwood_tree.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/fallen_ouranwood_tree.json @@ -1,9 +1,19 @@ { "feature": "antarchy:fallen_ouranwood_tree", "placement": [ - { "type": "minecraft:rarity_filter", "chance": 5 }, - { "type": "minecraft:in_square" }, - { "type": "minecraft:heightmap", "heightmap": "WORLD_SURFACE_WG" }, - { "type": "minecraft:biome" } + { + "type": "minecraft:rarity_filter", + "chance": 5 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:heightmap", + "heightmap": "WORLD_SURFACE_WG" + }, + { + "type": "minecraft:biome" + } ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/fungal_mushroom.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/fungal_mushroom.json index a720f1e1..2ca02158 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/fungal_mushroom.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/fungal_mushroom.json @@ -1,9 +1,19 @@ { "feature": "antarchy:fungal_mushroom", "placement": [ - { "type": "minecraft:rarity_filter", "chance": 4 }, - { "type": "minecraft:in_square" }, - { "type": "minecraft:heightmap", "heightmap": "WORLD_SURFACE_WG" }, - { "type": "minecraft:biome" } + { + "type": "minecraft:rarity_filter", + "chance": 4 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:heightmap", + "heightmap": "WORLD_SURFACE_WG" + }, + { + "type": "minecraft:biome" + } ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/giant_lily_pad_patch.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/giant_lily_pad_patch.json index b1b0dd8d..28ec81e3 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/giant_lily_pad_patch.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/giant_lily_pad_patch.json @@ -1,9 +1,19 @@ { "feature": "antarchy:giant_lily_pad_patch", "placement": [ - { "type": "minecraft:rarity_filter", "chance": 6 }, - { "type": "minecraft:in_square" }, - { "type": "minecraft:heightmap", "heightmap": "MOTION_BLOCKING_NO_LEAVES" }, - { "type": "minecraft:biome" } + { + "type": "minecraft:rarity_filter", + "chance": 6 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:heightmap", + "heightmap": "MOTION_BLOCKING_NO_LEAVES" + }, + { + "type": "minecraft:biome" + } ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/giant_lily_pad_patch_common.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/giant_lily_pad_patch_common.json index 6b49ad1f..153f630d 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/giant_lily_pad_patch_common.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/giant_lily_pad_patch_common.json @@ -1,9 +1,19 @@ { "feature": "antarchy:giant_lily_pad_patch", "placement": [ - { "type": "minecraft:rarity_filter", "chance": 2 }, - { "type": "minecraft:in_square" }, - { "type": "minecraft:heightmap", "heightmap": "MOTION_BLOCKING_NO_LEAVES" }, - { "type": "minecraft:biome" } + { + "type": "minecraft:rarity_filter", + "chance": 2 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:heightmap", + "heightmap": "MOTION_BLOCKING_NO_LEAVES" + }, + { + "type": "minecraft:biome" + } ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/giant_lily_pad_patch_meadow.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/giant_lily_pad_patch_meadow.json index 9e0694f1..2a71d4d9 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/giant_lily_pad_patch_meadow.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/giant_lily_pad_patch_meadow.json @@ -1,9 +1,19 @@ { "feature": "antarchy:giant_lily_pad_patch", "placement": [ - { "type": "minecraft:rarity_filter", "chance": 8 }, - { "type": "minecraft:in_square" }, - { "type": "minecraft:heightmap", "heightmap": "MOTION_BLOCKING_NO_LEAVES" }, - { "type": "minecraft:biome" } + { + "type": "minecraft:rarity_filter", + "chance": 8 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:heightmap", + "heightmap": "MOTION_BLOCKING_NO_LEAVES" + }, + { + "type": "minecraft:biome" + } ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/giant_lily_pad_patch_peach_forest.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/giant_lily_pad_patch_peach_forest.json index 176eba6c..1752b357 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/giant_lily_pad_patch_peach_forest.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/giant_lily_pad_patch_peach_forest.json @@ -1,9 +1,19 @@ { "feature": "antarchy:giant_lily_pad_patch_peach_forest", "placement": [ - { "type": "minecraft:rarity_filter", "chance": 6 }, - { "type": "minecraft:in_square" }, - { "type": "minecraft:heightmap", "heightmap": "MOTION_BLOCKING_NO_LEAVES" }, - { "type": "minecraft:biome" } + { + "type": "minecraft:rarity_filter", + "chance": 6 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:heightmap", + "heightmap": "MOTION_BLOCKING_NO_LEAVES" + }, + { + "type": "minecraft:biome" + } ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/gorevines.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/gorevines.json index 38c7af65..1b120241 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/gorevines.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/gorevines.json @@ -5,8 +5,10 @@ "type": "minecraft:count", "count": { "type": "minecraft:uniform", - "min_inclusive": 6, - "max_inclusive": 12 + "value": { + "min_inclusive": 6, + "max_inclusive": 12 + } } }, { diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/jumpy_bug_egg_ceiling.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/jumpy_bug_egg_ceiling.json deleted file mode 100644 index 8ed335fa..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/jumpy_bug_egg_ceiling.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "feature": "antarchy:jumpy_bug_egg_ceiling", - "placement": [ - { - "type": "minecraft:count", - "count": { - "type": "minecraft:uniform", - "value": { - "min_inclusive": 1, - "max_inclusive": 2 - } - } - }, - { - "type": "minecraft:in_square" - }, - { - "type": "minecraft:height_range", - "height": { - "type": "minecraft:uniform", - "min_inclusive": { - "absolute": 5 - }, - "max_inclusive": { - "absolute": 190 - } - } - }, - { - "type": "minecraft:biome" - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/lucid_blood_crystal_spires.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/lucid_blood_crystal_spires.json index 1b324284..a4dc2f79 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/lucid_blood_crystal_spires.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/lucid_blood_crystal_spires.json @@ -29,5 +29,3 @@ } ] } - - diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/lucid_large_blood_crystal_spires.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/lucid_large_blood_crystal_spires.json index e75e392d..1f386190 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/lucid_large_blood_crystal_spires.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/lucid_large_blood_crystal_spires.json @@ -29,5 +29,3 @@ } ] } - - diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/lucid_medium_blood_crystal_spires.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/lucid_medium_blood_crystal_spires.json index 39631321..80554ca0 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/lucid_medium_blood_crystal_spires.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/lucid_medium_blood_crystal_spires.json @@ -29,5 +29,3 @@ } ] } - - diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/nadir_ferns.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/nadir_ferns.json index e6ba47fd..540629e7 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/nadir_ferns.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/nadir_ferns.json @@ -5,8 +5,10 @@ "type": "minecraft:count", "count": { "type": "minecraft:uniform", - "min_inclusive": 5, - "max_inclusive": 9 + "value": { + "min_inclusive": 5, + "max_inclusive": 9 + } } }, { diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/nadir_forest_ceiling_saplings.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/nadir_forest_ceiling_saplings.json index 82e2b483..7456eec6 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/nadir_forest_ceiling_saplings.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/nadir_forest_ceiling_saplings.json @@ -5,8 +5,10 @@ "type": "minecraft:count", "count": { "type": "minecraft:uniform", - "min_inclusive": 3, - "max_inclusive": 6 + "value": { + "min_inclusive": 3, + "max_inclusive": 6 + } } }, { diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/nadir_forest_ceiling_trees.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/nadir_forest_ceiling_trees.json index a46fa463..a0a8f3a2 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/nadir_forest_ceiling_trees.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/nadir_forest_ceiling_trees.json @@ -5,8 +5,10 @@ "type": "minecraft:count", "count": { "type": "minecraft:uniform", - "min_inclusive": 5, - "max_inclusive": 9 + "value": { + "min_inclusive": 5, + "max_inclusive": 9 + } } }, { diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/nadir_roots_patch.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/nadir_roots_patch.json index 88be00f2..43f6ddc6 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/nadir_roots_patch.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/nadir_roots_patch.json @@ -5,8 +5,10 @@ "type": "minecraft:count", "count": { "type": "minecraft:uniform", - "min_inclusive": 24, - "max_inclusive": 40 + "value": { + "min_inclusive": 24, + "max_inclusive": 40 + } } }, { diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/ore_magma.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/ore_magma.json index acd5b565..51bb28fe 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/ore_magma.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/ore_magma.json @@ -10,11 +10,15 @@ }, { "type": "minecraft:height_range", - "height": { - "type": "minecraft:uniform", - "max_inclusive": { "absolute": 144 }, - "min_inclusive": { "absolute": 8 } + "height": { + "type": "minecraft:uniform", + "max_inclusive": { + "absolute": 144 + }, + "min_inclusive": { + "absolute": 8 } + } }, { "type": "minecraft:biome" diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/ouranwood_trees.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/ouranwood_trees.json index 850dde08..023da009 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/ouranwood_trees.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/ouranwood_trees.json @@ -1,9 +1,19 @@ { "feature": "antarchy:ouranwood_tree_selector", "placement": [ - { "type": "minecraft:count", "count": 1 }, - { "type": "minecraft:in_square" }, - { "type": "minecraft:heightmap", "heightmap": "WORLD_SURFACE_WG" }, - { "type": "minecraft:biome" } + { + "type": "minecraft:count", + "count": 1 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:heightmap", + "heightmap": "WORLD_SURFACE_WG" + }, + { + "type": "minecraft:biome" + } ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/ouranwood_trees_sparse.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/ouranwood_trees_sparse.json index 61755a74..f596753c 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/ouranwood_trees_sparse.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/ouranwood_trees_sparse.json @@ -1,9 +1,19 @@ { "feature": "antarchy:ouranwood_tree_selector_sparse", "placement": [ - { "type": "minecraft:rarity_filter", "chance": 6 }, - { "type": "minecraft:in_square" }, - { "type": "minecraft:heightmap", "heightmap": "WORLD_SURFACE_WG" }, - { "type": "minecraft:biome" } + { + "type": "minecraft:rarity_filter", + "chance": 6 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:heightmap", + "heightmap": "WORLD_SURFACE_WG" + }, + { + "type": "minecraft:biome" + } ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/patch_ceiling_antigravel.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/patch_ceiling_antigravel.json deleted file mode 100644 index 49da7126..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/patch_ceiling_antigravel.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "feature": "antarchy:antigravel_ceiling", - "placement": [ - { - "type": "minecraft:rarity_filter", - "chance": 24 - }, - { - "type": "minecraft:in_square" - }, - { - "type": "minecraft:height_range", - "height": { - "type": "minecraft:uniform", - "max_inclusive": { - "below_top": 4 - }, - "min_inclusive": { - "above_bottom": 4 - } - } - }, - { - "type": "minecraft:biome" - }, - { - "type": "minecraft:count", - "count": 20 - }, - { - "type": "minecraft:random_offset", - "xz_spread": { - "type": "minecraft:uniform", - "max_inclusive": 3, - "min_inclusive": -3 - }, - "y_spread": { - "type": "minecraft:uniform", - "max_inclusive": 1, - "min_inclusive": -1 - } - }, - { - "type": "minecraft:block_predicate_filter", - "predicate": { - "type": "minecraft:all_of", - "predicates": [ - { - "type": "minecraft:matching_blocks", - "blocks": [ - "antarchy:nyxite", - "antarchy:pale_nyxite" - ] - }, - { - "type": "minecraft:matching_blocks", - "blocks": "minecraft:air", - "offset": [ - 0, - -1, - 0 - ] - } - ] - } - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/spiraling_vines_patch.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/spiraling_vines_patch.json index 514318dc..dcb91fa5 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/spiraling_vines_patch.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/spiraling_vines_patch.json @@ -5,8 +5,10 @@ "type": "minecraft:count", "count": { "type": "minecraft:uniform", - "min_inclusive": 5, - "max_inclusive": 10 + "value": { + "min_inclusive": 5, + "max_inclusive": 10 + } } }, { diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/springbug_egg_ceiling.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/springbug_egg_ceiling.json index 6d37e55a..ebfdcafc 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/springbug_egg_ceiling.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/springbug_egg_ceiling.json @@ -5,8 +5,10 @@ "type": "minecraft:count", "count": { "type": "minecraft:uniform", - "min_inclusive": 1, - "max_inclusive": 2 + "value": { + "min_inclusive": 1, + "max_inclusive": 2 + } } }, { diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/thoraxis_floor_rib_columns.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/thoraxis_floor_rib_columns.json index 6e7c25e7..b972bc92 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/thoraxis_floor_rib_columns.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/thoraxis_floor_rib_columns.json @@ -9,7 +9,9 @@ "type": "minecraft:height_range", "height": { "type": "minecraft:uniform", - "min_inclusive": { "absolute": 32 }, + "min_inclusive": { + "absolute": 32 + }, "max_inclusive": { "absolute": 84 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/thoraxis_floor_spikes.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/thoraxis_floor_spikes.json index d3bf833e..2bd6a911 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/thoraxis_floor_spikes.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/thoraxis_floor_spikes.json @@ -12,7 +12,9 @@ "type": "minecraft:height_range", "height": { "type": "minecraft:uniform", - "min_inclusive": { "absolute": 24 }, + "min_inclusive": { + "absolute": 24 + }, "max_inclusive": { "absolute": 96 } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/thoraxis_ichor_lake.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/thoraxis_ichor_lake.json index 5ef5b1e4..2d7e2fc3 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/thoraxis_ichor_lake.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/thoraxis_ichor_lake.json @@ -12,8 +12,12 @@ "type": "minecraft:height_range", "height": { "type": "minecraft:uniform", - "min_inclusive": { "absolute": 1 }, - "max_inclusive": { "absolute": 1 } + "min_inclusive": { + "absolute": 1 + }, + "max_inclusive": { + "absolute": 1 + } } }, { diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/thoraxis_transition_throat_large.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/thoraxis_transition_throat_large.json new file mode 100644 index 00000000..1fcb974f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/thoraxis_transition_throat_large.json @@ -0,0 +1,24 @@ +{ + "feature": "antarchy:thoraxis_transition_throat_large", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 640 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:constant", + "value": { + "absolute": 0 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/triffid_patch.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/triffid_patch.json deleted file mode 100644 index f87e45e7..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/triffid_patch.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "feature": "antarchy:triffid_patch", - "placement": [ - { - "type": "minecraft:rarity_filter", - "chance": 160 - }, - { - "type": "minecraft:in_square" - }, - { - "type": "minecraft:heightmap", - "heightmap": "WORLD_SURFACE_WG" - }, - { - "type": "minecraft:biome" - } - ] -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/typhonite_veined_ore.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/typhonite_veined_ore.json index 6f2d2b7d..fa3fa0a4 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/typhonite_veined_ore.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/typhonite_veined_ore.json @@ -5,8 +5,10 @@ "type": "minecraft:count", "count": { "type": "minecraft:uniform", - "min_inclusive": 8, - "max_inclusive": 12 + "value": { + "min_inclusive": 8, + "max_inclusive": 12 + } } }, { @@ -16,8 +18,12 @@ "type": "minecraft:height_range", "height": { "type": "minecraft:uniform", - "min_inclusive": { "absolute": 8 }, - "max_inclusive": { "absolute": 220 } + "min_inclusive": { + "absolute": 8 + }, + "max_inclusive": { + "absolute": 220 + } } }, { diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/verdant_roots_patch.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/verdant_roots_patch.json index 9c22d609..6f315adb 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/verdant_roots_patch.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/verdant_roots_patch.json @@ -5,8 +5,10 @@ "type": "minecraft:count", "count": { "type": "minecraft:uniform", - "min_inclusive": 24, - "max_inclusive": 40 + "value": { + "min_inclusive": 24, + "max_inclusive": 40 + } } }, { diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/whirlflower_patch.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/whirlflower_patch.json index 6fc2c462..e6a5568a 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/whirlflower_patch.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/whirlflower_patch.json @@ -5,8 +5,10 @@ "type": "minecraft:count", "count": { "type": "minecraft:uniform", - "min_inclusive": 2, - "max_inclusive": 5 + "value": { + "min_inclusive": 2, + "max_inclusive": 5 + } } }, { diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/wormy_caves_ground_molting_vines.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/wormy_caves_ground_molting_vines.json index d9985f9a..c6a06fb9 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/wormy_caves_ground_molting_vines.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/wormy_caves_ground_molting_vines.json @@ -5,8 +5,10 @@ "type": "minecraft:count", "count": { "type": "minecraft:uniform", - "min_inclusive": 10, - "max_inclusive": 16 + "value": { + "min_inclusive": 10, + "max_inclusive": 16 + } } }, { diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/wormy_caves_molting_vines.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/wormy_caves_molting_vines.json index 44af6c83..6d83a16a 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/wormy_caves_molting_vines.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/wormy_caves_molting_vines.json @@ -5,8 +5,10 @@ "type": "minecraft:count", "count": { "type": "minecraft:uniform", - "min_inclusive": 12, - "max_inclusive": 18 + "value": { + "min_inclusive": 12, + "max_inclusive": 18 + } } }, { diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/wormy_caves_mucus.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/wormy_caves_mucus.json index 2ed3df08..94842de5 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/wormy_caves_mucus.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/wormy_caves_mucus.json @@ -5,8 +5,10 @@ "type": "minecraft:count", "count": { "type": "minecraft:uniform", - "min_inclusive": 64, - "max_inclusive": 96 + "value": { + "min_inclusive": 64, + "max_inclusive": 96 + } } }, { diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/processor_list/fallen_kingdom_castle_processor.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/processor_list/fallen_kingdom_castle_processor.json index 8c6d77f2..149ed116 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/processor_list/fallen_kingdom_castle_processor.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/processor_list/fallen_kingdom_castle_processor.json @@ -2,17 +2,17 @@ "processors": [ { "processor_type": "integrated_api:integrated_block_replace_processor", - "input_block" : "minecraft:cobblestone", - "required_mod" : "quark", - "output_block" : "quark:cobblestone_bricks", - "probability" : 0.4 + "input_block": "minecraft:cobblestone", + "required_mod": "quark", + "output_block": "quark:cobblestone_bricks", + "probability": 0.4 }, { "processor_type": "integrated_api:integrated_block_replace_processor", - "input_block" : "minecraft:mossy_cobblestone", - "required_mod" : "quark", - "output_block" : "quark:mossy_cobblestone_bricks", - "probability" : 0.4 + "input_block": "minecraft:mossy_cobblestone", + "required_mod": "quark", + "output_block": "quark:mossy_cobblestone_bricks", + "probability": 0.4 } ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/processor_list/generic_processor.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/processor_list/generic_processor.json index 1e098c7f..8abd2b3c 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/processor_list/generic_processor.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/processor_list/generic_processor.json @@ -7,4 +7,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/apple_cow_orchard.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/apple_cow_orchard.json new file mode 100644 index 00000000..d59ff7d2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/apple_cow_orchard.json @@ -0,0 +1,19 @@ +{ + "type": "integrated_api:generic_structure", + "start_pool": "antarchy:apple_cow_orchard/apple_cow_orchard", + "size": 1, + "terrain_height_radius_check": 3, + "allowed_terrain_height_range": 10, + "valid_biome_radius_check": 1, + "biomes": "#antarchy:has_structure/apple_cow_orchard_biomes", + "step": "surface_structures", + "terrain_adaptation": "beard_thin", + "project_start_to_heightmap": "WORLD_SURFACE_WG", + "start_height": { + "type": "minecraft:constant", + "value": { + "absolute": 0 + } + }, + "spawn_overrides": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/basilisk_lair.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/basilisk_lair.json index e4ec1031..9d79a0cf 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/basilisk_lair.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/basilisk_lair.json @@ -17,6 +17,5 @@ "absolute": 0 } }, - "spawn_overrides": {}, - "liquid_settings": "ignore_waterlogging" + "spawn_overrides": {} } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/fallen_kingdom_castle.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/fallen_kingdom_castle.json index 73b7adb2..ccce5d71 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/fallen_kingdom_castle.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/fallen_kingdom_castle.json @@ -17,6 +17,5 @@ "absolute": 0 } }, - "spawn_overrides": {}, - "liquid_settings": "ignore_waterlogging" + "spawn_overrides": {} } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/greenhouse.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/greenhouse.json new file mode 100644 index 00000000..7d740455 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/greenhouse.json @@ -0,0 +1,19 @@ +{ + "type": "integrated_api:generic_structure", + "start_pool": "antarchy:greenhouse/greenhouse", + "size": 1, + "terrain_height_radius_check": 2, + "allowed_terrain_height_range": 8, + "valid_biome_radius_check": 1, + "biomes": "#antarchy:has_structure/greenhouse_biomes", + "step": "surface_structures", + "terrain_adaptation": "beard_thin", + "project_start_to_heightmap": "WORLD_SURFACE_WG", + "start_height": { + "type": "minecraft:constant", + "value": { + "absolute": 0 + } + }, + "spawn_overrides": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/kings_tree.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/kings_tree.json index 600cb1ce..ebfb4d2c 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/kings_tree.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/kings_tree.json @@ -18,6 +18,5 @@ "absolute": 0 } }, - "spawn_overrides": {}, - "liquid_settings": "ignore_waterlogging" + "spawn_overrides": {} } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/magical_castle.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/magical_castle.json new file mode 100644 index 00000000..8cb16ff7 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/magical_castle.json @@ -0,0 +1,19 @@ +{ + "type": "integrated_api:generic_structure", + "start_pool": "antarchy:magical_castle/magical_castle", + "size": 1, + "terrain_height_radius_check": 4, + "allowed_terrain_height_range": 14, + "valid_biome_radius_check": 1, + "biomes": "#antarchy:has_structure/magical_castle_biomes", + "step": "surface_structures", + "terrain_adaptation": "beard_thin", + "project_start_to_heightmap": "WORLD_SURFACE_WG", + "start_height": { + "type": "minecraft:constant", + "value": { + "absolute": 0 + } + }, + "spawn_overrides": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/royal_shrine.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/royal_shrine.json new file mode 100644 index 00000000..ced592fb --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/royal_shrine.json @@ -0,0 +1,19 @@ +{ + "type": "integrated_api:generic_structure", + "start_pool": "antarchy:royal_shrine/royal_shrine", + "size": 1, + "terrain_height_radius_check": 2, + "allowed_terrain_height_range": 10, + "valid_biome_radius_check": 1, + "biomes": "#antarchy:has_structure/royal_shrine_biomes", + "step": "surface_structures", + "terrain_adaptation": "beard_thin", + "project_start_to_heightmap": "WORLD_SURFACE_WG", + "start_height": { + "type": "minecraft:constant", + "value": { + "absolute": 0 + } + }, + "spawn_overrides": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/ruined_arena.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/ruined_arena.json index beee8a5d..e62422c8 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/ruined_arena.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/ruined_arena.json @@ -17,6 +17,5 @@ "absolute": 0 } }, - "spawn_overrides": {}, - "liquid_settings": "ignore_waterlogging" + "spawn_overrides": {} } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/ruined_prison.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/ruined_prison.json index 07fdd9be..29f79008 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/ruined_prison.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/ruined_prison.json @@ -17,6 +17,5 @@ "absolute": 0 } }, - "spawn_overrides": {}, - "liquid_settings": "ignore_waterlogging" + "spawn_overrides": {} } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/sign.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/sign.json index 40841a3e..5a813ba9 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/sign.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/sign.json @@ -10,11 +10,7 @@ "terrain_adaptation": "beard_thin", "project_start_to_heightmap": "WORLD_SURFACE_WG", "start_height": { - "type": "minecraft:constant", - "value": { - "absolute": 0 - } + "absolute": 0 }, - "spawn_overrides": {}, - "liquid_settings": "ignore_waterlogging" + "spawn_overrides": {} } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/stampys_house.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/stampys_house.json index 17a94908..9c096e01 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/stampys_house.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/stampys_house.json @@ -10,11 +10,7 @@ "terrain_adaptation": "beard_thin", "project_start_to_heightmap": "WORLD_SURFACE_WG", "start_height": { - "type": "minecraft:constant", - "value": { - "absolute": 0 - } + "absolute": 0 }, - "spawn_overrides": {}, - "liquid_settings": "ignore_waterlogging" + "spawn_overrides": {} } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/temple_of_technoblade.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/temple_of_technoblade.json index 33db2af2..42e52dc4 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/temple_of_technoblade.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/temple_of_technoblade.json @@ -17,6 +17,5 @@ "absolute": 0 } }, - "spawn_overrides": {}, - "liquid_settings": "ignore_waterlogging" + "spawn_overrides": {} } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/tigers_eye_shrine.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/tigers_eye_shrine.json index e68fbd3e..cd4c5239 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/tigers_eye_shrine.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/tigers_eye_shrine.json @@ -4,7 +4,7 @@ "size": 1, "valid_biome_radius_check": 1, "biomes": "#antarchy:has_structure/tigers_eye_shrine_biomes", - "step": "surface_structures", + "step": "underground_structures", "enhanced_terrain_adaptation": { "type": "integrated_api:none" }, @@ -17,6 +17,5 @@ "absolute": 150 } }, - "spawn_overrides": {}, - "liquid_settings": "ignore_waterlogging" + "spawn_overrides": {} } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/toreterror_arena.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/toreterror_arena.json index 0af857c1..fb079f67 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/toreterror_arena.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/toreterror_arena.json @@ -10,6 +10,5 @@ "start_height": { "absolute": 1 }, - "spawn_overrides": {}, - "liquid_settings": "ignore_waterlogging" + "spawn_overrides": {} } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/trayaurus_lab.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/trayaurus_lab.json index 3dfb6256..bfa8ce62 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/trayaurus_lab.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/trayaurus_lab.json @@ -12,6 +12,5 @@ "start_height": { "absolute": 0 }, - "spawn_overrides": {}, - "liquid_settings": "ignore_waterlogging" + "spawn_overrides": {} } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/underside_castle.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/underside_castle.json index b58b7c96..a115b521 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/underside_castle.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/underside_castle.json @@ -26,7 +26,6 @@ "max_roof_search_distance": 256, "min_roof_thickness": 3, "min_open_space_below": 16, - "ceiling_offset": 0, - "spawn_overrides": {}, - "liquid_settings": "ignore_waterlogging" + "ceiling_offset": -1, + "spawn_overrides": {} } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/underside_ruins.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/underside_ruins.json index a2a448d5..3b8c75b2 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/underside_ruins.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/underside_ruins.json @@ -26,7 +26,6 @@ "max_roof_search_distance": 256, "min_roof_thickness": 3, "min_open_space_below": 16, - "ceiling_offset": 0, - "spawn_overrides": {}, - "liquid_settings": "ignore_waterlogging" + "ceiling_offset": -1, + "spawn_overrides": {} } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure_set/apple_cow_orchard.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure_set/apple_cow_orchard.json new file mode 100644 index 00000000..ed945776 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure_set/apple_cow_orchard.json @@ -0,0 +1,14 @@ +{ + "structures": [ + { + "structure": "antarchy:apple_cow_orchard", + "weight": 1 + } + ], + "placement": { + "salt": 369148227, + "spacing": 32, + "separation": 24, + "type": "integrated_api:advanced_random_spread" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure_set/elythia_common.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure_set/elythia_common.json new file mode 100644 index 00000000..257446be --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure_set/elythia_common.json @@ -0,0 +1,14 @@ +{ + "structures": [ + { + "structure": "antarchy:royal_shrine", + "weight": 1 + } + ], + "placement": { + "salt": 718395621, + "spacing": 26, + "separation": 19, + "type": "integrated_api:advanced_random_spread" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure_set/elythia_rare.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure_set/elythia_rare.json index fc89cf40..efa7ad47 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure_set/elythia_rare.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure_set/elythia_rare.json @@ -2,29 +2,53 @@ "structures": [ { "structure": "antarchy:trayaurus_lab", - "weight": 1 + "weight": 2 }, { "structure": "antarchy:fallen_kingdom_castle", - "weight": 2 + "weight": 3 }, { "structure": "antarchy:ruined_prison", - "weight": 2 + "weight": 3 + }, + { + "structure": "antarchy:sign", + "weight": 4 + }, + { + "structure": "antarchy:stampys_house", + "weight": 4 + }, + { + "structure": "antarchy:temple_of_technoblade", + "weight": 1 + }, + { + "structure": "antarchy:basilisk_lair", + "weight": 4 }, { "structure": "antarchy:ruined_arena", - "weight": 3 + "weight": 4 }, { "structure": "antarchy:toreterror_arena", - "weight": 3 + "weight": 6 + }, + { + "structure": "antarchy:greenhouse", + "weight": 4 + }, + { + "structure": "antarchy:magical_castle", + "weight": 4 } ], "placement": { "salt": 659843583, - "spacing": 75, - "separation": 68, + "spacing": 37, + "separation": 30, "type": "integrated_api:advanced_random_spread" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure_set/tigers_eye_shrine.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure_set/tigers_eye_shrine.json index 5df0708e..c4f0faf5 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure_set/tigers_eye_shrine.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure_set/tigers_eye_shrine.json @@ -9,6 +9,6 @@ "salt": 149275031, "spacing": 24, "separation": 16, - "type": "integrated_api:advanced_random_spread" + "type": "minecraft:random_spread" } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structures/basilisk_lair.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structures/basilisk_lair.json deleted file mode 100644 index e4ec1031..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structures/basilisk_lair.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "integrated_api:generic_structure", - "start_pool": "antarchy:basilisk_lair/basilisk_lair", - "size": 3, - "terrain_height_radius_check": 3, - "allowed_terrain_height_range": 10, - "valid_biome_radius_check": 1, - "biomes": "#antarchy:has_structure/basilisk_lair_biomes", - "step": "surface_structures", - "enhanced_terrain_adaptation": { - "type": "integrated_api:none" - }, - "project_start_to_heightmap": "WORLD_SURFACE_WG", - "start_height": { - "type": "minecraft:constant", - "value": { - "absolute": 0 - } - }, - "spawn_overrides": {}, - "liquid_settings": "ignore_waterlogging" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structures/fallen_kingdom_castle.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structures/fallen_kingdom_castle.json deleted file mode 100644 index 73b7adb2..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structures/fallen_kingdom_castle.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "integrated_api:generic_structure", - "start_pool": "antarchy:fallen_kingdom_castle/fallen_kingdom_castle", - "size": 12, - "terrain_height_radius_check": 4, - "allowed_terrain_height_range": 14, - "valid_biome_radius_check": 1, - "biomes": "#antarchy:has_structure/fallen_kingdom_castle_biomes", - "step": "surface_structures", - "enhanced_terrain_adaptation": { - "type": "integrated_api:none" - }, - "project_start_to_heightmap": "WORLD_SURFACE_WG", - "start_height": { - "type": "minecraft:constant", - "value": { - "absolute": 0 - } - }, - "spawn_overrides": {}, - "liquid_settings": "ignore_waterlogging" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structures/ruined_arena.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structures/ruined_arena.json deleted file mode 100644 index beee8a5d..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structures/ruined_arena.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "integrated_api:generic_structure", - "start_pool": "antarchy:ruined_arena/ruined_arena", - "size": 2, - "terrain_height_radius_check": 4, - "allowed_terrain_height_range": 14, - "valid_biome_radius_check": 1, - "biomes": "#antarchy:has_structure/ruined_arena_biomes", - "step": "surface_structures", - "enhanced_terrain_adaptation": { - "type": "integrated_api:none" - }, - "project_start_to_heightmap": "WORLD_SURFACE_WG", - "start_height": { - "type": "minecraft:constant", - "value": { - "absolute": 0 - } - }, - "spawn_overrides": {}, - "liquid_settings": "ignore_waterlogging" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structures/ruined_prison.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structures/ruined_prison.json deleted file mode 100644 index 07fdd9be..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structures/ruined_prison.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "integrated_api:generic_structure", - "start_pool": "antarchy:ruined_prison/ruined_prison", - "size": 12, - "terrain_height_radius_check": 4, - "allowed_terrain_height_range": 14, - "valid_biome_radius_check": 1, - "biomes": "#antarchy:has_structure/ruined_prison_biomes", - "step": "surface_structures", - "enhanced_terrain_adaptation": { - "type": "integrated_api:none" - }, - "project_start_to_heightmap": "WORLD_SURFACE_WG", - "start_height": { - "type": "minecraft:constant", - "value": { - "absolute": 0 - } - }, - "spawn_overrides": {}, - "liquid_settings": "ignore_waterlogging" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structures/sign.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structures/sign.json deleted file mode 100644 index f538f2d5..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structures/sign.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "integrated_api:generic_structure", - "start_pool": "antarchy:sign/sign", - "size": 3, - "terrain_height_radius_check": 1, - "allowed_terrain_height_range": 10, - "valid_biome_radius_check": 1, - "biomes": "#antarchy:has_structure/sign_biomes", - "step": "surface_structures", - "terrain_adaptation": "beard_thin", - "project_start_to_heightmap": "WORLD_SURFACE_WG", - "start_height": { - "absolute": 0 - }, - "spawn_overrides": {}, - "liquid_settings": "ignore_waterlogging" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structures/stampys_house.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structures/stampys_house.json deleted file mode 100644 index 404f1589..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structures/stampys_house.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "integrated_api:generic_structure", - "start_pool": "antarchy:stampys_house/stampys_house", - "size": 3, - "terrain_height_radius_check": 2, - "allowed_terrain_height_range": 12, - "valid_biome_radius_check": 1, - "biomes": "#antarchy:has_structure/stampys_house_biomes", - "step": "surface_structures", - "terrain_adaptation": "beard_thin", - "project_start_to_heightmap": "WORLD_SURFACE_WG", - "start_height": { - "absolute": 0 - }, - "spawn_overrides": {}, - "liquid_settings": "ignore_waterlogging" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structures/temple_of_technoblade.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structures/temple_of_technoblade.json deleted file mode 100644 index 33db2af2..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structures/temple_of_technoblade.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "integrated_api:generic_structure", - "start_pool": "antarchy:temple_of_technoblade/temple_of_technoblade1", - "size": 4, - "terrain_height_radius_check": 3, - "allowed_terrain_height_range": 10, - "valid_biome_radius_check": 1, - "biomes": "#antarchy:has_structure/temple_of_technoblade_biomes", - "step": "surface_structures", - "enhanced_terrain_adaptation": { - "type": "integrated_api:none" - }, - "project_start_to_heightmap": "WORLD_SURFACE_WG", - "start_height": { - "type": "minecraft:constant", - "value": { - "absolute": 0 - } - }, - "spawn_overrides": {}, - "liquid_settings": "ignore_waterlogging" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structures/toreterror_arena.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structures/toreterror_arena.json deleted file mode 100644 index 0af857c1..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structures/toreterror_arena.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "integrated_api:generic_structure", - "start_pool": "antarchy:toreterror_arena/toreterror_arena", - "size": 2, - "valid_biome_radius_check": 2, - "biomes": "#antarchy:has_structure/toreterror_arena_biomes", - "step": "surface_structures", - "terrain_adaptation": "none", - "project_start_to_heightmap": "WORLD_SURFACE_WG", - "start_height": { - "absolute": 1 - }, - "spawn_overrides": {}, - "liquid_settings": "ignore_waterlogging" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structures/trayaurus_lab.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structures/trayaurus_lab.json deleted file mode 100644 index 3dfb6256..00000000 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structures/trayaurus_lab.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "integrated_api:generic_structure", - "start_pool": "antarchy:trayaurus_lab/trayaurus_lab", - "size": 3, - "terrain_height_radius_check": 1, - "allowed_terrain_height_range": 10, - "valid_biome_radius_check": 1, - "biomes": "#antarchy:has_structure/trayaurus_lab_biomes", - "step": "surface_structures", - "terrain_adaptation": "beard_thin", - "project_start_to_heightmap": "WORLD_SURFACE_WG", - "start_height": { - "absolute": 0 - }, - "spawn_overrides": {}, - "liquid_settings": "ignore_waterlogging" -} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/apple_cow_orchard/apple_cow_orchard.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/apple_cow_orchard/apple_cow_orchard.json new file mode 100644 index 00000000..98b5e715 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/apple_cow_orchard/apple_cow_orchard.json @@ -0,0 +1,15 @@ +{ + "name": "antarchy:apple_cow_orchard/apple_cow_orchard", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "location": "antarchy:apple_cow_orchard/apple_cow_orchard", + "processors": "antarchy:generic_processor", + "projection": "rigid", + "element_type": "integrated_api:integrated_api_single_pool_element" + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/greenhouse/greenhouse.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/greenhouse/greenhouse.json new file mode 100644 index 00000000..ef23ed4d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/greenhouse/greenhouse.json @@ -0,0 +1,15 @@ +{ + "name": "antarchy:greenhouse/greenhouse", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "location": "antarchy:greenhouse/greenhouse", + "processors": "antarchy:generic_processor", + "projection": "rigid", + "element_type": "integrated_api:integrated_api_single_pool_element" + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/kings_tree/kings_tree.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/kings_tree/kings_tree.json index 9e8d31a4..63b96dab 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/kings_tree/kings_tree.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/kings_tree/kings_tree.json @@ -8,6 +8,7 @@ "location": "antarchy:kings_tree/kings_tree1", "processors": "antarchy:generic_processor", "projection": "rigid", + "ignore_bounds": true, "enhanced_terrain_adaptation": { "type": "integrated_api:custom", "carves": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/kings_tree/kings_tree1.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/kings_tree/kings_tree1.json index dd1f23f7..8ddd5534 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/kings_tree/kings_tree1.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/kings_tree/kings_tree1.json @@ -8,6 +8,7 @@ "location": "antarchy:kings_tree/kings_tree2", "processors": "antarchy:generic_processor", "projection": "rigid", + "ignore_bounds": true, "enhanced_terrain_adaptation": { "type": "integrated_api:custom", "carves": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/kings_tree/kings_tree3.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/kings_tree/kings_tree3.json index 5dc88b5b..d67addd0 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/kings_tree/kings_tree3.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/kings_tree/kings_tree3.json @@ -8,6 +8,7 @@ "location": "antarchy:kings_tree/kings_tree3", "processors": "antarchy:generic_processor", "projection": "rigid", + "ignore_bounds": true, "enhanced_terrain_adaptation": { "type": "integrated_api:custom", "carves": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/kings_tree/kings_tree4.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/kings_tree/kings_tree4.json index 39a3812c..b1e2c4a5 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/kings_tree/kings_tree4.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/kings_tree/kings_tree4.json @@ -8,6 +8,7 @@ "location": "antarchy:kings_tree/kings_tree4", "processors": "antarchy:generic_processor", "projection": "rigid", + "ignore_bounds": true, "enhanced_terrain_adaptation": { "type": "integrated_api:custom", "carves": true, diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/kings_tree/kings_tree_bottom.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/kings_tree/kings_tree_bottom.json index 15b2406e..7b0ec99d 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/kings_tree/kings_tree_bottom.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/kings_tree/kings_tree_bottom.json @@ -8,10 +8,11 @@ "location": "antarchy:kings_tree/kings_tree_bottom", "processors": "antarchy:generic_processor", "projection": "rigid", + "ignore_bounds": true, "enhanced_terrain_adaptation": { "type": "integrated_api:custom", - "carves": true, - "beards": true, + "carves": false, + "beards": false, "kernel_size": 35, "kernel_distance": 35 }, diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/magical_castle/magical_castle.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/magical_castle/magical_castle.json new file mode 100644 index 00000000..5df8fb98 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/magical_castle/magical_castle.json @@ -0,0 +1,15 @@ +{ + "name": "antarchy:magical_castle/magical_castle", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "location": "antarchy:magical_castle/magical_castle", + "processors": "antarchy:generic_processor", + "projection": "terrain_matching", + "element_type": "integrated_api:integrated_api_single_pool_element" + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/magical_castle/magical_castle_path.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/magical_castle/magical_castle_path.json new file mode 100644 index 00000000..41082972 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/magical_castle/magical_castle_path.json @@ -0,0 +1,15 @@ +{ + "name": "antarchy:magical_castle/magical_castle_path", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "location": "antarchy:magical_castle/magical_castle_path", + "processors": "antarchy:generic_processor", + "projection": "terrain_matching", + "element_type": "integrated_api:integrated_api_single_pool_element" + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/royal_shrine/royal_shrine.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/royal_shrine/royal_shrine.json new file mode 100644 index 00000000..3101be39 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/royal_shrine/royal_shrine.json @@ -0,0 +1,42 @@ +{ + "name": "antarchy:royal_shrine/royal_shrine", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "location": "antarchy:royal_shrine/king_shrine1", + "processors": "antarchy:generic_processor", + "projection": "rigid", + "element_type": "integrated_api:integrated_api_single_pool_element" + } + }, + { + "weight": 1, + "element": { + "location": "antarchy:royal_shrine/king_shrine2", + "processors": "antarchy:generic_processor", + "projection": "rigid", + "element_type": "integrated_api:integrated_api_single_pool_element" + } + }, + { + "weight": 1, + "element": { + "location": "antarchy:royal_shrine/queen_shrine1", + "processors": "antarchy:generic_processor", + "projection": "rigid", + "element_type": "integrated_api:integrated_api_single_pool_element" + } + }, + { + "weight": 1, + "element": { + "location": "antarchy:royal_shrine/queen_shrine2", + "processors": "antarchy:generic_processor", + "projection": "rigid", + "element_type": "integrated_api:integrated_api_single_pool_element" + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/toreterror_arena/toreterror_arena.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/toreterror_arena/toreterror_arena.json index 9b0b0f55..c9d574eb 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/toreterror_arena/toreterror_arena.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/toreterror_arena/toreterror_arena.json @@ -12,4 +12,4 @@ } } ] -} \ No newline at end of file +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/toreterror_arena/toreterror_arena_bottom.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/toreterror_arena/toreterror_arena_bottom.json index bdf238c5..301707be 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/toreterror_arena/toreterror_arena_bottom.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/toreterror_arena/toreterror_arena_bottom.json @@ -12,4 +12,4 @@ } } ] -} \ No newline at end of file +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/trayaurus_lab/trayaurus_lab.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/trayaurus_lab/trayaurus_lab.json index 8a7ad2f3..18c1a96e 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/trayaurus_lab/trayaurus_lab.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/trayaurus_lab/trayaurus_lab.json @@ -12,4 +12,4 @@ } } ] -} \ No newline at end of file +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/trayaurus_lab/trayaurus_lab_bottom.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/trayaurus_lab/trayaurus_lab_bottom.json index 5e9d3f17..5f0dc4d8 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/trayaurus_lab/trayaurus_lab_bottom.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/trayaurus_lab/trayaurus_lab_bottom.json @@ -12,4 +12,4 @@ } } ] -} \ No newline at end of file +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/village/computer_scientist_basement.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/village/computer_scientist_basement.json new file mode 100644 index 00000000..52d99e10 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/village/computer_scientist_basement.json @@ -0,0 +1,15 @@ +{ + "name": "antarchy:village/computer_scientist_basement", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "location": "antarchy:village/computer_scientist_basement", + "processors": "antarchy:generic_processor", + "projection": "rigid", + "element_type": "integrated_api:integrated_api_single_pool_element" + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/critter_cage_blacklist.json b/common-1.20.1/src/main/resources/data/anthology/tags/entity_types/time_dilation_immune.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/critter_cage_blacklist.json rename to common-1.20.1/src/main/resources/data/anthology/tags/entity_types/time_dilation_immune.json diff --git a/common-1.20.1/src/main/resources/data/c/tags/block/fence_gates.json b/common-1.20.1/src/main/resources/data/c/tags/block/fence_gates.json deleted file mode 100644 index 628a0416..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/block/fence_gates.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_fence_gate" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/block/ores.json b/common-1.20.1/src/main/resources/data/c/tags/block/ores.json deleted file mode 100644 index 48c82ae3..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/block/ores.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "replace": false, - "values": [ - "#c:ores/coal", - "#c:ores/titanium", - "#c:ores/uranium" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/block/ores/bluestone.json b/common-1.20.1/src/main/resources/data/c/tags/block/ores/bluestone.json deleted file mode 100644 index 264d7d72..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/block/ores/bluestone.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:bluestone_ore" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/block/ores/coal.json b/common-1.20.1/src/main/resources/data/c/tags/block/ores/coal.json deleted file mode 100644 index dd5065b6..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/block/ores/coal.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:myrmite_coal_ore" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/block/ores/titanium.json b/common-1.20.1/src/main/resources/data/c/tags/block/ores/titanium.json deleted file mode 100644 index 51a3cb8b..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/block/ores/titanium.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:titanium_ore", - "antarchy:deepslate_titanium_ore" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/block/ores/uranium.json b/common-1.20.1/src/main/resources/data/c/tags/block/ores/uranium.json deleted file mode 100644 index 004de06d..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/block/ores/uranium.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:uranium_ore", - "antarchy:deepslate_uranium_ore" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/block/ores_in_ground/deepslate.json b/common-1.20.1/src/main/resources/data/c/tags/block/ores_in_ground/deepslate.json deleted file mode 100644 index a18a1543..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/block/ores_in_ground/deepslate.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:deepslate_uranium_ore", - "antarchy:deepslate_titanium_ore" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/block/ores_in_ground/myrmite.json b/common-1.20.1/src/main/resources/data/c/tags/block/ores_in_ground/myrmite.json deleted file mode 100644 index dd5065b6..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/block/ores_in_ground/myrmite.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:myrmite_coal_ore" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/block/ores_in_ground/stone.json b/common-1.20.1/src/main/resources/data/c/tags/block/ores_in_ground/stone.json deleted file mode 100644 index 5d96296f..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/block/ores_in_ground/stone.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:uranium_ore", - "antarchy:titanium_ore" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/block/sandstone/blocks.json b/common-1.20.1/src/main/resources/data/c/tags/block/sandstone/blocks.json deleted file mode 100644 index 62958bac..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/block/sandstone/blocks.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:dream_sandstone", - "antarchy:chiseled_dream_sandstone", - "antarchy:cut_dream_sandstone", - "antarchy:smooth_dream_sandstone" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/block/sandstone/slabs.json b/common-1.20.1/src/main/resources/data/c/tags/block/sandstone/slabs.json deleted file mode 100644 index 6d2c70e8..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/block/sandstone/slabs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:dream_sandstone_slab", - "antarchy:smooth_dream_sandstone_slab", - "antarchy:cut_dream_sandstone_slab" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/block/sandstone/stairs.json b/common-1.20.1/src/main/resources/data/c/tags/block/sandstone/stairs.json deleted file mode 100644 index 896f6fad..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/block/sandstone/stairs.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:dream_sandstone_stairs", - "antarchy:smooth_dream_sandstone_stairs" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/block/stones.json b/common-1.20.1/src/main/resources/data/c/tags/block/stones.json deleted file mode 100644 index 83c265b0..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/block/stones.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "values": [ - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/block/storage_blocks.json b/common-1.20.1/src/main/resources/data/c/tags/block/storage_blocks.json deleted file mode 100644 index 7ada88fb..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/block/storage_blocks.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "replace": false, - "values": [ - "#c:storage_blocks/uranium", - "#c:storage_blocks/raw_uranium", - "#c:storage_blocks/titanium", - "#c:storage_blocks/raw_titanium" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/block/storage_blocks/raw_titanium.json b/common-1.20.1/src/main/resources/data/c/tags/block/storage_blocks/raw_titanium.json deleted file mode 100644 index 4b5d6f93..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/block/storage_blocks/raw_titanium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:raw_titanium_block" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/block/storage_blocks/raw_uranium.json b/common-1.20.1/src/main/resources/data/c/tags/block/storage_blocks/raw_uranium.json deleted file mode 100644 index d27b02b0..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/block/storage_blocks/raw_uranium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:raw_uranium_block" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/block/storage_blocks/titanium.json b/common-1.20.1/src/main/resources/data/c/tags/block/storage_blocks/titanium.json deleted file mode 100644 index 68fda782..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/block/storage_blocks/titanium.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:titanium_block", - "antarchy:cut_titanium", - "antarchy:cut_titanium_slab", - "antarchy:cut_titanium_stairs", - "antarchy:chiseled_titanium", - "antarchy:titanium_door", - "antarchy:titanium_trapdoor", - "antarchy:titanium_bars", - "antarchy:titanium_bulb" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/block/storage_blocks/uranium.json b/common-1.20.1/src/main/resources/data/c/tags/block/storage_blocks/uranium.json deleted file mode 100644 index 29a144b3..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/block/storage_blocks/uranium.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:uranium_block", - "antarchy:cut_uranium", - "antarchy:cut_uranium_slab", - "antarchy:cut_uranium_stairs", - "antarchy:chiseled_uranium", - "antarchy:uranium_door", - "antarchy:uranium_trapdoor", - "antarchy:uranium_bars", - "antarchy:uranium_bulb" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/blocks/stones.json b/common-1.20.1/src/main/resources/data/c/tags/blocks/stones.json index 83c265b0..86dde3df 100644 --- a/common-1.20.1/src/main/resources/data/c/tags/blocks/stones.json +++ b/common-1.20.1/src/main/resources/data/c/tags/blocks/stones.json @@ -1,4 +1,3 @@ { - "values": [ - ] + "values": [] } diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/animal_foods.json b/common-1.20.1/src/main/resources/data/c/tags/item/animal_foods.json deleted file mode 100644 index 31cdfa7a..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/animal_foods.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:moleworm", - "antarchy:raw_bug_meat", - "antarchy:cooked_bug_meat", - "antarchy:raw_venison", - "antarchy:cooked_venison" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/armors.json b/common-1.20.1/src/main/resources/data/c/tags/item/armors.json deleted file mode 100644 index 78f746df..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/armors.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "replace": false, - "values": [ - "#c:boots", - "#c:leggings", - "#c:chestplates", - "#c:helmets" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/axes.json b/common-1.20.1/src/main/resources/data/c/tags/item/axes.json deleted file mode 100644 index 4660868c..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/axes.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ultimate_axe", - "antarchy:battle_axe", - "antarchy:royal_assailant_battleaxe" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/boots.json b/common-1.20.1/src/main/resources/data/c/tags/item/boots.json deleted file mode 100644 index 781ec3cb..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/boots.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ultimate_boots", - "antarchy:nightmare_boots", - "antarchy:blood_crystal_boots", - "antarchy:primordial_boots", - "antarchy:springy_boots", - "antarchy:royal_guardian_boots", - "antarchy:royal_assailant_boots" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/bows.json b/common-1.20.1/src/main/resources/data/c/tags/item/bows.json deleted file mode 100644 index 66565526..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/bows.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ultimate_bow" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/chestplates.json b/common-1.20.1/src/main/resources/data/c/tags/item/chestplates.json deleted file mode 100644 index 9c7ec0c9..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/chestplates.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ultimate_chestplate", - "antarchy:nightmare_chestplate", - "antarchy:blood_crystal_chestplate", - "antarchy:primordial_chestplate", - "antarchy:royal_guardian_chestplate", - "antarchy:royal_assailant_chestplate" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/crossbows.json b/common-1.20.1/src/main/resources/data/c/tags/item/crossbows.json deleted file mode 100644 index d0458b36..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/crossbows.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ultimate_crossbow" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/deepslates.json b/common-1.20.1/src/main/resources/data/c/tags/item/deepslates.json deleted file mode 100644 index d0458b36..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/deepslates.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ultimate_crossbow" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/elytra.json b/common-1.20.1/src/main/resources/data/c/tags/item/elytra.json deleted file mode 100644 index ec0d2694..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/elytra.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:brutalfly_elytra", - "antarchy:manticore_wings" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/enchantables.json b/common-1.20.1/src/main/resources/data/c/tags/item/enchantables.json deleted file mode 100644 index 6fb5716b..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/enchantables.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:springy_boots", - "antarchy:royal_guardian_shield", - "antarchy:royal_assailant_staff" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/fence_gates.json b/common-1.20.1/src/main/resources/data/c/tags/item/fence_gates.json deleted file mode 100644 index 628a0416..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/fence_gates.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_fence_gate" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/foods.json b/common-1.20.1/src/main/resources/data/c/tags/item/foods.json deleted file mode 100644 index 529837ba..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/foods.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "replace": false, - "values": [ - "#c:foods/soup", - "antarchy:blood_crystal_apple", - "antarchy:cornbread", - "antarchy:popcorn", - "antarchy:peach_pie", - "antarchy:cheep", - "antarchy:broodfruit", - "antarchy:broodfruit_cobbler", - "antarchy:raw_bug_meat", - "antarchy:cooked_bug_meat", - "antarchy:raw_venison", - "antarchy:cooked_venison", - "antarchy:kraken_kalamari", - "antarchy:mud_pie", - "antarchy:high_fructose_corn_syrup", - "antarchy:spirit_apple", - "antarchy:rainbow_sugar", - "antarchy:cornea_ear", - "antarchy:moleworm", - "antarchy:peach", - "antarchy:corn", - "antarchy:raw_corndog", - "antarchy:cooked_corndog", - "antarchy:root_beer" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/foods/cooked_meat.json b/common-1.20.1/src/main/resources/data/c/tags/item/foods/cooked_meat.json deleted file mode 100644 index fce61011..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/foods/cooked_meat.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:cooked_venison", - "antarchy:cooked_bug_meat", - "antarchy:kraken_kalamari" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/foods/food_poisoning.json b/common-1.20.1/src/main/resources/data/c/tags/item/foods/food_poisoning.json deleted file mode 100644 index 416e8237..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/foods/food_poisoning.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:mud_pie", - "antarchy:moleworm" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/foods/fruit.json b/common-1.20.1/src/main/resources/data/c/tags/item/foods/fruit.json deleted file mode 100644 index aa4f6517..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/foods/fruit.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:peach" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/foods/raw_fish.json b/common-1.20.1/src/main/resources/data/c/tags/item/foods/raw_fish.json deleted file mode 100644 index 12df0487..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/foods/raw_fish.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:cheep" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/foods/raw_meat.json b/common-1.20.1/src/main/resources/data/c/tags/item/foods/raw_meat.json deleted file mode 100644 index 999e42f3..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/foods/raw_meat.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:raw_venison", - "antarchy:raw_bug_meat" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/foods/soup.json b/common-1.20.1/src/main/resources/data/c/tags/item/foods/soup.json deleted file mode 100644 index 79d431f7..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/foods/soup.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:stratoshark_fin_soup" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/gems.json b/common-1.20.1/src/main/resources/data/c/tags/item/gems.json deleted file mode 100644 index f61a414f..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/gems.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:tigers_eye" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/helmets.json b/common-1.20.1/src/main/resources/data/c/tags/item/helmets.json deleted file mode 100644 index 57ca052f..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/helmets.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ultimate_helmet", - "antarchy:nightmare_helmet", - "antarchy:moggles", - "antarchy:blood_crystal_helmet", - "antarchy:fallen_king_crown", - "antarchy:primordial_helmet", - "antarchy:royal_guardian_helmet", - "antarchy:royal_assailant_helmet" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/hoes.json b/common-1.20.1/src/main/resources/data/c/tags/item/hoes.json deleted file mode 100644 index eb8474b2..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/hoes.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ultimate_hoe" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/ingots.json b/common-1.20.1/src/main/resources/data/c/tags/item/ingots.json deleted file mode 100644 index 5c8c1102..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/ingots.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "#c:ingots/titanium", - "#c:ingots/uranium" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/ingots/titanium.json b/common-1.20.1/src/main/resources/data/c/tags/item/ingots/titanium.json deleted file mode 100644 index 0c40bede..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/ingots/titanium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:titanium_ingot" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/ingots/uranium.json b/common-1.20.1/src/main/resources/data/c/tags/item/ingots/uranium.json deleted file mode 100644 index c3391b6e..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/ingots/uranium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:uranium_ingot" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/leaves.json b/common-1.20.1/src/main/resources/data/c/tags/item/leaves.json deleted file mode 100644 index 019600cb..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/leaves.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_leaves" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/leggings.json b/common-1.20.1/src/main/resources/data/c/tags/item/leggings.json deleted file mode 100644 index 02c0f22b..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/leggings.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ultimate_leggings", - "antarchy:nightmare_leggings", - "antarchy:blood_crystal_leggings", - "antarchy:primordial_leggings", - "antarchy:royal_guardian_leggings", - "antarchy:royal_assailant_leggings" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/nuggets.json b/common-1.20.1/src/main/resources/data/c/tags/item/nuggets.json deleted file mode 100644 index 787f0bcf..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/nuggets.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "#c:nuggets/titanium", - "#c:nuggets/uranium" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/nuggets/titanium.json b/common-1.20.1/src/main/resources/data/c/tags/item/nuggets/titanium.json deleted file mode 100644 index fafc2765..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/nuggets/titanium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:titanium_nugget" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/nuggets/uranium.json b/common-1.20.1/src/main/resources/data/c/tags/item/nuggets/uranium.json deleted file mode 100644 index 33997321..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/nuggets/uranium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:uranium_nugget" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/ores.json b/common-1.20.1/src/main/resources/data/c/tags/item/ores.json deleted file mode 100644 index 48c82ae3..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/ores.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "replace": false, - "values": [ - "#c:ores/coal", - "#c:ores/titanium", - "#c:ores/uranium" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/ores/bluestone.json b/common-1.20.1/src/main/resources/data/c/tags/item/ores/bluestone.json deleted file mode 100644 index 264d7d72..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/ores/bluestone.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:bluestone_ore" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/ores/coal.json b/common-1.20.1/src/main/resources/data/c/tags/item/ores/coal.json deleted file mode 100644 index dd5065b6..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/ores/coal.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:myrmite_coal_ore" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/ores/titanium.json b/common-1.20.1/src/main/resources/data/c/tags/item/ores/titanium.json deleted file mode 100644 index 51a3cb8b..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/ores/titanium.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:titanium_ore", - "antarchy:deepslate_titanium_ore" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/ores/uranium.json b/common-1.20.1/src/main/resources/data/c/tags/item/ores/uranium.json deleted file mode 100644 index 004de06d..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/ores/uranium.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:uranium_ore", - "antarchy:deepslate_uranium_ore" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/ores_in_ground/myrmite.json b/common-1.20.1/src/main/resources/data/c/tags/item/ores_in_ground/myrmite.json deleted file mode 100644 index dd5065b6..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/ores_in_ground/myrmite.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:myrmite_coal_ore" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/pickaxes.json b/common-1.20.1/src/main/resources/data/c/tags/item/pickaxes.json deleted file mode 100644 index 5418fd4b..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/pickaxes.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ultimate_pickaxe" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/raw_materials.json b/common-1.20.1/src/main/resources/data/c/tags/item/raw_materials.json deleted file mode 100644 index 9d6975bd..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/raw_materials.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "#c:raw_materials/titanium", - "#c:raw_materials/uranium" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/raw_materials/titanium.json b/common-1.20.1/src/main/resources/data/c/tags/item/raw_materials/titanium.json deleted file mode 100644 index c0f35467..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/raw_materials/titanium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:raw_titanium" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/raw_materials/uranium.json b/common-1.20.1/src/main/resources/data/c/tags/item/raw_materials/uranium.json deleted file mode 100644 index 9fffc783..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/raw_materials/uranium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:raw_uranium" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/sandstone/blocks.json b/common-1.20.1/src/main/resources/data/c/tags/item/sandstone/blocks.json deleted file mode 100644 index 62958bac..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/sandstone/blocks.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:dream_sandstone", - "antarchy:chiseled_dream_sandstone", - "antarchy:cut_dream_sandstone", - "antarchy:smooth_dream_sandstone" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/sandstone/slabs.json b/common-1.20.1/src/main/resources/data/c/tags/item/sandstone/slabs.json deleted file mode 100644 index 6d2c70e8..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/sandstone/slabs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:dream_sandstone_slab", - "antarchy:smooth_dream_sandstone_slab", - "antarchy:cut_dream_sandstone_slab" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/sandstone/stairs.json b/common-1.20.1/src/main/resources/data/c/tags/item/sandstone/stairs.json deleted file mode 100644 index 896f6fad..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/sandstone/stairs.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:dream_sandstone_stairs", - "antarchy:smooth_dream_sandstone_stairs" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/seeds.json b/common-1.20.1/src/main/resources/data/c/tags/item/seeds.json deleted file mode 100644 index 48cf8010..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/seeds.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:corn_seeds" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/shovels.json b/common-1.20.1/src/main/resources/data/c/tags/item/shovels.json deleted file mode 100644 index 41d829cb..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/shovels.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ultimate_shovel" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/slime_balls.json b/common-1.20.1/src/main/resources/data/c/tags/item/slime_balls.json deleted file mode 100644 index 21acb8ee..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/slime_balls.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "minecraft:slime_ball", - "antarchy:flytrap_goo" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/stones.json b/common-1.20.1/src/main/resources/data/c/tags/item/stones.json deleted file mode 100644 index 74e34e54..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/stones.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "minecraft:slime_ball", - "antarchy:triffid_goo" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/storage_blocks.json b/common-1.20.1/src/main/resources/data/c/tags/item/storage_blocks.json deleted file mode 100644 index 7ada88fb..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/storage_blocks.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "replace": false, - "values": [ - "#c:storage_blocks/uranium", - "#c:storage_blocks/raw_uranium", - "#c:storage_blocks/titanium", - "#c:storage_blocks/raw_titanium" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/storage_blocks/raw_titanium.json b/common-1.20.1/src/main/resources/data/c/tags/item/storage_blocks/raw_titanium.json deleted file mode 100644 index 4b5d6f93..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/storage_blocks/raw_titanium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:raw_titanium_block" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/storage_blocks/raw_uranium.json b/common-1.20.1/src/main/resources/data/c/tags/item/storage_blocks/raw_uranium.json deleted file mode 100644 index d27b02b0..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/storage_blocks/raw_uranium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:raw_uranium_block" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/storage_blocks/titanium.json b/common-1.20.1/src/main/resources/data/c/tags/item/storage_blocks/titanium.json deleted file mode 100644 index ab4fd344..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/storage_blocks/titanium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:titanium_block" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/storage_blocks/uranium.json b/common-1.20.1/src/main/resources/data/c/tags/item/storage_blocks/uranium.json deleted file mode 100644 index af7684d6..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/storage_blocks/uranium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:uranium_block" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/swords.json b/common-1.20.1/src/main/resources/data/c/tags/item/swords.json deleted file mode 100644 index dd8b19e2..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/swords.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:attitude_adjuster", - "antarchy:big_bertha", - "antarchy:ultimate_sword", - "antarchy:nightmare_sword", - "antarchy:basilisk_dagger", - "antarchy:blood_crystal_katana", - "antarchy:mantis_claw", - "antarchy:royal_guardian_sword" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/tools/melee_weapon.json b/common-1.20.1/src/main/resources/data/c/tags/item/tools/melee_weapon.json deleted file mode 100644 index 28f24b20..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/tools/melee_weapon.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ultimate_sword", - "antarchy:battle_axe", - "antarchy:nightmare_sword", - "antarchy:basilisk_dagger", - "antarchy:scorpion_whip", - "antarchy:attitude_adjuster", - "antarchy:mantis_claw" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/tools/ranged_weapon.json b/common-1.20.1/src/main/resources/data/c/tags/item/tools/ranged_weapon.json deleted file mode 100644 index 9dff752f..00000000 --- a/common-1.20.1/src/main/resources/data/c/tags/item/tools/ranged_weapon.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ultimate_bow", - "antarchy:ultimate_crossbow", - "antarchy:krakens_grasp", - "antarchy:water_cannon", - "antarchy:squidzooka", - "antarchy:rpo_launcher" - ] -} diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/axes.json b/common-1.20.1/src/main/resources/data/c/tags/items/axes.json index fb4c4964..4660868c 100644 --- a/common-1.20.1/src/main/resources/data/c/tags/items/axes.json +++ b/common-1.20.1/src/main/resources/data/c/tags/items/axes.json @@ -2,6 +2,7 @@ "replace": false, "values": [ "antarchy:ultimate_axe", - "antarchy:battle_axe" + "antarchy:battle_axe", + "antarchy:royal_assailant_battleaxe" ] } diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/boots.json b/common-1.20.1/src/main/resources/data/c/tags/items/boots.json index 8f7897a9..781ec3cb 100644 --- a/common-1.20.1/src/main/resources/data/c/tags/items/boots.json +++ b/common-1.20.1/src/main/resources/data/c/tags/items/boots.json @@ -5,6 +5,8 @@ "antarchy:nightmare_boots", "antarchy:blood_crystal_boots", "antarchy:primordial_boots", - "antarchy:springy_boots" + "antarchy:springy_boots", + "antarchy:royal_guardian_boots", + "antarchy:royal_assailant_boots" ] } diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/chestplates.json b/common-1.20.1/src/main/resources/data/c/tags/items/chestplates.json index bff31c6e..9c7ec0c9 100644 --- a/common-1.20.1/src/main/resources/data/c/tags/items/chestplates.json +++ b/common-1.20.1/src/main/resources/data/c/tags/items/chestplates.json @@ -4,6 +4,8 @@ "antarchy:ultimate_chestplate", "antarchy:nightmare_chestplate", "antarchy:blood_crystal_chestplate", - "antarchy:primordial_chestplate" + "antarchy:primordial_chestplate", + "antarchy:royal_guardian_chestplate", + "antarchy:royal_assailant_chestplate" ] } diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/deepslates.json b/common-1.20.1/src/main/resources/data/c/tags/items/deepslates.json index 1fd037df..d0458b36 100644 --- a/common-1.20.1/src/main/resources/data/c/tags/items/deepslates.json +++ b/common-1.20.1/src/main/resources/data/c/tags/items/deepslates.json @@ -1,6 +1,6 @@ { "replace": false, "values": [ - "minecraft:deepslate" + "antarchy:ultimate_crossbow" ] } diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/elytra.json b/common-1.20.1/src/main/resources/data/c/tags/items/elytra.json index 32ba9b63..ec0d2694 100644 --- a/common-1.20.1/src/main/resources/data/c/tags/items/elytra.json +++ b/common-1.20.1/src/main/resources/data/c/tags/items/elytra.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:brutalfly_elytra" + "antarchy:brutalfly_elytra", + "antarchy:manticore_wings" ] } diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/enchantables.json b/common-1.20.1/src/main/resources/data/c/tags/items/enchantables.json index a6582f60..6fb5716b 100644 --- a/common-1.20.1/src/main/resources/data/c/tags/items/enchantables.json +++ b/common-1.20.1/src/main/resources/data/c/tags/items/enchantables.json @@ -1,6 +1,8 @@ { "replace": false, "values": [ - "antarchy:springy_boots" + "antarchy:springy_boots", + "antarchy:royal_guardian_shield", + "antarchy:royal_assailant_staff" ] } diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/foods.json b/common-1.20.1/src/main/resources/data/c/tags/items/foods.json index 35048616..529837ba 100644 --- a/common-1.20.1/src/main/resources/data/c/tags/items/foods.json +++ b/common-1.20.1/src/main/resources/data/c/tags/items/foods.json @@ -8,10 +8,12 @@ "antarchy:peach_pie", "antarchy:cheep", "antarchy:broodfruit", + "antarchy:broodfruit_cobbler", "antarchy:raw_bug_meat", "antarchy:cooked_bug_meat", "antarchy:raw_venison", "antarchy:cooked_venison", + "antarchy:kraken_kalamari", "antarchy:mud_pie", "antarchy:high_fructose_corn_syrup", "antarchy:spirit_apple", diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/foods/cooked_meat.json b/common-1.20.1/src/main/resources/data/c/tags/items/foods/cooked_meat.json index e3f95c3d..fce61011 100644 --- a/common-1.20.1/src/main/resources/data/c/tags/items/foods/cooked_meat.json +++ b/common-1.20.1/src/main/resources/data/c/tags/items/foods/cooked_meat.json @@ -2,6 +2,7 @@ "replace": false, "values": [ "antarchy:cooked_venison", - "antarchy:cooked_bug_meat" + "antarchy:cooked_bug_meat", + "antarchy:kraken_kalamari" ] } diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/foods/soup.json b/common-1.20.1/src/main/resources/data/c/tags/items/foods/soup.json index 0e21e13e..79d431f7 100644 --- a/common-1.20.1/src/main/resources/data/c/tags/items/foods/soup.json +++ b/common-1.20.1/src/main/resources/data/c/tags/items/foods/soup.json @@ -1,6 +1,6 @@ { "replace": false, "values": [ - "antarchy:cloud_shark_fin_soup" + "antarchy:stratoshark_fin_soup" ] } diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/helmets.json b/common-1.20.1/src/main/resources/data/c/tags/items/helmets.json index fad05ccc..57ca052f 100644 --- a/common-1.20.1/src/main/resources/data/c/tags/items/helmets.json +++ b/common-1.20.1/src/main/resources/data/c/tags/items/helmets.json @@ -6,6 +6,8 @@ "antarchy:moggles", "antarchy:blood_crystal_helmet", "antarchy:fallen_king_crown", - "antarchy:primordial_helmet" + "antarchy:primordial_helmet", + "antarchy:royal_guardian_helmet", + "antarchy:royal_assailant_helmet" ] } diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/leggings.json b/common-1.20.1/src/main/resources/data/c/tags/items/leggings.json index 04f5edee..02c0f22b 100644 --- a/common-1.20.1/src/main/resources/data/c/tags/items/leggings.json +++ b/common-1.20.1/src/main/resources/data/c/tags/items/leggings.json @@ -4,6 +4,8 @@ "antarchy:ultimate_leggings", "antarchy:nightmare_leggings", "antarchy:blood_crystal_leggings", - "antarchy:primordial_leggings" + "antarchy:primordial_leggings", + "antarchy:royal_guardian_leggings", + "antarchy:royal_assailant_leggings" ] } diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/music_discs.json b/common-1.20.1/src/main/resources/data/c/tags/items/music_discs.json new file mode 100644 index 00000000..857cedd1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/music_discs.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "antarchy:music_disc_underside", + "antarchy:music_disc_the_queen", + "antarchy:music_disc_verdance", + "antarchy:music_disc_grotesque" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/shovels.json b/common-1.20.1/src/main/resources/data/c/tags/items/shovels.json index 41d829cb..012f8bc5 100644 --- a/common-1.20.1/src/main/resources/data/c/tags/items/shovels.json +++ b/common-1.20.1/src/main/resources/data/c/tags/items/shovels.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ultimate_shovel" + "antarchy:ultimate_shovel", + "antarchy:giant_frying_pan" ] } diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/slime_balls.json b/common-1.20.1/src/main/resources/data/c/tags/items/slime_balls.json index 74e34e54..21acb8ee 100644 --- a/common-1.20.1/src/main/resources/data/c/tags/items/slime_balls.json +++ b/common-1.20.1/src/main/resources/data/c/tags/items/slime_balls.json @@ -2,6 +2,6 @@ "replace": false, "values": [ "minecraft:slime_ball", - "antarchy:triffid_goo" + "antarchy:flytrap_goo" ] } diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/stones.json b/common-1.20.1/src/main/resources/data/c/tags/items/stones.json index 0e81af11..e471d6fe 100644 --- a/common-1.20.1/src/main/resources/data/c/tags/items/stones.json +++ b/common-1.20.1/src/main/resources/data/c/tags/items/stones.json @@ -1,6 +1,6 @@ { "replace": false, "values": [ - "minecraft:stone" + "minecraft:slime_ball" ] } diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/swords.json b/common-1.20.1/src/main/resources/data/c/tags/items/swords.json index 1f7b8343..dd8b19e2 100644 --- a/common-1.20.1/src/main/resources/data/c/tags/items/swords.json +++ b/common-1.20.1/src/main/resources/data/c/tags/items/swords.json @@ -7,6 +7,7 @@ "antarchy:nightmare_sword", "antarchy:basilisk_dagger", "antarchy:blood_crystal_katana", - "antarchy:mantis_claw" + "antarchy:mantis_claw", + "antarchy:royal_guardian_sword" ] } diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/tools/melee_weapon.json b/common-1.20.1/src/main/resources/data/c/tags/items/tools/melee_weapon.json index 17f3daa4..532d5ac2 100644 --- a/common-1.20.1/src/main/resources/data/c/tags/items/tools/melee_weapon.json +++ b/common-1.20.1/src/main/resources/data/c/tags/items/tools/melee_weapon.json @@ -6,6 +6,9 @@ "antarchy:nightmare_sword", "antarchy:basilisk_dagger", "antarchy:scorpion_whip", - "antarchy:attitude_adjuster" + "antarchy:attitude_adjuster", + "antarchy:mantis_claw", + "antarchy:royal_guardian_sword", + "antarchy:royal_assailant_battleaxe" ] } diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/tools/shield.json b/common-1.20.1/src/main/resources/data/c/tags/items/tools/shield.json similarity index 100% rename from common-1.20.1/src/main/resources/data/c/tags/item/tools/shield.json rename to common-1.20.1/src/main/resources/data/c/tags/items/tools/shield.json diff --git a/common-1.20.1/src/main/resources/data/integrated_api/tags/worldgen/structure/larger_locate_search.json b/common-1.20.1/src/main/resources/data/integrated_api/tags/worldgen/structure/larger_locate_search.json index 2d3718f9..7d875cd2 100644 --- a/common-1.20.1/src/main/resources/data/integrated_api/tags/worldgen/structure/larger_locate_search.json +++ b/common-1.20.1/src/main/resources/data/integrated_api/tags/worldgen/structure/larger_locate_search.json @@ -3,8 +3,8 @@ "values": [ "antarchy:toreterror_arena", "antarchy:fallen_kingdom_castle", - "antarchy:ruined_prison", "antarchy:ruined_arena", - "antarchy:trayaurus_lab" + "antarchy:trayaurus_lab", + "antarchy:kings_tree" ] } diff --git a/common-1.20.1/src/main/resources/data/integrated_api/tags/worldgen/structures/larger_locate_search.json b/common-1.20.1/src/main/resources/data/integrated_api/tags/worldgen/structures/larger_locate_search.json deleted file mode 100644 index 145abef3..00000000 --- a/common-1.20.1/src/main/resources/data/integrated_api/tags/worldgen/structures/larger_locate_search.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:toreterror_arena", - "antarchy:fallen_kingdom_castle", - "antarchy:ruined_arena", - "antarchy:trayaurus_lab" - ] -} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/minecraft/enchantment/blast_protection.json b/common-1.20.1/src/main/resources/data/minecraft/enchantment/blast_protection.json deleted file mode 100644 index 47097cb0..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/enchantment/blast_protection.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "anvil_cost": 4, - "description": { - "translate": "enchantment.minecraft.blast_protection" - }, - "effects": { - "minecraft:attributes": [ - { - "amount": { - "type": "minecraft:linear", - "base": 0.15, - "per_level_above_first": 0.15 - }, - "attribute": "minecraft:generic.explosion_knockback_resistance", - "id": "minecraft:enchantment.blast_protection", - "operation": "add_value" - } - ], - "minecraft:damage_protection": [ - { - "effect": { - "type": "minecraft:add", - "value": { - "type": "minecraft:linear", - "base": 2.0, - "per_level_above_first": 2.0 - } - }, - "requirements": { - "condition": "minecraft:damage_source_properties", - "predicate": { - "tags": [ - { - "expected": true, - "id": "minecraft:is_explosion" - }, - { - "expected": false, - "id": "minecraft:bypasses_invulnerability" - } - ] - } - } - } - ] - }, - "exclusive_set": "#minecraft:exclusive_set/armor", - "max_cost": { - "base": 13, - "per_level_above_first": 8 - }, - "max_level": 10, - "min_cost": { - "base": 5, - "per_level_above_first": 8 - }, - "slots": [ - "armor" - ], - "supported_items": "#minecraft:enchantable/armor", - "weight": 2 -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/enchantment/fire_protection.json b/common-1.20.1/src/main/resources/data/minecraft/enchantment/fire_protection.json deleted file mode 100644 index d5099539..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/enchantment/fire_protection.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "anvil_cost": 2, - "description": { - "translate": "enchantment.minecraft.fire_protection" - }, - "effects": { - "minecraft:attributes": [ - { - "amount": { - "type": "minecraft:linear", - "base": -0.15, - "per_level_above_first": -0.15 - }, - "attribute": "minecraft:generic.burning_time", - "id": "minecraft:enchantment.fire_protection", - "operation": "add_multiplied_base" - } - ], - "minecraft:damage_protection": [ - { - "effect": { - "type": "minecraft:add", - "value": { - "type": "minecraft:linear", - "base": 2.0, - "per_level_above_first": 2.0 - } - }, - "requirements": { - "condition": "minecraft:all_of", - "terms": [ - { - "condition": "minecraft:damage_source_properties", - "predicate": { - "tags": [ - { - "expected": true, - "id": "minecraft:is_fire" - }, - { - "expected": false, - "id": "minecraft:bypasses_invulnerability" - } - ] - } - } - ] - } - } - ] - }, - "exclusive_set": "#minecraft:exclusive_set/armor", - "max_cost": { - "base": 18, - "per_level_above_first": 8 - }, - "max_level": 10, - "min_cost": { - "base": 10, - "per_level_above_first": 8 - }, - "slots": [ - "armor" - ], - "supported_items": "#minecraft:enchantable/armor", - "weight": 5 -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/enchantment/projectile_protection.json b/common-1.20.1/src/main/resources/data/minecraft/enchantment/projectile_protection.json deleted file mode 100644 index aa96bf4b..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/enchantment/projectile_protection.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "anvil_cost": 2, - "description": { - "translate": "enchantment.minecraft.projectile_protection" - }, - "effects": { - "minecraft:damage_protection": [ - { - "effect": { - "type": "minecraft:add", - "value": { - "type": "minecraft:linear", - "base": 2.0, - "per_level_above_first": 2.0 - } - }, - "requirements": { - "condition": "minecraft:damage_source_properties", - "predicate": { - "tags": [ - { - "expected": true, - "id": "minecraft:is_projectile" - }, - { - "expected": false, - "id": "minecraft:bypasses_invulnerability" - } - ] - } - } - } - ] - }, - "exclusive_set": "#minecraft:exclusive_set/armor", - "max_cost": { - "base": 9, - "per_level_above_first": 6 - }, - "max_level": 10, - "min_cost": { - "base": 3, - "per_level_above_first": 6 - }, - "slots": [ - "armor" - ], - "supported_items": "#minecraft:enchantable/armor", - "weight": 5 -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/enchantment/protection.json b/common-1.20.1/src/main/resources/data/minecraft/enchantment/protection.json deleted file mode 100644 index bf8fafa5..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/enchantment/protection.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "anvil_cost": 1, - "description": { - "translate": "enchantment.minecraft.protection" - }, - "effects": { - "minecraft:damage_protection": [ - { - "effect": { - "type": "minecraft:add", - "value": { - "type": "minecraft:linear", - "base": 1.0, - "per_level_above_first": 1.0 - } - }, - "requirements": { - "condition": "minecraft:damage_source_properties", - "predicate": { - "tags": [ - { - "expected": false, - "id": "minecraft:bypasses_invulnerability" - } - ] - } - } - } - ] - }, - "exclusive_set": "#minecraft:exclusive_set/armor", - "max_cost": { - "base": 12, - "per_level_above_first": 11 - }, - "max_level": 10, - "min_cost": { - "base": 1, - "per_level_above_first": 11 - }, - "slots": [ - "armor" - ], - "supported_items": "#minecraft:enchantable/armor", - "weight": 10 -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/loot_table/entities/magma_cube.json b/common-1.20.1/src/main/resources/data/minecraft/loot_table/entities/magma_cube.json deleted file mode 100644 index 4e011b10..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/loot_table/entities/magma_cube.json +++ /dev/null @@ -1,161 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:inverted", - "term": { - "condition": "minecraft:damage_source_properties", - "predicate": { - "source_entity": { - "type": "minecraft:frog" - } - } - } - }, - { - "condition": "minecraft:entity_properties", - "entity": "this", - "predicate": { - "type_specific": { - "type": "minecraft:slime", - "size": { - "min": 2 - } - } - } - } - ], - "functions": [ - { - "add": false, - "count": { - "type": "minecraft:uniform", - "max": 1.0, - "min": -2.0 - }, - "function": "minecraft:set_count" - }, - { - "count": { - "type": "minecraft:uniform", - "max": 1.0, - "min": 0.0 - }, - "enchantment": "minecraft:looting", - "function": "minecraft:enchanted_count_increase" - } - ], - "name": "minecraft:magma_cream" - }, - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:damage_source_properties", - "predicate": { - "source_entity": { - "type": "minecraft:frog", - "type_specific": { - "type": "minecraft:frog", - "variant": "minecraft:warm" - } - } - } - } - ], - "functions": [ - { - "add": false, - "count": 1.0, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:pearlescent_froglight" - }, - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:damage_source_properties", - "predicate": { - "source_entity": { - "type": "minecraft:frog", - "type_specific": { - "type": "minecraft:frog", - "variant": "minecraft:cold" - } - } - } - } - ], - "functions": [ - { - "add": false, - "count": 1.0, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:verdant_froglight" - }, - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:damage_source_properties", - "predicate": { - "source_entity": { - "type": "minecraft:frog", - "type_specific": { - "type": "minecraft:frog", - "variant": "minecraft:temperate" - } - } - } - } - ], - "functions": [ - { - "add": false, - "count": 1.0, - "function": "minecraft:set_count" - } - ], - "name": "minecraft:ochre_froglight" - }, - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:damage_source_properties", - "predicate": { - "source_entity": { - "type": "minecraft:frog", - "type_specific": { - "type": "minecraft:frog", - "variant": "antarchy:elythia" - } - } - } - } - ], - "functions": [ - { - "add": false, - "count": 1.0, - "function": "minecraft:set_count" - } - ], - "name": "antarchy:roseate_froglight" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "minecraft:entities/magma_cube" -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/loot_tables/entities/magma_cube.json b/common-1.20.1/src/main/resources/data/minecraft/loot_tables/entities/magma_cube.json index 4e011b10..9d97e5f2 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/loot_tables/entities/magma_cube.json +++ b/common-1.20.1/src/main/resources/data/minecraft/loot_tables/entities/magma_cube.json @@ -23,7 +23,7 @@ "entity": "this", "predicate": { "type_specific": { - "type": "minecraft:slime", + "type": "slime", "size": { "min": 2 } @@ -42,13 +42,12 @@ "function": "minecraft:set_count" }, { + "function": "minecraft:looting_enchant", "count": { "type": "minecraft:uniform", "max": 1.0, "min": 0.0 - }, - "enchantment": "minecraft:looting", - "function": "minecraft:enchanted_count_increase" + } } ], "name": "minecraft:magma_cream" @@ -62,7 +61,7 @@ "source_entity": { "type": "minecraft:frog", "type_specific": { - "type": "minecraft:frog", + "type": "frog", "variant": "minecraft:warm" } } @@ -87,7 +86,7 @@ "source_entity": { "type": "minecraft:frog", "type_specific": { - "type": "minecraft:frog", + "type": "frog", "variant": "minecraft:cold" } } @@ -112,7 +111,7 @@ "source_entity": { "type": "minecraft:frog", "type_specific": { - "type": "minecraft:frog", + "type": "frog", "variant": "minecraft:temperate" } } @@ -137,7 +136,7 @@ "source_entity": { "type": "minecraft:frog", "type_specific": { - "type": "minecraft:frog", + "type": "frog", "variant": "antarchy:elythia" } } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/all_hanging_signs.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/all_hanging_signs.json deleted file mode 100644 index c0165ba4..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/all_hanging_signs.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_hanging_sign", - "antarchy:ouranwood_wall_hanging_sign", - "antarchy:peach_hanging_sign", - "antarchy:peach_wall_hanging_sign", - "antarchy:nadir_hanging_sign", - "antarchy:nadir_wall_hanging_sign", - "antarchy:royal_hanging_sign", - "antarchy:royal_wall_hanging_sign", - "antarchy:truffalo_hanging_sign", - "antarchy:truffalo_wall_hanging_sign" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/animals_spawnable_on.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/animals_spawnable_on.json deleted file mode 100644 index a5ea1c6e..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/animals_spawnable_on.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:blush_moss_block", - "minecraft:moss_block" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/ceiling_hanging_signs.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/ceiling_hanging_signs.json deleted file mode 100644 index 95e8093f..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/ceiling_hanging_signs.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_hanging_sign", - "antarchy:peach_hanging_sign", - "antarchy:nadir_hanging_sign", - "antarchy:royal_hanging_sign", - "antarchy:truffalo_hanging_sign" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/climbable.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/climbable.json deleted file mode 100644 index 8b82d068..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/climbable.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "minecraft:vine", - "antarchy:creepvine", - "antarchy:molting_vines", - "antarchy:spiraling_vines", - "antarchy:gorevine" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/coral_blocks.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/coral_blocks.json deleted file mode 100644 index 731c04f2..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/coral_blocks.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:star_coral_block" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/coral_plants.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/coral_plants.json deleted file mode 100644 index 964b717d..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/coral_plants.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:star_coral" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/corals.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/corals.json deleted file mode 100644 index c806e535..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/corals.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:star_coral_fan" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/dirt.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/dirt.json deleted file mode 100644 index 0cd9680b..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/dirt.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:infested_rooted_dirt", - "antarchy:infested_coarse_dirt", - "antarchy:umbral_moss_block", - "antarchy:blush_moss_block", - "antarchy:amber_moss_block", - "antarchy:biowart" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/doors.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/doors.json deleted file mode 100644 index c4dcd7e4..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/doors.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:uranium_door", - "antarchy:titanium_door", - "antarchy:nadir_door", - "antarchy:royal_door", - "antarchy:truffalo_door" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/fence_gates.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/fence_gates.json deleted file mode 100644 index 383608df..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/fence_gates.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_fence_gate", - "antarchy:peach_fence_gate", - "antarchy:nadir_fence_gate", - "antarchy:royal_fence_gate", - "antarchy:truffalo_fence_gate" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/flowers.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/flowers.json deleted file mode 100644 index 1d611adf..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/flowers.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:camellia", - "antarchy:lotus", - "antarchy:orange_milkweed", - "antarchy:pink_milkweed", - "antarchy:spider_lily", - "antarchy:whirlflower", - "antarchy:duskbell" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/frogs_spawnable_on.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/frogs_spawnable_on.json deleted file mode 100644 index a5ea1c6e..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/frogs_spawnable_on.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:blush_moss_block", - "minecraft:moss_block" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/leaves.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/leaves.json deleted file mode 100644 index 9c8be388..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/leaves.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_leaves", - "antarchy:peach_leaves" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/logs.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/logs.json deleted file mode 100644 index 0c13e07c..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/logs.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_log", - "antarchy:ouranwood_wood", - "antarchy:duplicator_log", - "antarchy:mossy_ouranwood_log", - "antarchy:mossy_ouranwood_wood", - "antarchy:stripped_ouranwood_log", - "antarchy:stripped_ouranwood_wood", - "antarchy:peach_log", - "antarchy:peach_wood", - "antarchy:stripped_peach_log", - "antarchy:stripped_peach_wood", - "antarchy:nadir_log", - "antarchy:nadir_wood", - "antarchy:stripped_nadir_log", - "antarchy:stripped_nadir_wood", - "antarchy:royal_log", - "antarchy:royal_wood", - "antarchy:stripped_royal_log", - "antarchy:stripped_royal_wood", - "antarchy:truffalo_log", - "antarchy:truffalo_wood", - "antarchy:stripped_truffalo_log", - "antarchy:stripped_truffalo_wood" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/logs_that_burn.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/logs_that_burn.json deleted file mode 100644 index 0c13e07c..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/logs_that_burn.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_log", - "antarchy:ouranwood_wood", - "antarchy:duplicator_log", - "antarchy:mossy_ouranwood_log", - "antarchy:mossy_ouranwood_wood", - "antarchy:stripped_ouranwood_log", - "antarchy:stripped_ouranwood_wood", - "antarchy:peach_log", - "antarchy:peach_wood", - "antarchy:stripped_peach_log", - "antarchy:stripped_peach_wood", - "antarchy:nadir_log", - "antarchy:nadir_wood", - "antarchy:stripped_nadir_log", - "antarchy:stripped_nadir_wood", - "antarchy:royal_log", - "antarchy:royal_wood", - "antarchy:stripped_royal_log", - "antarchy:stripped_royal_wood", - "antarchy:truffalo_log", - "antarchy:truffalo_wood", - "antarchy:stripped_truffalo_log", - "antarchy:stripped_truffalo_wood" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/mineable/axe.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/mineable/axe.json deleted file mode 100644 index a06ddf37..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/mineable/axe.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:duplicator_log", - "antarchy:ouranwood_log", - "antarchy:ouranwood_wood", - "antarchy:mossy_ouranwood_log", - "antarchy:mossy_ouranwood_wood", - "antarchy:stripped_ouranwood_log", - "antarchy:stripped_ouranwood_wood", - "antarchy:ouranwood_planks", - "antarchy:ouranwood_stairs", - "antarchy:ouranwood_slab", - "antarchy:ouranwood_fence", - "antarchy:ouranwood_fence_gate", - "antarchy:ouranwood_door", - "antarchy:ouranwood_trapdoor", - "antarchy:ouranwood_pressure_plate", - "antarchy:ouranwood_button", - "antarchy:ouranwood_sign", - "antarchy:ouranwood_wall_sign", - "antarchy:ouranwood_hanging_sign", - "antarchy:ouranwood_wall_hanging_sign", - "antarchy:peach_log", - "antarchy:peach_wood", - "antarchy:stripped_peach_log", - "antarchy:stripped_peach_wood", - "antarchy:peach_planks", - "antarchy:peach_stairs", - "antarchy:peach_slab", - "antarchy:peach_fence", - "antarchy:peach_fence_gate", - "antarchy:peach_door", - "antarchy:peach_trapdoor", - "antarchy:peach_pressure_plate", - "antarchy:peach_button", - "antarchy:peach_sign", - "antarchy:peach_wall_sign", - "antarchy:peach_hanging_sign", - "antarchy:peach_wall_hanging_sign", - "antarchy:dream_campfire", - "antarchy:glowcap_mushroom_block", - "antarchy:nadir_log", - "antarchy:nadir_wood", - "antarchy:stripped_nadir_log", - "antarchy:stripped_nadir_wood", - "antarchy:nadir_planks", - "antarchy:nadir_stairs", - "antarchy:nadir_slab", - "antarchy:nadir_fence", - "antarchy:nadir_fence_gate", - "antarchy:nadir_door", - "antarchy:nadir_trapdoor", - "antarchy:nadir_pressure_plate", - "antarchy:nadir_button", - "antarchy:nadir_sign", - "antarchy:nadir_wall_sign", - "antarchy:nadir_hanging_sign", - "antarchy:nadir_wall_hanging_sign", - "antarchy:royal_log", - "antarchy:royal_wood", - "antarchy:stripped_royal_log", - "antarchy:stripped_royal_wood", - "antarchy:royal_planks", - "antarchy:royal_stairs", - "antarchy:royal_slab", - "antarchy:royal_fence", - "antarchy:royal_fence_gate", - "antarchy:royal_door", - "antarchy:royal_trapdoor", - "antarchy:royal_pressure_plate", - "antarchy:royal_button", - "antarchy:royal_sign", - "antarchy:royal_wall_sign", - "antarchy:royal_hanging_sign", - "antarchy:royal_wall_hanging_sign", - "antarchy:royal_leaves", - "antarchy:royal_flowering_leaves", - "antarchy:truffalo_log", - "antarchy:truffalo_wood", - "antarchy:stripped_truffalo_log", - "antarchy:stripped_truffalo_wood", - "antarchy:truffalo_planks", - "antarchy:truffalo_stairs", - "antarchy:truffalo_slab", - "antarchy:truffalo_fence", - "antarchy:truffalo_fence_gate", - "antarchy:truffalo_door", - "antarchy:truffalo_trapdoor", - "antarchy:truffalo_pressure_plate", - "antarchy:truffalo_button", - "antarchy:truffalo_sign", - "antarchy:truffalo_wall_sign", - "antarchy:truffalo_hanging_sign", - "antarchy:truffalo_wall_hanging_sign" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/mineable/hoe.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/mineable/hoe.json deleted file mode 100644 index ccbd0364..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/mineable/hoe.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_leaves", - "antarchy:peach_leaves", - "antarchy:corn_crop", - "antarchy:wild_corn", - "antarchy:umbral_moss_block", - "antarchy:umbral_moss_carpet", - "antarchy:blush_moss_block", - "antarchy:blush_moss_carpet", - "antarchy:amber_moss_block", - "antarchy:amber_moss_carpet", - "antarchy:lumen_froglight", - "antarchy:roseate_froglight", - "antarchy:biowart", - "antarchy:biowart_tendrils", - "antarchy:nadir_fern", - "antarchy:large_nadir_fern", - "antarchy:duskbell", - "antarchy:gorevine", "antarchy:bile_vein", - "antarchy:white_truffalo_tuft", - "antarchy:orange_truffalo_tuft", - "antarchy:magenta_truffalo_tuft", - "antarchy:light_blue_truffalo_tuft", - "antarchy:yellow_truffalo_tuft", - "antarchy:lime_truffalo_tuft", - "antarchy:pink_truffalo_tuft", - "antarchy:gray_truffalo_tuft", - "antarchy:light_gray_truffalo_tuft", - "antarchy:cyan_truffalo_tuft", - "antarchy:purple_truffalo_tuft", - "antarchy:blue_truffalo_tuft", - "antarchy:brown_truffalo_tuft", - "antarchy:green_truffalo_tuft", - "antarchy:red_truffalo_tuft", - "antarchy:black_truffalo_tuft" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json deleted file mode 100644 index 7de115a9..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json +++ /dev/null @@ -1,177 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:typhonite", - "antarchy:nadir_nyxium", - "antarchy:verdant_nyxium", - "antarchy:typhonite_pillar", - "antarchy:typhonite_bricks", - "antarchy:chiseled_typhonite", - "antarchy:polished_typhonite", - "antarchy:veined_typhonite", - "antarchy:typhonite_spike", - "antarchy:typhonite_stairs", - "antarchy:typhonite_slab", - "antarchy:typhonite_wall", - "antarchy:typhonite_brick_stairs", - "antarchy:typhonite_brick_slab", - "antarchy:typhonite_brick_wall", - "antarchy:polished_typhonite_stairs", - "antarchy:polished_typhonite_slab", - "antarchy:polished_typhonite_wall", - "antarchy:upper", - "antarchy:tigers_eye_block", - "antarchy:uranium_ore", - "antarchy:deepslate_uranium_ore", - "antarchy:titanium_ore", - "antarchy:deepslate_titanium_ore", - "antarchy:uranium_block", - "antarchy:raw_uranium_block", - "antarchy:cut_uranium", - "antarchy:cut_uranium_slab", - "antarchy:cut_uranium_stairs", - "antarchy:chiseled_uranium", - "antarchy:uranium_door", - "antarchy:uranium_trapdoor", - "antarchy:uranium_bars", - "antarchy:uranium_bulb", - "antarchy:titanium_block", - "antarchy:raw_titanium_block", - "antarchy:cut_titanium", - "antarchy:cut_titanium_slab", - "antarchy:cut_titanium_stairs", - "antarchy:chiseled_titanium", - "antarchy:titanium_door", - "antarchy:titanium_trapdoor", - "antarchy:titanium_bars", - "antarchy:titanium_bulb", - "antarchy:critter_cage_block", - "antarchy:nyxite", - "antarchy:polished_nyxite", - "antarchy:chiseled_nyxite", - "antarchy:nyxite_bricks", - "antarchy:nyxite_stairs", - "antarchy:nyxite_slab", - "antarchy:nyxite_wall", - "antarchy:polished_nyxite_stairs", - "antarchy:polished_nyxite_slab", - "antarchy:polished_nyxite_wall", - "antarchy:polished_nyxite_pressure_plate", - "antarchy:polished_nyxite_button", - "antarchy:nyxite_brick_stairs", - "antarchy:nyxite_brick_slab", - "antarchy:nyxite_brick_wall", - "antarchy:pale_nyxite", - "antarchy:shellstone", - "antarchy:polished_shellstone", - "antarchy:shellstone_bricks", - "antarchy:chiseled_shellstone", - "antarchy:mossy_shellstone_bricks", - "antarchy:mossy_shellstone_brick_stairs", - "antarchy:mossy_shellstone_brick_slab", - "antarchy:mossy_shellstone_brick_wall", - "antarchy:cracked_shellstone_bricks", - "antarchy:shellstone_stairs", - "antarchy:shellstone_slab", - "antarchy:shellstone_wall", - "antarchy:polished_shellstone_stairs", - "antarchy:polished_shellstone_slab", - "antarchy:polished_shellstone_wall", - "antarchy:shellstone_brick_stairs", - "antarchy:shellstone_brick_slab", - "antarchy:shellstone_brick_wall", - "antarchy:nyxite_spike", - "antarchy:potent_nyxite", - "antarchy:blood_crystal_block", - "antarchy:budding_blood_crystal", - "antarchy:small_blood_crystal_bud", - "antarchy:medium_blood_crystal_bud", - "antarchy:large_blood_crystal_bud", - "antarchy:blood_crystal_cluster", - "antarchy:dream_sandstone", - "antarchy:chiseled_dream_sandstone", - "antarchy:cut_dream_sandstone", - "antarchy:smooth_dream_sandstone", - "antarchy:dream_sandstone_stairs", - "antarchy:dream_sandstone_slab", - "antarchy:dream_sandstone_wall", - "antarchy:smooth_dream_sandstone_stairs", - "antarchy:smooth_dream_sandstone_slab", - "antarchy:cut_dream_sandstone_slab", - "antarchy:red_ant_nest", - "antarchy:star_coral", - "antarchy:star_coral_fan", - "antarchy:star_coral_wall_fan", - "antarchy:star_coral_block", - "antarchy:dead_star_coral", - "antarchy:dead_star_coral_fan", - "antarchy:dead_star_coral_wall_fan", - "antarchy:dead_star_coral_block", - "antarchy:myrmite", - "antarchy:broodstone", - "antarchy:polished_broodstone", - "antarchy:chiseled_broodstone", - "antarchy:broodstone_bricks", - "antarchy:broodstone_stairs", - "antarchy:broodstone_slab", - "antarchy:broodstone_wall", - "antarchy:polished_broodstone_stairs", - "antarchy:polished_broodstone_slab", - "antarchy:polished_broodstone_wall", - "antarchy:broodstone_brick_stairs", - "antarchy:broodstone_brick_slab", - "antarchy:broodstone_brick_wall", - "antarchy:myrmite_coal_ore", - "antarchy:broodstone_uranium_ore", - "antarchy:broodstone_titanium_ore", - "antarchy:biomite", - "antarchy:biomite_turf", - "antarchy:chitin_block", - "antarchy:chitin_spike", - "antarchy:antimetal", - "antarchy:polished_antimetal", - "antarchy:antimetal_stairs", - "antarchy:antimetal_slab", - "antarchy:polished_antimetal_stairs", - "antarchy:polished_antimetal_slab", - "antarchy:dream_lantern", - "antarchy:bluestone_ore", - "antarchy:bluestone_block", - "antarchy:vortex_lens", - "antarchy:bluestone_lamp", - "antarchy:shellstone_pillar", - "antarchy:nyxite_pillar", - "antarchy:broodstone_pillar", - "antarchy:myrmite_stairs", - "antarchy:myrmite_slab", - "antarchy:myrmite_wall", - "antarchy:polished_myrmite", - "antarchy:polished_myrmite_stairs", - "antarchy:polished_myrmite_slab", - "antarchy:polished_myrmite_wall", - "antarchy:chiseled_myrmite", - "antarchy:myrmite_bricks", - "antarchy:myrmite_brick_stairs", - "antarchy:myrmite_brick_slab", - "antarchy:myrmite_brick_wall", - "antarchy:mossy_myrmite_bricks", - "antarchy:mossy_myrmite_brick_stairs", - "antarchy:mossy_myrmite_brick_slab", - "antarchy:mossy_myrmite_brick_wall", - "antarchy:myrmite_pillar", - "antarchy:mossy_broodstone_bricks", - "antarchy:mossy_broodstone_brick_stairs", - "antarchy:mossy_broodstone_brick_slab", - "antarchy:mossy_broodstone_brick_wall", - "antarchy:mossy_nyxite_bricks", - "antarchy:mossy_nyxite_brick_stairs", - "antarchy:mossy_nyxite_brick_slab", - "antarchy:mossy_nyxite_brick_wall", - "antarchy:packed_loam", - "antarchy:loam_bricks", - "antarchy:loam_brick_stairs", - "antarchy:loam_brick_slab", - "antarchy:loam_brick_wall", - "antarchy:chiseled_loam_bricks" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/mineable/shovel.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/mineable/shovel.json deleted file mode 100644 index ccec4d78..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/mineable/shovel.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:infested_rooted_dirt", - "antarchy:infested_coarse_dirt", - "antarchy:brown_ant_nest", - "antarchy:rainbow_ant_nest", - "antarchy:termite_nest", - "antarchy:dream_sand", - "antarchy:cloud_block", - "antarchy:antigravel", - "antarchy:loam" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/moss_replaceable.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/moss_replaceable.json deleted file mode 100644 index e273cf02..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/moss_replaceable.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:myrmite", - "antarchy:broodstone" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/mushroom_grow_block.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/mushroom_grow_block.json deleted file mode 100644 index c52641fc..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/mushroom_grow_block.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "values": [ - "minecraft:mycelium", - "antarchy:amber_moss_block" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/needs_iron_tool.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/needs_iron_tool.json deleted file mode 100644 index 4d243781..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/needs_iron_tool.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:titanium_ore", - "antarchy:deepslate_titanium_ore", - "antarchy:broodstone_titanium_ore", - "antarchy:uranium_ore", - "antarchy:deepslate_uranium_ore", - "antarchy:broodstone_uranium_ore", - "antarchy:titanium_block", - "antarchy:raw_titanium_block", - "antarchy:cut_titanium", - "antarchy:cut_titanium_slab", - "antarchy:cut_titanium_stairs", - "antarchy:chiseled_titanium", - "antarchy:titanium_door", - "antarchy:titanium_trapdoor", - "antarchy:titanium_bars", - "antarchy:titanium_bulb", - "antarchy:uranium_block", - "antarchy:raw_uranium_block", - "antarchy:cut_uranium", - "antarchy:cut_uranium_slab", - "antarchy:cut_uranium_stairs", - "antarchy:chiseled_uranium", - "antarchy:uranium_door", - "antarchy:uranium_trapdoor", - "antarchy:uranium_bars", - "antarchy:uranium_bulb" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/needs_stone_tool.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/needs_stone_tool.json deleted file mode 100644 index 712f17f7..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/needs_stone_tool.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:shellstone", - "antarchy:polished_shellstone", - "antarchy:shellstone_bricks", - "antarchy:chiseled_shellstone", - "antarchy:mossy_shellstone_bricks", - "antarchy:mossy_shellstone_brick_stairs", - "antarchy:mossy_shellstone_brick_slab", - "antarchy:mossy_shellstone_brick_wall", - "antarchy:cracked_shellstone_bricks", - "antarchy:shellstone_stairs", - "antarchy:shellstone_slab", - "antarchy:shellstone_wall", - "antarchy:polished_shellstone_stairs", - "antarchy:polished_shellstone_slab", - "antarchy:polished_shellstone_wall", - "antarchy:shellstone_brick_stairs", - "antarchy:shellstone_brick_slab", - "antarchy:shellstone_brick_wall", - "antarchy:chitin_block", - "antarchy:broodstone", - "antarchy:polished_broodstone", - "antarchy:chiseled_broodstone", - "antarchy:broodstone_bricks", - "antarchy:broodstone_stairs", - "antarchy:broodstone_slab", - "antarchy:broodstone_wall", - "antarchy:polished_broodstone_stairs", - "antarchy:polished_broodstone_slab", - "antarchy:polished_broodstone_wall", - "antarchy:broodstone_brick_stairs", - "antarchy:broodstone_brick_slab", - "antarchy:broodstone_brick_wall", - "antarchy:biomite", - "antarchy:biomite_turf", - "antarchy:bluestone_ore", - "antarchy:bluestone_block", - "antarchy:shellstone_pillar", - "antarchy:broodstone_pillar", - "antarchy:mossy_broodstone_bricks", - "antarchy:mossy_broodstone_brick_stairs", - "antarchy:mossy_broodstone_brick_slab", - "antarchy:mossy_broodstone_brick_wall", - "antarchy:mossy_nyxite_bricks", - "antarchy:mossy_nyxite_brick_stairs", - "antarchy:mossy_nyxite_brick_slab", - "antarchy:mossy_nyxite_brick_wall" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/planks.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/planks.json deleted file mode 100644 index 09b36e80..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/planks.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_planks", - "antarchy:peach_planks", - "antarchy:nadir_planks", - "antarchy:royal_planks", - "antarchy:truffalo_planks" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/sand.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/sand.json deleted file mode 100644 index d79aca3c..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/sand.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:dream_sand" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/saplings.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/saplings.json deleted file mode 100644 index c426a796..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/saplings.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_acorn", - "antarchy:peach_sapling", - "antarchy:nadir_sapling", - "antarchy:royal_sapling", - "antarchy:truffalo_sapling" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/slabs.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/slabs.json deleted file mode 100644 index 01a2e182..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/slabs.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:nyxite_slab", - "antarchy:polished_nyxite_slab", - "antarchy:nyxite_brick_slab", - "antarchy:shellstone_slab", - "antarchy:polished_shellstone_slab", - "antarchy:shellstone_brick_slab", - "antarchy:mossy_shellstone_brick_slab", - "antarchy:dream_sandstone_slab", - "antarchy:smooth_dream_sandstone_slab", - "antarchy:cut_dream_sandstone_slab", - "antarchy:typhonite_slab", - "antarchy:typhonite_brick_slab", - "antarchy:polished_typhonite_slab", - "antarchy:cut_uranium_slab", - "antarchy:cut_titanium_slab", - "antarchy:broodstone_slab", - "antarchy:polished_broodstone_slab", - "antarchy:broodstone_brick_slab", - "antarchy:antimetal_slab", - "antarchy:polished_antimetal_slab", - "antarchy:myrmite_slab", - "antarchy:polished_myrmite_slab", - "antarchy:myrmite_brick_slab", - "antarchy:mossy_myrmite_brick_slab", - "antarchy:mossy_broodstone_brick_slab", - "antarchy:mossy_nyxite_brick_slab", - "antarchy:loam_brick_slab" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/small_flowers.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/small_flowers.json deleted file mode 100644 index 0d084861..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/small_flowers.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:lotus", - "antarchy:spider_lily", - "antarchy:whirlflower", - "antarchy:duskbell" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/stairs.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/stairs.json deleted file mode 100644 index 97986135..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/stairs.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:nyxite_stairs", - "antarchy:nyxite_brick_stairs", - "antarchy:polished_nyxite_stairs", - "antarchy:shellstone_stairs", - "antarchy:polished_shellstone_stairs", - "antarchy:shellstone_brick_stairs", - "antarchy:mossy_shellstone_brick_stairs", - "antarchy:dream_sandstone_stairs", - "antarchy:smooth_dream_sandstone_stairs", - "antarchy:typhonite_stairs", - "antarchy:typhonite_brick_stairs", - "antarchy:polished_typhonite_stairs", - "antarchy:cut_titanium_stairs", - "antarchy:cut_uranium_stairs", - "antarchy:broodstone_stairs", - "antarchy:polished_broodstone_stairs", - "antarchy:broodstone_brick_stairs", - "antarchy:antimetal_stairs", - "antarchy:polished_antimetal_stairs", - "antarchy:myrmite_stairs", - "antarchy:polished_myrmite_stairs", - "antarchy:myrmite_brick_stairs", - "antarchy:mossy_myrmite_brick_stairs", - "antarchy:mossy_broodstone_brick_stairs", - "antarchy:mossy_nyxite_brick_stairs", - "antarchy:loam_brick_stairs" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/standing_signs.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/standing_signs.json deleted file mode 100644 index ab5622a1..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/standing_signs.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_sign", - "antarchy:peach_sign", - "antarchy:nadir_sign", - "antarchy:royal_sign", - "antarchy:truffalo_sign" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/stone_buttons.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/stone_buttons.json deleted file mode 100644 index bf507d60..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/stone_buttons.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "antarchy:polished_nyxite_button" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/stone_pressure_plates.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/stone_pressure_plates.json deleted file mode 100644 index 52fc3749..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/stone_pressure_plates.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "antarchy:polished_nyxite_pressure_plate" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/sword_efficient.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/sword_efficient.json deleted file mode 100644 index 6b56181d..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/sword_efficient.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:nadir_fern", - "antarchy:large_nadir_fern", - "antarchy:duskbell", - "antarchy:whirlflower", - "antarchy:spiraling_vines", - "antarchy:gorevine" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/tall_flowers.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/tall_flowers.json deleted file mode 100644 index 3b73dd8a..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/tall_flowers.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:camellia", - "antarchy:orange_milkweed", - "antarchy:pink_milkweed", - "antarchy:large_nadir_fern" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/trapdoors.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/trapdoors.json deleted file mode 100644 index 617b826c..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/trapdoors.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:uranium_trapdoor", - "antarchy:titanium_trapdoor", - "antarchy:nadir_trapdoor", - "antarchy:royal_trapdoor", - "antarchy:truffalo_trapdoor" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/underwater_bonemeals.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/underwater_bonemeals.json deleted file mode 100644 index a8614dfb..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/underwater_bonemeals.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:star_coral", - "antarchy:star_coral_wall_fan" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/vines.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/vines.json deleted file mode 100644 index 8b82d068..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/vines.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "minecraft:vine", - "antarchy:creepvine", - "antarchy:molting_vines", - "antarchy:spiraling_vines", - "antarchy:gorevine" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/wall_corals.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/wall_corals.json deleted file mode 100644 index a42a8397..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/wall_corals.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:star_coral_wall_fan" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/wall_hanging_signs.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/wall_hanging_signs.json deleted file mode 100644 index b667ea1b..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/wall_hanging_signs.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_wall_hanging_sign", - "antarchy:peach_wall_hanging_sign", - "antarchy:nadir_wall_hanging_sign", - "antarchy:royal_wall_hanging_sign", - "antarchy:truffalo_wall_hanging_sign" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/wall_signs.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/wall_signs.json deleted file mode 100644 index 8fb5339d..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/wall_signs.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_wall_sign", - "antarchy:peach_wall_sign", - "antarchy:nadir_wall_sign", - "antarchy:royal_wall_sign", - "antarchy:truffalo_wall_sign" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/walls.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/walls.json deleted file mode 100644 index db0005a2..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/walls.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:dream_sandstone_wall", - "antarchy:typhonite_wall", - "antarchy:typhonite_brick_wall", - "antarchy:polished_typhonite_wall", - "antarchy:nyxite_wall", - "antarchy:polished_nyxite_wall", - "antarchy:nyxite_brick_wall", - "antarchy:shellstone_wall", - "antarchy:polished_shellstone_wall", - "antarchy:shellstone_brick_wall", - "antarchy:mossy_shellstone_brick_wall", - "antarchy:broodstone_wall", - "antarchy:polished_broodstone_wall", - "antarchy:broodstone_brick_wall", - "antarchy:myrmite_wall", - "antarchy:polished_myrmite_wall", - "antarchy:myrmite_brick_wall", - "antarchy:mossy_myrmite_brick_wall", - "antarchy:mossy_broodstone_brick_wall", - "antarchy:mossy_nyxite_brick_wall", - "antarchy:loam_brick_wall" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/wooden_buttons.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/wooden_buttons.json deleted file mode 100644 index 4c61cb72..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/wooden_buttons.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_button", - "antarchy:peach_button", - "antarchy:nadir_button", - "antarchy:royal_button", - "antarchy:truffalo_button" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/wooden_doors.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/wooden_doors.json deleted file mode 100644 index 9ebbfcaf..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/wooden_doors.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_door", - "antarchy:peach_door", - "antarchy:nadir_door", - "antarchy:royal_door", - "antarchy:truffalo_door" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/wooden_fences.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/wooden_fences.json deleted file mode 100644 index 05374ffd..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/wooden_fences.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_fence", - "antarchy:peach_fence", - "antarchy:nadir_fence", - "antarchy:royal_fence", - "antarchy:truffalo_fence" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/wooden_pressure_plates.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/wooden_pressure_plates.json deleted file mode 100644 index 080703cf..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/wooden_pressure_plates.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_pressure_plate", - "antarchy:peach_pressure_plate", - "antarchy:nadir_pressure_plate", - "antarchy:royal_pressure_plate", - "antarchy:truffalo_pressure_plate" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/wooden_slabs.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/wooden_slabs.json deleted file mode 100644 index 7ac806ce..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/wooden_slabs.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_slab", - "antarchy:peach_slab", - "antarchy:nadir_slab", - "antarchy:royal_slab", - "antarchy:truffalo_slab" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/wooden_stairs.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/wooden_stairs.json deleted file mode 100644 index 642565ad..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/wooden_stairs.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_stairs", - "antarchy:peach_stairs", - "antarchy:nadir_stairs", - "antarchy:royal_stairs", - "antarchy:truffalo_stairs" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/block/wooden_trapdoors.json b/common-1.20.1/src/main/resources/data/minecraft/tags/block/wooden_trapdoors.json deleted file mode 100644 index c96f6af0..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/block/wooden_trapdoors.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_trapdoor", - "antarchy:peach_trapdoor", - "antarchy:nadir_trapdoor", - "antarchy:royal_trapdoor", - "antarchy:truffalo_trapdoor" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/all_hanging_signs.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/all_hanging_signs.json index 7e4be6b5..6fb222f6 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/all_hanging_signs.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/all_hanging_signs.json @@ -4,6 +4,12 @@ "antarchy:ouranwood_hanging_sign", "antarchy:ouranwood_wall_hanging_sign", "antarchy:peach_hanging_sign", - "antarchy:peach_wall_hanging_sign" + "antarchy:peach_wall_hanging_sign", + "antarchy:nadir_hanging_sign", + "antarchy:nadir_wall_hanging_sign", + "antarchy:royal_hanging_sign", + "antarchy:royal_wall_hanging_sign", + "antarchy:truffalo_hanging_sign", + "antarchy:truffalo_wall_hanging_sign" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/ceiling_hanging_signs.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/ceiling_hanging_signs.json index 746c5071..c6cf2a18 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/ceiling_hanging_signs.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/ceiling_hanging_signs.json @@ -2,6 +2,9 @@ "replace": false, "values": [ "antarchy:ouranwood_hanging_sign", - "antarchy:peach_hanging_sign" + "antarchy:peach_hanging_sign", + "antarchy:nadir_hanging_sign", + "antarchy:royal_hanging_sign", + "antarchy:truffalo_hanging_sign" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/climbable.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/climbable.json index 6f6679d5..8b82d068 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/climbable.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/climbable.json @@ -3,6 +3,8 @@ "values": [ "minecraft:vine", "antarchy:creepvine", - "antarchy:molting_vines" + "antarchy:molting_vines", + "antarchy:spiraling_vines", + "antarchy:gorevine" ] -} \ No newline at end of file +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/dirt.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/dirt.json index 0cd9680b..e345d061 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/dirt.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/dirt.json @@ -1,11 +1,11 @@ { - "replace": false, - "values": [ - "antarchy:infested_rooted_dirt", - "antarchy:infested_coarse_dirt", - "antarchy:umbral_moss_block", - "antarchy:blush_moss_block", - "antarchy:amber_moss_block", - "antarchy:biowart" - ] + "replace": false, + "values": [ + "antarchy:infested_rooted_dirt", + "antarchy:infested_coarse_dirt", + "antarchy:umbral_moss_block", + "antarchy:blush_moss_block", + "antarchy:amber_moss_block", + "antarchy:biowart" + ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/doors.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/doors.json index e6ac4fd5..3bc68397 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/doors.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/doors.json @@ -2,6 +2,9 @@ "replace": false, "values": [ "antarchy:uranium_door", - "antarchy:titanium_door" + "antarchy:titanium_door", + "antarchy:nadir_door", + "antarchy:royal_door", + "antarchy:truffalo_door" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/fence_gates.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/fence_gates.json index 738ac5c8..8ceb559b 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/fence_gates.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/fence_gates.json @@ -2,6 +2,9 @@ "replace": false, "values": [ "antarchy:ouranwood_fence_gate", - "antarchy:peach_fence_gate" + "antarchy:peach_fence_gate", + "antarchy:nadir_fence_gate", + "antarchy:royal_fence_gate", + "antarchy:truffalo_fence_gate" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/flowers.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/flowers.json index d794cdec..1d611adf 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/flowers.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/flowers.json @@ -5,6 +5,8 @@ "antarchy:lotus", "antarchy:orange_milkweed", "antarchy:pink_milkweed", - "antarchy:spider_lily" + "antarchy:spider_lily", + "antarchy:whirlflower", + "antarchy:duskbell" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/logs.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/logs.json index 5fc273ea..225e927d 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/logs.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/logs.json @@ -11,6 +11,18 @@ "antarchy:peach_log", "antarchy:peach_wood", "antarchy:stripped_peach_log", - "antarchy:stripped_peach_wood" + "antarchy:stripped_peach_wood", + "antarchy:nadir_log", + "antarchy:nadir_wood", + "antarchy:stripped_nadir_log", + "antarchy:stripped_nadir_wood", + "antarchy:royal_log", + "antarchy:royal_wood", + "antarchy:stripped_royal_log", + "antarchy:stripped_royal_wood", + "antarchy:truffalo_log", + "antarchy:truffalo_wood", + "antarchy:stripped_truffalo_log", + "antarchy:stripped_truffalo_wood" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/logs_that_burn.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/logs_that_burn.json index 5fc273ea..225e927d 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/logs_that_burn.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/logs_that_burn.json @@ -11,6 +11,18 @@ "antarchy:peach_log", "antarchy:peach_wood", "antarchy:stripped_peach_log", - "antarchy:stripped_peach_wood" + "antarchy:stripped_peach_wood", + "antarchy:nadir_log", + "antarchy:nadir_wood", + "antarchy:stripped_nadir_log", + "antarchy:stripped_nadir_wood", + "antarchy:royal_log", + "antarchy:royal_wood", + "antarchy:stripped_royal_log", + "antarchy:stripped_royal_wood", + "antarchy:truffalo_log", + "antarchy:truffalo_wood", + "antarchy:stripped_truffalo_log", + "antarchy:stripped_truffalo_wood" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/mineable/axe.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/mineable/axe.json index c87836aa..dde40463 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/mineable/axe.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/mineable/axe.json @@ -39,6 +39,59 @@ "antarchy:peach_hanging_sign", "antarchy:peach_wall_hanging_sign", "antarchy:dream_campfire", - "antarchy:glowcap_mushroom_block" + "antarchy:glowcap_mushroom_block", + "antarchy:nadir_log", + "antarchy:nadir_wood", + "antarchy:stripped_nadir_log", + "antarchy:stripped_nadir_wood", + "antarchy:nadir_planks", + "antarchy:nadir_stairs", + "antarchy:nadir_slab", + "antarchy:nadir_fence", + "antarchy:nadir_fence_gate", + "antarchy:nadir_door", + "antarchy:nadir_trapdoor", + "antarchy:nadir_pressure_plate", + "antarchy:nadir_button", + "antarchy:nadir_sign", + "antarchy:nadir_wall_sign", + "antarchy:nadir_hanging_sign", + "antarchy:nadir_wall_hanging_sign", + "antarchy:royal_log", + "antarchy:royal_wood", + "antarchy:stripped_royal_log", + "antarchy:stripped_royal_wood", + "antarchy:royal_planks", + "antarchy:royal_stairs", + "antarchy:royal_slab", + "antarchy:royal_fence", + "antarchy:royal_fence_gate", + "antarchy:royal_door", + "antarchy:royal_trapdoor", + "antarchy:royal_pressure_plate", + "antarchy:royal_button", + "antarchy:royal_sign", + "antarchy:royal_wall_sign", + "antarchy:royal_hanging_sign", + "antarchy:royal_wall_hanging_sign", + "antarchy:royal_leaves", + "antarchy:royal_flowering_leaves", + "antarchy:truffalo_log", + "antarchy:truffalo_wood", + "antarchy:stripped_truffalo_log", + "antarchy:stripped_truffalo_wood", + "antarchy:truffalo_planks", + "antarchy:truffalo_stairs", + "antarchy:truffalo_slab", + "antarchy:truffalo_fence", + "antarchy:truffalo_fence_gate", + "antarchy:truffalo_door", + "antarchy:truffalo_trapdoor", + "antarchy:truffalo_pressure_plate", + "antarchy:truffalo_button", + "antarchy:truffalo_sign", + "antarchy:truffalo_wall_sign", + "antarchy:truffalo_hanging_sign", + "antarchy:truffalo_wall_hanging_sign" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/mineable/hoe.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/mineable/hoe.json index d66584d1..12b8de35 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/mineable/hoe.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/mineable/hoe.json @@ -1,20 +1,40 @@ { - "replace": false, - "values": [ - "antarchy:ouranwood_leaves", - "antarchy:peach_leaves", - "antarchy:corn_crop", - "antarchy:wild_corn", - "antarchy:umbral_moss_block", - "antarchy:umbral_moss_carpet", - "antarchy:blush_moss_block", - "antarchy:blush_moss_carpet", - "antarchy:amber_moss_block", - "antarchy:amber_moss_carpet", - "antarchy:lumen_froglight", - "antarchy:roseate_froglight", - "antarchy:biowart", - "antarchy:biowart_tendrils", - "antarchy:bile_vein" - ] + "replace": false, + "values": [ + "antarchy:ouranwood_leaves", + "antarchy:peach_leaves", + "antarchy:corn_crop", + "antarchy:wild_corn", + "antarchy:umbral_moss_block", + "antarchy:umbral_moss_carpet", + "antarchy:blush_moss_block", + "antarchy:blush_moss_carpet", + "antarchy:amber_moss_block", + "antarchy:amber_moss_carpet", + "antarchy:lumen_froglight", + "antarchy:roseate_froglight", + "antarchy:biowart", + "antarchy:biowart_tendrils", + "antarchy:nadir_fern", + "antarchy:large_nadir_fern", + "antarchy:duskbell", + "antarchy:gorevine", + "antarchy:bile_vein", + "antarchy:white_truffalo_tuft", + "antarchy:orange_truffalo_tuft", + "antarchy:magenta_truffalo_tuft", + "antarchy:light_blue_truffalo_tuft", + "antarchy:yellow_truffalo_tuft", + "antarchy:lime_truffalo_tuft", + "antarchy:pink_truffalo_tuft", + "antarchy:gray_truffalo_tuft", + "antarchy:light_gray_truffalo_tuft", + "antarchy:cyan_truffalo_tuft", + "antarchy:purple_truffalo_tuft", + "antarchy:blue_truffalo_tuft", + "antarchy:brown_truffalo_tuft", + "antarchy:green_truffalo_tuft", + "antarchy:red_truffalo_tuft", + "antarchy:black_truffalo_tuft" + ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json index 25b732f3..7de115a9 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json @@ -1,6 +1,26 @@ { "replace": false, "values": [ + "antarchy:typhonite", + "antarchy:nadir_nyxium", + "antarchy:verdant_nyxium", + "antarchy:typhonite_pillar", + "antarchy:typhonite_bricks", + "antarchy:chiseled_typhonite", + "antarchy:polished_typhonite", + "antarchy:veined_typhonite", + "antarchy:typhonite_spike", + "antarchy:typhonite_stairs", + "antarchy:typhonite_slab", + "antarchy:typhonite_wall", + "antarchy:typhonite_brick_stairs", + "antarchy:typhonite_brick_slab", + "antarchy:typhonite_brick_wall", + "antarchy:polished_typhonite_stairs", + "antarchy:polished_typhonite_slab", + "antarchy:polished_typhonite_wall", + "antarchy:upper", + "antarchy:tigers_eye_block", "antarchy:uranium_ore", "antarchy:deepslate_uranium_ore", "antarchy:titanium_ore", @@ -114,11 +134,44 @@ "antarchy:antimetal_slab", "antarchy:polished_antimetal_stairs", "antarchy:polished_antimetal_slab", + "antarchy:dream_lantern", + "antarchy:bluestone_ore", + "antarchy:bluestone_block", + "antarchy:vortex_lens", + "antarchy:bluestone_lamp", "antarchy:shellstone_pillar", "antarchy:nyxite_pillar", "antarchy:broodstone_pillar", - "antarchy:dream_lantern", - "antarchy:bluestone_ore", - "antarchy:bluestone_block" + "antarchy:myrmite_stairs", + "antarchy:myrmite_slab", + "antarchy:myrmite_wall", + "antarchy:polished_myrmite", + "antarchy:polished_myrmite_stairs", + "antarchy:polished_myrmite_slab", + "antarchy:polished_myrmite_wall", + "antarchy:chiseled_myrmite", + "antarchy:myrmite_bricks", + "antarchy:myrmite_brick_stairs", + "antarchy:myrmite_brick_slab", + "antarchy:myrmite_brick_wall", + "antarchy:mossy_myrmite_bricks", + "antarchy:mossy_myrmite_brick_stairs", + "antarchy:mossy_myrmite_brick_slab", + "antarchy:mossy_myrmite_brick_wall", + "antarchy:myrmite_pillar", + "antarchy:mossy_broodstone_bricks", + "antarchy:mossy_broodstone_brick_stairs", + "antarchy:mossy_broodstone_brick_slab", + "antarchy:mossy_broodstone_brick_wall", + "antarchy:mossy_nyxite_bricks", + "antarchy:mossy_nyxite_brick_stairs", + "antarchy:mossy_nyxite_brick_slab", + "antarchy:mossy_nyxite_brick_wall", + "antarchy:packed_loam", + "antarchy:loam_bricks", + "antarchy:loam_brick_stairs", + "antarchy:loam_brick_slab", + "antarchy:loam_brick_wall", + "antarchy:chiseled_loam_bricks" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/mineable/shovel.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/mineable/shovel.json index 5346432f..ccec4d78 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/mineable/shovel.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/mineable/shovel.json @@ -7,6 +7,8 @@ "antarchy:rainbow_ant_nest", "antarchy:termite_nest", "antarchy:dream_sand", - "antarchy:cloud_block" + "antarchy:cloud_block", + "antarchy:antigravel", + "antarchy:loam" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/needs_stone_tool.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/needs_stone_tool.json index ee689010..712f17f7 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/needs_stone_tool.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/needs_stone_tool.json @@ -19,7 +19,6 @@ "antarchy:shellstone_brick_stairs", "antarchy:shellstone_brick_slab", "antarchy:shellstone_brick_wall", - "antarchy:myrmite_coal_ore", "antarchy:chitin_block", "antarchy:broodstone", "antarchy:polished_broodstone", @@ -34,11 +33,19 @@ "antarchy:broodstone_brick_stairs", "antarchy:broodstone_brick_slab", "antarchy:broodstone_brick_wall", - "antarchy:shellstone_pillar", - "antarchy:broodstone_pillar", "antarchy:biomite", "antarchy:biomite_turf", "antarchy:bluestone_ore", - "antarchy:bluestone_block" + "antarchy:bluestone_block", + "antarchy:shellstone_pillar", + "antarchy:broodstone_pillar", + "antarchy:mossy_broodstone_bricks", + "antarchy:mossy_broodstone_brick_stairs", + "antarchy:mossy_broodstone_brick_slab", + "antarchy:mossy_broodstone_brick_wall", + "antarchy:mossy_nyxite_bricks", + "antarchy:mossy_nyxite_brick_stairs", + "antarchy:mossy_nyxite_brick_slab", + "antarchy:mossy_nyxite_brick_wall" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/planks.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/planks.json index d98bff17..c8607907 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/planks.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/planks.json @@ -2,6 +2,9 @@ "replace": false, "values": [ "antarchy:ouranwood_planks", - "antarchy:peach_planks" + "antarchy:peach_planks", + "antarchy:nadir_planks", + "antarchy:royal_planks", + "antarchy:truffalo_planks" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/saplings.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/saplings.json index 5a06a14d..3b0b1679 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/saplings.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/saplings.json @@ -2,6 +2,9 @@ "replace": false, "values": [ "antarchy:ouranwood_acorn", - "antarchy:peach_sapling" + "antarchy:peach_sapling", + "antarchy:nadir_sapling", + "antarchy:royal_sapling", + "antarchy:truffalo_sapling" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/slabs.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/slabs.json index 9bd75693..01a2e182 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/slabs.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/slabs.json @@ -11,12 +11,22 @@ "antarchy:dream_sandstone_slab", "antarchy:smooth_dream_sandstone_slab", "antarchy:cut_dream_sandstone_slab", + "antarchy:typhonite_slab", + "antarchy:typhonite_brick_slab", + "antarchy:polished_typhonite_slab", "antarchy:cut_uranium_slab", "antarchy:cut_titanium_slab", "antarchy:broodstone_slab", "antarchy:polished_broodstone_slab", "antarchy:broodstone_brick_slab", "antarchy:antimetal_slab", - "antarchy:polished_antimetal_slab" + "antarchy:polished_antimetal_slab", + "antarchy:myrmite_slab", + "antarchy:polished_myrmite_slab", + "antarchy:myrmite_brick_slab", + "antarchy:mossy_myrmite_brick_slab", + "antarchy:mossy_broodstone_brick_slab", + "antarchy:mossy_nyxite_brick_slab", + "antarchy:loam_brick_slab" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/small_flowers.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/small_flowers.json index ae42e249..0d084861 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/small_flowers.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/small_flowers.json @@ -2,6 +2,8 @@ "replace": false, "values": [ "antarchy:lotus", - "antarchy:spider_lily" + "antarchy:spider_lily", + "antarchy:whirlflower", + "antarchy:duskbell" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/stairs.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/stairs.json index 8dae86d4..97986135 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/stairs.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/stairs.json @@ -10,12 +10,22 @@ "antarchy:mossy_shellstone_brick_stairs", "antarchy:dream_sandstone_stairs", "antarchy:smooth_dream_sandstone_stairs", + "antarchy:typhonite_stairs", + "antarchy:typhonite_brick_stairs", + "antarchy:polished_typhonite_stairs", "antarchy:cut_titanium_stairs", "antarchy:cut_uranium_stairs", "antarchy:broodstone_stairs", "antarchy:polished_broodstone_stairs", "antarchy:broodstone_brick_stairs", "antarchy:antimetal_stairs", - "antarchy:polished_antimetal_stairs" + "antarchy:polished_antimetal_stairs", + "antarchy:myrmite_stairs", + "antarchy:polished_myrmite_stairs", + "antarchy:myrmite_brick_stairs", + "antarchy:mossy_myrmite_brick_stairs", + "antarchy:mossy_broodstone_brick_stairs", + "antarchy:mossy_nyxite_brick_stairs", + "antarchy:loam_brick_stairs" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/standing_signs.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/standing_signs.json index 6ec9e2a8..50550698 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/standing_signs.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/standing_signs.json @@ -2,6 +2,9 @@ "replace": false, "values": [ "antarchy:ouranwood_sign", - "antarchy:peach_sign" + "antarchy:peach_sign", + "antarchy:nadir_sign", + "antarchy:royal_sign", + "antarchy:truffalo_sign" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/sword_efficient.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/sword_efficient.json index 5d341ba2..6b56181d 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/sword_efficient.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/sword_efficient.json @@ -1,4 +1,11 @@ { "replace": false, - "values": [] + "values": [ + "antarchy:nadir_fern", + "antarchy:large_nadir_fern", + "antarchy:duskbell", + "antarchy:whirlflower", + "antarchy:spiraling_vines", + "antarchy:gorevine" + ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/tall_flowers.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/tall_flowers.json index cf2db3ab..3b73dd8a 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/tall_flowers.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/tall_flowers.json @@ -3,6 +3,7 @@ "values": [ "antarchy:camellia", "antarchy:orange_milkweed", - "antarchy:pink_milkweed" + "antarchy:pink_milkweed", + "antarchy:large_nadir_fern" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/trapdoors.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/trapdoors.json index 174efdac..2989e5e0 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/trapdoors.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/trapdoors.json @@ -2,6 +2,9 @@ "replace": false, "values": [ "antarchy:uranium_trapdoor", - "antarchy:titanium_trapdoor" + "antarchy:titanium_trapdoor", + "antarchy:nadir_trapdoor", + "antarchy:royal_trapdoor", + "antarchy:truffalo_trapdoor" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/vines.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/vines.json index 6f6679d5..8b82d068 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/vines.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/vines.json @@ -3,6 +3,8 @@ "values": [ "minecraft:vine", "antarchy:creepvine", - "antarchy:molting_vines" + "antarchy:molting_vines", + "antarchy:spiraling_vines", + "antarchy:gorevine" ] -} \ No newline at end of file +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wall_hanging_signs.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wall_hanging_signs.json index 3472b17e..b9cf9cd4 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wall_hanging_signs.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wall_hanging_signs.json @@ -2,6 +2,9 @@ "replace": false, "values": [ "antarchy:ouranwood_wall_hanging_sign", - "antarchy:peach_wall_hanging_sign" + "antarchy:peach_wall_hanging_sign", + "antarchy:nadir_wall_hanging_sign", + "antarchy:royal_wall_hanging_sign", + "antarchy:truffalo_wall_hanging_sign" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wall_signs.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wall_signs.json index 406407ee..71d2d48f 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wall_signs.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wall_signs.json @@ -2,6 +2,9 @@ "replace": false, "values": [ "antarchy:ouranwood_wall_sign", - "antarchy:peach_wall_sign" + "antarchy:peach_wall_sign", + "antarchy:nadir_wall_sign", + "antarchy:royal_wall_sign", + "antarchy:truffalo_wall_sign" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/walls.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/walls.json index 3d65f231..db0005a2 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/walls.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/walls.json @@ -2,6 +2,9 @@ "replace": false, "values": [ "antarchy:dream_sandstone_wall", + "antarchy:typhonite_wall", + "antarchy:typhonite_brick_wall", + "antarchy:polished_typhonite_wall", "antarchy:nyxite_wall", "antarchy:polished_nyxite_wall", "antarchy:nyxite_brick_wall", @@ -11,6 +14,13 @@ "antarchy:mossy_shellstone_brick_wall", "antarchy:broodstone_wall", "antarchy:polished_broodstone_wall", - "antarchy:broodstone_brick_wall" + "antarchy:broodstone_brick_wall", + "antarchy:myrmite_wall", + "antarchy:polished_myrmite_wall", + "antarchy:myrmite_brick_wall", + "antarchy:mossy_myrmite_brick_wall", + "antarchy:mossy_broodstone_brick_wall", + "antarchy:mossy_nyxite_brick_wall", + "antarchy:loam_brick_wall" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wooden_buttons.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wooden_buttons.json index 1d626cef..b2f8b7db 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wooden_buttons.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wooden_buttons.json @@ -2,6 +2,9 @@ "replace": false, "values": [ "antarchy:ouranwood_button", - "antarchy:peach_button" + "antarchy:peach_button", + "antarchy:nadir_button", + "antarchy:royal_button", + "antarchy:truffalo_button" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wooden_doors.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wooden_doors.json index e4ebd50e..eaac7749 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wooden_doors.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wooden_doors.json @@ -2,6 +2,9 @@ "replace": false, "values": [ "antarchy:ouranwood_door", - "antarchy:peach_door" + "antarchy:peach_door", + "antarchy:nadir_door", + "antarchy:royal_door", + "antarchy:truffalo_door" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wooden_fences.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wooden_fences.json index f1b5eb5a..b70fa6aa 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wooden_fences.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wooden_fences.json @@ -2,6 +2,9 @@ "replace": false, "values": [ "antarchy:ouranwood_fence", - "antarchy:peach_fence" + "antarchy:peach_fence", + "antarchy:nadir_fence", + "antarchy:royal_fence", + "antarchy:truffalo_fence" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wooden_pressure_plates.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wooden_pressure_plates.json index 7f3d5149..4465682e 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wooden_pressure_plates.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wooden_pressure_plates.json @@ -2,6 +2,9 @@ "replace": false, "values": [ "antarchy:ouranwood_pressure_plate", - "antarchy:peach_pressure_plate" + "antarchy:peach_pressure_plate", + "antarchy:nadir_pressure_plate", + "antarchy:royal_pressure_plate", + "antarchy:truffalo_pressure_plate" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wooden_slabs.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wooden_slabs.json index 9b0b8371..f2dfda53 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wooden_slabs.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wooden_slabs.json @@ -2,6 +2,9 @@ "replace": false, "values": [ "antarchy:ouranwood_slab", - "antarchy:peach_slab" + "antarchy:peach_slab", + "antarchy:nadir_slab", + "antarchy:royal_slab", + "antarchy:truffalo_slab" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wooden_stairs.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wooden_stairs.json index 5d419448..23b8838b 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wooden_stairs.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wooden_stairs.json @@ -2,6 +2,9 @@ "replace": false, "values": [ "antarchy:ouranwood_stairs", - "antarchy:peach_stairs" + "antarchy:peach_stairs", + "antarchy:nadir_stairs", + "antarchy:royal_stairs", + "antarchy:truffalo_stairs" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wooden_trapdoors.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wooden_trapdoors.json index df34c0e6..c3e54b36 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wooden_trapdoors.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wooden_trapdoors.json @@ -2,6 +2,9 @@ "replace": false, "values": [ "antarchy:ouranwood_trapdoor", - "antarchy:peach_trapdoor" + "antarchy:peach_trapdoor", + "antarchy:nadir_trapdoor", + "antarchy:royal_trapdoor", + "antarchy:truffalo_trapdoor" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/damage_type/bypasses_armor.json b/common-1.20.1/src/main/resources/data/minecraft/tags/damage_type/bypasses_armor.json new file mode 100644 index 00000000..7fbead91 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/damage_type/bypasses_armor.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:moon_vacuum" + ] +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/damage_type/bypasses_shield.json b/common-1.20.1/src/main/resources/data/minecraft/tags/damage_type/bypasses_shield.json new file mode 100644 index 00000000..7fbead91 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/damage_type/bypasses_shield.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:moon_vacuum" + ] +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/damage_type/no_knockback.json b/common-1.20.1/src/main/resources/data/minecraft/tags/damage_type/no_knockback.json new file mode 100644 index 00000000..7fbead91 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/damage_type/no_knockback.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:moon_vacuum" + ] +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/enchantment/treasure.json b/common-1.20.1/src/main/resources/data/minecraft/tags/enchantment/treasure.json deleted file mode 100644 index 7ba3f616..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/enchantment/treasure.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "values": [ - "antarchy:feather_rising", - "antarchy:chronosphere" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/entity_type/arthropod.json b/common-1.20.1/src/main/resources/data/minecraft/tags/entity_type/arthropod.json deleted file mode 100644 index 164f337d..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/entity_type/arthropod.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "values": [ - "antarchy:brown_ant", - "antarchy:red_ant", - "antarchy:rainbow_ant", - "antarchy:caterpillar", - "antarchy:butterfly", - "antarchy:brutalfly", - "antarchy:bed_bug", - "antarchy:mantis", - "antarchy:alpha_mantis", - "antarchy:springbug", - "antarchy:spit_bug", - "antarchy:stink_bug", - "antarchy:hercules_beetle", - "antarchy:crawling_blight", - "antarchy:skulking_fright", - "antarchy:rolly_polly", - "antarchy:scorpion", - "antarchy:emperor_scorpion", - "antarchy:jerry" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/entity_types/arthropod.json b/common-1.20.1/src/main/resources/data/minecraft/tags/entity_types/arthropod.json index 042bce23..164f337d 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/entity_types/arthropod.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/entity_types/arthropod.json @@ -9,12 +9,12 @@ "antarchy:bed_bug", "antarchy:mantis", "antarchy:alpha_mantis", - "antarchy:jumpy_bug", + "antarchy:springbug", "antarchy:spit_bug", "antarchy:stink_bug", "antarchy:hercules_beetle", - "antarchy:creeping_horror", - "antarchy:lurking_terror", + "antarchy:crawling_blight", + "antarchy:skulking_fright", "antarchy:rolly_polly", "antarchy:scorpion", "antarchy:emperor_scorpion", diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/axes.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/axes.json deleted file mode 100644 index 4660868c..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/axes.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ultimate_axe", - "antarchy:battle_axe", - "antarchy:royal_assailant_battleaxe" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/boats.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/boats.json deleted file mode 100644 index 822f1e86..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/boats.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_boat", - "antarchy:ouranwood_chest_boat", - "antarchy:peach_boat", - "antarchy:nadir_boat", - "antarchy:royal_boat", - "antarchy:truffalo_boat" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/chest_armor.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/chest_armor.json deleted file mode 100644 index 9c7ec0c9..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/chest_armor.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ultimate_chestplate", - "antarchy:nightmare_chestplate", - "antarchy:blood_crystal_chestplate", - "antarchy:primordial_chestplate", - "antarchy:royal_guardian_chestplate", - "antarchy:royal_assailant_chestplate" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/chest_boats.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/chest_boats.json deleted file mode 100644 index daee232b..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/chest_boats.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_chest_boat", - "antarchy:peach_chest_boat", - "antarchy:nadir_chest_boat", - "antarchy:royal_chest_boat", - "antarchy:truffalo_chest_boat" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/dirt.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/dirt.json deleted file mode 100644 index 26f30b50..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/dirt.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:infested_rooted_dirt", - "antarchy:infested_coarse_dirt", - "antarchy:umbral_moss_block" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/doors.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/doors.json deleted file mode 100644 index c4dcd7e4..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/doors.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:uranium_door", - "antarchy:titanium_door", - "antarchy:nadir_door", - "antarchy:royal_door", - "antarchy:truffalo_door" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/bow.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/bow.json deleted file mode 100644 index 66565526..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/bow.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ultimate_bow" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/crossbow.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/crossbow.json deleted file mode 100644 index d0458b36..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/crossbow.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ultimate_crossbow" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/durability.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/durability.json deleted file mode 100644 index 65b1799d..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/durability.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ultimate_axe", - "antarchy:ultimate_pickaxe", - "antarchy:ultimate_shovel", - "antarchy:ultimate_hoe", - "antarchy:ultimate_sword", - "antarchy:battle_axe", - "antarchy:big_bertha", - "antarchy:nightmare_sword", - "antarchy:basilisk_dagger", - "antarchy:ultimate_bow", - "antarchy:ultimate_crossbow", - "antarchy:brutalfly_elytra", - "antarchy:ultimate_helmet", - "antarchy:ultimate_chestplate", - "antarchy:ultimate_leggings", - "antarchy:ultimate_boots", - "antarchy:nightmare_helmet", - "antarchy:nightmare_chestplate", - "antarchy:nightmare_leggings", - "antarchy:nightmare_boots", - "antarchy:moggles", - "antarchy:blood_crystal_katana", - "antarchy:mantis_claw", - "antarchy:krakens_grasp", - "antarchy:blood_crystal_helmet", - "antarchy:blood_crystal_chestplate", - "antarchy:blood_crystal_leggings", - "antarchy:blood_crystal_boots", - "antarchy:springy_boots", - "antarchy:fallen_king_crown", - "antarchy:water_cannon", - "antarchy:manticore_wings", - "antarchy:royal_guardian_helmet", - "antarchy:royal_guardian_chestplate", - "antarchy:royal_guardian_leggings", - "antarchy:royal_guardian_boots", - "antarchy:royal_assailant_helmet", - "antarchy:royal_assailant_chestplate", - "antarchy:royal_assailant_leggings", - "antarchy:royal_assailant_boots", - "antarchy:royal_guardian_sword", - "antarchy:royal_assailant_battleaxe", - "antarchy:royal_guardian_shield", - "antarchy:royal_assailant_staff" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/elytra.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/elytra.json deleted file mode 100644 index fd126cca..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/elytra.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "replace": false, - "values": [ - "minecraft:elytra", - "antarchy:brutalfly_elytra", - "antarchy:manticore_wings" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/equippable.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/equippable.json deleted file mode 100644 index 82295b97..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/equippable.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:battle_axe", - "antarchy:ultimate_bow", - "antarchy:ultimate_crossbow", - "antarchy:brutalfly_elytra", - "antarchy:springy_boots", - "antarchy:manticore_wings", - "antarchy:royal_assailant_battleaxe" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/fire_aspect.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/fire_aspect.json deleted file mode 100644 index ca9a3031..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/fire_aspect.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ultimate_sword", - "antarchy:big_bertha", - "antarchy:blood_crystal_katana", - "antarchy:royal_guardian_sword" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/mace.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/mace.json deleted file mode 100644 index d275da3f..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/mace.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "replace": false, - "values": [ - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/trident.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/trident.json deleted file mode 100644 index 4d4e3067..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/trident.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:krakens_grasp" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/vanishing.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/vanishing.json deleted file mode 100644 index 6fb5716b..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/vanishing.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:springy_boots", - "antarchy:royal_guardian_shield", - "antarchy:royal_assailant_staff" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/weapon.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/weapon.json deleted file mode 100644 index e7175d79..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/weapon.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:battle_axe", - "antarchy:ultimate_axe", - "antarchy:ultimate_sword", - "antarchy:big_bertha", - "antarchy:nightmare_sword", - "antarchy:basilisk_dagger", - "antarchy:blood_crystal_katana", - "antarchy:mantis_claw", - "antarchy:royal_guardian_sword", - "antarchy:royal_assailant_battleaxe" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/fence_gates.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/fence_gates.json deleted file mode 100644 index 383608df..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/fence_gates.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_fence_gate", - "antarchy:peach_fence_gate", - "antarchy:nadir_fence_gate", - "antarchy:royal_fence_gate", - "antarchy:truffalo_fence_gate" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/fishes.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/fishes.json deleted file mode 100644 index 12df0487..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/fishes.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:cheep" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/flowers.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/flowers.json deleted file mode 100644 index 1d611adf..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/flowers.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:camellia", - "antarchy:lotus", - "antarchy:orange_milkweed", - "antarchy:pink_milkweed", - "antarchy:spider_lily", - "antarchy:whirlflower", - "antarchy:duskbell" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/foot_armor.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/foot_armor.json deleted file mode 100644 index 781ec3cb..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/foot_armor.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ultimate_boots", - "antarchy:nightmare_boots", - "antarchy:blood_crystal_boots", - "antarchy:primordial_boots", - "antarchy:springy_boots", - "antarchy:royal_guardian_boots", - "antarchy:royal_assailant_boots" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/hanging_signs.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/hanging_signs.json deleted file mode 100644 index 95e8093f..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/hanging_signs.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_hanging_sign", - "antarchy:peach_hanging_sign", - "antarchy:nadir_hanging_sign", - "antarchy:royal_hanging_sign", - "antarchy:truffalo_hanging_sign" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/head_armor.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/head_armor.json deleted file mode 100644 index 57ca052f..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/head_armor.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ultimate_helmet", - "antarchy:nightmare_helmet", - "antarchy:moggles", - "antarchy:blood_crystal_helmet", - "antarchy:fallen_king_crown", - "antarchy:primordial_helmet", - "antarchy:royal_guardian_helmet", - "antarchy:royal_assailant_helmet" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/hoes.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/hoes.json deleted file mode 100644 index eb8474b2..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/hoes.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ultimate_hoe" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/horse_food.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/horse_food.json deleted file mode 100644 index aa4f6517..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/horse_food.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:peach" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/leaves.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/leaves.json deleted file mode 100644 index aee0c428..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/leaves.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_leaves", - "antarchy:peach_leaves" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/leg_armor.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/leg_armor.json deleted file mode 100644 index 02c0f22b..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/leg_armor.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ultimate_leggings", - "antarchy:nightmare_leggings", - "antarchy:blood_crystal_leggings", - "antarchy:primordial_leggings", - "antarchy:royal_guardian_leggings", - "antarchy:royal_assailant_leggings" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/logs.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/logs.json deleted file mode 100644 index 0c13e07c..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/logs.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_log", - "antarchy:ouranwood_wood", - "antarchy:duplicator_log", - "antarchy:mossy_ouranwood_log", - "antarchy:mossy_ouranwood_wood", - "antarchy:stripped_ouranwood_log", - "antarchy:stripped_ouranwood_wood", - "antarchy:peach_log", - "antarchy:peach_wood", - "antarchy:stripped_peach_log", - "antarchy:stripped_peach_wood", - "antarchy:nadir_log", - "antarchy:nadir_wood", - "antarchy:stripped_nadir_log", - "antarchy:stripped_nadir_wood", - "antarchy:royal_log", - "antarchy:royal_wood", - "antarchy:stripped_royal_log", - "antarchy:stripped_royal_wood", - "antarchy:truffalo_log", - "antarchy:truffalo_wood", - "antarchy:stripped_truffalo_log", - "antarchy:stripped_truffalo_wood" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/logs_that_burn.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/logs_that_burn.json deleted file mode 100644 index 0c13e07c..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/logs_that_burn.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_log", - "antarchy:ouranwood_wood", - "antarchy:duplicator_log", - "antarchy:mossy_ouranwood_log", - "antarchy:mossy_ouranwood_wood", - "antarchy:stripped_ouranwood_log", - "antarchy:stripped_ouranwood_wood", - "antarchy:peach_log", - "antarchy:peach_wood", - "antarchy:stripped_peach_log", - "antarchy:stripped_peach_wood", - "antarchy:nadir_log", - "antarchy:nadir_wood", - "antarchy:stripped_nadir_log", - "antarchy:stripped_nadir_wood", - "antarchy:royal_log", - "antarchy:royal_wood", - "antarchy:stripped_royal_log", - "antarchy:stripped_royal_wood", - "antarchy:truffalo_log", - "antarchy:truffalo_wood", - "antarchy:stripped_truffalo_log", - "antarchy:stripped_truffalo_wood" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/meat.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/meat.json deleted file mode 100644 index 6e665875..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/meat.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:raw_venison", - "antarchy:cooked_venison", - "antarchy:raw_bug_meat", - "antarchy:cooked_bug_meat" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/parrot_food.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/parrot_food.json deleted file mode 100644 index 48cf8010..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/parrot_food.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:corn_seeds" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/pickaxes.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/pickaxes.json deleted file mode 100644 index 5418fd4b..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/pickaxes.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ultimate_pickaxe" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/piglin_safe_armor.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/piglin_safe_armor.json deleted file mode 100644 index 697a3e6d..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/piglin_safe_armor.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:fallen_king_crown" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/planks.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/planks.json deleted file mode 100644 index 09b36e80..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/planks.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_planks", - "antarchy:peach_planks", - "antarchy:nadir_planks", - "antarchy:royal_planks", - "antarchy:truffalo_planks" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/sand.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/sand.json deleted file mode 100644 index d79aca3c..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/sand.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:dream_sand" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/saplings.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/saplings.json deleted file mode 100644 index c426a796..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/saplings.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_acorn", - "antarchy:peach_sapling", - "antarchy:nadir_sapling", - "antarchy:royal_sapling", - "antarchy:truffalo_sapling" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/shovels.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/shovels.json deleted file mode 100644 index 41d829cb..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/shovels.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ultimate_shovel" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/signs.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/signs.json deleted file mode 100644 index ab5622a1..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/signs.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_sign", - "antarchy:peach_sign", - "antarchy:nadir_sign", - "antarchy:royal_sign", - "antarchy:truffalo_sign" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/slabs.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/slabs.json deleted file mode 100644 index 211e4449..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/slabs.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:nyxite_slab", - "antarchy:polished_nyxite_slab", - "antarchy:nyxite_brick_slab", - "antarchy:shellstone_slab", - "antarchy:polished_shellstone_slab", - "antarchy:shellstone_brick_slab", - "antarchy:mossy_shellstone_brick_slab", - "antarchy:dream_sandstone_slab", - "antarchy:smooth_dream_sandstone_slab", - "antarchy:cut_dream_sandstone_slab", - "antarchy:typhonite_slab", - "antarchy:typhonite_brick_slab", - "antarchy:polished_typhonite_slab", - "antarchy:cut_uranium_slab", - "antarchy:cut_titanium_slab", - "antarchy:broodstone_slab", - "antarchy:polished_broodstone_slab", - "antarchy:broodstone_brick_slab", - "antarchy:myrmite_slab", - "antarchy:polished_myrmite_slab", - "antarchy:myrmite_brick_slab", - "antarchy:mossy_myrmite_brick_slab", - "antarchy:mossy_broodstone_brick_slab", - "antarchy:mossy_nyxite_brick_slab", - "antarchy:loam_brick_slab" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/slime_balls.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/slime_balls.json deleted file mode 100644 index 9d466faa..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/slime_balls.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:flytrap_goo" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/small_flowers.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/small_flowers.json deleted file mode 100644 index 0d084861..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/small_flowers.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:lotus", - "antarchy:spider_lily", - "antarchy:whirlflower", - "antarchy:duskbell" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/stairs.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/stairs.json deleted file mode 100644 index 93362172..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/stairs.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:nyxite_stairs", - "antarchy:nyxite_brick_stairs", - "antarchy:polished_nyxite_stairs", - "antarchy:shellstone_stairs", - "antarchy:polished_shellstone_stairs", - "antarchy:shellstone_brick_stairs", - "antarchy:mossy_shellstone_brick_stairs", - "antarchy:dream_sandstone_stairs", - "antarchy:smooth_dream_sandstone_stairs", - "antarchy:typhonite_stairs", - "antarchy:typhonite_brick_stairs", - "antarchy:polished_typhonite_stairs", - "antarchy:cut_uranium_stairs", - "antarchy:cut_titanium_stairs", - "antarchy:broodstone_stairs", - "antarchy:polished_broodstone_stairs", - "antarchy:broodstone_brick_stairs", - "antarchy:myrmite_stairs", - "antarchy:polished_myrmite_stairs", - "antarchy:myrmite_brick_stairs", - "antarchy:mossy_myrmite_brick_stairs", - "antarchy:mossy_broodstone_brick_stairs", - "antarchy:mossy_nyxite_brick_stairs", - "antarchy:loam_brick_stairs" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/stone_buttons.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/stone_buttons.json deleted file mode 100644 index bf507d60..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/stone_buttons.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "antarchy:polished_nyxite_button" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/swords.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/swords.json deleted file mode 100644 index 9cc688f6..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/swords.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ultimate_sword", - "antarchy:nightmare_sword", - "antarchy:basilisk_dagger", - "antarchy:big_bertha", - "antarchy:blood_crystal_katana", - "antarchy:mantis_claw", - "antarchy:royal_guardian_sword" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/tall_flowers.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/tall_flowers.json deleted file mode 100644 index 3b73dd8a..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/tall_flowers.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:camellia", - "antarchy:orange_milkweed", - "antarchy:pink_milkweed", - "antarchy:large_nadir_fern" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/trapdoors.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/trapdoors.json deleted file mode 100644 index 617b826c..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/trapdoors.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:uranium_trapdoor", - "antarchy:titanium_trapdoor", - "antarchy:nadir_trapdoor", - "antarchy:royal_trapdoor", - "antarchy:truffalo_trapdoor" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/trim_materials.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/trim_materials.json deleted file mode 100644 index ccedec20..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/trim_materials.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:blood_crystal_shard", - "antarchy:nightmare_scale", - "antarchy:uranium_ingot", - "antarchy:titanium_ingot", - "antarchy:bluestone" - ] -} - - diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/trimmable_armor.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/trimmable_armor.json deleted file mode 100644 index 1e349f4d..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/trimmable_armor.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "replace": true, - "values": [ - "#minecraft:chest_armor", - "#minecraft:leg_armor", - "#minecraft:foot_armor", - "minecraft:leather_helmet", - "minecraft:chainmail_helmet", - "minecraft:golden_helmet", - "minecraft:iron_helmet", - "minecraft:diamond_helmet", - "minecraft:netherite_helmet", - "minecraft:turtle_helmet", - "antarchy:ultimate_helmet", - "antarchy:nightmare_helmet", - "antarchy:primordial_helmet", - "antarchy:blood_crystal_helmet", - "antarchy:springy_boots", - "antarchy:tigers_eye_helmet", - "antarchy:tigers_eye_chestplate", - "antarchy:tigers_eye_leggings", - "antarchy:tigers_eye_boots", - "antarchy:royal_guardian_helmet", - "antarchy:royal_assailant_helmet" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/villager_plantable_seeds.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/villager_plantable_seeds.json deleted file mode 100644 index 48cf8010..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/villager_plantable_seeds.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:corn_seeds" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/vines.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/vines.json deleted file mode 100644 index 8b82d068..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/vines.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "minecraft:vine", - "antarchy:creepvine", - "antarchy:molting_vines", - "antarchy:spiraling_vines", - "antarchy:gorevine" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/walls.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/walls.json deleted file mode 100644 index f08bd19a..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/walls.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:nyxite_wall", - "antarchy:polished_nyxite_wall", - "antarchy:nyxite_brick_wall", - "antarchy:shellstone_wall", - "antarchy:polished_shellstone_wall", - "antarchy:shellstone_brick_wall", - "antarchy:mossy_shellstone_brick_wall", - "antarchy:dream_sandstone_wall", - "antarchy:typhonite_wall", - "antarchy:typhonite_brick_wall", - "antarchy:polished_typhonite_wall", - "antarchy:broodstone_wall", - "antarchy:polished_broodstone_wall", - "antarchy:broodstone_brick_wall", - "antarchy:myrmite_wall", - "antarchy:polished_myrmite_wall", - "antarchy:myrmite_brick_wall", - "antarchy:mossy_myrmite_brick_wall", - "antarchy:mossy_broodstone_brick_wall", - "antarchy:mossy_nyxite_brick_wall", - "antarchy:loam_brick_wall" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/wooden_buttons.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/wooden_buttons.json deleted file mode 100644 index 4c61cb72..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/wooden_buttons.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_button", - "antarchy:peach_button", - "antarchy:nadir_button", - "antarchy:royal_button", - "antarchy:truffalo_button" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/wooden_doors.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/wooden_doors.json deleted file mode 100644 index 9ebbfcaf..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/wooden_doors.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_door", - "antarchy:peach_door", - "antarchy:nadir_door", - "antarchy:royal_door", - "antarchy:truffalo_door" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/wooden_fences.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/wooden_fences.json deleted file mode 100644 index 05374ffd..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/wooden_fences.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_fence", - "antarchy:peach_fence", - "antarchy:nadir_fence", - "antarchy:royal_fence", - "antarchy:truffalo_fence" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/wooden_pressure_plates.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/wooden_pressure_plates.json deleted file mode 100644 index 080703cf..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/wooden_pressure_plates.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_pressure_plate", - "antarchy:peach_pressure_plate", - "antarchy:nadir_pressure_plate", - "antarchy:royal_pressure_plate", - "antarchy:truffalo_pressure_plate" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/wooden_slabs.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/wooden_slabs.json deleted file mode 100644 index 7ac806ce..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/wooden_slabs.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_slab", - "antarchy:peach_slab", - "antarchy:nadir_slab", - "antarchy:royal_slab", - "antarchy:truffalo_slab" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/wooden_stairs.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/wooden_stairs.json deleted file mode 100644 index 642565ad..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/wooden_stairs.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_stairs", - "antarchy:peach_stairs", - "antarchy:nadir_stairs", - "antarchy:royal_stairs", - "antarchy:truffalo_stairs" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/wooden_trapdoors.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/wooden_trapdoors.json deleted file mode 100644 index c96f6af0..00000000 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/wooden_trapdoors.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:ouranwood_trapdoor", - "antarchy:peach_trapdoor", - "antarchy:nadir_trapdoor", - "antarchy:royal_trapdoor", - "antarchy:truffalo_trapdoor" - ] -} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/axes.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/axes.json index fb4c4964..4660868c 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/axes.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/axes.json @@ -2,6 +2,7 @@ "replace": false, "values": [ "antarchy:ultimate_axe", - "antarchy:battle_axe" + "antarchy:battle_axe", + "antarchy:royal_assailant_battleaxe" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/boats.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/boats.json index fd04ca71..93632941 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/boats.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/boats.json @@ -3,6 +3,9 @@ "values": [ "antarchy:ouranwood_boat", "antarchy:ouranwood_chest_boat", - "antarchy:peach_boat" + "antarchy:peach_boat", + "antarchy:nadir_boat", + "antarchy:royal_boat", + "antarchy:truffalo_boat" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/chest_armor.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/chest_armor.json index bff31c6e..13753c55 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/chest_armor.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/chest_armor.json @@ -4,6 +4,9 @@ "antarchy:ultimate_chestplate", "antarchy:nightmare_chestplate", "antarchy:blood_crystal_chestplate", - "antarchy:primordial_chestplate" + "antarchy:primordial_chestplate", + "antarchy:royal_guardian_chestplate", + "antarchy:royal_assailant_chestplate", + "antarchy:tigers_eye_chestplate" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/chest_boats.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/chest_boats.json index 47f46f23..39099d4e 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/chest_boats.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/chest_boats.json @@ -2,6 +2,9 @@ "replace": false, "values": [ "antarchy:ouranwood_chest_boat", - "antarchy:peach_chest_boat" + "antarchy:peach_chest_boat", + "antarchy:nadir_chest_boat", + "antarchy:royal_chest_boat", + "antarchy:truffalo_chest_boat" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/doors.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/doors.json index e6ac4fd5..3bc68397 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/doors.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/doors.json @@ -2,6 +2,9 @@ "replace": false, "values": [ "antarchy:uranium_door", - "antarchy:titanium_door" + "antarchy:titanium_door", + "antarchy:nadir_door", + "antarchy:royal_door", + "antarchy:truffalo_door" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/durability.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/durability.json index a548fa26..77dca1c1 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/durability.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/durability.json @@ -8,6 +8,7 @@ "antarchy:ultimate_sword", "antarchy:battle_axe", "antarchy:big_bertha", + "antarchy:giant_frying_pan", "antarchy:nightmare_sword", "antarchy:basilisk_dagger", "antarchy:ultimate_bow", @@ -23,6 +24,7 @@ "antarchy:nightmare_boots", "antarchy:moggles", "antarchy:blood_crystal_katana", + "antarchy:blood_gods_blade", "antarchy:mantis_claw", "antarchy:krakens_grasp", "antarchy:blood_crystal_helmet", @@ -31,6 +33,28 @@ "antarchy:blood_crystal_boots", "antarchy:springy_boots", "antarchy:fallen_king_crown", - "antarchy:water_cannon" + "antarchy:water_cannon", + "antarchy:manticore_wings", + "antarchy:royal_guardian_helmet", + "antarchy:royal_guardian_chestplate", + "antarchy:royal_guardian_leggings", + "antarchy:royal_guardian_boots", + "antarchy:royal_assailant_helmet", + "antarchy:royal_assailant_chestplate", + "antarchy:royal_assailant_leggings", + "antarchy:royal_assailant_boots", + "antarchy:tigers_eye_helmet", + "antarchy:tigers_eye_chestplate", + "antarchy:tigers_eye_leggings", + "antarchy:tigers_eye_boots", + "antarchy:royal_guardian_sword", + "antarchy:royal_assailant_battleaxe", + "antarchy:royal_guardian_shield", + "antarchy:royal_assailant_staff", + "antarchy:portal_gun", + "antarchy:portal_gun_atlas", + "antarchy:portal_gun_p_body", + "antarchy:portal_gun_craisin", + "antarchy:portal_gun_laynce" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/elytra.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/elytra.json index 91e23a16..fd126cca 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/elytra.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/elytra.json @@ -2,6 +2,7 @@ "replace": false, "values": [ "minecraft:elytra", - "antarchy:brutalfly_elytra" + "antarchy:brutalfly_elytra", + "antarchy:manticore_wings" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/equippable.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/equippable.json index 6ea500f8..c9bbdf07 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/equippable.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/equippable.json @@ -5,6 +5,12 @@ "antarchy:ultimate_bow", "antarchy:ultimate_crossbow", "antarchy:brutalfly_elytra", - "antarchy:springy_boots" + "antarchy:springy_boots", + "antarchy:manticore_wings", + "antarchy:tigers_eye_helmet", + "antarchy:tigers_eye_chestplate", + "antarchy:tigers_eye_leggings", + "antarchy:tigers_eye_boots", + "antarchy:royal_assailant_battleaxe" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/fire_aspect.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/fire_aspect.json index 90c9e379..ca9a3031 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/fire_aspect.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/fire_aspect.json @@ -3,6 +3,7 @@ "values": [ "antarchy:ultimate_sword", "antarchy:big_bertha", - "antarchy:blood_crystal_katana" + "antarchy:blood_crystal_katana", + "antarchy:royal_guardian_sword" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/vanishing.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/vanishing.json index a6582f60..6fb5716b 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/vanishing.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/vanishing.json @@ -1,6 +1,8 @@ { "replace": false, "values": [ - "antarchy:springy_boots" + "antarchy:springy_boots", + "antarchy:royal_guardian_shield", + "antarchy:royal_assailant_staff" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/weapon.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/weapon.json index 9f3a72a3..c45c6077 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/weapon.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/weapon.json @@ -5,9 +5,13 @@ "antarchy:ultimate_axe", "antarchy:ultimate_sword", "antarchy:big_bertha", + "antarchy:giant_frying_pan", "antarchy:nightmare_sword", "antarchy:basilisk_dagger", "antarchy:blood_crystal_katana", - "antarchy:mantis_claw" + "antarchy:blood_gods_blade", + "antarchy:mantis_claw", + "antarchy:royal_guardian_sword", + "antarchy:royal_assailant_battleaxe" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/fence_gates.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/fence_gates.json index 738ac5c8..8ceb559b 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/fence_gates.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/fence_gates.json @@ -2,6 +2,9 @@ "replace": false, "values": [ "antarchy:ouranwood_fence_gate", - "antarchy:peach_fence_gate" + "antarchy:peach_fence_gate", + "antarchy:nadir_fence_gate", + "antarchy:royal_fence_gate", + "antarchy:truffalo_fence_gate" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/flowers.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/flowers.json index d794cdec..1d611adf 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/flowers.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/flowers.json @@ -5,6 +5,8 @@ "antarchy:lotus", "antarchy:orange_milkweed", "antarchy:pink_milkweed", - "antarchy:spider_lily" + "antarchy:spider_lily", + "antarchy:whirlflower", + "antarchy:duskbell" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/foot_armor.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/foot_armor.json index 8f7897a9..0ee75bd5 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/foot_armor.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/foot_armor.json @@ -5,6 +5,9 @@ "antarchy:nightmare_boots", "antarchy:blood_crystal_boots", "antarchy:primordial_boots", - "antarchy:springy_boots" + "antarchy:springy_boots", + "antarchy:royal_guardian_boots", + "antarchy:royal_assailant_boots", + "antarchy:tigers_eye_boots" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/hanging_signs.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/hanging_signs.json index 746c5071..c6cf2a18 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/hanging_signs.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/hanging_signs.json @@ -2,6 +2,9 @@ "replace": false, "values": [ "antarchy:ouranwood_hanging_sign", - "antarchy:peach_hanging_sign" + "antarchy:peach_hanging_sign", + "antarchy:nadir_hanging_sign", + "antarchy:royal_hanging_sign", + "antarchy:truffalo_hanging_sign" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/head_armor.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/head_armor.json index fad05ccc..2f98fdd1 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/head_armor.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/head_armor.json @@ -6,6 +6,9 @@ "antarchy:moggles", "antarchy:blood_crystal_helmet", "antarchy:fallen_king_crown", - "antarchy:primordial_helmet" + "antarchy:primordial_helmet", + "antarchy:royal_guardian_helmet", + "antarchy:royal_assailant_helmet", + "antarchy:tigers_eye_helmet" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/leg_armor.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/leg_armor.json index 04f5edee..250033d5 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/leg_armor.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/leg_armor.json @@ -4,6 +4,9 @@ "antarchy:ultimate_leggings", "antarchy:nightmare_leggings", "antarchy:blood_crystal_leggings", - "antarchy:primordial_leggings" + "antarchy:primordial_leggings", + "antarchy:royal_guardian_leggings", + "antarchy:royal_assailant_leggings", + "antarchy:tigers_eye_leggings" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/logs.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/logs.json index 5fc273ea..225e927d 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/logs.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/logs.json @@ -11,6 +11,18 @@ "antarchy:peach_log", "antarchy:peach_wood", "antarchy:stripped_peach_log", - "antarchy:stripped_peach_wood" + "antarchy:stripped_peach_wood", + "antarchy:nadir_log", + "antarchy:nadir_wood", + "antarchy:stripped_nadir_log", + "antarchy:stripped_nadir_wood", + "antarchy:royal_log", + "antarchy:royal_wood", + "antarchy:stripped_royal_log", + "antarchy:stripped_royal_wood", + "antarchy:truffalo_log", + "antarchy:truffalo_wood", + "antarchy:stripped_truffalo_log", + "antarchy:stripped_truffalo_wood" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/logs_that_burn.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/logs_that_burn.json index 5fc273ea..225e927d 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/logs_that_burn.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/logs_that_burn.json @@ -11,6 +11,18 @@ "antarchy:peach_log", "antarchy:peach_wood", "antarchy:stripped_peach_log", - "antarchy:stripped_peach_wood" + "antarchy:stripped_peach_wood", + "antarchy:nadir_log", + "antarchy:nadir_wood", + "antarchy:stripped_nadir_log", + "antarchy:stripped_nadir_wood", + "antarchy:royal_log", + "antarchy:royal_wood", + "antarchy:stripped_royal_log", + "antarchy:stripped_royal_wood", + "antarchy:truffalo_log", + "antarchy:truffalo_wood", + "antarchy:stripped_truffalo_log", + "antarchy:stripped_truffalo_wood" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/music_discs.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/music_discs.json new file mode 100644 index 00000000..857cedd1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/music_discs.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "antarchy:music_disc_underside", + "antarchy:music_disc_the_queen", + "antarchy:music_disc_verdance", + "antarchy:music_disc_grotesque" + ] +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/planks.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/planks.json index d98bff17..c8607907 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/planks.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/planks.json @@ -2,6 +2,9 @@ "replace": false, "values": [ "antarchy:ouranwood_planks", - "antarchy:peach_planks" + "antarchy:peach_planks", + "antarchy:nadir_planks", + "antarchy:royal_planks", + "antarchy:truffalo_planks" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/saplings.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/saplings.json index 5a06a14d..3b0b1679 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/saplings.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/saplings.json @@ -2,6 +2,9 @@ "replace": false, "values": [ "antarchy:ouranwood_acorn", - "antarchy:peach_sapling" + "antarchy:peach_sapling", + "antarchy:nadir_sapling", + "antarchy:royal_sapling", + "antarchy:truffalo_sapling" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/shovels.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/shovels.json index 41d829cb..012f8bc5 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/shovels.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/shovels.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ultimate_shovel" + "antarchy:ultimate_shovel", + "antarchy:giant_frying_pan" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/signs.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/signs.json index 6ec9e2a8..50550698 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/signs.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/signs.json @@ -2,6 +2,9 @@ "replace": false, "values": [ "antarchy:ouranwood_sign", - "antarchy:peach_sign" + "antarchy:peach_sign", + "antarchy:nadir_sign", + "antarchy:royal_sign", + "antarchy:truffalo_sign" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/slabs.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/slabs.json index 9a281d20..211e4449 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/slabs.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/slabs.json @@ -11,10 +11,20 @@ "antarchy:dream_sandstone_slab", "antarchy:smooth_dream_sandstone_slab", "antarchy:cut_dream_sandstone_slab", + "antarchy:typhonite_slab", + "antarchy:typhonite_brick_slab", + "antarchy:polished_typhonite_slab", "antarchy:cut_uranium_slab", "antarchy:cut_titanium_slab", "antarchy:broodstone_slab", "antarchy:polished_broodstone_slab", - "antarchy:broodstone_brick_slab" + "antarchy:broodstone_brick_slab", + "antarchy:myrmite_slab", + "antarchy:polished_myrmite_slab", + "antarchy:myrmite_brick_slab", + "antarchy:mossy_myrmite_brick_slab", + "antarchy:mossy_broodstone_brick_slab", + "antarchy:mossy_nyxite_brick_slab", + "antarchy:loam_brick_slab" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/slime_balls.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/slime_balls.json index 1c54cc36..9d466faa 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/slime_balls.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/slime_balls.json @@ -1,6 +1,6 @@ { "replace": false, "values": [ - "antarchy:triffid_goo" + "antarchy:flytrap_goo" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/small_flowers.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/small_flowers.json index ae42e249..0d084861 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/small_flowers.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/small_flowers.json @@ -2,6 +2,8 @@ "replace": false, "values": [ "antarchy:lotus", - "antarchy:spider_lily" + "antarchy:spider_lily", + "antarchy:whirlflower", + "antarchy:duskbell" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/stairs.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/stairs.json index df140f7a..93362172 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/stairs.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/stairs.json @@ -10,10 +10,20 @@ "antarchy:mossy_shellstone_brick_stairs", "antarchy:dream_sandstone_stairs", "antarchy:smooth_dream_sandstone_stairs", + "antarchy:typhonite_stairs", + "antarchy:typhonite_brick_stairs", + "antarchy:polished_typhonite_stairs", "antarchy:cut_uranium_stairs", "antarchy:cut_titanium_stairs", "antarchy:broodstone_stairs", "antarchy:polished_broodstone_stairs", - "antarchy:broodstone_brick_stairs" + "antarchy:broodstone_brick_stairs", + "antarchy:myrmite_stairs", + "antarchy:polished_myrmite_stairs", + "antarchy:myrmite_brick_stairs", + "antarchy:mossy_myrmite_brick_stairs", + "antarchy:mossy_broodstone_brick_stairs", + "antarchy:mossy_nyxite_brick_stairs", + "antarchy:loam_brick_stairs" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/swords.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/swords.json index bb811eef..39afce48 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/swords.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/swords.json @@ -5,7 +5,10 @@ "antarchy:nightmare_sword", "antarchy:basilisk_dagger", "antarchy:big_bertha", + "antarchy:giant_frying_pan", "antarchy:blood_crystal_katana", - "antarchy:mantis_claw" + "antarchy:blood_gods_blade", + "antarchy:mantis_claw", + "antarchy:royal_guardian_sword" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/tall_flowers.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/tall_flowers.json index cf2db3ab..3b73dd8a 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/tall_flowers.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/tall_flowers.json @@ -3,6 +3,7 @@ "values": [ "antarchy:camellia", "antarchy:orange_milkweed", - "antarchy:pink_milkweed" + "antarchy:pink_milkweed", + "antarchy:large_nadir_fern" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/trapdoors.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/trapdoors.json index 174efdac..2989e5e0 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/trapdoors.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/trapdoors.json @@ -2,6 +2,9 @@ "replace": false, "values": [ "antarchy:uranium_trapdoor", - "antarchy:titanium_trapdoor" + "antarchy:titanium_trapdoor", + "antarchy:nadir_trapdoor", + "antarchy:royal_trapdoor", + "antarchy:truffalo_trapdoor" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/trim_materials.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/trim_materials.json index b29bad3b..934bda60 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/trim_materials.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/trim_materials.json @@ -5,9 +5,6 @@ "antarchy:nightmare_scale", "antarchy:uranium_ingot", "antarchy:titanium_ingot", - "antarchy:bluestone", - "antarchy:tigers_eye" + "antarchy:bluestone" ] } - - diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/trimmable_armor.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/trimmable_armor.json index 575979e7..9e86ead2 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/trimmable_armor.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/trimmable_armor.json @@ -1,9 +1,18 @@ { "replace": true, "values": [ - "#minecraft:chest_armor", - "#minecraft:leg_armor", - "#minecraft:foot_armor", + { + "id": "#minecraft:chest_armor", + "required": false + }, + { + "id": "#minecraft:leg_armor", + "required": false + }, + { + "id": "#minecraft:foot_armor", + "required": false + }, "minecraft:leather_helmet", "minecraft:chainmail_helmet", "minecraft:golden_helmet", @@ -15,6 +24,12 @@ "antarchy:nightmare_helmet", "antarchy:primordial_helmet", "antarchy:blood_crystal_helmet", - "antarchy:springy_boots" + "antarchy:springy_boots", + "antarchy:tigers_eye_helmet", + "antarchy:tigers_eye_chestplate", + "antarchy:tigers_eye_leggings", + "antarchy:tigers_eye_boots", + "antarchy:royal_guardian_helmet", + "antarchy:royal_assailant_helmet" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/vines.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/vines.json index f48d67f2..8b82d068 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/vines.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/vines.json @@ -3,6 +3,8 @@ "values": [ "minecraft:vine", "antarchy:creepvine", - "antarchy:molting_vines" + "antarchy:molting_vines", + "antarchy:spiraling_vines", + "antarchy:gorevine" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/walls.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/walls.json index 25573f07..f08bd19a 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/walls.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/walls.json @@ -9,8 +9,18 @@ "antarchy:shellstone_brick_wall", "antarchy:mossy_shellstone_brick_wall", "antarchy:dream_sandstone_wall", + "antarchy:typhonite_wall", + "antarchy:typhonite_brick_wall", + "antarchy:polished_typhonite_wall", "antarchy:broodstone_wall", "antarchy:polished_broodstone_wall", - "antarchy:broodstone_brick_wall" + "antarchy:broodstone_brick_wall", + "antarchy:myrmite_wall", + "antarchy:polished_myrmite_wall", + "antarchy:myrmite_brick_wall", + "antarchy:mossy_myrmite_brick_wall", + "antarchy:mossy_broodstone_brick_wall", + "antarchy:mossy_nyxite_brick_wall", + "antarchy:loam_brick_wall" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/wooden_buttons.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/wooden_buttons.json index 1d626cef..b2f8b7db 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/wooden_buttons.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/wooden_buttons.json @@ -2,6 +2,9 @@ "replace": false, "values": [ "antarchy:ouranwood_button", - "antarchy:peach_button" + "antarchy:peach_button", + "antarchy:nadir_button", + "antarchy:royal_button", + "antarchy:truffalo_button" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/wooden_doors.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/wooden_doors.json index e4ebd50e..eaac7749 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/wooden_doors.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/wooden_doors.json @@ -2,6 +2,9 @@ "replace": false, "values": [ "antarchy:ouranwood_door", - "antarchy:peach_door" + "antarchy:peach_door", + "antarchy:nadir_door", + "antarchy:royal_door", + "antarchy:truffalo_door" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/wooden_fences.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/wooden_fences.json index f1b5eb5a..b70fa6aa 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/wooden_fences.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/wooden_fences.json @@ -2,6 +2,9 @@ "replace": false, "values": [ "antarchy:ouranwood_fence", - "antarchy:peach_fence" + "antarchy:peach_fence", + "antarchy:nadir_fence", + "antarchy:royal_fence", + "antarchy:truffalo_fence" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/wooden_pressure_plates.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/wooden_pressure_plates.json index 7f3d5149..4465682e 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/wooden_pressure_plates.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/wooden_pressure_plates.json @@ -2,6 +2,9 @@ "replace": false, "values": [ "antarchy:ouranwood_pressure_plate", - "antarchy:peach_pressure_plate" + "antarchy:peach_pressure_plate", + "antarchy:nadir_pressure_plate", + "antarchy:royal_pressure_plate", + "antarchy:truffalo_pressure_plate" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/wooden_slabs.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/wooden_slabs.json index 9b0b8371..f2dfda53 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/wooden_slabs.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/wooden_slabs.json @@ -2,6 +2,9 @@ "replace": false, "values": [ "antarchy:ouranwood_slab", - "antarchy:peach_slab" + "antarchy:peach_slab", + "antarchy:nadir_slab", + "antarchy:royal_slab", + "antarchy:truffalo_slab" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/wooden_stairs.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/wooden_stairs.json index 5d419448..23b8838b 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/wooden_stairs.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/wooden_stairs.json @@ -2,6 +2,9 @@ "replace": false, "values": [ "antarchy:ouranwood_stairs", - "antarchy:peach_stairs" + "antarchy:peach_stairs", + "antarchy:nadir_stairs", + "antarchy:royal_stairs", + "antarchy:truffalo_stairs" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/wooden_trapdoors.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/wooden_trapdoors.json index df34c0e6..c3e54b36 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/wooden_trapdoors.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/wooden_trapdoors.json @@ -2,6 +2,9 @@ "replace": false, "values": [ "antarchy:ouranwood_trapdoor", - "antarchy:peach_trapdoor" + "antarchy:peach_trapdoor", + "antarchy:nadir_trapdoor", + "antarchy:royal_trapdoor", + "antarchy:truffalo_trapdoor" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/wool.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/wool.json new file mode 100644 index 00000000..5035174d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/wool.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "antarchy:white_truffalo_tuft", + "antarchy:orange_truffalo_tuft", + "antarchy:magenta_truffalo_tuft", + "antarchy:light_blue_truffalo_tuft", + "antarchy:yellow_truffalo_tuft", + "antarchy:lime_truffalo_tuft", + "antarchy:pink_truffalo_tuft", + "antarchy:gray_truffalo_tuft", + "antarchy:light_gray_truffalo_tuft", + "antarchy:cyan_truffalo_tuft", + "antarchy:purple_truffalo_tuft", + "antarchy:blue_truffalo_tuft", + "antarchy:brown_truffalo_tuft", + "antarchy:green_truffalo_tuft", + "antarchy:red_truffalo_tuft", + "antarchy:black_truffalo_tuft" + ] +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/point_of_interest_type/acquirable_job_site.json b/common-1.20.1/src/main/resources/data/minecraft/tags/point_of_interest_type/acquirable_job_site.json new file mode 100644 index 00000000..36697604 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/point_of_interest_type/acquirable_job_site.json @@ -0,0 +1,10 @@ +{ + "replace": false, + "values": [ + "antarchy:pest_control", + { + "id": "antarchy:computer", + "required": false + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/scorpion_whip_immune.json b/common-1.20.1/src/main/resources/data/minecraft/tags/worldgen/biome/has_structure/bastion_remnant.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/scorpion_whip_immune.json rename to common-1.20.1/src/main/resources/data/minecraft/tags/worldgen/biome/has_structure/bastion_remnant.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/duct_tape_blacklist.json b/common-1.20.1/src/main/resources/data/minecraft/tags/worldgen/biome/has_structure/desert_pyramid.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/tags/item/duct_tape_blacklist.json rename to common-1.20.1/src/main/resources/data/minecraft/tags/worldgen/biome/has_structure/desert_pyramid.json diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/termite_foods.json b/common-1.20.1/src/main/resources/data/minecraft/tags/worldgen/biome/has_structure/end_city.json similarity index 100% rename from common-1.20.1/src/main/resources/data/antarchy/tags/item/termite_foods.json rename to common-1.20.1/src/main/resources/data/minecraft/tags/worldgen/biome/has_structure/end_city.json diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/config/AntarchyConfigCatalog.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/config/AntarchyConfigCatalog.java index 37c6788a..c1e8e88a 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/config/AntarchyConfigCatalog.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/config/AntarchyConfigCatalog.java @@ -183,7 +183,6 @@ public final class AntarchyConfigCatalog { || name.startsWith("nightmareSword") || name.startsWith("basiliskDagger") || name.startsWith("squidzooka") - || name.equals("invertProjectilesFromInvertedPlayers") || name.startsWith("gravityGun") || name.startsWith("critterCage") || name.equals("potentNyxiteInvertedDurationSeconds") diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java index 03bc5da6..560a53d0 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java @@ -156,7 +156,6 @@ public final class AntarchySettings { private static double rpoLauncherExplosionDamage = 34.0D; private static double rpoLauncherExplosionRadius = 14.0D; private static double sizeRayCooldownSeconds = 1.0D; - private static boolean invertProjectilesFromInvertedPlayers = false; private static boolean gravityGunEnabled = true; private static boolean gravityGunBlocksEnabled = true; private static boolean gravityGunEntitiesEnabled = true; @@ -1211,10 +1210,6 @@ public final class AntarchySettings { return sizeRayCooldownSeconds; } - public static boolean invertProjectilesFromInvertedPlayers() { - return invertProjectilesFromInvertedPlayers; - } - public static boolean gravityGunEnabled() { return gravityGunEnabled; } @@ -1814,10 +1809,6 @@ public final class AntarchySettings { sizeRayCooldownSeconds = value; } - public static void setInvertProjectilesFromInvertedPlayers(boolean value) { - invertProjectilesFromInvertedPlayers = value; - } - public static void setGravityGunEnabled(boolean value) { gravityGunEnabled = value; } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java index 34c6a62e..9d47b1a2 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java @@ -76,6 +76,8 @@ public final class AntarchyTags { public static final TagKey> SIZE_CHANGING_IMMUNE = TagKey.create(Registries.ENTITY_TYPE, id("size_changing_immune")); public static final TagKey> CRITTER_CAGE_BLACKLIST = TagKey.create(Registries.ENTITY_TYPE, id("critter_cage_blacklist")); public static final TagKey> PARALYSIS_IMMUNE = TagKey.create(Registries.ENTITY_TYPE, id("paralysis_immune")); + public static final TagKey> UNDERSIDE_CEILING_SPAWNERS = TagKey.create(Registries.ENTITY_TYPE, id("underside_ceiling_spawners")); + public static final TagKey> UNDERSIDE_CEILING_SHORT_GAP = TagKey.create(Registries.ENTITY_TYPE, id("underside_ceiling_short_gap")); public static final TagKey> HUSHWEED_TARGETS = TagKey.create(Registries.ENTITY_TYPE, id("hushweed_targets")); public static final TagKey> FLYTRAP_PREY = TagKey.create(Registries.ENTITY_TYPE, id("flytrap_prey")); public static final TagKey> STINKY_REPELLED_HOSTILES = TagKey.create(Registries.ENTITY_TYPE, id("stinky_repelled_hostiles")); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/creative/CreativeTabContents.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/creative/CreativeTabContents.java index b6890182..25e3d9b5 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/creative/CreativeTabContents.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/creative/CreativeTabContents.java @@ -650,7 +650,7 @@ public final class CreativeTabContents { for (String potionPath : ANTARCHY_POTION_FAMILIES) { acceptPotionFamily(output, potionPath); } - for (String diskId : List.of("antarchy:introduction", "antarchy:toreterror_arena", "antarchy:high_fructose_corn_syrup", + for (String diskId : List.of("antarchy:toreterror_arena", "antarchy:high_fructose_corn_syrup", "antarchy:elythia", "antarchy:flying_squirrel", "antarchy:brutalfly", "antarchy:rainbow_ant", "antarchy:kraken", "antarchy:cavaryn", "antarchy:hercules_beetle", "antarchy:thoraxis", "antarchy:temporal_fields", "antarchy:bloodglass", "antarchy:vortex")) { ItemStack disk = new ItemStack(com.craisinlord.antos.content.AntOSObjects.FLOPPY_DISK.get()); disk.set(com.craisinlord.antos.content.AntOSObjects.FLOPPY_DISK_COMPONENT.get(), ResourceLocation.parse(diskId)); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/EmperorScorpionEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/EmperorScorpionEntity.java index aab28e06..50797387 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/EmperorScorpionEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/EmperorScorpionEntity.java @@ -167,7 +167,7 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable net.minecraft.world.entity.SpawnGroupData spawnData) { ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.emperorScorpionHealth()); - if (ThoraxisUndersideManager.shouldSpawnInvertedOnDreamSand(level, this.blockPosition())) { + if (ThoraxisUndersideManager.isUndersideCeilingSpot(level, this.blockPosition(), this.getType())) { ThoraxisUndersideManager.applyUndersideInversion(this); } return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); @@ -245,18 +245,12 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { if (level.getDifficulty() == Difficulty.PEACEFUL) { return false; } - if (ThoraxisUndersideManager.shouldSpawnInvertedOnDreamSand(level, pos)) { + if (ThoraxisUndersideManager.isUndersideCeilingSpawn(entityType, level, pos)) { return true; } - // Dream Dunes can use Dream Sandstone as the ceiling surface too. Keep - // the Emperor restricted to a supported underside position, but do - // not require the surface to be the narrower Dream Sand variant. if (pos.getY() < 0 && level.getBiome(pos).is(DREAM_DUNES) && level.isEmptyBlock(pos)) { BlockState below = level.getBlockState(pos.below()); - BlockState above = level.getBlockState(pos.above()); - boolean floorSupport = !below.is(Blocks.BEDROCK) && below.isFaceSturdy(level, pos.below(), Direction.UP); - boolean ceilingSupport = !above.is(Blocks.BEDROCK) && above.isFaceSturdy(level, pos.above(), Direction.DOWN); - return floorSupport || ceilingSupport; + return !below.is(Blocks.BEDROCK) && below.isFaceSturdy(level, pos.below(), Direction.UP); } return Monster.checkMonsterSpawnRules(entityType, level, spawnReason, pos, random); } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ManticoreEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ManticoreEntity.java index 436dc728..e2b7c464 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ManticoreEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ManticoreEntity.java @@ -112,15 +112,15 @@ public class ManticoreEntity extends Monster implements GeoEntity { || spawnReason == MobSpawnType.MOB_SUMMONED) { return true; } - if (pos.getY() >= 0) { + if (pos.getY() >= 0 || level.getDifficulty() == Difficulty.PEACEFUL) { return false; } + if (ThoraxisUndersideManager.isUndersideCeilingSpawn(type, level, pos)) { + return true; + } BlockState below = level.getBlockState(pos.below()); - BlockState above = level.getBlockState(pos.above()); boolean floorSupport = !below.is(Blocks.BEDROCK) && below.isFaceSturdy(level, pos.below(), Direction.UP); - boolean ceilingSupport = !above.is(Blocks.BEDROCK) && above.isFaceSturdy(level, pos.above(), Direction.DOWN); - return level.getDifficulty() != Difficulty.PEACEFUL - && (floorSupport || ceilingSupport) + return floorSupport && level.isEmptyBlock(pos) && Monster.checkMonsterSpawnRules(type, level, spawnReason, pos, random); } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ScorpionEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ScorpionEntity.java index 156b64fb..f2189be2 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ScorpionEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ScorpionEntity.java @@ -117,7 +117,7 @@ public class ScorpionEntity extends Monster implements GeoEntity { if (pos.getY() >= 0 && level.getBiome(pos).is(DREAM_DUNES) && random.nextBoolean()) { return false; } - if (ThoraxisUndersideManager.shouldSpawnInvertedOnDreamSand(level, pos)) { + if (ThoraxisUndersideManager.isUndersideCeilingSpawn(entityType, level, pos)) { return level.getDifficulty() != Difficulty.PEACEFUL; } return level.getDifficulty() != Difficulty.PEACEFUL @@ -146,7 +146,7 @@ public class ScorpionEntity extends Monster implements GeoEntity { public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnType, @Nullable SpawnGroupData spawnGroupData) { this.assignRandomTextureVariant(); ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.scorpionHealth()); - if (ThoraxisUndersideManager.shouldSpawnInvertedOnDreamSand(level, this.blockPosition())) { + if (ThoraxisUndersideManager.isUndersideCeilingSpot(level, this.blockPosition(), this.getType())) { ThoraxisUndersideManager.applyUndersideInversion(this); } return super.finalizeSpawn(level, difficulty, spawnType, spawnGroupData); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/trades/ComputerScientistTradeManager.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/trades/ComputerScientistTradeManager.java index 5fe7a8e5..db692bac 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/trades/ComputerScientistTradeManager.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/trades/ComputerScientistTradeManager.java @@ -25,7 +25,7 @@ public final class ComputerScientistTradeManager extends SimpleJsonResourceReloa private static final Gson GSON = new Gson(); private static final String DIRECTORY = "computer_scientist_trades"; private static final List GENERAL_DISKS = List.of( - id("introduction"), id("high_fructose_corn_syrup"), + id("high_fructose_corn_syrup"), id("elythia"), id("flying_squirrel"), id("rainbow_ant"), id("kraken"), id("cavaryn"), id("thoraxis"), id("temporal_fields"), id("bloodglass"), id("vortex")); private static volatile List loadedTrades = List.of(); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisUndersideManager.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisUndersideManager.java index 7834cd17..3eedb2a8 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisUndersideManager.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisUndersideManager.java @@ -2,8 +2,8 @@ package com.craisinlord.antarchy.content.worldgen.thoraxis; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.advancement.AntarchyAdvancementTriggers; -import com.craisinlord.antarchy.content.block.DreamSandBlock; import com.craisinlord.anthology.gravity.GravityApi; import com.craisinlord.anthology.gravity.GravityDirection; import com.craisinlord.anthology.gravity.GravityTransition; @@ -20,11 +20,13 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffects; import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.ServerLevelAccessor; import net.minecraft.world.level.Level; +import net.minecraft.world.level.NaturalSpawner; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; @@ -52,6 +54,8 @@ public final class ThoraxisUndersideManager { private static final int UNDERSIDE_ENTRY_BORDER_Y = GRAVITY_FLIP_Y - 7; private static final int FRESH_ENTRY_DELAY_TICKS = 20; private static final int ENTRY_SLOW_FALL_DURATION_TICKS = 300; + private static final double CEILING_SPAWN_GAP = 1.75D; + private static final double SHORT_CEILING_SPAWN_GAP = 1.25D; private static final Map STATES = new WeakHashMap<>(); private ThoraxisUndersideManager() { @@ -346,25 +350,38 @@ public final class ThoraxisUndersideManager { } } - public static boolean shouldSpawnInvertedOnDreamSand(ServerLevelAccessor level, BlockPos pos) { + public static boolean isUndersideCeilingSpawn(EntityType type, ServerLevelAccessor level, BlockPos pos) { + return type.is(AntarchyTags.Entities.UNDERSIDE_CEILING_SPAWNERS) && isUndersideCeilingSpot(level, pos, type); + } + + public static boolean isUndersideCeilingSpot(ServerLevelAccessor level, BlockPos pos, EntityType type) { if (!isThoraxis(level.getLevel()) || pos.getY() >= GRAVITY_FLIP_Y) { return false; } BlockState bodyState = level.getBlockState(pos); - if (!bodyState.isAir() && !bodyState.getCollisionShape(level, pos).isEmpty()) { + BlockPos belowPos = pos.below(); + BlockState belowState = level.getBlockState(belowPos); + if (!NaturalSpawner.isValidEmptySpawnBlock(level, pos, bodyState, bodyState.getFluidState(), type) + || !NaturalSpawner.isValidEmptySpawnBlock(level, belowPos, belowState, belowState.getFluidState(), type) + || belowState.isFaceSturdy(level, belowPos, Direction.UP)) { return false; } - BlockPos supportPos = pos.above(); - BlockState supportState = level.getBlockState(supportPos); - if (!(supportState.getBlock() instanceof DreamSandBlock)) { - return false; - } + BlockPos ceilingPos = pos.above(); + BlockState ceilingState = level.getBlockState(ceilingPos); + return ceilingState.isFaceSturdy(level, ceilingPos, Direction.DOWN) + && ceilingState.isValidSpawn(level, ceilingPos, type); + } - return supportState.isFaceSturdy(level, supportPos, Direction.DOWN) - && level.getFluidState(pos).isEmpty() - && level.isEmptyBlock(pos.below()); + public static double ceilingSpawnFeetY(EntityType type, BlockPos pos, double height) { + double gap = type.is(AntarchyTags.Entities.UNDERSIDE_CEILING_SHORT_GAP) ? SHORT_CEILING_SPAWN_GAP : CEILING_SPAWN_GAP; + return pos.getY() + 1.0D - gap - height; + } + + public static AABB ceilingSpawnBounds(EntityType type, BlockPos pos) { + double feetY = ceilingSpawnFeetY(type, pos, type.getHeight()); + return type.getSpawnAABB(pos.getX() + 0.5D, feetY, pos.getZ() + 0.5D).setMaxY(pos.getY() + 1.0D); } public static boolean isThoraxis(Level level) { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/ThoraxisCeilingSpawnMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/ThoraxisCeilingSpawnMixin.java new file mode 100644 index 00000000..c98e31f6 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/ThoraxisCeilingSpawnMixin.java @@ -0,0 +1,58 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.llamalad7.mixinextras.sugar.Local; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.NaturalSpawner; +import net.minecraft.world.level.biome.MobSpawnSettings; +import net.minecraft.world.phys.AABB; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(NaturalSpawner.class) +public abstract class ThoraxisCeilingSpawnMixin { + @WrapOperation( + method = "isValidSpawnPostitionForType", + at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/SpawnPlacements;isSpawnPositionOk(Lnet/minecraft/world/entity/EntityType;Lnet/minecraft/world/level/LevelReader;Lnet/minecraft/core/BlockPos;)Z") + ) + private static boolean antarchy$allowCeilingPlacement(EntityType type, LevelReader level, BlockPos pos, Operation original) { + if (level instanceof ServerLevel serverLevel && ThoraxisUndersideManager.isUndersideCeilingSpawn(type, serverLevel, pos)) { + return true; + } + return original.call(type, level, pos); + } + + @WrapOperation( + method = "isValidSpawnPostitionForType", + at = @At(value = "INVOKE", target = "Lnet/minecraft/server/level/ServerLevel;noCollision(Lnet/minecraft/world/phys/AABB;)Z") + ) + private static boolean antarchy$checkCeilingSpawnBounds(ServerLevel level, AABB bounds, Operation original, + @Local(argsOnly = true) MobSpawnSettings.SpawnerData spawnerData, + @Local(argsOnly = true) BlockPos.MutableBlockPos pos) { + if (ThoraxisUndersideManager.isUndersideCeilingSpawn(spawnerData.type, level, pos)) { + return original.call(level, ThoraxisUndersideManager.ceilingSpawnBounds(spawnerData.type, pos)); + } + return original.call(level, bounds); + } + + @WrapOperation( + method = "spawnCategoryForPosition(Lnet/minecraft/world/entity/MobCategory;Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/world/level/chunk/ChunkAccess;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/NaturalSpawner$SpawnPredicate;Lnet/minecraft/world/level/NaturalSpawner$AfterSpawnCallback;)V", + at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Mob;moveTo(DDDFF)V") + ) + private static void antarchy$placeCeilingSpawn(Mob mob, double x, double y, double z, float yRot, float xRot, Operation original, + @Local(argsOnly = true) ServerLevel level) { + BlockPos pos = BlockPos.containing(x, y, z); + if (ThoraxisUndersideManager.isUndersideCeilingSpawn(mob.getType(), level, pos)) { + original.call(mob, x, ThoraxisUndersideManager.ceilingSpawnFeetY(mob.getType(), pos, mob.getBbHeight()), z, yRot, xRot); + ThoraxisUndersideManager.applyUndersideInversion(mob); + return; + } + original.call(mob, x, y, z, yRot, xRot); + } +} diff --git a/common-1.21.1/src/main/resources/antarchy-common.mixins.json b/common-1.21.1/src/main/resources/antarchy-common.mixins.json index bb98239a..f3bd8cd7 100644 --- a/common-1.21.1/src/main/resources/antarchy-common.mixins.json +++ b/common-1.21.1/src/main/resources/antarchy-common.mixins.json @@ -33,6 +33,7 @@ "LivingEntityJumpingAccessor", "CommandedMobMixin", "UndertrialSpawnPlacementsMixin", + "ThoraxisCeilingSpawnMixin", "LivingEntityRoyalEffectsMixin", "JudgmentMarkEntityMixin", "RoyalJudgmentCombatMixin", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/en_us.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/en_us.json index 4a366793..b72cd7c6 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/en_us.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/en_us.json @@ -1513,7 +1513,6 @@ ,"guide.antarchy.category.cavaryn": "CAVARYN" ,"guide.antarchy.missing_title": "CORRUPTED FILE" ,"guide.antarchy.missing_disk_title": "UNREADABLE DISK" - ,"guide.antarchy.disk.introduction.title": "INITIAL BOOT NOTES" ,"guide.antarchy.disk.toreterror_arena.title": "TORETERROR ARENA DATA" ,"guide.antarchy.disk.high_fructose_corn_syrup.title": "CORN SYRUP DATA" ,"guide.antarchy.disk.elythia.title": "ELYTHIA ACCESS RECORD" @@ -1525,9 +1524,6 @@ ,"guide.antarchy.disk.temporal_fields.title": "TEMPORAL MANIPULATION" ,"guide.antarchy.disk.bloodglass.title": "BLOODGLASS SURVIVAL NOTES" ,"guide.antarchy.disk.vortex.title": "VORTEX" - ,"guide.antarchy.entry.introduction.title": "SYSTEM INITIALIZED" - ,"guide.antarchy.entry.introduction.subtitle": "A machine for remembering what should have stayed forgotten." - ,"guide.antarchy.entry.introduction.description": "Insert recovered floppy disks to expand this archive." ,"guide.antarchy.entry.toreterror.title": "Toreterror" ,"guide.antarchy.entry.toreterror_arena.subtitle": "Elythia Ocean boss record" ,"guide.antarchy.entry.toreterror_arena.description": "A powerful creature of the Testudines taxonomic order. It dwells in a coliseum somewhere in an Elythia Ocean; this archive can trace the nearest one for you, and its coordinates are listed below." @@ -1538,10 +1534,27 @@ ,"guide.antarchy.entry.hercules_beetle.description": "An enormous insect dwelling in Cavaryn. It is capable of a very powerful charge that can, and will, displace terrain." ,"guide.antarchy.entry.hercules_beetle.description2": "Aggressive on sight and omnivorous." ,"guide.antarchy.entry.hercules_beetle.description3": "Once injured in combat, the beast can be pacified with Broodfruit. When pacified, it bonds with the one who fed it, almost as if it respects them after the battle." - ,"guide.antarchy.entry.elythia.title": "Elythia" - ,"guide.antarchy.entry.elythia.subtitle": "Dimension and portal access record" - ,"guide.antarchy.entry.elythia.description": "Right-click a Brown Ant to teleport there directly, or sacrifice one inside a Mossy Ouranwood frame to light a permanent, reusable portal." - ,"guide.antarchy.entry.elythia.description2": "Cloud Sea only forms high in the sky, and only in about one in five regions up there. Elythia Ocean is where Toreterror Arenas are found." + ,"guide.antarchy.entry.brown_ant.title": "Brown Ant" + ,"guide.antarchy.entry.brown_ant.subtitle": "The way to Elythia" + ,"guide.antarchy.entry.brown_ant.description": "Right-click a Brown Ant and it carries you to Elythia. Sacrifice one inside a Mossy Ouranwood frame and you get a portal that stays lit for good." + ,"guide.antarchy.entry.brown_ant.description2": "Their nests turn up in Overworld forests, taigas and plains, and in Elythia. Brown Ants are harmless, and they breed with sugar." + ,"guide.antarchy.entry.brown_ant.description3": "Cloud Sea only forms high in the sky, and only in about one region in five. Toreterror Arenas are out in the Elythia Ocean." + ,"guide.antarchy.entry.termite.title": "Termite" + ,"guide.antarchy.entry.termite.subtitle": "The way to Cavaryn" + ,"guide.antarchy.entry.termite.description": "Right-click a Termite to travel to Cavaryn, or sacrifice one inside a Myrmite frame to light a permanent portal." + ,"guide.antarchy.entry.termite.description2": "Termites nest in Overworld forests, taigas and plains, and in Cavaryn itself. They strip and eat wood near them, so keep them away from wooden builds. They back away from torchlight and breed with wood." + ,"guide.antarchy.entry.termite.description3": "In Cavaryn, staying in one spot, killing hostiles or breaking eggs draws attention. Push it far enough and a swarm finds you. Moving on lets the area cool down." + ,"guide.antarchy.entry.termite.description4": "Glowcap, Biowart, Moleworm, Wormy and Brooding Tunnel regions escalate differently. In most of them the last wave of a swarm brings a Hercules Beetle." + ,"guide.antarchy.entry.red_ant.title": "Red Ant" + ,"guide.antarchy.entry.red_ant.subtitle": "The way to Thoraxis" + ,"guide.antarchy.entry.red_ant.description": "Right-click a Red Ant to travel to Thoraxis, or sacrifice one inside a Nyxite frame to light a portal. They nest in the Nether and attack on sight." + ,"guide.antarchy.entry.red_ant.description2": "Thoraxis doesn't follow the rules of physics. You'll find gravity specifically is very wrong there, even inverted. It also has Antiwater, a liquid that flows upwards, and Antiwater geysers." + ,"guide.antarchy.entry.red_ant.description3": "Bluestone is like Redstone but upside down. It can even be used to make upside down rails." + ,"guide.antarchy.entry.red_ant.description4": "Dimensional tears come in linked pairs. Step into one and who knows how and where you'll emerge." + ,"guide.antarchy.gallery.elythia": "Seen in Elythia" + ,"guide.antarchy.gallery.cavaryn": "Seen in Cavaryn" + ,"guide.antarchy.gallery.thoraxis": "Seen in Thoraxis" + ,"guide.antarchy.gallery.drops": "Drops" ,"guide.antarchy.entry.flying_squirrel.title": "Flying Squirrel" ,"guide.antarchy.entry.flying_squirrel.subtitle": "Elythia companion record" ,"guide.antarchy.entry.flying_squirrel.description": "You wanna get nuts? Let’s get nuts." @@ -1558,18 +1571,6 @@ ,"guide.antarchy.entry.glimmer.description5": "Apple Cow: hunger drains 25 percent slower, and it grants a burst of Saturation and Regeneration when your food runs low. Ouranwood Deer: Speed I, and it knocks back hostile mobs you sprint into." ,"guide.antarchy.entry.glimmer.description6": "Frog: Jump Boost I, and it can devour a nearby hostile mob, growing bigger and stronger for a while. Ant: slightly longer attack reach, and a solid hit on something large grants a burst of Strength II." ,"guide.antarchy.entry.glimmer.description7": "Elka: Bloodglass Ward II. When one of those ward hearts breaks, it shatters into a shockwave around you." - ,"guide.antarchy.entry.cavaryn.title": "Cavaryn" - ,"guide.antarchy.entry.cavaryn.subtitle": "Dimension and portal access record" - ,"guide.antarchy.entry.cavaryn.description": "Right-click a Termite to teleport there directly, or sacrifice one inside a Myrmite frame to light a permanent, reusable portal." - ,"guide.antarchy.entry.cavaryn.description2": "Staying in one spot, killing hostiles, or breaking eggs raises local mob attention. Push it far enough and a swarm finds you; moving on lets an area cool down." - ,"guide.antarchy.entry.cavaryn.description3": "Glowcap, Biowart, Moleworm, Wormy, and Brooding Tunnel regions escalate differently, so which biome you are in matters as much as how long you have been there." - ,"guide.antarchy.entry.thoraxis.title": "Thoraxis" - ,"guide.antarchy.entry.thoraxis.subtitle": "Dimension and portal access record" - ,"guide.antarchy.entry.thoraxis.description": "Right-click a Red Ant to teleport there directly, or sacrifice one inside a Nyxite frame to light a permanent, reusable portal." - ,"guide.antarchy.entry.thoraxis.description2": "Do not assume Nether rules: beds fail, respawn anchors work, the sky never lightens, and gravity flips once you cross far enough below center." - ,"guide.antarchy.entry.thoraxis.description3": "Bluestone runs like Redstone's mirror image: the same wiring, but reacting the opposite way. The Vortex Lens shows it best: Redstone pulls, Bluestone pushes. Antimetal blocks reverse gravity locally and have their own rail system." - ,"guide.antarchy.entry.thoraxis.description4": "Vertical progression runs Dream Dunes, Umbral Hills, Lucid Pools, and Nadir Forest, though height is a tendency, not a guaranteed layer." - ,"guide.antarchy.entry.thoraxis.description5": "Dimensional tears spawn in linked pairs. Step through one and you're pulled to its twin, with your gravity flipped for a while after." ,"guide.antarchy.entry.temporal_fields.title": "Temporal Manipulation" ,"guide.antarchy.entry.temporal_fields.subtitle": "Time dilation, contraction, and Chronosphere reference" ,"guide.antarchy.entry.temporal_fields.description": "Time Dilation and Time Contraction change how fast affected entities experience the world." @@ -1597,9 +1598,8 @@ ,"guide.antarchy.entry.high_fructose_corn_syrup.description3": "Used on any food in a crafting grid, it Americanizes it: extra nutrition, extra saturation, and a burst of Regeneration." ,"guide.antarchy.entry.rainbow_ant.title": "Rainbow Ant" ,"guide.antarchy.entry.rainbow_ant.subtitle": "Dimensional gateway record" - ,"guide.antarchy.entry.rainbow_ant.description": "A Rainbow Ant. It's your average dimensional ant... or so I thought at first. The Rainbow Ant doesn't lead to any dimension unless it is fed Rainbow Sugar." - ,"guide.antarchy.entry.rainbow_ant.description2": "I visited the dimension of the Rainbow Ant and returned, intending to note what I saw. When I went back to the ant's dimension later, I found it was a different dimension." - ,"guide.antarchy.entry.rainbow_ant.description3": "My previous notes on the Rainbow Ant have unfortunately been discarded, as I now know the dimension is different every time. For all I know, there could be millions of dimensions this fascinating creature acts as a gateway to." + ,"guide.antarchy.entry.rainbow_ant.description": "A Rainbow Ant. It's your average dimensional ant... or is it? They seem to have an affinity for Rainbow Sugar." + ,"guide.antarchy.entry.rainbow_ant.description2": "Each Rainbow Ant stores a unique dimension inside of it. Rainbow Ants are the key to the multiverse." ,"guide.antarchy.disk.rainbow_ant.title": "RAINBOW ANT FIELD NOTES" ,"guide.antarchy.disk.brutalfly.title": "BRUTALFLY FIELD NOTES" ,"guide.antarchy.entry.brutalfly.title": "Brutalfly" diff --git a/common-1.21.1/src/main/resources/data/antarchy/computer/disk/cavaryn.json b/common-1.21.1/src/main/resources/data/antarchy/computer/disk/cavaryn.json index 03ff94b2..edcb5b6c 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/computer/disk/cavaryn.json +++ b/common-1.21.1/src/main/resources/data/antarchy/computer/disk/cavaryn.json @@ -1,5 +1,5 @@ { "category": "antarchy:cavaryn", "title": "guide.antarchy.disk.cavaryn.title", - "entries": ["antarchy:cavaryn"] + "entries": ["antarchy:termite"] } diff --git a/common-1.21.1/src/main/resources/data/antarchy/computer/disk/elythia.json b/common-1.21.1/src/main/resources/data/antarchy/computer/disk/elythia.json index e3d1c761..ca8f3fc2 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/computer/disk/elythia.json +++ b/common-1.21.1/src/main/resources/data/antarchy/computer/disk/elythia.json @@ -1,5 +1,5 @@ { "category": "antarchy:elythia", "title": "guide.antarchy.disk.elythia.title", - "entries": ["antarchy:elythia"] + "entries": ["antarchy:brown_ant"] } diff --git a/common-1.21.1/src/main/resources/data/antarchy/computer/disk/thoraxis.json b/common-1.21.1/src/main/resources/data/antarchy/computer/disk/thoraxis.json index aa847632..1f1f69a9 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/computer/disk/thoraxis.json +++ b/common-1.21.1/src/main/resources/data/antarchy/computer/disk/thoraxis.json @@ -1,5 +1,5 @@ { "category": "antarchy:thoraxis", "title": "guide.antarchy.disk.thoraxis.title", - "entries": ["antarchy:thoraxis", "antarchy:nightmare"] + "entries": ["antarchy:red_ant", "antarchy:nightmare"] } diff --git a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/bloodglass.json b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/bloodglass.json index abba48dc..95051af1 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/bloodglass.json +++ b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/bloodglass.json @@ -4,5 +4,14 @@ "title": "guide.antarchy.entry.bloodglass.title", "subtitle": "guide.antarchy.entry.bloodglass.subtitle", "description": ["guide.antarchy.entry.bloodglass.description", "guide.antarchy.entry.bloodglass.description2", "guide.antarchy.entry.bloodglass.description3"], - "cover_item": "antarchy:blood_crystal_shard" + "cover_item": "antarchy:blood_crystal_shard", + "green_tint": false, + "gallery": [ + {"item": "antarchy:blood_crystal_helmet"}, + {"item": "antarchy:blood_crystal_chestplate"}, + {"item": "antarchy:blood_crystal_leggings"}, + {"item": "antarchy:blood_crystal_boots"}, + {"item": "antarchy:blood_crystal_katana"}, + {"item": "antarchy:blood_crystal_apple"} + ] } diff --git a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/brown_ant.json b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/brown_ant.json new file mode 100644 index 00000000..833f8eb4 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/brown_ant.json @@ -0,0 +1,31 @@ +{ + "type": "entity", + "category": "elythia", + "title": "guide.antarchy.entry.brown_ant.title", + "subtitle": "guide.antarchy.entry.brown_ant.subtitle", + "description": ["guide.antarchy.entry.brown_ant.description", "guide.antarchy.entry.brown_ant.description2", "guide.antarchy.entry.brown_ant.description3"], + "entity": "antarchy:brown_ant", + "cover_entity": "antarchy:brown_ant", + "dimension": "antarchy:elythia", + "rotation": 45, + "green_tint": false, + "gallery_title": "guide.antarchy.gallery.elythia", + "gallery": [ + "antarchy:king", + "antarchy:toreterror", + "antarchy:brutalfly", + "antarchy:basilisk", + "antarchy:glimmer", + "antarchy:flying_squirrel", + "antarchy:ouranwood_deer", + "antarchy:elka", + "antarchy:mantis", + "antarchy:alpha_mantis", + "antarchy:apple_cow", + "antarchy:stratoshark", + "antarchy:missile_squid", + "antarchy:octopus_bomb", + "antarchy:dorrie", + "antarchy:butterfly" + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/brutalfly.json b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/brutalfly.json index 66756563..9049b82f 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/brutalfly.json +++ b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/brutalfly.json @@ -9,5 +9,10 @@ "locator": "antarchy:brutalfly", "dimension": "antarchy:elythia", "rotation": 45, - "render_scale": 0.6 + "render_scale": 0.6, + "green_tint": false, + "gallery_title": "guide.antarchy.gallery.drops", + "gallery": [ + {"item": "antarchy:brutalfly_wing"} + ] } diff --git a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/cavaryn.json b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/cavaryn.json deleted file mode 100644 index af241e33..00000000 --- a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/cavaryn.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "dimension", - "category": "cavaryn", - "title": "guide.antarchy.entry.cavaryn.title", - "subtitle": "guide.antarchy.entry.cavaryn.subtitle", - "description": ["guide.antarchy.entry.cavaryn.description", "guide.antarchy.entry.cavaryn.description2", "guide.antarchy.entry.cavaryn.description3"], - "cover_entity": "antarchy:termite", - "rotation": 45, - "dimension": "antarchy:cavaryn" -} diff --git a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/duplicator_tree.json b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/duplicator_tree.json index 5a557533..004204c4 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/duplicator_tree.json +++ b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/duplicator_tree.json @@ -4,5 +4,6 @@ "title": "guide.antarchy.entry.duplicator_tree.title", "subtitle": "guide.antarchy.entry.duplicator_tree.subtitle", "description": ["guide.antarchy.entry.duplicator_tree.description", "guide.antarchy.entry.duplicator_tree.description2"], - "cover_item": "antarchy:duplicator_log" + "cover_item": "antarchy:duplicator_log", + "green_tint": false } diff --git a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/easter_bunny.json b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/easter_bunny.json index ba0d8df1..6aa5442e 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/easter_bunny.json +++ b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/easter_bunny.json @@ -6,5 +6,6 @@ "description": ["guide.antarchy.entry.easter_bunny.description", "guide.antarchy.entry.easter_bunny.description2"], "entity": "antarchy:easter_bunny", "cover_entity": "antarchy:easter_bunny", - "rotation": 45 + "rotation": 45, + "green_tint": false } diff --git a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/elythia.json b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/elythia.json deleted file mode 100644 index 9736e471..00000000 --- a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/elythia.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "dimension", - "category": "elythia", - "title": "guide.antarchy.entry.elythia.title", - "subtitle": "guide.antarchy.entry.elythia.subtitle", - "description": ["guide.antarchy.entry.elythia.description", "guide.antarchy.entry.elythia.description2"], - "cover_entity": "antarchy:brown_ant", - "rotation": 45, - "dimension": "antarchy:elythia" -} diff --git a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/flying_squirrel.json b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/flying_squirrel.json index 0e0fb00b..6812088b 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/flying_squirrel.json +++ b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/flying_squirrel.json @@ -6,5 +6,6 @@ "description": ["guide.antarchy.entry.flying_squirrel.description", "guide.antarchy.entry.flying_squirrel.description2", "guide.antarchy.entry.flying_squirrel.description3", "guide.antarchy.entry.flying_squirrel.description4"], "entity": "antarchy:flying_squirrel", "rotation": 45, - "render_scale": 0.8 + "render_scale": 0.8, + "green_tint": false } diff --git a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/glimmer.json b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/glimmer.json index c3847ee3..30a9c827 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/glimmer.json +++ b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/glimmer.json @@ -6,5 +6,6 @@ "description": ["guide.antarchy.entry.glimmer.description", "guide.antarchy.entry.glimmer.description2", "guide.antarchy.entry.glimmer.description3", "guide.antarchy.entry.glimmer.description4", "guide.antarchy.entry.glimmer.description5", "guide.antarchy.entry.glimmer.description6", "guide.antarchy.entry.glimmer.description7"], "entity": "antarchy:glimmer", "rotation": 45, - "render_scale": 0.8 + "render_scale": 0.8, + "green_tint": false } diff --git a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/hercules_beetle.json b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/hercules_beetle.json index e68a3b48..23d7b14c 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/hercules_beetle.json +++ b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/hercules_beetle.json @@ -7,5 +7,10 @@ "entity": "antarchy:hercules_beetle", "cover_entity": "antarchy:hercules_beetle", "rotation": 45, - "render_scale": 0.5 + "render_scale": 0.5, + "green_tint": false, + "gallery": [ + {"item": "antarchy:hercules_horn"}, + {"item": "antarchy:broodfruit"} + ] } diff --git a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/high_fructose_corn_syrup.json b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/high_fructose_corn_syrup.json index bb9a36a9..68d4ab2b 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/high_fructose_corn_syrup.json +++ b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/high_fructose_corn_syrup.json @@ -4,5 +4,6 @@ "title": "guide.antarchy.entry.high_fructose_corn_syrup.title", "subtitle": "guide.antarchy.entry.high_fructose_corn_syrup.subtitle", "description": ["guide.antarchy.entry.high_fructose_corn_syrup.description", "guide.antarchy.entry.high_fructose_corn_syrup.description2", "guide.antarchy.entry.high_fructose_corn_syrup.description3"], - "cover_item": "antarchy:high_fructose_corn_syrup" + "cover_item": "antarchy:high_fructose_corn_syrup", + "green_tint": false } diff --git a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/introduction.json b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/introduction.json deleted file mode 100644 index 6594ae95..00000000 --- a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/introduction.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "type": "article", - "category": "general", - "title": "guide.antarchy.entry.introduction.title", - "subtitle": "guide.antarchy.entry.introduction.subtitle", - "description": ["guide.antarchy.entry.introduction.description"], - "cover_item": "antos:floppy_disk" -} diff --git a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/king.json b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/king.json index 2170a888..331fe887 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/king.json +++ b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/king.json @@ -15,5 +15,11 @@ "locator": "antarchy:kings_tree", "dimension": "antarchy:elythia", "rotation": 45, - "render_scale": 0.5 + "render_scale": 0.5, + "green_tint": false, + "gallery": [ + "antarchy:prince", + {"item": "antarchy:king_scale"}, + {"item": "antarchy:prince_egg"} + ] } diff --git a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/kraken.json b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/kraken.json index 3cdcfcae..d999333c 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/kraken.json +++ b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/kraken.json @@ -11,5 +11,11 @@ ], "entity": "antarchy:kraken", "cover_entity": "antarchy:kraken", - "render_scale": 0.5 + "render_scale": 0.5, + "green_tint": false, + "gallery_title": "guide.antarchy.gallery.drops", + "gallery": [ + {"item": "antarchy:kraken_tentacle"}, + {"item": "antarchy:kraken_tooth"} + ] } diff --git a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/nightmare.json b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/nightmare.json index bfb36033..e3c43ef1 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/nightmare.json +++ b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/nightmare.json @@ -4,5 +4,10 @@ "title": "guide.antarchy.entry.nightmare.title", "subtitle": "guide.antarchy.entry.nightmare.subtitle", "description": ["guide.antarchy.entry.nightmare.description", "guide.antarchy.entry.nightmare.description2", "guide.antarchy.entry.nightmare.description3"], - "entity": "antarchy:nightmare" + "entity": "antarchy:nightmare", + "green_tint": false, + "gallery_title": "guide.antarchy.gallery.drops", + "gallery": [ + {"item": "antarchy:nightmare_scale"} + ] } diff --git a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/prince.json b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/prince.json index d0b9f830..bfd7b9c7 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/prince.json +++ b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/prince.json @@ -6,5 +6,6 @@ "description": ["guide.antarchy.entry.prince.description", "guide.antarchy.entry.prince.description2"], "entity": "antarchy:prince", "cover_entity": "antarchy:prince", - "rotation": 45 + "rotation": 45, + "green_tint": false } diff --git a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/princess.json b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/princess.json index 923e4a1b..770295c0 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/princess.json +++ b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/princess.json @@ -6,5 +6,6 @@ "description": ["guide.antarchy.entry.princess.description", "guide.antarchy.entry.princess.description2"], "entity": "antarchy:princess", "cover_entity": "antarchy:princess", - "rotation": 45 + "rotation": 45, + "green_tint": false } diff --git a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/queen.json b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/queen.json index e612f8ed..df41133a 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/queen.json +++ b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/queen.json @@ -16,5 +16,14 @@ "locator": "antarchy:queen", "dimension": "antarchy:thoraxis", "rotation": 45, - "render_scale": 0.5 + "render_scale": 0.5, + "green_tint": false, + "gallery": [ + "antarchy:manticore", + "antarchy:princess", + {"item": "antarchy:queen_scale"}, + {"item": "antarchy:princess_egg"}, + {"item": "antarchy:blood_crystal_shard"}, + {"item": "antarchy:music_disc_the_queen"} + ] } diff --git a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/rainbow_ant.json b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/rainbow_ant.json index da05a8e1..00e19421 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/rainbow_ant.json +++ b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/rainbow_ant.json @@ -5,10 +5,13 @@ "subtitle": "guide.antarchy.entry.rainbow_ant.subtitle", "description": [ "guide.antarchy.entry.rainbow_ant.description", - "guide.antarchy.entry.rainbow_ant.description2", - "guide.antarchy.entry.rainbow_ant.description3" + "guide.antarchy.entry.rainbow_ant.description2" ], "entity": "antarchy:rainbow_ant", "cover_entity": "antarchy:rainbow_ant", - "rotation": 45 + "rotation": 45, + "green_tint": false, + "gallery": [ + {"item": "antarchy:rainbow_sugar"} + ] } diff --git a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/red_ant.json b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/red_ant.json new file mode 100644 index 00000000..092661b2 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/red_ant.json @@ -0,0 +1,29 @@ +{ + "type": "entity", + "category": "thoraxis", + "title": "guide.antarchy.entry.red_ant.title", + "subtitle": "guide.antarchy.entry.red_ant.subtitle", + "description": [ + "guide.antarchy.entry.red_ant.description", + "guide.antarchy.entry.red_ant.description2", + "guide.antarchy.entry.red_ant.description3", + "guide.antarchy.entry.red_ant.description4" + ], + "entity": "antarchy:red_ant", + "cover_entity": "antarchy:red_ant", + "dimension": "antarchy:thoraxis", + "rotation": 45, + "green_tint": false, + "gallery_title": "guide.antarchy.gallery.thoraxis", + "gallery": [ + "antarchy:queen", + "antarchy:nightmare", + "antarchy:reverie", + "antarchy:lucid", + "antarchy:vortex", + "antarchy:manticore", + "antarchy:emperor_scorpion", + "antarchy:scorpion", + "antarchy:bed_bug" + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/temporal_fields.json b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/temporal_fields.json index 8e69d433..5b1b5129 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/temporal_fields.json +++ b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/temporal_fields.json @@ -4,5 +4,6 @@ "title": "guide.antarchy.entry.temporal_fields.title", "subtitle": "guide.antarchy.entry.temporal_fields.subtitle", "description": ["guide.antarchy.entry.temporal_fields.description", "guide.antarchy.entry.temporal_fields.description2", "guide.antarchy.entry.temporal_fields.description3"], - "cover_potion": "antarchy:time_dilation" + "cover_potion": "antarchy:time_dilation", + "green_tint": false } diff --git a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/termite.json b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/termite.json new file mode 100644 index 00000000..7f5c7696 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/termite.json @@ -0,0 +1,26 @@ +{ + "type": "entity", + "category": "cavaryn", + "title": "guide.antarchy.entry.termite.title", + "subtitle": "guide.antarchy.entry.termite.subtitle", + "description": ["guide.antarchy.entry.termite.description", "guide.antarchy.entry.termite.description2", "guide.antarchy.entry.termite.description3", "guide.antarchy.entry.termite.description4"], + "entity": "antarchy:termite", + "cover_entity": "antarchy:termite", + "dimension": "antarchy:cavaryn", + "rotation": 45, + "green_tint": false, + "gallery_title": "guide.antarchy.gallery.cavaryn", + "gallery": [ + "antarchy:hercules_beetle", + "antarchy:jerry", + "antarchy:crawling_blight", + "antarchy:skulking_fright", + "antarchy:springbug", + "antarchy:spit_bug", + "antarchy:moleworm", + "antarchy:molevore", + "antarchy:worm", + "antarchy:rolly_polly", + "antarchy:stink_bug" + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/thoraxis.json b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/thoraxis.json deleted file mode 100644 index a8064bfc..00000000 --- a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/thoraxis.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "dimension", - "category": "thoraxis", - "title": "guide.antarchy.entry.thoraxis.title", - "subtitle": "guide.antarchy.entry.thoraxis.subtitle", - "description": ["guide.antarchy.entry.thoraxis.description", "guide.antarchy.entry.thoraxis.description2", "guide.antarchy.entry.thoraxis.description3", "guide.antarchy.entry.thoraxis.description4", "guide.antarchy.entry.thoraxis.description5"], - "cover_entity": "antarchy:red_ant", - "rotation": 45, - "dimension": "antarchy:thoraxis" -} diff --git a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/toreterror_arena.json b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/toreterror_arena.json index 3760b807..c87ae3cf 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/toreterror_arena.json +++ b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/toreterror_arena.json @@ -10,5 +10,11 @@ "dimension": "antarchy:elythia", "search_radius": 100, "cover_entity": "antarchy:toreterror", - "render_scale": 0.8 + "render_scale": 0.8, + "green_tint": false, + "gallery_title": "guide.antarchy.gallery.drops", + "gallery": [ + {"item": "antarchy:primordial_scute"}, + {"item": "antarchy:water_cannon"} + ] } diff --git a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/vortex.json b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/vortex.json index 6fdbd10e..401c1de5 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/vortex.json +++ b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/vortex.json @@ -5,5 +5,11 @@ "subtitle": "guide.antarchy.entry.vortex.subtitle", "description": ["guide.antarchy.entry.vortex.description", "guide.antarchy.entry.vortex.description2", "guide.antarchy.entry.vortex.description3"], "cover_entity": "antarchy:vortex", - "render_scale": 0.8 + "render_scale": 0.8, + "green_tint": false, + "gallery": [ + {"item": "antarchy:vortex_lens"}, + {"item": "antarchy:eye_of_the_storm"}, + {"item": "antarchy:bluestone"} + ] } diff --git a/common-1.21.1/src/main/resources/data/antarchy/dimension/cavaryn.json b/common-1.21.1/src/main/resources/data/antarchy/dimension/cavaryn.json index b1388103..969fac3c 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/dimension/cavaryn.json +++ b/common-1.21.1/src/main/resources/data/antarchy/dimension/cavaryn.json @@ -43,7 +43,7 @@ 1.0 ], "humidity": [ - 0.1, + 0.0, 1.0 ], "continentalness": [ @@ -73,7 +73,7 @@ 1.0 ], "humidity": [ - 0.1, + 0.0, 1.0 ], "continentalness": [ @@ -163,8 +163,8 @@ 1.0 ], "humidity": [ - -0.15, - 0.45 + -0.05, + 0.25 ], "continentalness": [ -1.0, @@ -175,8 +175,8 @@ 1.0 ], "weirdness": [ - -0.6, - 0.9 + -0.35, + 0.55 ], "depth": [ -2.0, @@ -193,7 +193,7 @@ 1.0 ], "humidity": [ - 0.45, + 0.35, 1.0 ], "continentalness": [ @@ -209,7 +209,7 @@ 0.9 ], "depth": [ - 0.15, + 0.0, 2.0 ], "offset": 0.0 diff --git a/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/underside_ceiling_short_gap.json b/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/underside_ceiling_short_gap.json new file mode 100644 index 00000000..893d2c0e --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/underside_ceiling_short_gap.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:scorpion" + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/underside_ceiling_spawners.json b/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/underside_ceiling_spawners.json new file mode 100644 index 00000000..945a67e1 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/underside_ceiling_spawners.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "antarchy:scorpion", + "antarchy:emperor_scorpion", + "antarchy:manticore" + ] +} diff --git a/fabric-1.20.1/build.gradle b/fabric-1.20.1/build.gradle index c9e7f992..402c9825 100644 --- a/fabric-1.20.1/build.gradle +++ b/fabric-1.20.1/build.gradle @@ -14,9 +14,13 @@ repositories { maven { url "https://maven.fabricmc.net/" } mavenCentral() maven { url "https://www.cursemaven.com" } + maven { url "https://maven.architectury.dev/" } + maven { url "https://api.modrinth.com/maven" } maven { url "https://maven.blamejared.com" } maven { url "https://repo.spongepowered.org/repository/maven-public/" } maven { url "https://jitpack.io" } + maven { url "https://maven.terraformersmc.com/releases/" } + maven { url "https://maven.shedaniel.me/" } exclusiveContent { forRepository { maven { @@ -55,6 +59,10 @@ sourceSets { } } +configurations.configureEach { + resolutionStrategy.force "net.fabricmc:fabric-loader:${fabric_loader_version}" +} + dependencies { minecraft "com.mojang:minecraft:${minecraft_version}" mappings loom.officialMojangMappings() @@ -64,22 +72,34 @@ dependencies { modImplementation "software.bernie.geckolib:geckolib-fabric-${minecraft_version}:${geckolib_version}" + modImplementation(files("$rootDir/../anthology_jars/anthology-${anthology_version}+1.20.1-fabric.jar")) + modCompileOnly("curse.maven:sizeable_foliage-${sizeable_foliage_curseforge_id}:${sizeable_foliage_curseforge_file_id_fabric}") modLocalRuntime("curse.maven:sizeable_foliage-${sizeable_foliage_curseforge_id}:${sizeable_foliage_curseforge_file_id_fabric}") - modCompileOnly("curse.maven:intapi-${intapi_curseforge_id}:${intapi_curseforge_file_id_fabric}") - modLocalRuntime("curse.maven:intapi-${intapi_curseforge_id}:${intapi_curseforge_file_id_fabric}") + modCompileOnly(files("$rootDir/../integrated_api_jars/integrated_api-fabric-1.20.1-1.9.1.jar")) + modLocalRuntime(files("$rootDir/../integrated_api_jars/integrated_api-fabric-1.20.1-1.9.1.jar")) - modCompileOnly("curse.maven:pehkui-${pehkui_curseforge_id}:${pehkui_curseforge_file_id_fabric}") - modLocalRuntime("curse.maven:pehkui-${pehkui_curseforge_id}:${pehkui_curseforge_file_id_fabric}") + modCompileOnly(files("$rootDir/../infinite_dimensions_jars/Pehkui-3.7.8+1.14.4-1.20.1.jar")) + modLocalRuntime(files("$rootDir/../infinite_dimensions_jars/Pehkui-3.7.8+1.14.4-1.20.1.jar")) modCompileOnly(files("$rootDir/../infinite_dimensions_jars/infinity-2.7.2+1.20.1-fabric.jar")) modLocalRuntime(files("$rootDir/../infinite_dimensions_jars/infinity-2.7.2+1.20.1-fabric.jar")) + modLocalRuntime("dev.architectury:architectury-fabric:9.2.14") + modLocalRuntime("maven.modrinth:midnightlib:1.9.3+1.20.1-fabric") + modLocalRuntime(files("devlibs/KanosConfig-0.4.1.jar")) compileOnly "mezz.jei:jei-${minecraft_version}-common-api:${jei_version}" compileOnly "mezz.jei:jei-${minecraft_version}-fabric-api:${jei_version}" modLocalRuntime "mezz.jei:jei-${minecraft_version}-fabric:${jei_version}" + modCompileOnly("me.shedaniel.cloth:cloth-config-fabric:11.1.136") { + exclude(group: "net.fabricmc.fabric-api") + } + modCompileOnly("com.terraformersmc:modmenu:7.2.2") { + exclude(group: "net.fabricmc.fabric-api") + } + annotationProcessor "org.spongepowered:mixin:0.8.7:processor" } diff --git a/fabric-1.20.1/devlibs/KanosConfig-0.4.1.jar b/fabric-1.20.1/devlibs/KanosConfig-0.4.1.jar new file mode 100644 index 00000000..68649aa2 Binary files /dev/null and b/fabric-1.20.1/devlibs/KanosConfig-0.4.1.jar differ diff --git a/fabric-1.20.1/gradle.properties b/fabric-1.20.1/gradle.properties index 26bbd254..8d09c5b6 100644 --- a/fabric-1.20.1/gradle.properties +++ b/fabric-1.20.1/gradle.properties @@ -14,11 +14,12 @@ sources_url= logo_fabric=assets/antarchy/antarchy_logo.png minecraft_version=1.20.1 -fabric_loader_version=0.15.6 +fabric_loader_version=0.17.2 fabric_api_version=0.92.0+1.20.1 jei_version=15.20.0.104 geckolib_version=4.8.4 +anthology_version=1.0.0 sizeable_foliage_curseforge_id=1601832 sizeable_foliage_curseforge_file_id_fabric=8468698 diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyConfigModuleFabric.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyConfigModuleFabric.java index 112fb35e..7b2c7678 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyConfigModuleFabric.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyConfigModuleFabric.java @@ -1,6 +1,7 @@ package com.craisinlord.antarchy.fabric; import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.config.AntarchyConfigCatalog; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.config.ConfigResetGuard; import com.google.gson.Gson; @@ -19,8 +20,6 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.nio.file.Files; import java.nio.file.Path; -import java.util.Arrays; -import java.util.Comparator; import java.util.LinkedHashMap; import java.util.Map; @@ -36,7 +35,7 @@ public final class AntarchyConfigModuleFabric { } public static void init() { - ConfigResetGuard.wipeIfNeeded( + ConfigResetGuard.migrateIfNeeded( CONFIG_DIR, ConfigSection.MOBS.path, ConfigSection.TOOLS.path, @@ -57,6 +56,14 @@ public final class AntarchyConfigModuleFabric { SettingBinding binding = entry.getValue(); JsonObject loadedSection = loaded.get(binding.section); JsonElement element = loadedSection != null ? loadedSection.get(key) : null; + if (element == null) { + for (JsonObject otherSection : loaded.values()) { + if (otherSection != loadedSection && otherSection.has(key)) { + element = otherSection.get(key); + break; + } + } + } if (element == null && legacy != null) { element = legacy.get(key); } @@ -70,6 +77,26 @@ public final class AntarchyConfigModuleFabric { } } + public static Map getBindings() { + return SETTINGS; + } + + public static void persist() { + Map normalized = new LinkedHashMap<>(); + for (ConfigSection section : ConfigSection.values()) { + normalized.put(section, new JsonObject()); + } + + for (Map.Entry entry : SETTINGS.entrySet()) { + SettingBinding binding = entry.getValue(); + normalized.get(binding.section).add(entry.getKey(), binding.toJson(binding.getCurrentValue())); + } + + for (Map.Entry entry : normalized.entrySet()) { + writeConfig(entry.getKey().path, entry.getValue()); + } + } + private static JsonObject readConfig(Path path) { if (!Files.exists(path)) { return null; @@ -100,52 +127,25 @@ public final class AntarchyConfigModuleFabric { } private static Map buildBindings() { - Map getters = new LinkedHashMap<>(); - for (Method method : AntarchySettings.class.getMethods()) { - if (!isPublicStatic(method) || method.getParameterCount() != 0 || method.getReturnType() == Void.TYPE) { - continue; - } - getters.put(method.getName(), method); - } - - return Arrays.stream(AntarchySettings.class.getMethods()) - .filter(AntarchyConfigModuleFabric::isPublicStatic) - .filter(method -> method.getName().startsWith("set")) - .filter(method -> method.getParameterCount() == 1) - .sorted(Comparator.comparing(Method::getName)) - .collect(LinkedHashMap::new, (bindings, setter) -> { - String propertyName = decapitalize(setter.getName().substring(3)); - Method getter = getters.get(propertyName); - if (getter == null) { - return; - } - if (!isSupported(setter.getParameterTypes()[0], getter.getReturnType())) { - return; - } - bindings.put(propertyName, new SettingBinding(propertyName, getter, setter, ConfigSection.forProperty(propertyName))); - }, Map::putAll); + return AntarchyConfigCatalog.definitions().stream() + .collect(LinkedHashMap::new, (bindings, definition) -> bindings.put( + definition.name(), + new SettingBinding( + definition.name(), + definition.getter(), + definition.setter(), + toConfigSection(definition.section()))), Map::putAll); } - private static boolean isPublicStatic(Method method) { - int modifiers = method.getModifiers(); - return java.lang.reflect.Modifier.isPublic(modifiers) && java.lang.reflect.Modifier.isStatic(modifiers); + private static ConfigSection toConfigSection(AntarchyConfigCatalog.Section section) { + return switch (section) { + case MOBS -> ConfigSection.MOBS; + case TOOLS -> ConfigSection.TOOLS; + case MISC -> ConfigSection.MISC; + }; } - private static boolean isSupported(Class setterType, Class getterType) { - if (setterType == boolean.class || setterType == int.class || setterType == double.class || setterType == float.class) { - return getterType == setterType; - } - return setterType == String.class && ResourceKey.class.isAssignableFrom(getterType); - } - - private static String decapitalize(String value) { - if (value.isEmpty()) { - return value; - } - return Character.toLowerCase(value.charAt(0)) + value.substring(1); - } - - private enum ConfigSection { + public enum ConfigSection { MOBS("antarchy_mobs.json"), TOOLS("antarchy_tools.json"), MISC("antarchy_misc.json"); @@ -156,71 +156,9 @@ public final class AntarchyConfigModuleFabric { this.path = CONFIG_DIR.resolve(fileName); } - private static ConfigSection forProperty(String name) { - if (isMiscSetting(name)) { - return MISC; - } - if (isToolSetting(name)) { - return TOOLS; - } - return MOBS; - } - - private static boolean isMiscSetting(String name) { - return name.equals("disableInfinityBookPortalCreation") - || name.equals("rainbowAntsLeadToInfinityDimensions") - || name.equals("permanentPortalsEnabled") - || name.equals("permanentPortalsFlintAndSteelEnabled") - || name.equals("elythiaPortalEnabled") - || name.equals("thoraxisPortalEnabled") - || name.equals("cavarynPortalEnabled") - || name.equals("hushweedSporeLifetimeSeconds") - || name.equals("elythiaFireflyParticlesEnabled") - || name.equals("duplicatorTreeEnabled") - || name.equals("glowVinesUnderLeaves") - || name.equals("swingThroughGrassEnabled") - || name.equals("fabricKeybindingConflictFixEnabled") - || name.equals("experimentalSettingsPopupDisabled") - || name.equals("entitySpecificFireOverlayEnabled") - || name.equals("dreamSandEnabled") - || name.startsWith("dreamSand") - || name.equals("ichorWitherEnabled") - || name.startsWith("diamondMinecart"); - } - - private static boolean isToolSetting(String name) { - return name.equals("sizeChangingRaysEnabled") - || name.startsWith("sizeRay") - || name.equals("shrinkingPotionDelta") - || name.equals("growthPotionDelta") - || name.startsWith("ultimate") - || name.startsWith("battleAxe") - || name.startsWith("bigBertha") - || name.startsWith("attitudeAdjuster") - || name.startsWith("scorpionWhip") - || name.startsWith("bloodCrystal") - || name.startsWith("nightmareHelmet") - || name.startsWith("nightmareChestplate") - || name.startsWith("nightmareLeggings") - || name.startsWith("nightmareBoots") - || name.startsWith("nightmareArmorDreadAura") - || name.startsWith("primordialArmor") - || name.startsWith("nightmareSword") - || name.startsWith("basiliskDagger") - || name.startsWith("squidzooka") - || name.equals("invertProjectilesFromInvertedPlayers") - || name.startsWith("gravityGun") - || name.startsWith("critterCage") - || name.equals("potentNyxiteInvertedDurationSeconds") - || name.equals("corneaEarNightVisionSeconds") - || name.startsWith("american") - || name.startsWith("mogglesVision") - || name.equals("ductTapeRepairPercentPerUse") - || name.startsWith("fallenKingCrown"); - } } - private static final class SettingBinding { + public static final class SettingBinding { private final String name; private final Method getter; private final Method setter; @@ -235,6 +173,26 @@ public final class AntarchyConfigModuleFabric { this.section = section; } + public String getName() { + return name; + } + + public ConfigSection getSection() { + return section; + } + + public Class getType() { + return setterType; + } + + public Object getValue() { + return getCurrentValue(); + } + + public void setValue(Object value) { + apply(value); + } + private Object readValue(JsonElement element) { Object defaultValue = getCurrentValue(); if (element == null || element.isJsonNull()) { diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java index c4007a3c..17fc5f7f 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java @@ -3,6 +3,7 @@ import com.craisinlord.antarchy.fabric.registry.AntarchyFabricEntities; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.AntarchyGameRules; +import com.craisinlord.antarchy.content.advancement.AntarchyAdvancementTriggers; import com.craisinlord.antarchy.content.entity.trades.DrTrayaurusTradeManager; import com.craisinlord.antarchy.content.item.BloodCrystalShardItem; import com.craisinlord.antarchy.fabric.network.AntarchyFabricNetworking; @@ -150,12 +151,12 @@ public final class AntarchyFabric implements ModInitializer { GameRuleRegistry.register(name, category, GameRuleFactory.createBooleanRule(defaultValue)) ); AntarchyFabricNetworking.register(); - AntarchyFabricNetworking.bootstrapMultipartCommon(); AntarchyConfigModuleFabric.init(); AntarchyFabricContent.register(); registerWorldgenFeatures(); - AntarchyFabricEvents.register(); BloodglassManager.register(); + TigerEyeFabricManager.register(); + AntarchyAdvancementTriggers.register(); Antarchy.init(); BloodCrystalShardItem.SYNC_BLOODGLASS = BloodglassManager::syncBloodglass; registerTradeReloadListener(); @@ -176,6 +177,20 @@ public final class AntarchyFabric implements ModInitializer { return delegate.reload(barrier, manager, prepareProfiler, applyProfiler, prepareExecutor, applyExecutor); } }); + com.craisinlord.antarchy.content.entity.trades.PestControlTradeManager pestControlDelegate = new com.craisinlord.antarchy.content.entity.trades.PestControlTradeManager(); + ResourceManagerHelper.get(PackType.SERVER_DATA).registerReloadListener(new IdentifiableResourceReloadListener() { + @Override + public ResourceLocation getFabricId() { + return new ResourceLocation(Antarchy.MODID, "pest_control_trades"); + } + + @Override + public CompletableFuture reload(PreparableReloadListener.PreparationBarrier barrier, ResourceManager manager, + ProfilerFiller prepareProfiler, ProfilerFiller applyProfiler, + Executor prepareExecutor, Executor applyExecutor) { + return pestControlDelegate.reload(barrier, manager, prepareProfiler, applyProfiler, prepareExecutor, applyExecutor); + } + }); } private static final TagKey CAVARYN_BIOMES = TagKey.create( diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java index 03436618..fba159d0 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java @@ -1,10 +1,13 @@ package com.craisinlord.antarchy.fabric; +import com.craisinlord.anthology.effect.AnthologyEffects; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.compat.infinity.InfinityCompat; +import com.craisinlord.antarchy.compat.infinity.InfinityConfigRefresh; import com.craisinlord.antarchy.compat.infinity.InfinityCompatVersion; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.enchantment.AntarchyEnchantments; +import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageSync; import com.craisinlord.antarchy.content.block.*; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.item.BloodCrystalKatanaItem; @@ -13,8 +16,10 @@ import com.craisinlord.antarchy.fabric.registry.DeferredHolder; import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidBoltEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidEyeProjectileEntity; +import com.craisinlord.antarchy.content.entity.vortex.VortexChargeProjectileEntity; +import com.craisinlord.antarchy.content.entity.vortex.VortexEntity; import com.craisinlord.antarchy.content.item.ScorpionWhipTetherSync; -import com.craisinlord.antarchy.content.network.ImpactShakeSync; +import com.craisinlord.antarchy.content.item.WormHookTetherSync; import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakeSync; import com.craisinlord.antarchy.content.network.HordeIntensitySync; import com.craisinlord.antarchy.content.portal.PermanentPortalType; @@ -27,6 +32,7 @@ import net.minecraft.world.item.Items; import net.minecraft.world.item.alchemy.Potions; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.DispenserBlock; import net.fabricmc.loader.api.FabricLoader; import com.craisinlord.antarchy.fabric.registry.AntarchyFabricBlocks; import com.craisinlord.antarchy.fabric.registry.AntarchyFabricItems; @@ -70,8 +76,7 @@ public final class AntarchyFabricContent { - public static void register() { - com.craisinlord.antarchy.content.entity.UpwardFallingBlockEntity.TYPE = AntarchyFabricEntities.UPWARD_FALLING_BLOCK; + private static void registerBrewingRecipes() { net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistry.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(AntarchyFabricItems.LUCID_EYE.get()), potionHolder(AntarchyFabricMisc.INVERSION)); net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistry.registerPotionRecipe(potionHolder(AntarchyFabricMisc.INVERSION), Ingredient.of(Items.REDSTONE), potionHolder(AntarchyFabricMisc.LONG_INVERSION)); net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistry.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(AntarchyFabricItems.STINK_BUG_ITEM.get()), potionHolder(AntarchyFabricMisc.STINKY_POTION)); @@ -86,17 +91,27 @@ public final class AntarchyFabricContent { net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistry.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(AntarchyFabricItems.TITANIUM_NUGGET.get()), potionHolder(AntarchyFabricMisc.GROWING)); net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistry.registerPotionRecipe(potionHolder(AntarchyFabricMisc.GROWING), Ingredient.of(Items.GLOWSTONE_DUST), potionHolder(AntarchyFabricMisc.STRONG_GROWING)); net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistry.registerPotionRecipe(potionHolder(AntarchyFabricMisc.STRONG_GROWING), Ingredient.of(Items.GLOWSTONE_DUST), potionHolder(AntarchyFabricMisc.EXTREME_GROWING)); - net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistry.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(AntarchyFabricItems.CLOUD_SHARK_FIN.get()), net.minecraft.world.item.alchemy.Potions.SLOW_FALLING); - net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistry.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(AntarchyFabricItems.JUMPY_BUG_LEG.get()), Potions.LEAPING); - net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistry.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(AntarchyFabricItems.CORNEA_EAR.get()), net.minecraft.world.item.alchemy.Potions.NIGHT_VISION); + net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistry.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(AntarchyFabricItems.KING_SCALE.get()), potionHolder(AntarchyFabricMisc.COMMAND)); + net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistry.registerPotionRecipe(potionHolder(AntarchyFabricMisc.COMMAND), Ingredient.of(Items.REDSTONE), potionHolder(AntarchyFabricMisc.LONG_COMMAND)); net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistry.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(AntarchyFabricItems.QUEEN_SCALE.get()), potionHolder(AntarchyFabricMisc.TIME_DILATION)); net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistry.registerPotionRecipe(potionHolder(AntarchyFabricMisc.TIME_DILATION), Ingredient.of(Items.GLOWSTONE_DUST), potionHolder(AntarchyFabricMisc.LONG_TIME_DILATION)); + net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistry.registerPotionRecipe(potionHolder(AntarchyFabricMisc.TIME_DILATION), Ingredient.of(Items.FERMENTED_SPIDER_EYE), potionHolder(AntarchyFabricMisc.TIME_CONTRACTION)); + net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistry.registerPotionRecipe(potionHolder(AntarchyFabricMisc.TIME_CONTRACTION), Ingredient.of(Items.GLOWSTONE_DUST), potionHolder(AntarchyFabricMisc.LONG_TIME_CONTRACTION)); + net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistry.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(AntarchyFabricItems.STRATOSHARK_FIN.get()), net.minecraft.world.item.alchemy.Potions.SLOW_FALLING); + net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistry.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(AntarchyFabricItems.SPRINGBUG_LEG.get()), Potions.LEAPING); + net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistry.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(AntarchyFabricItems.CORNEA_EAR.get()), net.minecraft.world.item.alchemy.Potions.NIGHT_VISION); + } + + public static void register() { + com.craisinlord.antarchy.content.entity.UpwardFallingBlockEntity.TYPE = AntarchyFabricEntities.UPWARD_FALLING_BLOCK; AntarchyFabricSounds.SOUND_EVENTS.register(); AntarchyFabricMisc.FLUIDS.register(); AntarchyFabricBlocks.BLOCKS.register(); + AntarchyFabricBlocks.registerStripping(); AntarchyFabricEntities.ENTITY_TYPES.register(); AntarchyFabricMisc.ATTRIBUTES.register(); + AntarchyObjects.setEntityReach(() -> AntarchyFabricMisc.ENTITY_INTERACTION_RANGE.get()); AntarchyFabricEntityAttributes.register(); AntarchyFabricSpawnPlacements.register(); AntarchyFabricBlocks.BLOCK_ENTITY_TYPES.register(); @@ -110,7 +125,11 @@ public final class AntarchyFabricContent { AntarchyFabricMisc.MENUS.register(); AntarchyFabricMisc.ENCHANTMENTS.register(); AntarchyFabricMisc.RECIPE_SERIALIZERS.register(); + AntarchyFabricMisc.FROG_VARIANTS.register(); AntarchyFabricCreativeModeTabs.CREATIVE_MODE_TABS.register(); + registerBrewingRecipes(); + DispenserBlock.registerBehavior(AntarchyFabricItems.VORTEX_CHARGE.get(), new com.craisinlord.antarchy.content.dispenser.VortexChargeDispenseBehavior()); + DispenserBlock.registerBehavior(AntarchyFabricItems.EYE_OF_THE_STORM.get(), new com.craisinlord.antarchy.content.dispenser.EyeOfTheStormDispenseBehavior()); PermanentPortalType.bindBlocks( () -> AntarchyFabricBlocks.MOSSY_OURANWOOD_WOOD.get(), @@ -123,20 +142,24 @@ public final class AntarchyFabricContent { AntarchySoundEvents.bind( AntarchyFabricSounds.SQUIDZOOKA_FIRE, - AntarchyFabricSounds.SHRINK_RAY_SOUND, - AntarchyFabricSounds.GROWTH_RAY_SOUND, - AntarchyFabricSounds.SIZE_RAY_CHARGE, + AntarchyFabricSounds.SHRINK_RAY_CHARGE, + AntarchyFabricSounds.SHRINK_RAY_LOOP, + AntarchyFabricSounds.GROWTH_RAY_CHARGE, + AntarchyFabricSounds.GROWTH_RAY_LOOP, + AntarchyFabricSounds.SIZE_RAY_WEAKSHOT, + AntarchyFabricSounds.SIZE_RAY_MEDIUMSHOT, + AntarchyFabricSounds.SIZE_RAY_CRITSHOT, AntarchyFabricSounds.ANT_AMBIENT, AntarchyFabricSounds.ANT_IDLE, AntarchyFabricSounds.ANT_HURT, AntarchyFabricSounds.ANT_BITE, AntarchyFabricSounds.ANT_GATHER, AntarchyFabricSounds.ANT_NEST, - AntarchyFabricSounds.CLOUD_SHARK_BITE, - AntarchyFabricSounds.CLOUD_SHARK_IDLE, - AntarchyFabricSounds.CLOUD_SHARK_HURT, - AntarchyFabricSounds.CLOUD_SHARK_DEATH, - AntarchyFabricSounds.CLOUD_SHARK_FLY, + AntarchyFabricSounds.STRATOSHARK_BITE, + AntarchyFabricSounds.STRATOSHARK_IDLE, + AntarchyFabricSounds.STRATOSHARK_HURT, + AntarchyFabricSounds.STRATOSHARK_DEATH, + AntarchyFabricSounds.STRATOSHARK_FLY, AntarchyFabricSounds.CATERPILLAR_IDLE, AntarchyFabricSounds.CATERPILLAR_HURT, AntarchyFabricSounds.CATERPILLAR_CRAWL, @@ -144,6 +167,7 @@ public final class AntarchyFabricContent { AntarchyFabricSounds.BRUTALFLY_IDLE, AntarchyFabricSounds.BRUTALFLY_DEATH, AntarchyFabricSounds.ELYTHIA_FIREFLY_AMBIENT, + AntarchyFabricSounds.ELYTHIA_OURANWOOD_FOREST_AMBIENT, AntarchyFabricSounds.MISSILE_SQUID_AMBIENT, AntarchyFabricSounds.MISSILE_SQUID_HURT, AntarchyFabricSounds.MISSILE_SQUID_DEATH, @@ -195,16 +219,20 @@ public final class AntarchyFabricContent { AntarchyFabricSounds.NIGHTMARE_DEATH, AntarchyFabricSounds.NIGHTMARE_BITE, AntarchyFabricSounds.NIGHTMARE_FLAP, - AntarchyFabricSounds.TRIFFID_ATTACK, - AntarchyFabricSounds.TRIFFID_GRAB, - AntarchyFabricSounds.TRIFFID_HURT, - AntarchyFabricSounds.TRIFFID_DEATH, - AntarchyFabricSounds.TRIFFID_HISS, - AntarchyFabricSounds.TRIFFID_GROWL, + AntarchyFabricSounds.FLYTRAP_ATTACK, + AntarchyFabricSounds.FLYTRAP_GRAB, + AntarchyFabricSounds.FLYTRAP_HURT, + AntarchyFabricSounds.FLYTRAP_DEATH, + AntarchyFabricSounds.FLYTRAP_HISS, + AntarchyFabricSounds.FLYTRAP_GROWL, AntarchyFabricSounds.MANTIS_AMBIENT, AntarchyFabricSounds.MANTIS_HURT, AntarchyFabricSounds.MANTIS_ATTACK, AntarchyFabricSounds.MANTIS_FLY_LOOP, + AntarchyFabricSounds.MANTICORE_IDLE, + AntarchyFabricSounds.MANTICORE_WALK, + AntarchyFabricSounds.MANTICORE_FLY, + AntarchyFabricSounds.MANTICORE_BITE, AntarchyFabricSounds.GRAVITY_GUN_PICKUP, AntarchyFabricSounds.GRAVITY_GUN_DROP, AntarchyFabricSounds.GRAVITY_GUN_HOLD_LOOP, @@ -249,13 +277,13 @@ public final class AntarchyFabricContent { AntarchyFabricSounds.STINK_BUG_IDLE, AntarchyFabricSounds.CAVARYN_HEARTBEAT, AntarchyFabricSounds.ROLLY_POLLY_IDLE, - AntarchyFabricSounds.CREEPING_HORROR_GROWL, - AntarchyFabricSounds.CREEPING_HORROR_HURT, - AntarchyFabricSounds.CREEPING_HORROR_BITE, - AntarchyFabricSounds.LURKING_TERROR_SNARL, - AntarchyFabricSounds.LURKING_TERROR_HURT, - AntarchyFabricSounds.LURKING_TERROR_BITE, - AntarchyFabricSounds.LURKING_TERROR_FLY_LOOP, + AntarchyFabricSounds.CRAWLING_BLIGHT_GROWL, + AntarchyFabricSounds.CRAWLING_BLIGHT_HURT, + AntarchyFabricSounds.CRAWLING_BLIGHT_BITE, + AntarchyFabricSounds.SKULKING_FRIGHT_SNARL, + AntarchyFabricSounds.SKULKING_FRIGHT_HURT, + AntarchyFabricSounds.SKULKING_FRIGHT_BITE, + AntarchyFabricSounds.SKULKING_FRIGHT_FLY_LOOP, AntarchyFabricSounds.DUCT_TAPE_USE, AntarchyFabricSounds.HERCULES_BEETLE_IDLE, AntarchyFabricSounds.HERCULES_BEETLE_HURT, @@ -263,10 +291,10 @@ public final class AntarchyFabricContent { AntarchyFabricSounds.HERCULES_BEETLE_CRY, AntarchyFabricSounds.HERCULES_BEETLE_CHARGE_START, AntarchyFabricSounds.HERCULES_BEETLE_KNOCKED_DOWN, - AntarchyFabricSounds.JUMPY_BUG_IDLE, + AntarchyFabricSounds.SPRINGBUG_IDLE, AntarchyFabricSounds.SPIT_BUG_IDLE, - AntarchyFabricSounds.JUMPY_BUG_HURT, - AntarchyFabricSounds.JUMPY_BUG_JUMP, + AntarchyFabricSounds.SPRINGBUG_HURT, + AntarchyFabricSounds.SPRINGBUG_JUMP, AntarchyFabricSounds.SPIT_BUG_HURT, AntarchyFabricSounds.SPIT_BUG_SPIT, AntarchyFabricSounds.BRUTALFLY_SPIT, @@ -280,23 +308,95 @@ public final class AntarchyFabricContent { AntarchyFabricSounds.JERRY_ADULT_IDLE, AntarchyFabricSounds.JERRY_ADULT_HURT, AntarchyFabricSounds.JERRY_ADULT_DEATH, - AntarchyFabricSounds.JERRY_ADULT_ATTACK + AntarchyFabricSounds.JERRY_ADULT_ATTACK, + AntarchyFabricSounds.WORM_HOOK_FLYING, + AntarchyFabricSounds.BLOOD_CRYSTAL_KATANA_DASH, + AntarchyFabricSounds.BLOOD_CRYSTAL_ARMOR_EQUIP, + AntarchyFabricSounds.BLOODGLASS_WARD_HEART_BREAK, + AntarchyFabricSounds.BLOODGLASS_WARD_HEART_REGEN, + AntarchyFabricSounds.KING_IDLE, + AntarchyFabricSounds.KING_HURT, + AntarchyFabricSounds.KING_DEATH, + AntarchyFabricSounds.KING_BITE, + AntarchyFabricSounds.QUEEN_IDLE, + AntarchyFabricSounds.QUEEN_HURT, + AntarchyFabricSounds.QUEEN_DEATH, + AntarchyFabricSounds.QUEEN_BITE, + AntarchyFabricSounds.QUEEN_ROAR, + AntarchyFabricSounds.KING_BEAM_SHOOT, + AntarchyFabricSounds.KING_FIREBALL_SHOOT, + AntarchyFabricSounds.KING_ICE_SPIKES, + AntarchyFabricSounds.KING_DECREE_CAST, + AntarchyFabricSounds.QUEEN_BEAM_SHOOT, + AntarchyFabricSounds.QUEEN_BEAM_START, + AntarchyFabricSounds.QUEEN_BEAM_LOOP, + AntarchyFabricSounds.QUEEN_BEAM_END, + AntarchyFabricSounds.KING_STOMP, + AntarchyFabricSounds.KING_ROAR, + AntarchyFabricSounds.KING_WING_FLAP, + AntarchyFabricSounds.KING_FLY_LOOP, + AntarchyFabricSounds.QUEEN_FLY_LOOP, + AntarchyFabricSounds.PRINCE_IDLE, + AntarchyFabricSounds.PRINCE_BITE, + AntarchyFabricSounds.PRINCE_SHOOT, + AntarchyFabricSounds.PRINCE_FLY, + AntarchyFabricSounds.PRINCE_STEP, + AntarchyFabricSounds.PRINCESS_IDLE, + AntarchyFabricSounds.PRINCESS_BITE, + AntarchyFabricSounds.PRINCESS_SHOOT, + AntarchyFabricSounds.PRINCESS_FLY, + AntarchyFabricSounds.PRINCESS_STEP, + AntarchyFabricSounds.KING_DECREE, + AntarchyFabricSounds.KING_SUCCESS, + AntarchyFabricSounds.KING_JUDGEMENT ); + AntarchySoundEvents.bindDimensionalTearSounds( + AntarchyFabricSounds.DIMENSIONAL_TEAR_OPEN, + AntarchyFabricSounds.DIMENSIONAL_TEAR_IDLE, + AntarchyFabricSounds.DIMENSIONAL_TEAR_CREATURE_LEAVES, + AntarchyFabricSounds.DIMENSIONAL_TEAR_CLOSE + ); + AntarchySoundEvents.bindHoverboardSounds(AntarchyFabricSounds.HOVERBOARD_MOUNT, AntarchyFabricSounds.HOVERBOARD_DISMOUNT, AntarchyFabricSounds.HOVERBOARD_IDLE); AntarchyObjects.setOctopusBomb(AntarchyFabricEntities.OCTOPUS_BOMB); AntarchyObjects.setTentacle(AntarchyFabricEntities.TENTACLE); + AntarchyObjects.setNightmare(AntarchyFabricEntities.NIGHTMARE); AntarchyObjects.setNightmarePortal(AntarchyFabricEntities.NIGHTMARE_PORTAL); + AntarchyObjects.setDimensionalTear(AntarchyFabricEntities.DIMENSIONAL_TEAR); AntarchyObjects.setNightmareBite(AntarchyFabricEntities.NIGHTMARE_BITE); + AntarchyObjects.setLucid(AntarchyFabricEntities.LUCID); + AntarchyObjects.setVortex(AntarchyFabricEntities.VORTEX); + AntarchyObjects.setWindVortex(() -> AntarchyFabricEntities.WIND_VORTEX.get()); + AntarchyObjects.setRoyalBlackHole(() -> AntarchyFabricEntities.ROYAL_BLACK_HOLE.get()); + AntarchyObjects.setRoyalAssailantBlackHole(() -> AntarchyFabricEntities.ROYAL_ASSAILANT_BLACK_HOLE.get()); + AntarchyObjects.setVortexChargeProjectile(() -> AntarchyFabricEntities.VORTEX_CHARGE_PROJECTILE.get()); + AntarchyObjects.setPrince(() -> AntarchyFabricEntities.PRINCE.get()); + AntarchyObjects.setPrincess(() -> AntarchyFabricEntities.PRINCESS.get()); + AntarchyObjects.setKing(() -> AntarchyFabricEntities.KING.get()); + AntarchyObjects.setQueen(() -> AntarchyFabricEntities.QUEEN.get()); + AntarchyObjects.setManticore(() -> AntarchyFabricEntities.MANTICORE.get()); + AntarchyObjects.setRoyalBolt(() -> AntarchyFabricEntities.ROYAL_BOLT.get()); + AntarchyObjects.setRoyalElementalProjectile(() -> AntarchyFabricEntities.ROYAL_ELEMENTAL_PROJECTILE.get()); + AntarchyObjects.setRoyalIceSpike(() -> AntarchyFabricEntities.ROYAL_ICE_SPIKE.get()); + AntarchyObjects.setPrinceEgg(() -> AntarchyFabricBlocks.PRINCE_EGG.get()); + AntarchyObjects.setPrincessEgg(() -> AntarchyFabricBlocks.PRINCESS_EGG.get()); + AntarchyObjects.setRoyalEggBlockEntity(() -> AntarchyFabricBlocks.ROYAL_EGG_BLOCK_ENTITY.get()); + AntarchyObjects.setVortexLens(() -> AntarchyFabricBlocks.VORTEX_LENS.get()); + AntarchyObjects.setVortexLensBlockEntity(() -> AntarchyFabricBlocks.VORTEX_LENS_BLOCK_ENTITY.get()); + AntarchyObjects.setDimensionalTearMarker(() -> AntarchyFabricBlocks.DIMENSIONAL_TEAR_MARKER.get()); + AntarchyObjects.setDimensionalTearMarkerBlockEntity(() -> AntarchyFabricBlocks.DIMENSIONAL_TEAR_MARKER_BLOCK_ENTITY.get()); AntarchyObjects.setKrakensGraspTrident(AntarchyFabricEntities.KRAKENS_GRASP_TRIDENT); AntarchyObjects.setLotus(() -> AntarchyFabricBlocks.LOTUS.get()); AntarchyObjects.setKrakenTentacle(() -> AntarchyFabricItems.KRAKEN_TENTACLE.get()); AntarchyObjects.setKrakensGrasp(() -> AntarchyFabricItems.KRAKENS_GRASP.get()); AntarchyObjects.setOuranwoodDeer(AntarchyFabricEntities.OURANWOOD_DEER); - AntarchyObjects.setDimensionalTear(AntarchyFabricEntities.DIMENSIONAL_TEAR); - AntarchyObjects.setGlimmer(AntarchyFabricEntities.GLIMMER); AntarchyObjects.setRollyPolly(AntarchyFabricEntities.ROLLY_POLLY); + AntarchyObjects.setGlimmer(AntarchyFabricEntities.GLIMMER); AntarchyObjects.setSpiritApple(() -> AntarchyFabricItems.SPIRIT_APPLE.get()); AntarchyObjects.setGlimmeringEffect(() -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.GLIMMERING)); + AntarchyObjects.setRoyalVitalityPenaltyEffect(() -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.ROYAL_VITALITY_PENALTY)); + AntarchyObjects.setBleedingEffect(() -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.BLEEDING)); + AntarchyObjects.setBloodMoonEffect(() -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.BLOOD_MOON)); AntarchyObjects.setElka(AntarchyFabricEntities.ELKA); AntarchyObjects.setPeach(() -> AntarchyFabricItems.PEACH.get()); AntarchyObjects.setCorn(() -> AntarchyFabricItems.CORN.get()); @@ -312,18 +412,24 @@ public final class AntarchyFabricContent { AntarchyObjects.setLumenBucket(() -> AntarchyFabricItems.LUMEN_BUCKET.get()); AntarchyObjects.setLumenBlock(() -> AntarchyFabricBlocks.LUMEN_BLOCK.get()); AntarchyObjects.setLumenFroglight(() -> AntarchyFabricBlocks.LUMEN_FROGLIGHT.get()); + AntarchyObjects.setGlimmeringReed(() -> AntarchyFabricBlocks.GLIMMERING_REED.get()); AntarchyObjects.setPeachLeavesParticle(() -> AntarchyFabricMisc.PEACH_LEAVES_PARTICLE.get()); + AntarchyObjects.setBugSprayParticle(() -> AntarchyFabricMisc.BUG_SPRAY_PARTICLE.get()); AntarchyObjects.setLotusPollen(() -> AntarchyFabricMisc.LOTUS_POLLEN.get()); AntarchyObjects.setNightmareFireFlame(() -> AntarchyFabricMisc.NIGHTMARE_FIRE_FLAME.get()); AntarchyObjects.setLucidBoltImpactSmall(() -> AntarchyFabricMisc.LUCID_BOLT_IMPACT_SMALL.get()); AntarchyObjects.setLucidBoltImpactLarge(() -> AntarchyFabricMisc.LUCID_BOLT_IMPACT_LARGE.get()); AntarchyObjects.setDorrieInventoryMenu(AntarchyFabricMisc.DORRIE_INVENTORY_MENU); + AntarchyObjects.setRoyalJudgmentMenu(AntarchyFabricMisc.ROYAL_JUDGMENT_MENU); + AntarchyObjects.setGiantFryingPanMenu(AntarchyFabricMisc.GIANT_FRYING_PAN_MENU); AntarchyObjects.setCritterCage(() -> AntarchyFabricItems.CRITTER_CAGE.get()); AntarchyObjects.setCritterCageBlock(() -> AntarchyFabricBlocks.CRITTER_CAGE_BLOCK.get()); AntarchyObjects.setCritterCageBlockEntity(() -> AntarchyFabricBlocks.CRITTER_CAGE_BLOCK_ENTITY.get()); AntarchyObjects.setLucidAnchor(() -> AntarchyFabricBlocks.LUCID_ANCHOR.get()); AntarchyObjects.setLucidAnchorBlockEntity(() -> AntarchyFabricBlocks.LUCID_ANCHOR_BLOCK_ENTITY.get()); AntarchyObjects.setCritterCageProjectile(() -> AntarchyFabricEntities.CRITTER_CAGE_PROJECTILE.get()); + AntarchyObjects.setWormHookProjectile(() -> AntarchyFabricEntities.WORM_HOOK_PROJECTILE.get()); + AntarchyObjects.setWormHook(() -> AntarchyFabricItems.WORM_HOOK.get()); AntarchyObjects.bind( AntarchyFabricEntities.EASTER_BUNNY, AntarchyFabricEntities.FLYING_SQUIRREL, @@ -338,14 +444,14 @@ public final class AntarchyFabricContent { AntarchyFabricEntities.CATERPILLAR, AntarchyFabricEntities.BUTTERFLY, AntarchyFabricEntities.REVERIE, - AntarchyFabricEntities.TRIFFID, + AntarchyFabricEntities.FLYTRAP, AntarchyFabricEntities.BRUTALFLY, AntarchyFabricEntities.BRUTALFLY_ORB, AntarchyFabricEntities.HUSH_PROJECTILE, AntarchyFabricEntities.TORETERROR, AntarchyFabricEntities.WATER_BOMB, - AntarchyFabricEntities.CREEPING_HORROR, - AntarchyFabricEntities.LURKING_TERROR, + AntarchyFabricEntities.CRAWLING_BLIGHT, + AntarchyFabricEntities.SKULKING_FRIGHT, AntarchyFabricEntities.STINK_BUG, AntarchyFabricEntities.CHEEP, AntarchyFabricEntities.DORRIE, @@ -374,7 +480,7 @@ public final class AntarchyFabricContent { () -> AntarchyFabricBlocks.SHELLSTONE_BRICK_SLAB.get(), () -> AntarchyFabricBlocks.SHELLSTONE_BRICK_WALL.get(), () -> AntarchyFabricBlocks.CLOUD_BLOCK.get(), - () -> AntarchyFabricBlocks.TRIFFID_GOO_BLOCK.get(), + () -> AntarchyFabricBlocks.FLYTRAP_GOO_BLOCK.get(), () -> AntarchyFabricBlocks.PALE_NYXITE.get(), () -> AntarchyFabricBlocks.NYXITE_SPIKE.get(), () -> AntarchyFabricBlocks.CHITIN_BLOCK.get(), @@ -394,7 +500,7 @@ public final class AntarchyFabricContent { () -> AntarchyFabricItems.STINK_BUG_ITEM.get(), () -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.DREAD), () -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.PARALYZED), - () -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.INVERTED), + AnthologyEffects::inverted, () -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.STINKY), () -> AntarchyFabricBlocks.OURANWOOD_ACORN_BLOCK.get(), () -> AntarchyFabricBlocks.MOSSY_OURANWOOD_LOG.get(), @@ -406,8 +512,8 @@ public final class AntarchyFabricContent { () -> AntarchyFabricBlocks.ORANGE_MILKWEED.get(), () -> AntarchyFabricBlocks.PINK_MILKWEED.get(), () -> AntarchyFabricBlocks.BED_BUG_EGG.get(), - () -> AntarchyFabricBlocks.CREEPING_HORROR_EGG.get(), - () -> AntarchyFabricBlocks.LURKING_TERROR_EGG.get(), + () -> AntarchyFabricBlocks.CRAWLING_BLIGHT_EGG.get(), + () -> AntarchyFabricBlocks.SKULKING_FRIGHT_EGG.get(), () -> AntarchyFabricBlocks.WASP_NEST.get(), () -> AntarchyFabricBlocks.HUSHWEED.get(), () -> AntarchyFabricBlocks.OURANWOOD_SQUIRREL_NEST.get(), @@ -422,48 +528,41 @@ public final class AntarchyFabricContent { () -> AntarchyFabricMisc.STINKY_GAS.get(), () -> AntarchyFabricMisc.STINKY_FLY.get(), () -> AntarchyFabricMisc.PEACH_LEAVES_PARTICLE.get(), - () -> AntarchyFabricMisc.attributeHolder(AntarchyFabricMisc.SCALE), () -> AntarchyFabricMisc.attributeHolder(AntarchyFabricMisc.DOUBLE_DAMAGE_CHANCE), () -> AntarchyFabricMisc.attributeHolder(AntarchyFabricMisc.BLOODGLASS_MAX_HEARTS), () -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.BLOODGLASS_WARD) ); LucidEyeProjectileEntity.defaultItemSupplier = () -> AntarchyFabricItems.LUCID_PEARL.get(); - LucidEntity.invertedEffectSupplier = () -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.INVERTED); + LucidEntity.invertedEffectSupplier = AnthologyEffects::inverted; LucidEntity.boltEntityTypeSupplier = () -> AntarchyFabricEntities.LUCID_BOLT.get(); - LucidBoltEntity.invertedEffectSupplier = () -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.INVERTED); - LucidEyeProjectileEntity.invertedEffectSupplier = () -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.INVERTED); + LucidBoltEntity.invertedEffectSupplier = AnthologyEffects::inverted; + LucidEyeProjectileEntity.invertedEffectSupplier = AnthologyEffects::inverted; + VortexEntity.windVortexTypeSupplier = () -> AntarchyFabricEntities.WIND_VORTEX.get(); + VortexChargeProjectileEntity.defaultItemSupplier = () -> AntarchyFabricItems.VORTEX_CHARGE.get(); + VortexChargeProjectileEntity.projectileTypeSupplier = () -> AntarchyFabricEntities.VORTEX_CHARGE_PROJECTILE.get(); + VortexChargeProjectileEntity.windVortexTypeSupplier = () -> AntarchyFabricEntities.WIND_VORTEX.get(); ScorpionWhipTetherSync.setSink(AntarchyFabricNetworking::syncScorpionWhipTether); - HerculesBeetleImpactShakeSync.setSink((player, ticks) -> { - com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakePayload payload = new com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakePayload(ticks); - com.craisinlord.antarchy.fabric.network.AntarchyFabricNetworking.sendToPlayer(player, payload, com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakePayload.STREAM_CODEC, com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakePayload.TYPE); - }); - ImpactShakeSync.setSink((player, payload) -> - com.craisinlord.antarchy.fabric.network.AntarchyFabricNetworking.sendToPlayer(player, payload, com.craisinlord.antarchy.content.network.ImpactShakePayload.STREAM_CODEC, com.craisinlord.antarchy.content.network.ImpactShakePayload.TYPE)); - HordeIntensitySync.setSink((player, payload) -> - com.craisinlord.antarchy.fabric.network.AntarchyFabricNetworking.sendToPlayer(player, payload, com.craisinlord.antarchy.content.network.HordeIntensityPayload.STREAM_CODEC, com.craisinlord.antarchy.content.network.HordeIntensityPayload.TYPE)); + WormHookTetherSync.setSink(AntarchyFabricNetworking::syncWormHookTether); + HerculesBeetleImpactShakeSync.setSink((player, ticks) -> com.craisinlord.antarchy.fabric.network.AntarchyFabricNetworking.send(player, new com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakePayload(ticks))); + com.craisinlord.antarchy.content.network.KingJudgmentFlashSync.setSink((player, ticks) -> com.craisinlord.antarchy.fabric.network.AntarchyFabricNetworking.send(player, new com.craisinlord.antarchy.content.network.KingJudgmentFlashPayload(ticks))); + HordeIntensitySync.setSink((player, payload) -> com.craisinlord.antarchy.fabric.network.AntarchyFabricNetworking.send(player, payload)); + TigerEyeCamouflageSync.setSendToPlayer((player, payload) -> com.craisinlord.antarchy.fabric.network.AntarchyFabricNetworking.send(player, payload)); + TigerEyeCamouflageSync.setSyncSelfAndTracking(AntarchyFabricNetworking::syncTigerEyeCamouflage); BloodCrystalKatanaItem.setTrailCallback(AntarchyFabricNetworking::syncKatanaTrail); - com.craisinlord.antarchy.content.gravity.AntarchyGravityApi.setSyncDispatcher(AntarchyFabricNetworking::syncGravityEntity); - com.craisinlord.antarchy.content.time.TimeDilationApi.setSyncDispatcher( - com.craisinlord.antarchy.fabric.network.AntarchyFabricTimeDilationNetworking::syncRate); - com.craisinlord.antarchy.content.time.TimeDilationApi.setFieldSyncDispatcher( - com.craisinlord.antarchy.fabric.network.AntarchyFabricTimeDilationNetworking::syncFields); - AntarchyObjects.setTimeDilationField(() -> AntarchyFabricEntities.TIME_DILATION_FIELD.get()); AntarchyEnchantments.bind(() -> AntarchyFabricMisc.FEATHER_RISING.get(), () -> AntarchyFabricMisc.CHRONOSPHERE.get()); - AntarchyObjects.setRoyalAssailantBlackHole(() -> AntarchyFabricEntities.ROYAL_ASSAILANT_BLACK_HOLE.get()); - AntarchyObjects.setDilatedEffect(() -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.DILATED)); - AntarchyObjects.setContractedEffect(() -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.CONTRACTED)); - com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageSync.setSendToPlayer((player, payload) -> - AntarchyFabricNetworking.sendToPlayer(player, payload, - com.craisinlord.antarchy.content.network.TigerEyeCamouflageStatePayload.STREAM_CODEC, - com.craisinlord.antarchy.content.network.TigerEyeCamouflageStatePayload.TYPE)); - com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageSync.setSyncSelfAndTracking(AntarchyFabricNetworking::syncTigerEyeCamouflage); - com.craisinlord.antarchy.fabric.TigerEyeFabricManager.register(); + com.craisinlord.antarchy.content.effect.AntarchySizeScaling.register(AntarchyFabricMisc.SHRINKING_EFFECT, AntarchyFabricMisc.GROWTH_EFFECT); + AntarchyObjects.setHerculesBeetle(AntarchyFabricEntities.HERCULES_BEETLE); + AntarchyObjects.setRawVenison(() -> AntarchyFabricItems.RAW_VENISON.get()); + AntarchyObjects.setCookedVenison(() -> AntarchyFabricItems.COOKED_VENISON.get()); + AntarchyFabricMisc.POI_TYPES.register(); + AntarchyFabricMisc.VILLAGER_PROFESSIONS.register(); AntarchyFabricEvents.register(); if (isSupportedInfinityLoaded()) { InfinityCompat.bind(new FabricInfinityCompat()); + InfinityConfigRefresh.refreshIfStale(FabricLoader.getInstance().getConfigDir()); } } diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java index 53860bf2..c9db0df0 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java @@ -1,31 +1,36 @@ package com.craisinlord.antarchy.fabric; import com.craisinlord.antarchy.fabric.registry.AntarchyFabricBlocks; import com.craisinlord.antarchy.fabric.registry.AntarchyFabricItems; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricMisc; import com.craisinlord.antarchy.content.entity.ReverieEntity; import com.craisinlord.antarchy.content.entity.ant.RainbowAntEntity; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyObjects; -import com.craisinlord.antarchy.content.block.DuctTapeBlock; import com.craisinlord.antarchy.content.item.AttitudeAdjusterItem; import com.craisinlord.antarchy.content.item.AttitudeAdjusterSlamManager; import com.craisinlord.antarchy.content.fluid.AntarchyFluidChecks; import com.craisinlord.antarchy.content.entity.MissileSquidEntity; import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityTransition; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; +import com.craisinlord.anthology.gravity.GravityTransition; import com.craisinlord.antarchy.content.horde.CavarynHordeManager; import com.craisinlord.antarchy.content.portal.PermanentPortalManager; +import com.craisinlord.antarchy.content.portalgun.PortalGunProjectileEntity; +import com.craisinlord.antarchy.content.portalgun.PortalGunSavedData; import com.craisinlord.antarchy.content.command.CavarynCommand; import com.craisinlord.antarchy.content.command.CaterpillarCommand; -import com.craisinlord.antarchy.content.command.GravityCommand; +import com.craisinlord.antarchy.content.command.DimensionalTearCommand; import com.craisinlord.antarchy.content.command.QueenLocateCommand; -import com.craisinlord.antarchy.content.time.TimeDilationCommand; -import com.craisinlord.antarchy.content.time.TimeDilationManager; +import com.craisinlord.antarchy.content.command.RoyalCommand; +import com.craisinlord.antarchy.content.item.WormHookTetherManager; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; import net.fabricmc.fabric.api.entity.event.v1.ServerLivingEntityEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; +import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; +import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; import net.fabricmc.fabric.api.object.builder.v1.trade.TradeOfferHelper; import net.fabricmc.fabric.api.event.player.AttackEntityCallback; import net.fabricmc.fabric.api.event.player.PlayerBlockBreakEvents; @@ -34,6 +39,7 @@ import com.craisinlord.antarchy.content.dispenser.SquidzookaDispenseBehavior; import com.craisinlord.antarchy.content.dispenser.RpoLauncherDispenseBehavior; import com.craisinlord.antarchy.content.dispenser.SizeRayDispenseBehavior; import com.craisinlord.antarchy.content.dispenser.WaterCannonDispenseBehavior; +import com.craisinlord.antarchy.content.dispenser.BugSprayDispenseBehavior; import net.minecraft.world.level.block.ComposterBlock; import net.minecraft.world.level.block.DispenserBlock; import net.minecraft.core.BlockPos; @@ -55,26 +61,27 @@ import java.util.Set; import java.util.UUID; public final class AntarchyFabricEvents { - private static final AntarchyGravityTransition INVERTED_CLEAR_TRANSITION = new AntarchyGravityTransition(12); + private static final GravityTransition INVERTED_CLEAR_TRANSITION = new GravityTransition(12); private static final Set invertedPlayers = new HashSet<>(); private AntarchyFabricEvents() { } public static void register() { - net.fabricmc.fabric.api.networking.v1.EntityTrackingEvents.START_TRACKING.register((trackedEntity, player) -> { - if (trackedEntity instanceof com.craisinlord.antarchy.content.time.TimeDilationEntityAccess access) { - com.craisinlord.antarchy.fabric.network.AntarchyFabricTimeDilationNetworking.syncRateToPlayer( - player, trackedEntity, access.antarchy$getTimeDilationRate() - ); - } + ServerLifecycleEvents.SERVER_STOPPING.register(server -> PortalGunProjectileEntity.releaseAllProjectileTickets()); + ServerLifecycleEvents.SERVER_STOPPING.register(com.craisinlord.antarchy.content.portalgun.PortalGunResetManager::clear); + ServerLifecycleEvents.SERVER_STOPPING.register(server -> com.craisinlord.antarchy.content.entity.ant.AntArrivalScheduler.clear()); + ServerLifecycleEvents.SERVER_STOPPING.register(server -> com.craisinlord.antarchy.content.portalgun.PortalGunMoonAimSync.clear()); + ServerPlayConnectionEvents.JOIN.register((handler, sender, server) -> { + PortalGunSavedData.clearMissingGuns(handler.player); }); CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> { CavarynCommand.register(dispatcher); - GravityCommand.register(dispatcher); - QueenLocateCommand.register(dispatcher); CaterpillarCommand.register(dispatcher); - TimeDilationCommand.register(dispatcher); + DimensionalTearCommand.register(dispatcher); + QueenLocateCommand.register(dispatcher); + RoyalCommand.register(dispatcher); + com.craisinlord.antarchy.content.command.PortalGunCommand.register(dispatcher); }); DispenserBlock.registerBehavior(AntarchyFabricItems.SQUIDZOOKA.get(), new SquidzookaDispenseBehavior()); @@ -82,6 +89,7 @@ public final class AntarchyFabricEvents { DispenserBlock.registerBehavior(AntarchyFabricItems.WATER_CANNON.get(), new WaterCannonDispenseBehavior()); DispenserBlock.registerBehavior(AntarchyFabricItems.SHRINK_RAY.get(), new SizeRayDispenseBehavior()); DispenserBlock.registerBehavior(AntarchyFabricItems.GROWTH_RAY.get(), new SizeRayDispenseBehavior()); + DispenserBlock.registerBehavior(AntarchyFabricItems.BUG_SPRAY.get(), new BugSprayDispenseBehavior()); AntarchyFabricDispenserBehaviors.register(); registerTrades(); @@ -94,6 +102,11 @@ public final class AntarchyFabricEvents { ComposterBlock.COMPOSTABLES.put(AntarchyFabricBlocks.PEACH_LEAVES.get().asItem(), 0.3f); ComposterBlock.COMPOSTABLES.put(AntarchyFabricItems.PEACH_SAPLING_ITEM.get(), 0.3f); ComposterBlock.COMPOSTABLES.put(AntarchyFabricItems.NADIR_SAPLING_ITEM.get(), 0.3f); + ComposterBlock.COMPOSTABLES.put(AntarchyFabricItems.NADIR_FERN_ITEM.get(), 0.3f); + ComposterBlock.COMPOSTABLES.put(AntarchyFabricItems.LARGE_NADIR_FERN_ITEM.get(), 0.5f); + ComposterBlock.COMPOSTABLES.put(AntarchyFabricItems.DUSKBELL_ITEM.get(), 0.65f); + ComposterBlock.COMPOSTABLES.put(AntarchyFabricItems.WHIRLFLOWER_ITEM.get(), 0.65f); + ComposterBlock.COMPOSTABLES.put(AntarchyFabricItems.GOREVINE_ITEM.get(), 0.5f); ComposterBlock.COMPOSTABLES.put(AntarchyFabricItems.CORN.get(), 0.65f); ComposterBlock.COMPOSTABLES.put(AntarchyFabricItems.CORN_SEEDS.get(), 0.3f); ComposterBlock.COMPOSTABLES.put(AntarchyFabricItems.PEACH.get(), 0.65f); @@ -141,12 +154,31 @@ public final class AntarchyFabricEvents { } }); + net.fabricmc.fabric.api.event.player.UseItemCallback.EVENT.register((player, world, hand) -> { + InteractionResult result = com.craisinlord.antarchy.content.item.GiantFryingPanItem.handleMainHandUse(world, player, hand); + if (result == InteractionResult.PASS) { + return net.minecraft.world.InteractionResultHolder.pass(ItemStack.EMPTY); + } + ItemStack held = player.getItemInHand(hand); + return result.consumesAction() + ? net.minecraft.world.InteractionResultHolder.sidedSuccess(held, world.isClientSide) + : net.minecraft.world.InteractionResultHolder.fail(held); + }); AttackEntityCallback.EVENT.register((player, world, hand, entity, hitResult) -> { + if (player.getItemInHand(hand).getItem() instanceof com.craisinlord.antarchy.content.item.PortalGunItem) { + return InteractionResult.FAIL; + } if (!world.isClientSide && player.getItemInHand(hand).getItem() instanceof AttitudeAdjusterItem && player.getAttackStrengthScale(0.5F) >= 0.95F) { AttitudeAdjusterSlamManager.markSpecialHit(player); } return InteractionResult.PASS; }); + net.fabricmc.fabric.api.event.player.AttackBlockCallback.EVENT.register((player, world, hand, pos, direction) -> { + if (player.getItemInHand(hand).getItem() instanceof com.craisinlord.antarchy.content.item.PortalGunItem) { + return InteractionResult.FAIL; + } + return InteractionResult.PASS; + }); PlayerBlockBreakEvents.AFTER.register((world, player, pos, state, blockEntity) -> { if (!world.isClientSide && player instanceof ServerPlayer serverPlayer) { CavarynHordeManager.recordBlockBreak(serverPlayer, state, pos); @@ -158,18 +190,32 @@ public final class AntarchyFabricEvents { for (ServerLevel level : server.getAllLevels()) { CavarynHordeManager.tick(level); com.craisinlord.antarchy.content.horde.CavarynCreatureSpawner.tick(level); + com.craisinlord.antarchy.content.entity.glimmer.GlimmerNightSpawner.tick(level); + ThoraxisUndersideManager.tick(level); + com.craisinlord.antarchy.content.worldgen.elythia.KingsTreeGridFeature.tickPendingSpawns(level); tickInvertedPlayers(level, activeThisTick); - tickDuctTapePlayers(level); tickIchorPlayers(level); tickBloodglassRecharge(level); AttitudeAdjusterSlamManager.tick(level); + for (ServerPlayer player : level.players()) { + WormHookTetherManager.tick(player); + } } - TimeDilationManager.tickServer(server); + com.craisinlord.antarchy.content.entity.ant.AntArrivalScheduler.tick(server); invertedPlayers.retainAll(activeThisTick); }); } private static void registerTrades() { + int[] pestControlSlots = com.craisinlord.antarchy.content.entity.trades.PestControlTradeManager.slotsPerLevel(); + for (int level = 1; level <= pestControlSlots.length; level++) { + final int tradeLevel = level; + for (int index = 0; index < pestControlSlots[level - 1]; index++) { + final int tradeIndex = index; + TradeOfferHelper.registerVillagerOffers(AntarchyFabricMisc.PEST_CONTROL.get(), tradeLevel, + factories -> factories.add(com.craisinlord.antarchy.content.entity.trades.PestControlTradeManager.listing(tradeLevel, tradeIndex))); + } + } TradeOfferHelper.registerVillagerOffers(VillagerProfession.FARMER, 1, factories -> factories.add((trader, random) -> new MerchantOffer( new ItemStack(AntarchyFabricItems.CORN.get(), 20), @@ -243,9 +289,9 @@ public final class AntarchyFabricEvents { continue; } - if (AntarchyGravityApi.getGravityDirection(player) == AntarchyGravityDirection.UP - || AntarchyGravityApi.isGravityForced(player)) { - AntarchyGravityApi.setGravityDirection(player, AntarchyGravityDirection.DOWN, INVERTED_CLEAR_TRANSITION); + if (GravityApi.getGravityDirection(player) == GravityDirection.UP + || GravityApi.isGravityForced(player)) { + GravityApi.setGravityDirection(player, GravityDirection.DOWN, INVERTED_CLEAR_TRANSITION); } notifyNearbyReveriesOfInversionChange(player); } @@ -260,14 +306,6 @@ public final class AntarchyFabricEvents { } } - private static void tickDuctTapePlayers(ServerLevel level) { - for (Player player : level.players()) { - if (DuctTapeBlock.shouldTickStuckEntity(player)) { - DuctTapeBlock.tickStuckEntity(player); - } - } - } - private static void tickIchorPlayers(ServerLevel level) { if (!AntarchySettings.ichorWitherEnabled()) { return; diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyWoodTypes.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyWoodTypes.java index a028df0e..e9fd50bb 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyWoodTypes.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyWoodTypes.java @@ -9,6 +9,8 @@ public final class AntarchyWoodTypes { public static final WoodType OURANWOOD = register("ouranwood"); public static final WoodType PEACH = register("peach"); public static final WoodType NADIR = register("nadir"); + public static final WoodType ROYAL = register("royal"); + public static final WoodType TRUFFALO = register("truffalo"); private AntarchyWoodTypes() { } diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/BloodglassManager.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/BloodglassManager.java index 04415e7f..8f2128e7 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/BloodglassManager.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/BloodglassManager.java @@ -2,6 +2,7 @@ package com.craisinlord.antarchy.fabric; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.bloodglass.BloodglassAccess; import com.craisinlord.antarchy.content.item.BloodCrystalArmorItem; import com.craisinlord.antarchy.fabric.network.AntarchyFabricNetworking; @@ -10,7 +11,6 @@ import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; import net.minecraft.core.particles.DustParticleOptions; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; -import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; import net.minecraft.tags.TagKey; import net.minecraft.world.damagesource.DamageType; @@ -55,7 +55,7 @@ public final class BloodglassManager { ServerLevel serverLevel = (ServerLevel) player.level(); serverLevel.broadcastEntityEvent(player, (byte) 2); - serverLevel.playSound(null, player.blockPosition(), SoundEvents.GLASS_BREAK, SoundSource.PLAYERS, 1.0f, 1.0f); + serverLevel.playSound(null, player.blockPosition(), AntarchySoundEvents.BLOODGLASS_WARD_HEART_BREAK.get(), SoundSource.PLAYERS, 1.0f, 1.0f); serverLevel.sendParticles( new DustParticleOptions(new Vector3f(0.85f, 0.18f, 0.38f), 1.2f), player.getX(), player.getEyeY(), player.getZ(), @@ -97,9 +97,7 @@ public final class BloodglassManager { } } } else if (!fromIsBC) { - // Count BC pieces: explicitly include the new piece (to) since getItemBySlot(slot) - // may not reflect the new item yet when onEquipItem fires on Fabric. - int bcPieces = 1; // the piece being equipped now + int bcPieces = 1; for (EquipmentSlot s : new EquipmentSlot[]{EquipmentSlot.HEAD, EquipmentSlot.CHEST, EquipmentSlot.LEGS, EquipmentSlot.FEET}) { if (s == slot) continue; if (player.getItemBySlot(s).getItem() instanceof BloodCrystalArmorItem) bcPieces++; @@ -110,7 +108,6 @@ public final class BloodglassManager { access.antarchy$setArmorRechargeTimer(AntarchySettings.bloodCrystalArmorShieldRechargeTicks()); } } else { - // BC → BC swap: remove old slot, queue new one if (access.antarchy$getArmorShieldsActive() > 0) { access.antarchy$setArmorShieldsActive(access.antarchy$getArmorShieldsActive() - 1); } else if (access.antarchy$getArmorShieldLostCount() > 0) { @@ -131,9 +128,6 @@ public final class BloodglassManager { - access.antarchy$getArmorShieldLostCount()); int targetCap = Math.min(amplifier + 1, cap); int currentCap = access.antarchy$getAppleShieldsActive() + access.antarchy$getAppleShieldLostCount(); - // Only grant newly-added capacity (e.g. first application, or a higher amplifier). - // A mere duration refresh of an already-active ward must not reset shields that are - // already lost, nor restart their recharge timer. if (targetCap > currentCap) { access.antarchy$setAppleShieldsActive(access.antarchy$getAppleShieldsActive() + (targetCap - currentCap)); if (player instanceof ServerPlayer sp) syncBloodglass(sp); @@ -186,7 +180,7 @@ public final class BloodglassManager { if (changed) { syncBloodglass(player); - player.playNotifySound(SoundEvents.AMETHYST_BLOCK_CHIME, SoundSource.PLAYERS, 0.6f, 1.6f); + player.playNotifySound(AntarchySoundEvents.BLOODGLASS_WARD_HEART_REGEN.get(), SoundSource.PLAYERS, 1.0f, 1.0f); } } diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/FabricInfinityCompat.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/FabricInfinityCompat.java index c4b87547..5950cb2a 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/FabricInfinityCompat.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/FabricInfinityCompat.java @@ -2,6 +2,7 @@ package com.craisinlord.antarchy.fabric; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.compat.infinity.InfinityCompatBridge; +import com.craisinlord.antarchy.compat.infinity.InfinityWarpResult; import net.lerariemann.infinity.util.InfinityMethods; import net.lerariemann.infinity.util.teleport.PortalCreator; import net.lerariemann.infinity.util.teleport.WarpLogic; @@ -38,13 +39,15 @@ public final class FabricInfinityCompat implements InfinityCompatBridge { } @Override - public boolean requestWarp(ServerPlayer player, ResourceLocation dimensionId) { + public InfinityWarpResult requestWarp(ServerPlayer player, ResourceLocation dimensionId) { try { WarpLogic.requestWarp(player, dimensionId, false); - return true; + return InfinityWarpResult.PENDING; } catch (Throwable throwable) { Antarchy.LOGGER.error("[Antarchy] Failed to request an Infinity warp to {}", dimensionId, throwable); - return false; + return InfinityGenerationFailure.consume(dimensionId) + ? InfinityWarpResult.FAILED_GENERATION + : InfinityWarpResult.REJECTED; } } diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/InfinityGenerationFailure.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/InfinityGenerationFailure.java new file mode 100644 index 00000000..65273889 --- /dev/null +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/InfinityGenerationFailure.java @@ -0,0 +1,20 @@ +package com.craisinlord.antarchy.fabric; + +import net.minecraft.resources.ResourceLocation; + +public final class InfinityGenerationFailure { + private static final ThreadLocal FAILURE = new ThreadLocal<>(); + + private InfinityGenerationFailure() { + } + + public static void mark(ResourceLocation dimensionId) { + FAILURE.set(dimensionId); + } + + public static boolean consume(ResourceLocation dimensionId) { + ResourceLocation failed = FAILURE.get(); + FAILURE.remove(); + return dimensionId.equals(failed); + } +} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyClothConfigScreenBuilder.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyClothConfigScreenBuilder.java new file mode 100644 index 00000000..5d755397 --- /dev/null +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyClothConfigScreenBuilder.java @@ -0,0 +1,68 @@ +package com.craisinlord.antarchy.fabric.client; + +import com.craisinlord.antarchy.fabric.AntarchyConfigModuleFabric; +import com.craisinlord.antarchy.fabric.AntarchyConfigModuleFabric.ConfigSection; +import com.craisinlord.antarchy.fabric.AntarchyConfigModuleFabric.SettingBinding; +import me.shedaniel.clothconfig2.api.ConfigBuilder; +import me.shedaniel.clothconfig2.api.ConfigCategory; +import me.shedaniel.clothconfig2.api.ConfigEntryBuilder; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.network.chat.Component; + +import java.util.EnumMap; +import java.util.Map; + +public final class AntarchyClothConfigScreenBuilder { + private AntarchyClothConfigScreenBuilder() { + } + + public static Screen build(Screen parent) { + ConfigBuilder builder = ConfigBuilder.create() + .setParentScreen(parent) + .setTitle(Component.translatable("antarchy.config.title")); + builder.setSavingRunnable(AntarchyConfigModuleFabric::persist); + + ConfigEntryBuilder entryBuilder = builder.entryBuilder(); + Map categories = new EnumMap<>(ConfigSection.class); + for (ConfigSection section : ConfigSection.values()) { + categories.put(section, builder.getOrCreateCategory(Component.literal(displayName(section)))); + } + + for (SettingBinding binding : AntarchyConfigModuleFabric.getBindings().values()) { + addEntry(entryBuilder, categories.get(binding.getSection()), binding); + } + + return builder.build(); + } + + private static void addEntry(ConfigEntryBuilder entryBuilder, ConfigCategory category, SettingBinding binding) { + Class type = binding.getType(); + Component label = Component.literal(binding.getName()); + + if (type == boolean.class) { + category.addEntry(entryBuilder.startBooleanToggle(label, (Boolean) binding.getValue()) + .setSaveConsumer(binding::setValue) + .build()); + } else if (type == int.class) { + category.addEntry(entryBuilder.startIntField(label, (Integer) binding.getValue()) + .setSaveConsumer(binding::setValue) + .build()); + } else if (type == double.class) { + category.addEntry(entryBuilder.startDoubleField(label, (Double) binding.getValue()) + .setSaveConsumer(binding::setValue) + .build()); + } else if (type == float.class) { + category.addEntry(entryBuilder.startFloatField(label, (Float) binding.getValue()) + .setSaveConsumer(binding::setValue) + .build()); + } + } + + private static String displayName(ConfigSection section) { + return switch (section) { + case MOBS -> "Mobs"; + case TOOLS -> "Tools"; + case MISC -> "Misc"; + }; + } +} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClient.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClient.java index 4570a6e8..c539c854 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClient.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClient.java @@ -1,14 +1,45 @@ package com.craisinlord.antarchy.fabric.client; +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.client.QueenMusicHandler; import com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking; +import com.craisinlord.antarchy.fabric.client.SeparateLargeItemModels; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricSounds; import net.fabricmc.api.ClientModInitializer; +import net.fabricmc.fabric.api.client.model.loading.v1.ModelLoadingPlugin; +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; +import net.fabricmc.fabric.api.resource.IdentifiableResourceReloadListener; +import net.fabricmc.fabric.api.resource.ResourceManagerHelper; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.packs.PackType; +import net.minecraft.server.packs.resources.PreparableReloadListener; +import net.minecraft.server.packs.resources.ResourceManager; +import net.minecraft.util.profiling.ProfilerFiller; + +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Executor; public final class AntarchyFabricClient implements ClientModInitializer { @Override public void onInitializeClient() { + com.craisinlord.antarchy.Antarchy.physicalClient = true; + com.craisinlord.antarchy.content.AntarchyAnthologyHooks.registerClient(); + ModelLoadingPlugin.register(plugin -> plugin.addModels(SeparateLargeItemModels.all())); + ClientTickEvents.END_CLIENT_TICK.register(client -> QueenMusicHandler.tick(client, AntarchyFabricSounds.THE_QUEEN.get())); AntarchyFabricClientNetworking.register(); - AntarchyFabricClientNetworking.bootstrapMultipartClient(); AntarchyFabricClientBootstrap.register(); + ResourceManagerHelper.get(PackType.CLIENT_RESOURCES).registerReloadListener(new IdentifiableResourceReloadListener() { + @Override + public ResourceLocation getFabricId() { + return new ResourceLocation(Antarchy.MODID, "tiger_eye_camouflage_client_cache"); + } + + @Override + public CompletableFuture reload(PreparableReloadListener.PreparationBarrier barrier, ResourceManager manager, + ProfilerFiller prepareProfiler, ProfilerFiller applyProfiler, + Executor prepareExecutor, Executor applyExecutor) { + return barrier.wait(null).thenRunAsync(TigerEyeCamouflageClientHandler::clearClientCaches, applyExecutor); + } + }); } } - diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java index 3e6b34ba..32ea6196 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java @@ -5,16 +5,18 @@ import com.craisinlord.antarchy.fabric.registry.AntarchyFabricItems; import com.craisinlord.antarchy.fabric.registry.AntarchyFabricMisc; import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.client.CameraShakeClientState; import com.craisinlord.antarchy.content.client.HerculesBeetleImpactShakeClientState; import com.craisinlord.antarchy.content.client.HordeClientState; +import com.craisinlord.antarchy.content.client.KingJudgmentFlashClientState; +import com.craisinlord.antarchy.content.client.SizeRaySoundHandler; +import com.craisinlord.antarchy.content.client.TigerEyeClientHooks; import com.craisinlord.antarchy.content.client.renderer.*; import com.craisinlord.antarchy.content.client.particle.*; import com.craisinlord.antarchy.content.client.renderer.AntiwaterFluidRenderer; import com.craisinlord.antarchy.fabric.AntarchyFabricContent; -import com.craisinlord.antarchy.fabric.client.renderer.MultipartPartRenderer; import net.fabricmc.fabric.api.client.rendering.v1.LivingEntityFeatureRendererRegistrationCallback; import net.minecraft.world.entity.EntityType; +import com.craisinlord.antarchy.content.client.renderer.UnderVaultRenderer; import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.fabricmc.fabric.api.client.render.fluid.v1.FluidRenderHandlerRegistry; @@ -50,6 +52,8 @@ import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.BlockAndTintGetter; import com.mojang.blaze3d.vertex.VertexConsumer; import java.util.function.Function; +import software.bernie.geckolib.core.animatable.GeoAnimatable; +import software.bernie.geckolib.renderer.GeoEntityRenderer; public final class AntarchyFabricClientBootstrap { private AntarchyFabricClientBootstrap() { @@ -57,9 +61,9 @@ public final class AntarchyFabricClientBootstrap { public static void register() { AntarchyKeyBindings.register(); - com.craisinlord.antarchy.content.client.TigerEyeClientHooks.setCamouflageKeyTextSupplier( - () -> AntarchyKeyBindings.TIGERS_EYE_CAMOUFLAGE.getTranslatedKeyMessage()); MenuScreens.register(AntarchyFabricMisc.DORRIE_INVENTORY_MENU.get(), com.craisinlord.antarchy.content.client.screen.DorrieInventoryScreen::new); + MenuScreens.register(AntarchyFabricMisc.ROYAL_JUDGMENT_MENU.get(), com.craisinlord.antarchy.content.client.screen.RoyalJudgmentScreen::new); + MenuScreens.register(AntarchyFabricMisc.GIANT_FRYING_PAN_MENU.get(), com.craisinlord.antarchy.content.client.screen.GiantFryingPanScreen::new); registerRenderers(); registerEntityLayers(); registerColors(); @@ -96,74 +100,93 @@ public final class AntarchyFabricClientBootstrap { (BlockEntityRendererProvider) UnderVaultRenderer::new ); - EntityRendererRegistry.register(AntarchyFabricEntities.EASTER_BUNNY.get(), EasterBunnyRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.FLYING_SQUIRREL.get(), FlyingSquirrelRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.CATERPILLAR.get(), CaterpillarRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.BUTTERFLY.get(), ButterflyRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.REVERIE.get(), ReverieRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.BRUTALFLY.get(), BrutalflyRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.RED_ANT.get(), AntRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.BROWN_ANT.get(), AntRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.RAINBOW_ANT.get(), AntRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.MOLEWORM.get(), MolewormRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.MANTIS.get(), MantisRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.ALPHA_MANTIS.get(), AlphaMantisRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.MOLEVORE.get(), MolevoreRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.TRIFFID.get(), TriffidRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.EASTER_BUNNY.get(), context -> withTemporalGeoLayer(new EasterBunnyRenderer(context))); + EntityRendererRegistry.register(AntarchyFabricEntities.FLYING_SQUIRREL.get(), context -> withTemporalGeoLayer(new FlyingSquirrelRenderer(context))); + EntityRendererRegistry.register(AntarchyFabricEntities.CATERPILLAR.get(), context -> withTemporalGeoLayer(new CaterpillarRenderer(context))); + EntityRendererRegistry.register(AntarchyFabricEntities.BUTTERFLY.get(), context -> withTemporalGeoLayer(new ButterflyRenderer(context))); + EntityRendererRegistry.register(AntarchyFabricEntities.REVERIE.get(), context -> withTemporalGeoLayer(new ReverieRenderer(context))); + EntityRendererRegistry.register(AntarchyFabricEntities.BRUTALFLY.get(), context -> withTemporalGeoLayer(new BrutalflyRenderer(context))); + EntityRendererRegistry.register(AntarchyFabricEntities.RED_ANT.get(), context -> withTemporalGeoLayer(new AntRenderer(context))); + EntityRendererRegistry.register(AntarchyFabricEntities.BROWN_ANT.get(), context -> withTemporalGeoLayer(new AntRenderer(context))); + EntityRendererRegistry.register(AntarchyFabricEntities.RAINBOW_ANT.get(), context -> withTemporalGeoLayer(new AntRenderer(context))); + EntityRendererRegistry.register(AntarchyFabricEntities.MOLEWORM.get(), context -> withTemporalGeoLayer(new MolewormRenderer(context))); + EntityRendererRegistry.register(AntarchyFabricEntities.WORM.get(), context -> withTemporalGeoLayer(new WormRenderer(context))); + EntityRendererRegistry.register(AntarchyFabricEntities.MANTIS.get(), context -> withTemporalGeoLayer(new MantisRenderer(context))); + EntityRendererRegistry.register(AntarchyFabricEntities.ALPHA_MANTIS.get(), context -> withTemporalGeoLayer(new AlphaMantisRenderer(context))); + EntityRendererRegistry.register(AntarchyFabricEntities.MOLEVORE.get(), context -> withTemporalGeoLayer(new MolevoreRenderer(context))); + EntityRendererRegistry.register(AntarchyFabricEntities.FLYTRAP.get(), context -> withTemporalGeoLayer(new FlytrapRenderer(context))); EntityRendererRegistry.register(AntarchyFabricEntities.OURANWOOD_BOAT_ENTITY.get(), context -> new OuranwoodBoatRenderer<>(context, new ResourceLocation(Antarchy.MODID, "textures/entity/boat/ouranwood.png"), false)); EntityRendererRegistry.register(AntarchyFabricEntities.OURANWOOD_CHEST_BOAT_ENTITY.get(), context -> new OuranwoodBoatRenderer<>(context, new ResourceLocation(Antarchy.MODID, "textures/entity/chest_boat/ouranwood.png"), true)); EntityRendererRegistry.register(AntarchyFabricEntities.PEACH_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, new ResourceLocation(Antarchy.MODID, "textures/entity/boat/peach.png"), false)); EntityRendererRegistry.register(AntarchyFabricEntities.PEACH_CHEST_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, new ResourceLocation(Antarchy.MODID, "textures/entity/chest_boat/peach.png"), true)); EntityRendererRegistry.register(AntarchyFabricEntities.NADIR_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, new ResourceLocation(Antarchy.MODID, "textures/entity/boat/nadir.png"), false)); EntityRendererRegistry.register(AntarchyFabricEntities.NADIR_CHEST_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, new ResourceLocation(Antarchy.MODID, "textures/entity/chest_boat/nadir.png"), true)); - EntityRendererRegistry.register(AntarchyFabricEntities.APPLE_COW.get(), AppleCowRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.GOLDEN_APPLE_COW.get(), AppleCowRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.ENCHANTED_GOLDEN_APPLE_COW.get(), AppleCowRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.ROYAL_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, new ResourceLocation(Antarchy.MODID, "textures/entity/boat/royal.png"), false)); + EntityRendererRegistry.register(AntarchyFabricEntities.ROYAL_CHEST_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, new ResourceLocation(Antarchy.MODID, "textures/entity/chest_boat/royal.png"), true)); + EntityRendererRegistry.register(AntarchyFabricEntities.TRUFFALO_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, new ResourceLocation(Antarchy.MODID, "textures/entity/boat/truffalo.png"), false)); + EntityRendererRegistry.register(AntarchyFabricEntities.TRUFFALO_CHEST_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, new ResourceLocation(Antarchy.MODID, "textures/entity/chest_boat/truffalo.png"), true)); + EntityRendererRegistry.register(AntarchyFabricEntities.APPLE_COW.get(), context -> withTemporalGeoLayer(new AppleCowRenderer(context))); + EntityRendererRegistry.register(AntarchyFabricEntities.GOLDEN_APPLE_COW.get(), context -> withTemporalGeoLayer(new AppleCowRenderer(context))); + EntityRendererRegistry.register(AntarchyFabricEntities.ENCHANTED_GOLDEN_APPLE_COW.get(), context -> withTemporalGeoLayer(new AppleCowRenderer(context))); EntityRendererRegistry.register(AntarchyFabricEntities.DIAMOND_MINECART.get(), DiamondMinecartRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.DR_TRAYAURUS.get(), context -> new DrTrayaurusRenderer(context, new ResourceLocation(Antarchy.MODID, "textures/entity/dr_trayaurus.png"))); - EntityRendererRegistry.register(AntarchyFabricEntities.CLOUD_SHARK.get(), CloudSharkRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.KRAKEN.get(), KrakenRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.KRAKEN_PART.get(), MultipartPartRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.STRATOSHARK.get(), context -> withTemporalGeoLayer(new StratosharkRenderer(context))); + EntityRendererRegistry.register(AntarchyFabricEntities.KRAKEN.get(), context -> withTemporalGeoLayer(new KrakenRenderer(context))); EntityRendererRegistry.register(AntarchyFabricEntities.TENTACLE.get(), com.craisinlord.antarchy.content.client.renderer.TentacleRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.KRAKENS_GRASP_TRIDENT.get(), com.craisinlord.antarchy.content.client.renderer.KrakensGraspThrownTridentRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.MISSILE_SQUID.get(), MissileSquidRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.OCTOPUS_BOMB.get(), OctopusBombRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.NIGHTMARE.get(), NightmareRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.MISSILE_SQUID.get(), context -> withTemporalGeoLayer(new MissileSquidRenderer(context))); + EntityRendererRegistry.register(AntarchyFabricEntities.OCTOPUS_BOMB.get(), context -> withTemporalGeoLayer(new OctopusBombRenderer(context))); + EntityRendererRegistry.register(AntarchyFabricEntities.NIGHTMARE.get(), context -> withTemporalGeoLayer(new NightmareRenderer(context))); EntityRendererRegistry.register(AntarchyFabricEntities.NIGHTMARE_PORTAL.get(), NightmarePortalRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.NIGHTMARE_BITE.get(), NightmareBiteRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.DIMENSIONAL_TEAR.get(), DimensionalTearRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.TIME_DILATION_FIELD.get(), TimeDilationFieldRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.ROYAL_ASSAILANT_BLACK_HOLE.get(), com.craisinlord.antarchy.content.client.renderer.RoyalAssailantBlackHoleRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.LUCID.get(), LucidRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.BED_BUG.get(), BedBugRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.WASP.get(), WaspRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.BOMBER.get(), BomberRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.BASILISK.get(), BasiliskRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.PORTAL_GUN_PORTAL.get(), PortalGunPortalRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.HOVERBOARD.get(), com.craisinlord.antarchy.content.client.renderer.HoverboardRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.PORTAL_GUN_PROJECTILE.get(), com.craisinlord.antarchy.content.client.renderer.PortalGunProjectileRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.NIGHTMARE_BITE.get(), NightmareBiteRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.LUCID.get(), context -> withTemporalGeoLayer(new LucidRenderer(context))); + EntityRendererRegistry.register(AntarchyFabricEntities.VORTEX.get(), context -> withTemporalGeoLayer(new VortexRenderer(context))); + EntityRendererRegistry.register(AntarchyFabricEntities.BED_BUG.get(), context -> withTemporalGeoLayer(new BedBugRenderer(context))); + EntityRendererRegistry.register(AntarchyFabricEntities.WASP.get(), context -> withTemporalGeoLayer(new WaspRenderer(context))); + EntityRendererRegistry.register(AntarchyFabricEntities.BOMBER.get(), context -> withTemporalGeoLayer(new BomberRenderer(context))); + EntityRendererRegistry.register(AntarchyFabricEntities.BASILISK.get(), context -> withTemporalGeoLayer(new BasiliskRenderer(context))); EntityRendererRegistry.register(AntarchyFabricEntities.SHRINK_RAY_PROJECTILE.get(), SizeRayProjectileRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.GROWTH_RAY_PROJECTILE.get(), SizeRayProjectileRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.LUCID_BOLT.get(), LucidBoltRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.LUCID_PEARL_PROJECTILE.get(), ThrownItemRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.VORTEX_CHARGE_PROJECTILE.get(), ThrownItemRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.WIND_VORTEX.get(), WindVortexRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.ROYAL_BLACK_HOLE.get(), com.craisinlord.antarchy.content.client.renderer.RoyalBlackHoleRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.ROYAL_ASSAILANT_BLACK_HOLE.get(), com.craisinlord.antarchy.content.client.renderer.RoyalAssailantBlackHoleRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.CRITTER_CAGE_PROJECTILE.get(), ThrownItemRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.WORM_HOOK_PROJECTILE.get(), ThrownItemRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.HUSH_PROJECTILE.get(), HushProjectileRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.BRUTALFLY_ORB.get(), BrutalflyOrbRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.UPWARD_FALLING_BLOCK.get(), UpwardFallingBlockRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.SCORPION.get(), ScorpionRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.EMPEROR_SCORPION.get(), EmperorScorpionRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.TORETERROR.get(), ToreterrorRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.SCORPION.get(), context -> withTemporalGeoLayer(new ScorpionRenderer(context))); + EntityRendererRegistry.register(AntarchyFabricEntities.EMPEROR_SCORPION.get(), context -> withTemporalGeoLayer(new EmperorScorpionRenderer(context))); + EntityRendererRegistry.register(AntarchyFabricEntities.TORETERROR.get(), context -> withTemporalGeoLayer(new ToreterrorRenderer(context))); EntityRendererRegistry.register(AntarchyFabricEntities.WATER_BOMB.get(), WaterBombRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.CHEEP.get(), com.craisinlord.antarchy.content.client.renderer.CheepRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.DORRIE.get(), com.craisinlord.antarchy.content.client.renderer.DorrieRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.OURANWOOD_DEER.get(), com.craisinlord.antarchy.content.client.renderer.OuranwoodDeerRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.GLIMMER.get(), com.craisinlord.antarchy.content.client.renderer.glimmer.GlimmerRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.ELKA.get(), com.craisinlord.antarchy.content.client.renderer.ElkaRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.ROLLY_POLLY.get(), com.craisinlord.antarchy.content.client.renderer.RollyPollyRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.TERMITE.get(), TermiteRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.CREEPING_HORROR.get(), CreepingHorrorRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.LURKING_TERROR.get(), LurkingTerrorRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.HERCULES_BEETLE.get(), HerculesBeetleRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.JERRY.get(), JerryRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.JUMPY_BUG.get(), JumpyBugRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.SPIT_BUG.get(), SpitBugRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.CHEEP.get(), context -> withTemporalGeoLayer(new com.craisinlord.antarchy.content.client.renderer.CheepRenderer(context))); + EntityRendererRegistry.register(AntarchyFabricEntities.DORRIE.get(), context -> withTemporalGeoLayer(new com.craisinlord.antarchy.content.client.renderer.DorrieRenderer(context))); + EntityRendererRegistry.register(AntarchyFabricEntities.OURANWOOD_DEER.get(), context -> withTemporalGeoLayer(new com.craisinlord.antarchy.content.client.renderer.OuranwoodDeerRenderer(context))); + EntityRendererRegistry.register(AntarchyFabricEntities.GLIMMER.get(), context -> withTemporalGeoLayer(new com.craisinlord.antarchy.content.client.renderer.glimmer.GlimmerRenderer(context))); + EntityRendererRegistry.register(AntarchyFabricEntities.ELKA.get(), context -> withTemporalGeoLayer(new com.craisinlord.antarchy.content.client.renderer.ElkaRenderer(context))); + EntityRendererRegistry.register(AntarchyFabricEntities.ROLLY_POLLY.get(), context -> withTemporalGeoLayer(new com.craisinlord.antarchy.content.client.renderer.RollyPollyRenderer(context))); + EntityRendererRegistry.register(AntarchyFabricEntities.TERMITE.get(), context -> withTemporalGeoLayer(new TermiteRenderer(context))); + EntityRendererRegistry.register(AntarchyFabricEntities.CRAWLING_BLIGHT.get(), context -> withTemporalGeoLayer(new CrawlingBlightRenderer(context))); + EntityRendererRegistry.register(AntarchyFabricEntities.SKULKING_FRIGHT.get(), context -> withTemporalGeoLayer(new SkulkingFrightRenderer(context))); + EntityRendererRegistry.register(AntarchyFabricEntities.MANTICORE.get(), context -> withTemporalGeoLayer(new com.craisinlord.antarchy.content.client.renderer.ManticoreRenderer(context))); + EntityRendererRegistry.register(AntarchyFabricEntities.HERCULES_BEETLE.get(), context -> withTemporalGeoLayer(new HerculesBeetleRenderer(context))); + EntityRendererRegistry.register(AntarchyFabricEntities.PRINCE.get(), com.craisinlord.antarchy.content.client.renderer.RoyalMountRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.PRINCESS.get(), com.craisinlord.antarchy.content.client.renderer.RoyalMountRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.KING.get(), com.craisinlord.antarchy.content.client.renderer.RoyalBossRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.QUEEN.get(), com.craisinlord.antarchy.content.client.renderer.RoyalBossRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.ROYAL_BOLT.get(), com.craisinlord.antarchy.content.client.renderer.RoyalBoltRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.ROYAL_ELEMENTAL_PROJECTILE.get(), com.craisinlord.antarchy.content.client.renderer.RoyalElementalProjectileRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.ROYAL_ICE_SPIKE.get(), com.craisinlord.antarchy.content.client.renderer.RoyalIceSpikeRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.JERRY.get(), context -> withTemporalGeoLayer(new JerryRenderer(context))); + EntityRendererRegistry.register(AntarchyFabricEntities.SPRINGBUG.get(), context -> withTemporalGeoLayer(new SpringbugRenderer(context))); + EntityRendererRegistry.register(AntarchyFabricEntities.SPIT_BUG.get(), context -> withTemporalGeoLayer(new SpitBugRenderer(context))); EntityRendererRegistry.register(AntarchyFabricEntities.SPIT_BUG_PROJECTILE.get(), SpitBugProjectileRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.STINK_BUG.get(), StinkBugRenderer::new); @@ -173,6 +196,11 @@ public final class AntarchyFabricClientBootstrap { EntityModelLayerRegistry.registerModelLayer(PeachBoatRenderer.chestBoatLayer(), ChestBoatModel::createBodyModel); } + private static > R withTemporalGeoLayer(R renderer) { + renderer.addRenderLayer(new TemporalContractionGeoLayer<>(renderer)); + return renderer; + } + private static void registerColors() { ColorProviderRegistry.BLOCK.register( (state, level, pos, tintIndex) -> tintIndex == 0 ? bluestoneWireColor(state.getValue(com.craisinlord.antarchy.content.block.BluestoneWireBlock.POWER)) : -1, @@ -238,10 +266,10 @@ public final class AntarchyFabricClientBootstrap { AntarchyFabricMisc.ICHOR.get(), AntarchyFabricMisc.FLOWING_ICHOR.get(), new SimpleFluidRenderHandler( - new ResourceLocation(Antarchy.MODID, "block/bile/bile_still"), - new ResourceLocation(Antarchy.MODID, "block/bile/bile_flowing"), + new ResourceLocation(Antarchy.MODID, "block/ichor/ichor_still"), + new ResourceLocation(Antarchy.MODID, "block/ichor/ichor_flowing"), new ResourceLocation("block/water_overlay"), - 0xFF3D0408 + 0xFFFFFFFF ) ); @@ -291,6 +319,7 @@ public final class AntarchyFabricClientBootstrap { registry.register(AntarchyFabricMisc.STINKY_GAS.get(), HypnoticGasParticle.Provider::new); registry.register(AntarchyFabricMisc.STINKY_FLY.get(), FireflyParticle.Provider::new); registry.register(AntarchyFabricMisc.PEACH_LEAVES_PARTICLE.get(), PeachLeavesParticle.Provider::new); + registry.register(AntarchyFabricMisc.BUG_SPRAY_PARTICLE.get(), com.craisinlord.antarchy.content.client.particle.BugSprayParticle.Provider::new); registry.register(AntarchyFabricMisc.LOTUS_POLLEN.get(), com.craisinlord.antarchy.content.client.particle.LotusPollenParticle.Provider::new); registry.register(AntarchyFabricMisc.HYPNOTIC_GAS.get(), HypnoticGasParticle.Provider::new); registry.register(AntarchyFabricMisc.HYPNOTIC_GAS_DOWN.get(), sprites -> new HypnoticGasParticle.Provider(sprites, true)); @@ -330,10 +359,22 @@ public final class AntarchyFabricClientBootstrap { BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.NADIR_TRAPDOOR.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.NADIR_SAPLING.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.POTTED_NADIR_SAPLING.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.ROYAL_LEAVES.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.ROYAL_FLOWERING_LEAVES.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.ROYAL_DOOR.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.ROYAL_TRAPDOOR.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.ROYAL_SAPLING.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.POTTED_ROYAL_SAPLING.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.TRUFFALO_DOOR.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.TRUFFALO_TRAPDOOR.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.TRUFFALO_SAPLING.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.POTTED_TRUFFALO_SAPLING.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.DUPLICATOR_SAPLING.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.ORANGE_MILKWEED.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.PINK_MILKWEED.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.GLIMMERING_REED.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.AMBER_LICHEN.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.MUCUS.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.CREEPVINE.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.CAMELLIA.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.SPIDER_LILY.get(), RenderType.cutout()); @@ -352,6 +393,15 @@ public final class AntarchyFabricClientBootstrap { BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.UMBRAL_MOSS_CARPET.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.NYXITE_SPIKE.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.CHITIN_SPIKE.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.TYPHONITE_SPIKE.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.SPIRALING_VINES.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.GOREVINE.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.WHIRLFLOWER.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.NADIR_FERN.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.LARGE_NADIR_FERN.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.DUSKBELL.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.NADIR_ROOTS.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.VERDANT_ROOTS.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.STAR_CORAL.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.STAR_CORAL_FAN.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.STAR_CORAL_WALL_FAN.get(), RenderType.cutout()); @@ -377,7 +427,8 @@ public final class AntarchyFabricClientBootstrap { BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.LUMEN_BLOCK.get(), RenderType.translucent()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.ELYTHIA_PORTAL.get(), RenderType.translucent()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.THORAXIS_PORTAL.get(), RenderType.translucent()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.TRIFFID_GOO_BLOCK.get(), RenderType.translucent()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.FLYTRAP_GOO_BLOCK.get(), RenderType.translucent()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.VORTEX_LENS.get(), RenderType.translucent()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.URANIUM_DOOR.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.TITANIUM_DOOR.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.URANIUM_TRAPDOOR.get(), RenderType.cutout()); @@ -385,13 +436,16 @@ public final class AntarchyFabricClientBootstrap { BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.URANIUM_BARS.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.TITANIUM_BARS.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.CLOUD_BLOCK.get(), RenderType.translucent()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.JUMPY_BUG_EGG.get(), RenderType.translucent()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.LUCID_ANCHOR.get(), RenderType.translucent()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.SPRINGBUG_EGG.get(), RenderType.translucent()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.SPIT_BUG_EGG.get(), RenderType.translucent()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.JERRY_EGG.get(), RenderType.translucent()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.BIOWART_TENDRILS.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.HANGING_CREEPROOTS.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.MOLTING_VINES.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.GLOWCAP_MUSHROOM.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.UNDERTRIAL_SPAWNER.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.UNDERVAULT.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putFluids( RenderType.translucent(), AntarchyFabricMisc.BILE.get(), @@ -465,10 +519,10 @@ public final class AntarchyFabricClientBootstrap { registrationHelper.register(new com.craisinlord.antarchy.content.client.renderer.TigerEyeCamouflagePlayerLayer(playerRenderer)); registrationHelper.register(new GoopedLivingLayer(playerRenderer)); registrationHelper.register(new GlimmeringLivingLayer(playerRenderer)); + registrationHelper.register(new com.craisinlord.antarchy.content.client.renderer.RoyalIndicatorLivingLayer<>(playerRenderer)); registrationHelper.register(new BrutalflyElytraLayer(playerRenderer)); + registrationHelper.register(new com.craisinlord.antarchy.content.client.renderer.ManticoreWingsLayer(playerRenderer)); registrationHelper.register(new FallenKingCrownLayer(playerRenderer)); - registrationHelper.register(new com.craisinlord.antarchy.content.client.renderer.TemporalContractionAfterimageLayer(playerRenderer)); - registrationHelper.register(new com.craisinlord.antarchy.content.client.renderer.RoyalAssailantAxeAfterimageLayer(playerRenderer)); } return; } @@ -481,48 +535,55 @@ public final class AntarchyFabricClientBootstrap { (software.bernie.geckolib.renderer.GeoEntityRenderer) (Object) renderer; geoRenderer.addRenderLayer(new ParalyzedStoneGeoLayer(geoRenderer)); geoRenderer.addRenderLayer(new GoopedGeoLayer(geoRenderer)); - geoRenderer.addRenderLayer(new com.craisinlord.antarchy.content.client.renderer.TemporalContractionGeoLayer(geoRenderer)); + geoRenderer.addRenderLayer(new com.craisinlord.antarchy.content.client.renderer.RoyalIndicatorGeoLayer<>(geoRenderer)); return; } registrationHelper.register(new ParalyzedStoneLivingLayer(renderer)); registrationHelper.register(new GoopedLivingLayer(renderer)); registrationHelper.register(new GlimmeringLivingLayer(renderer)); - registrationHelper.register(new com.craisinlord.antarchy.content.client.renderer.TemporalContractionAfterimageLayer(renderer)); + registrationHelper.register(new com.craisinlord.antarchy.content.client.renderer.RoyalIndicatorLivingLayer<>(renderer)); }); } private static void registerClientCallbacks() { + TigerEyeClientHooks.setCamouflageKeyTextSupplier(() -> AntarchyKeyBindings.TIGERS_EYE_CAMOUFLAGE.getTranslatedKeyMessage()); ClientTickEvents.END_CLIENT_TICK.register(client -> { - if (client.level != null) { - com.craisinlord.antarchy.content.client.ClientTimeDilationTicker.tick(client.level); - com.craisinlord.antarchy.content.client.ContractionAfterimages.tick(client.level); - } - CameraShakeClientState.tick(); HerculesBeetleImpactShakeClientState.tick(); + KingJudgmentFlashClientState.tick(); HordeClientState.tick(); if (client.player != null) { ParalyzedClientHandler.clampPlayerInput(client.player); } BrutalflyElytraClientHandler.tick(); - JumpyBootsClientHandler.tick(); + SpringyBootsClientHandler.tick(); DiamondMinecartClientHandler.tick(); ParalyzedClientHandler.tick(); DreadClientHandler.tick(); + TigerEyeCamouflageClientHandler.tick(); + RoyalInversionClientHandler.tick(); + RoyalBoundaryClientHandler.tick(); BloodCrystalKatanaTrailHandler.tick(); ScorpionWhipTetherRenderHandler.tick(); + WormHookTetherRenderHandler.tick(); DorrieJumpClientHandler.tick(); HerculesBeetleClientHandler.tick(); - TigerEyeCamouflageClientHandler.tick(); + RoyalMountClientHandler.tick(); + GiantFryingPanClientHandler.tick(); + SizeRaySoundHandler.tick(client); }); BigBerthaClientHandler.register(); GravityGunClientHandler.register(); + PortalGunClientHandler.register(); + EyeOfStormClientHandler.register(); ElythiaFireflyManager.register(); LucidSoundHandler.register(); + TearIdleSoundHandler.register(); MogglesClientRenderer.register(); StinkySoundHandler.register(); ReverieTrailHandler.register(); + HoverboardTrailHandler.register(); HudRenderCallback.EVENT.register((guiGraphics, partialTick) -> { DreadHudRenderer.render(guiGraphics); com.craisinlord.antarchy.content.client.HordeHudRenderer.render(guiGraphics); @@ -530,15 +591,18 @@ public final class AntarchyFabricClientBootstrap { com.craisinlord.antarchy.content.client.GlimmeringHudRenderer.render(guiGraphics); ParalyzedHudRenderer.render(guiGraphics); BrutalflyElytraHudRenderer.render(guiGraphics); - JumpyBootsHudRenderer.render(guiGraphics); - TriffidGooHudRenderer.render(guiGraphics); + SpringyBootsHudRenderer.render(guiGraphics); + FlytrapGooHudRenderer.render(guiGraphics); DorrieJumpHudRenderer.render(guiGraphics); HerculesBeetleChargeHudRenderer.render(guiGraphics); + com.craisinlord.antarchy.content.client.KingJudgmentFlashHudRenderer.render(guiGraphics); + com.craisinlord.antarchy.content.client.PortalGunCrosshairRenderer.render(guiGraphics); }); - WorldRenderEvents.AFTER_TRANSLUCENT.register(context -> { + WorldRenderEvents.LAST.register(context -> { BloodCrystalKatanaTrailHandler.render(context); ScorpionWhipTetherRenderHandler.render(context); + WormHookTetherRenderHandler.render(context); }); } diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyKeyBindings.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyKeyBindings.java index e185db07..92714e01 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyKeyBindings.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyKeyBindings.java @@ -17,22 +17,15 @@ public final class AntarchyKeyBindings { CATEGORY ); - public static final KeyMapping DORRIE_CHARGE_JUMP = new KeyMapping( - "key.antarchy.dorrie_charge_jump", + public static final KeyMapping MOUNT_SPECIAL = new KeyMapping( + "key.antarchy.mount_special", InputConstants.Type.KEYSYM, GLFW.GLFW_KEY_LEFT_CONTROL, CATEGORY ); - public static final KeyMapping HERCULES_BEETLE_CHARGE = new KeyMapping( - "key.antarchy.hercules_beetle_charge", - InputConstants.Type.KEYSYM, - GLFW.GLFW_KEY_LEFT_CONTROL, - CATEGORY - ); - - public static final KeyMapping HERCULES_BEETLE_FLIGHT_TOGGLE = new KeyMapping( - "key.antarchy.hercules_beetle_flight_toggle", + public static final KeyMapping MOUNT_FLIGHT_TOGGLE = new KeyMapping( + "key.antarchy.mount_flight_toggle", InputConstants.Type.KEYSYM, GLFW.GLFW_KEY_R, CATEGORY @@ -44,33 +37,77 @@ public final class AntarchyKeyBindings { CATEGORY ); + public static final KeyMapping ROYAL_INVERSION_TOGGLE = new KeyMapping( + "key.antarchy.royal_inversion_toggle", + InputConstants.Type.KEYSYM, + GLFW.GLFW_KEY_V, + CATEGORY + ); + public static final KeyMapping ROYAL_BOUNDARY = new KeyMapping( + "key.antarchy.royal_boundary", + InputConstants.Type.KEYSYM, + GLFW.GLFW_KEY_B, + CATEGORY + ); + public static final KeyMapping PORTAL_GUN_ZOOM = new KeyMapping( + "key.antarchy.portal_gun_zoom", + InputConstants.Type.KEYSYM, + GLFW.GLFW_KEY_Z, + CATEGORY + ); + public static final KeyMapping PORTAL_GUN_RESET = new KeyMapping( + "key.antarchy.portal_gun_reset", + InputConstants.Type.KEYSYM, + GLFW.GLFW_KEY_R, + CATEGORY + ); + private AntarchyKeyBindings() {} public static void register() { KeyBindingHelper.registerKeyBinding(BRUTALFLY_FLAP); - KeyBindingHelper.registerKeyBinding(DORRIE_CHARGE_JUMP); - KeyBindingHelper.registerKeyBinding(HERCULES_BEETLE_CHARGE); - KeyBindingHelper.registerKeyBinding(HERCULES_BEETLE_FLIGHT_TOGGLE); + KeyBindingHelper.registerKeyBinding(MOUNT_SPECIAL); + KeyBindingHelper.registerKeyBinding(MOUNT_FLIGHT_TOGGLE); KeyBindingHelper.registerKeyBinding(TIGERS_EYE_CAMOUFLAGE); + KeyBindingHelper.registerKeyBinding(ROYAL_INVERSION_TOGGLE); + KeyBindingHelper.registerKeyBinding(ROYAL_BOUNDARY); + KeyBindingHelper.registerKeyBinding(PORTAL_GUN_ZOOM); + KeyBindingHelper.registerKeyBinding(PORTAL_GUN_RESET); } public static boolean isBrutalflyFlapPressed() { return Minecraft.getInstance().screen == null && BRUTALFLY_FLAP.isDown(); } - public static boolean isDorrieChargeJumpPressed() { - return Minecraft.getInstance().screen == null && DORRIE_CHARGE_JUMP.isDown(); + public static boolean isMountSpecialPressed() { + return Minecraft.getInstance().screen == null && MOUNT_SPECIAL.isDown(); } - public static boolean isHerculesBeetleChargePressed() { - return Minecraft.getInstance().screen == null && HERCULES_BEETLE_CHARGE.isDown(); - } - - public static boolean isHerculesBeetleFlightTogglePressed() { - return Minecraft.getInstance().screen == null && HERCULES_BEETLE_FLIGHT_TOGGLE.isDown(); + public static boolean isMountFlightTogglePressed() { + return Minecraft.getInstance().screen == null && MOUNT_FLIGHT_TOGGLE.isDown(); } public static boolean consumeTigerEyeCamouflagePressed() { return Minecraft.getInstance().screen == null && TIGERS_EYE_CAMOUFLAGE.consumeClick(); } + + public static boolean consumeRoyalInversionTogglePressed() { + return Minecraft.getInstance().screen == null && ROYAL_INVERSION_TOGGLE.consumeClick(); + } + + public static boolean consumeRoyalBoundaryPressed() { + return Minecraft.getInstance().screen == null && ROYAL_BOUNDARY.consumeClick(); + } + + public static boolean consumePortalGunZoomPressed() { + return Minecraft.getInstance().screen == null && PORTAL_GUN_ZOOM.consumeClick(); + } + + public static boolean consumePortalGunResetPressed() { + return Minecraft.getInstance().screen == null && PORTAL_GUN_RESET.consumeClick(); + } + + public static boolean isPortalGunResetDown() { + return Minecraft.getInstance().screen == null && (PORTAL_GUN_RESET.isDown() || PORTAL_GUN_RESET.consumeClick()); + } } diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyModMenuIntegration.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyModMenuIntegration.java new file mode 100644 index 00000000..2b608c48 --- /dev/null +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyModMenuIntegration.java @@ -0,0 +1,15 @@ +package com.craisinlord.antarchy.fabric.client; + +import com.terraformersmc.modmenu.api.ConfigScreenFactory; +import com.terraformersmc.modmenu.api.ModMenuApi; +import net.fabricmc.loader.api.FabricLoader; + +public final class AntarchyModMenuIntegration implements ModMenuApi { + @Override + public ConfigScreenFactory getModConfigScreenFactory() { + if (!FabricLoader.getInstance().isModLoaded("cloth-config")) { + return parent -> parent; + } + return AntarchyClothConfigScreenBuilder::build; + } +} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/BigBerthaClientHandler.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/BigBerthaClientHandler.java index e8d8e988..222b6ff5 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/BigBerthaClientHandler.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/BigBerthaClientHandler.java @@ -1,9 +1,10 @@ package com.craisinlord.antarchy.fabric.client; import com.craisinlord.antarchy.content.item.BigBerthaItem; +import com.craisinlord.antarchy.content.item.RoyalGuardianSwordItem; import com.craisinlord.antarchy.content.network.BigBerthaModeCyclePayload; +import com.craisinlord.antarchy.content.network.RoyalGuardianSwordModeCyclePayload; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; -import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.minecraft.client.Minecraft; public final class BigBerthaClientHandler { @@ -22,7 +23,9 @@ public final class BigBerthaClientHandler { return; } - if (!(mc.player.getMainHandItem().getItem() instanceof BigBerthaItem)) { + boolean bigBertha = mc.player.getMainHandItem().getItem() instanceof BigBerthaItem; + boolean royalGuardianSword = mc.player.getMainHandItem().getItem() instanceof RoyalGuardianSwordItem; + if (!bigBertha && !royalGuardianSword) { lastUseDown = false; return; } @@ -31,8 +34,9 @@ public final class BigBerthaClientHandler { if (useDown && !lastUseDown && mc.player.isShiftKeyDown() - && mc.player.getCooldowns().isOnCooldown(mc.player.getMainHandItem().getItem())) { - com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.sendToServer(new BigBerthaModeCyclePayload(), BigBerthaModeCyclePayload.STREAM_CODEC, BigBerthaModeCyclePayload.TYPE); + ) { + if (bigBertha) com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.send(new BigBerthaModeCyclePayload()); + else com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.send(new RoyalGuardianSwordModeCyclePayload()); } lastUseDown = useDown; } diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/BloodglassHudRenderer.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/BloodglassHudRenderer.java index e09cf13e..068261c6 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/BloodglassHudRenderer.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/BloodglassHudRenderer.java @@ -26,7 +26,6 @@ public final class BloodglassHudRenderer { if (mc.options.hideGui) return; Player player = mc.player; if (player == null || player.isDeadOrDying()) return; - // Don't show in creative or spectator — no health bar visible there if (player.isCreative() || player.isSpectator()) return; int total = BloodglassClientState.getShieldsMax(); @@ -36,21 +35,16 @@ public final class BloodglassHudRenderer { int w = mc.getWindow().getGuiScaledWidth(); int h = mc.getWindow().getGuiScaledHeight(); - // Vanilla health bar bottom row is at y = h - 39; each extra row (absorption, extra hearts) is 10px above. - // The armor protection icons sit one row above the bottom health row (h - 49). - // We place bloodglass hearts above both health+absorption stack AND the armor row. int maxHealth = Mth.ceil(player.getMaxHealth()); int absorption = Mth.ceil(player.getAbsorptionAmount()); int healthHearts = Mth.ceil(maxHealth / 2.0f); int absorptionHearts = Mth.ceil(absorption / 2.0f); int totalVanillaRows = Mth.ceil((healthHearts + absorptionHearts) / 10.0f); boolean hasArmor = player.getArmorValue() > 0; - // +1 to clear the armor icon row only when armor is actually equipped int baseTop = h - 39 - (totalVanillaRows * 10) - (hasArmor ? 10 : 0); int left = w / 2 - 91; - // Wrap across multiple rows if more than 10 bloodglass hearts for (int i = 0; i < total; i++) { int row = i / 10; int col = i % 10; diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/BrutalflyElytraClientHandler.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/BrutalflyElytraClientHandler.java index e08f4296..1d1e05ee 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/BrutalflyElytraClientHandler.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/BrutalflyElytraClientHandler.java @@ -4,13 +4,9 @@ import com.craisinlord.antarchy.content.client.BrutalflyElytraClientState; import com.craisinlord.antarchy.content.item.BrutalflyElytraFlightHelper; import com.craisinlord.antarchy.content.item.BrutalflyElytraItem; import com.craisinlord.antarchy.content.network.BrutalflyElytraFlapPayload; -import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.minecraft.client.Minecraft; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public final class BrutalflyElytraClientHandler { - private static final Logger LOGGER = LoggerFactory.getLogger("Antarchy/BrutalflyElytra"); private static boolean lastJumpDown; private static int chargeTicks; @@ -50,10 +46,7 @@ public final class BrutalflyElytraClientHandler { } if (wasSneakDown && chargeTicks > 0) { - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("[BrutalflyElytra] Sending flap payload chargeTicks={} fallFlying={} deltaMovement={}", chargeTicks, minecraft.player.isFallFlying(), minecraft.player.getDeltaMovement()); - } - com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.sendToServer(new BrutalflyElytraFlapPayload(chargeTicks), BrutalflyElytraFlapPayload.STREAM_CODEC, BrutalflyElytraFlapPayload.TYPE); + com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.send(new BrutalflyElytraFlapPayload(chargeTicks)); } chargeTicks = 0; } diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/DiamondMinecartClientHandler.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/DiamondMinecartClientHandler.java index 02686cf1..858fb81c 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/DiamondMinecartClientHandler.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/DiamondMinecartClientHandler.java @@ -3,7 +3,6 @@ package com.craisinlord.antarchy.fabric.client; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.entity.DiamondMinecartEntity; import com.craisinlord.antarchy.content.network.DiamondMinecartInputPayload; -import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.minecraft.client.Minecraft; public final class DiamondMinecartClientHandler { @@ -22,7 +21,7 @@ public final class DiamondMinecartClientHandler { if (!(mc.player.getVehicle() instanceof DiamondMinecartEntity)) return; if (mc.screen != null) { if (lastFlags != 0) { - com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.sendToServer(new DiamondMinecartInputPayload((byte) 0), DiamondMinecartInputPayload.STREAM_CODEC, DiamondMinecartInputPayload.TYPE); + com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.send(new DiamondMinecartInputPayload((byte) 0)); lastFlags = 0; } return; @@ -35,7 +34,7 @@ public final class DiamondMinecartClientHandler { if (mc.options.keyRight.isDown()) flags |= DiamondMinecartInputPayload.FLAG_RIGHT; if (flags != lastFlags) { - com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.sendToServer(new DiamondMinecartInputPayload(flags), DiamondMinecartInputPayload.STREAM_CODEC, DiamondMinecartInputPayload.TYPE); + com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.send(new DiamondMinecartInputPayload(flags)); lastFlags = flags; } } diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/DorrieJumpClientHandler.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/DorrieJumpClientHandler.java index 8c1b7707..43032bce 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/DorrieJumpClientHandler.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/DorrieJumpClientHandler.java @@ -3,7 +3,6 @@ package com.craisinlord.antarchy.fabric.client; import com.craisinlord.antarchy.content.entity.DorrieEntity; import com.craisinlord.antarchy.content.network.DorrieChargeJumpPayload; import com.craisinlord.antarchy.content.network.DorrieJumpInputPayload; -import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; @@ -27,17 +26,15 @@ public final class DorrieJumpClientHandler { return; } - // Space bar → upward movement. boolean pressingJump = mc.options.keyJump.isDown(); if (pressingJump != wasPressingJump) { - com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.sendToServer(new DorrieJumpInputPayload(pressingJump), DorrieJumpInputPayload.STREAM_CODEC, DorrieJumpInputPayload.TYPE); + com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.send(new DorrieJumpInputPayload(pressingJump)); wasPressingJump = pressingJump; } - // Left ctrl → charge jump. - boolean pressingCharge = AntarchyKeyBindings.isDorrieChargeJumpPressed(); + boolean pressingCharge = AntarchyKeyBindings.isMountSpecialPressed(); if (pressingCharge != wasPressingCharge) { - com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.sendToServer(new DorrieChargeJumpPayload(pressingCharge), DorrieChargeJumpPayload.STREAM_CODEC, DorrieChargeJumpPayload.TYPE); + com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.send(new DorrieChargeJumpPayload(pressingCharge)); if (!pressingCharge && player.getVehicle() instanceof DorrieEntity dorrie) { dorrie.applyJumpImpulseClient(); } @@ -47,11 +44,11 @@ public final class DorrieJumpClientHandler { private static void resetAll() { if (wasPressingJump) { - com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.sendToServer(new DorrieJumpInputPayload(false), DorrieJumpInputPayload.STREAM_CODEC, DorrieJumpInputPayload.TYPE); + com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.send(new DorrieJumpInputPayload(false)); wasPressingJump = false; } if (wasPressingCharge) { - com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.sendToServer(new DorrieChargeJumpPayload(false), DorrieChargeJumpPayload.STREAM_CODEC, DorrieChargeJumpPayload.TYPE); + com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.send(new DorrieChargeJumpPayload(false)); wasPressingCharge = false; } } diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/EyeOfStormClientHandler.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/EyeOfStormClientHandler.java new file mode 100644 index 00000000..b5c1d72d --- /dev/null +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/EyeOfStormClientHandler.java @@ -0,0 +1,36 @@ +package com.craisinlord.antarchy.fabric.client; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.item.EyeOfTheStormItem; +import com.craisinlord.antarchy.content.network.EyeOfStormPrimaryPayload; +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; +import net.minecraft.client.Minecraft; + +public final class EyeOfStormClientHandler { + private static boolean lastAttackDown; + + private EyeOfStormClientHandler() { + } + + public static void register() { + ClientTickEvents.END_CLIENT_TICK.register(EyeOfStormClientHandler::tick); + } + + private static void tick(Minecraft mc) { + if (mc.player == null || mc.level == null || mc.screen != null || !AntarchySettings.eyeOfTheStormEnabled()) { + lastAttackDown = false; + return; + } + + if (!(mc.player.getMainHandItem().getItem() instanceof EyeOfTheStormItem)) { + lastAttackDown = false; + return; + } + + boolean attackDown = mc.options.keyAttack.isDown(); + if (attackDown && !lastAttackDown) { + com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.send(new EyeOfStormPrimaryPayload()); + } + lastAttackDown = attackDown; + } +} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/FlytrapGooHudRenderer.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/FlytrapGooHudRenderer.java new file mode 100644 index 00000000..162b2b73 --- /dev/null +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/FlytrapGooHudRenderer.java @@ -0,0 +1,47 @@ +package com.craisinlord.antarchy.fabric.client; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricBlocks; + +import com.craisinlord.antarchy.fabric.AntarchyFabricContent; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.core.BlockPos; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.block.Block; + +public final class FlytrapGooHudRenderer { + private FlytrapGooHudRenderer() { + } + + private static float fadeProgress = 0f; + private static final float FADE_SPEED = 0.05f; + private static final int MAX_ALPHA = 0x55; + + public static void render(GuiGraphics guiGraphics) { + Minecraft minecraft = Minecraft.getInstance(); + Player player = minecraft.player; + if (player == null || player.isDeadOrDying()) { + fadeProgress = Math.max(0f, fadeProgress - FADE_SPEED); + if (fadeProgress <= 0f) return; + } else { + Block goo = AntarchyFabricBlocks.FLYTRAP_GOO_BLOCK.get(); + BlockPos feet = player.blockPosition(); + boolean inGoo = player.level().getBlockState(feet).is(goo) + || player.level().getBlockState(feet.above()).is(goo); + + if (inGoo) { + fadeProgress = Math.min(1f, fadeProgress + FADE_SPEED); + } else { + fadeProgress = Math.max(0f, fadeProgress - FADE_SPEED); + } + + if (fadeProgress <= 0f || minecraft.screen != null) return; + } + + int alpha = Mth.floor(MAX_ALPHA * fadeProgress); + int color = (alpha << 24) | 0x003300; + int width = minecraft.getWindow().getGuiScaledWidth(); + int height = minecraft.getWindow().getGuiScaledHeight(); + guiGraphics.fill(0, 0, width, height, color); + } +} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/GiantFryingPanClientHandler.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/GiantFryingPanClientHandler.java new file mode 100644 index 00000000..d67e635a --- /dev/null +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/GiantFryingPanClientHandler.java @@ -0,0 +1,29 @@ +package com.craisinlord.antarchy.fabric.client; + +import com.craisinlord.antarchy.content.item.GiantFryingPanItem; +import com.craisinlord.antarchy.content.network.OpenGiantFryingPanPayload; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; + +public final class GiantFryingPanClientHandler { + private static boolean wasUse; + + private GiantFryingPanClientHandler() { + } + + public static void tick() { + Minecraft mc = Minecraft.getInstance(); + LocalPlayer player = mc.player; + if (player == null || mc.screen != null) { + wasUse = false; + return; + } + boolean use = mc.options.keyUse.isDown(); + if (use && !wasUse && player.isShiftKeyDown() + && (player.getMainHandItem().getItem() instanceof GiantFryingPanItem + || player.getOffhandItem().getItem() instanceof GiantFryingPanItem)) { + com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.send(OpenGiantFryingPanPayload.INSTANCE); + } + wasUse = use; + } +} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/GravityGunClientHandler.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/GravityGunClientHandler.java index f7ab85ad..3d7da438 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/GravityGunClientHandler.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/GravityGunClientHandler.java @@ -2,10 +2,11 @@ package com.craisinlord.antarchy.fabric.client; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.item.GravityGunItem; +import com.craisinlord.antarchy.content.item.TemporalTunerItem; import com.craisinlord.antarchy.content.network.GravityGunPrimaryPayload; import com.craisinlord.antarchy.content.network.GravityGunScrollPayload; +import com.craisinlord.antarchy.content.network.TemporalTunerScrollPayload; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; -import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.Screen; import net.minecraft.util.Mth; @@ -35,14 +36,26 @@ public final class GravityGunClientHandler { boolean attackDown = mc.options.keyAttack.isDown(); if (attackDown && !lastAttackDown) { - com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.sendToServer(new GravityGunPrimaryPayload(), GravityGunPrimaryPayload.STREAM_CODEC, GravityGunPrimaryPayload.TYPE); + com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.send(new GravityGunPrimaryPayload()); } lastAttackDown = attackDown; } public static boolean onScroll(double verticalAmount) { Minecraft mc = Minecraft.getInstance(); - if (mc.player == null || mc.level == null || mc.screen != null || !Screen.hasControlDown() || !AntarchySettings.gravityGunEnabled()) { + if (mc.player == null || mc.level == null || mc.screen != null) { + return false; + } + + if (Screen.hasShiftDown() && TemporalTunerItem.isAvailable(mc.player)) { + double scrollAmount = Mth.clamp(verticalAmount, -1.0D, 1.0D); + if (Math.abs(scrollAmount) >= 1.0E-4D) { + com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.send(new TemporalTunerScrollPayload(scrollAmount * TemporalTunerItem.STEP)); + return true; + } + } + + if (!Screen.hasControlDown() || !AntarchySettings.gravityGunEnabled()) { return false; } @@ -55,7 +68,7 @@ public final class GravityGunClientHandler { return false; } - com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.sendToServer(new GravityGunScrollPayload(scrollAmount * SCROLL_STEP_DISTANCE), GravityGunScrollPayload.STREAM_CODEC, GravityGunScrollPayload.TYPE); + com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.send(new GravityGunScrollPayload(scrollAmount * SCROLL_STEP_DISTANCE)); return true; } } diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/HerculesBeetleClientHandler.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/HerculesBeetleClientHandler.java index 6233a342..48777037 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/HerculesBeetleClientHandler.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/HerculesBeetleClientHandler.java @@ -5,7 +5,6 @@ import com.craisinlord.antarchy.content.network.HerculesBeetleFlightTogglePayloa import com.craisinlord.antarchy.content.network.HerculesBeetleJumpInputPayload; import com.craisinlord.antarchy.content.network.HerculesBeetleMountedAttackPayload; import com.craisinlord.antarchy.content.network.HerculesBeetleMountedChargePayload; -import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; @@ -33,32 +32,32 @@ public final class HerculesBeetleClientHandler { boolean pressingJump = mc.options.keyJump.isDown(); if (pressingJump != wasPressingJump) { - com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.sendToServer(new HerculesBeetleJumpInputPayload(pressingJump), HerculesBeetleJumpInputPayload.STREAM_CODEC, HerculesBeetleJumpInputPayload.TYPE); + com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.send(new HerculesBeetleJumpInputPayload(pressingJump)); wasPressingJump = pressingJump; } boolean pressingAttack = mc.options.keyAttack.isDown(); if (pressingAttack && !wasPressingAttack) { - com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.sendToServer(new HerculesBeetleMountedAttackPayload(), HerculesBeetleMountedAttackPayload.STREAM_CODEC, HerculesBeetleMountedAttackPayload.TYPE); + com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.send(new HerculesBeetleMountedAttackPayload()); } wasPressingAttack = pressingAttack; - boolean charging = AntarchyKeyBindings.isHerculesBeetleChargePressed(); + boolean charging = AntarchyKeyBindings.isMountSpecialPressed(); if (charging != wasCharging) { - com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.sendToServer(new HerculesBeetleMountedChargePayload(charging), HerculesBeetleMountedChargePayload.STREAM_CODEC, HerculesBeetleMountedChargePayload.TYPE); + com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.send(new HerculesBeetleMountedChargePayload(charging)); } wasCharging = charging; - boolean pressingFlightToggle = AntarchyKeyBindings.isHerculesBeetleFlightTogglePressed(); + boolean pressingFlightToggle = AntarchyKeyBindings.isMountFlightTogglePressed(); if (pressingFlightToggle && !wasPressingFlightToggle) { - com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.sendToServer(new HerculesBeetleFlightTogglePayload(), HerculesBeetleFlightTogglePayload.STREAM_CODEC, HerculesBeetleFlightTogglePayload.TYPE); + com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.send(new HerculesBeetleFlightTogglePayload()); } wasPressingFlightToggle = pressingFlightToggle; } private static void resetAll() { if (wasPressingJump) { - com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.sendToServer(new HerculesBeetleJumpInputPayload(false), HerculesBeetleJumpInputPayload.STREAM_CODEC, HerculesBeetleJumpInputPayload.TYPE); + com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.send(new HerculesBeetleJumpInputPayload(false)); wasPressingJump = false; } wasPressingAttack = false; diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/HoverboardTrailHandler.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/HoverboardTrailHandler.java new file mode 100644 index 00000000..01ef437e --- /dev/null +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/HoverboardTrailHandler.java @@ -0,0 +1,19 @@ +package com.craisinlord.antarchy.fabric.client; + +import com.craisinlord.antarchy.content.client.HoverboardSoundSystem; +import com.craisinlord.antarchy.content.client.HoverboardTrailSystem; +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; + +public final class HoverboardTrailHandler { + private HoverboardTrailHandler() { + } + + public static void register() { + ClientTickEvents.END_CLIENT_TICK.register(client -> { + HoverboardTrailSystem.tick(); + HoverboardSoundSystem.tick(); + }); + WorldRenderEvents.AFTER_TRANSLUCENT.register(context -> HoverboardTrailSystem.render(context.camera(), context.matrixStack().last().pose())); + } +} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/JumpyBootsClientHandler.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/JumpyBootsClientHandler.java deleted file mode 100644 index 048307c1..00000000 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/JumpyBootsClientHandler.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.craisinlord.antarchy.fabric.client; - -import com.craisinlord.antarchy.content.item.JumpyBootsHelper; -import com.craisinlord.antarchy.content.item.JumpyBootsItem; -import com.craisinlord.antarchy.content.network.JumpyBootsLaunchPayload; -import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; -import net.minecraft.client.Minecraft; -import net.minecraft.client.player.LocalPlayer; - -public final class JumpyBootsClientHandler { - private static int chargeTicks = 0; - private static boolean wasCharging = false; - private static int primeWindowTicks = 0; - private static int storedChargeTicks = 0; - - private JumpyBootsClientHandler() { - } - - public static void tick() { - Minecraft mc = Minecraft.getInstance(); - LocalPlayer player = mc.player; - - if (player == null || mc.level == null || mc.screen != null) { - reset(); - return; - } - - if (!JumpyBootsItem.isWearingJumpyBoots(player)) { - reset(); - return; - } - - boolean onGround = player.onGround(); - boolean sneaking = player.input.shiftKeyDown; - boolean jumpPressed = mc.options.keyJump.consumeClick(); - - if (primeWindowTicks > 0) { - primeWindowTicks--; - if (jumpPressed) { - com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.sendToServer(new JumpyBootsLaunchPayload(storedChargeTicks, player.isSprinting()), JumpyBootsLaunchPayload.STREAM_CODEC, JumpyBootsLaunchPayload.TYPE); - reset(); - return; - } - if (primeWindowTicks <= 0) { - reset(); - } - return; - } - - if (!onGround) { - chargeTicks = 0; - wasCharging = false; - return; - } - - if (jumpPressed && wasCharging && chargeTicks > 0) { - com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.sendToServer(new JumpyBootsLaunchPayload(chargeTicks, player.isSprinting()), JumpyBootsLaunchPayload.STREAM_CODEC, JumpyBootsLaunchPayload.TYPE); - reset(); - return; - } - - if (sneaking) { - chargeTicks = Math.min(chargeTicks + 1, JumpyBootsHelper.CHARGE_TICKS_MAX); - wasCharging = true; - } else if (wasCharging && chargeTicks > 0) { - storedChargeTicks = chargeTicks; - if (jumpPressed) { - com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.sendToServer(new JumpyBootsLaunchPayload(storedChargeTicks, player.isSprinting()), JumpyBootsLaunchPayload.STREAM_CODEC, JumpyBootsLaunchPayload.TYPE); - reset(); - return; - } - primeWindowTicks = JumpyBootsHelper.PRIME_WINDOW_TICKS; - chargeTicks = 0; - wasCharging = false; - } else { - chargeTicks = 0; - wasCharging = false; - } - } - - private static void reset() { - chargeTicks = 0; - wasCharging = false; - primeWindowTicks = 0; - storedChargeTicks = 0; - } - - public static boolean isCharging() { - return chargeTicks > 0; - } - - public static int getChargeTicks() { - return chargeTicks; - } -} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/JumpyBootsHudRenderer.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/JumpyBootsHudRenderer.java deleted file mode 100644 index 45747f31..00000000 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/JumpyBootsHudRenderer.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.craisinlord.antarchy.fabric.client; - -import com.craisinlord.antarchy.content.item.JumpyBootsHelper; -import com.craisinlord.antarchy.content.item.JumpyBootsItem; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.util.Mth; -import net.minecraft.world.entity.player.Player; - -public final class JumpyBootsHudRenderer { - private static final ResourceLocation JUMP_BAR_BACKGROUND = new ResourceLocation("textures/gui/sprites/hud/jump_bar_background.png"); - private static final ResourceLocation JUMP_BAR_PROGRESS = new ResourceLocation("textures/gui/sprites/hud/jump_bar_progress.png"); - private static final int BAR_WIDTH = 182; - private static final int BAR_HEIGHT = 5; - - private JumpyBootsHudRenderer() { - } - - public static void render(GuiGraphics guiGraphics) { - Minecraft mc = Minecraft.getInstance(); - Player player = mc.player; - if (player == null || mc.screen != null || player.isDeadOrDying()) { - return; - } - if (!JumpyBootsItem.isWearingJumpyBoots(player)) { - return; - } - if (!JumpyBootsClientHandler.isCharging()) { - return; - } - - int width = mc.getWindow().getGuiScaledWidth(); - int height = mc.getWindow().getGuiScaledHeight(); - int x0 = width / 2 - BAR_WIDTH / 2; - int y0 = height - 29; - - guiGraphics.blit(JUMP_BAR_BACKGROUND, x0, y0, 0, 0, BAR_WIDTH, BAR_HEIGHT, BAR_WIDTH, BAR_HEIGHT); - - int chargeTicks = JumpyBootsClientHandler.getChargeTicks(); - float chargeRatio = Mth.clamp(chargeTicks / (float) JumpyBootsHelper.CHARGE_TICKS_MAX, 0.0F, 1.0F); - int filledWidth = Mth.clamp((int) (chargeRatio * BAR_WIDTH), 0, BAR_WIDTH); - if (filledWidth > 0) { - guiGraphics.setColor(1.0F, 1.0F, 1.0F, 0.35F + chargeRatio * 0.65F); - guiGraphics.blit(JUMP_BAR_PROGRESS, x0, y0, 0, 0, filledWidth, BAR_HEIGHT, BAR_WIDTH, BAR_HEIGHT); - guiGraphics.setColor(1.0F, 1.0F, 1.0F, 1.0F); - } - } -} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/KeybindingConflictFixStore.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/KeybindingConflictFixStore.java index c65f50a0..80d3b36d 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/KeybindingConflictFixStore.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/KeybindingConflictFixStore.java @@ -9,13 +9,14 @@ import net.minecraft.client.KeyMapping; public final class KeybindingConflictFixStore { private static final String ANTARCHY_KEY_PREFIX = "key.antarchy."; + private static final String SPRINT_KEY = "key.sprint"; private static final Map> MAPPINGS = new HashMap<>(); private KeybindingConflictFixStore() { } public static void add(InputConstants.Key key, KeyMapping mapping) { - if (!mapping.getName().startsWith(ANTARCHY_KEY_PREFIX)) { + if (!isTracked(mapping)) { return; } List mappings = MAPPINGS.computeIfAbsent(key, ignored -> new ArrayList<>()); @@ -41,4 +42,12 @@ public final class KeybindingConflictFixStore { } return others; } + + public static boolean isSprint(KeyMapping mapping) { + return SPRINT_KEY.equals(mapping.getName()); + } + + private static boolean isTracked(KeyMapping mapping) { + return mapping.getName().startsWith(ANTARCHY_KEY_PREFIX) || isSprint(mapping); + } } diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/LucidSoundHandler.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/LucidSoundHandler.java index 03112f6e..382b481a 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/LucidSoundHandler.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/LucidSoundHandler.java @@ -21,9 +21,11 @@ import java.util.UUID; public final class LucidSoundHandler { private static final double START_SCAN_RADIUS = 96.0D; + private static final int DISCOVERY_SCAN_INTERVAL_TICKS = 10; private static final int ANIM_ATTACK = 2; private static final int ANIM_DEATH = 3; private static final Map ACTIVE_LOOPS = new HashMap<>(); + private static long nextDiscoveryScanTick; private LucidSoundHandler() { } @@ -42,10 +44,24 @@ public final class LucidSoundHandler { } pruneStaleLoops(client); - refreshNearbyLucids(client); + refreshActiveLoops(client); + + long gameTime = client.level.getGameTime(); + if (gameTime >= nextDiscoveryScanTick) { + nextDiscoveryScanTick = gameTime + DISCOVERY_SCAN_INTERVAL_TICKS; + refreshNearbyLucids(client); + } }); } + private static void refreshActiveLoops(Minecraft mc) { + for (LucidLoopSet set : ACTIVE_LOOPS.values()) { + if (set.isValid()) { + set.refresh(mc, set.entity); + } + } + } + private static void refreshNearbyLucids(Minecraft mc) { List lucids = mc.level.getEntitiesOfClass( LucidEntity.class, @@ -85,6 +101,7 @@ public final class LucidSoundHandler { set.stop(mc); } ACTIVE_LOOPS.clear(); + nextDiscoveryScanTick = 0L; } private static final class LucidLoopSet { diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/PortalGunClientHandler.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/PortalGunClientHandler.java new file mode 100644 index 00000000..f9fc5471 --- /dev/null +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/PortalGunClientHandler.java @@ -0,0 +1,53 @@ +package com.craisinlord.antarchy.fabric.client; + +import com.craisinlord.antarchy.content.item.PortalGunItem; +import com.craisinlord.antarchy.content.client.PortalGunZoomClientState; +import com.craisinlord.antarchy.content.network.PortalGunPrimaryPayload; +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; +import net.minecraft.client.Minecraft; + +public final class PortalGunClientHandler { + private static boolean lastAttackDown; + + private PortalGunClientHandler() { + } + + public static void register() { + ClientTickEvents.END_CLIENT_TICK.register(PortalGunClientHandler::tickMouse); + } + + private static void tickMouse(Minecraft mc) { + if (mc.player == null) { + com.craisinlord.antarchy.content.client.PortalGunResetClientState.clear(); + } + boolean hasPortalGun = mc.player != null && (mc.player.getMainHandItem().getItem() instanceof PortalGunItem || mc.player.getOffhandItem().getItem() instanceof PortalGunItem); + boolean gameplayInput = mc.screen == null; + boolean held = hasPortalGun && gameplayInput; + boolean zoomPressed = AntarchyKeyBindings.consumePortalGunZoomPressed(); + PortalGunZoomClientState.tick(mc, held, zoomPressed && gameplayInput); + boolean resetActive = com.craisinlord.antarchy.content.client.PortalGunResetClientState.tick( + mc, + held, + AntarchyKeyBindings.isPortalGunResetDown(), + com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking::send + ); + if (mc.player == null || mc.level == null || mc.screen != null) { + lastAttackDown = false; + return; + } + + boolean offhand = !(mc.player.getMainHandItem().getItem() instanceof PortalGunItem) + && mc.player.getOffhandItem().getItem() instanceof PortalGunItem; + if (!offhand && !(mc.player.getMainHandItem().getItem() instanceof PortalGunItem)) { + lastAttackDown = false; + return; + } + + boolean attackDown = mc.options.keyAttack.isDown(); + if (attackDown && !lastAttackDown && !resetActive) { + com.craisinlord.antarchy.content.portalgun.PortalGunMoonAimSync.reportFromClient(); + com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.send(new PortalGunPrimaryPayload(offhand)); + } + lastAttackDown = attackDown; + } +} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/RoyalBoundaryClientHandler.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/RoyalBoundaryClientHandler.java new file mode 100644 index 00000000..e7aef399 --- /dev/null +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/RoyalBoundaryClientHandler.java @@ -0,0 +1,17 @@ +package com.craisinlord.antarchy.fabric.client; + +import com.craisinlord.antarchy.content.network.ActivateRoyalBoundaryPayload; +import net.minecraft.client.Minecraft; + +public final class RoyalBoundaryClientHandler { + private RoyalBoundaryClientHandler() { + } + + public static void tick() { + Minecraft minecraft = Minecraft.getInstance(); + if (minecraft.player == null || minecraft.level == null) return; + while (AntarchyKeyBindings.consumeRoyalBoundaryPressed()) { + com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.send(new ActivateRoyalBoundaryPayload()); + } + } +} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/RoyalInversionClientHandler.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/RoyalInversionClientHandler.java new file mode 100644 index 00000000..c45cc7dd --- /dev/null +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/RoyalInversionClientHandler.java @@ -0,0 +1,19 @@ +package com.craisinlord.antarchy.fabric.client; + +import com.craisinlord.antarchy.content.network.ToggleRoyalInversionPayload; +import net.minecraft.client.Minecraft; + +public final class RoyalInversionClientHandler { + private RoyalInversionClientHandler() { + } + + public static void tick() { + Minecraft minecraft = Minecraft.getInstance(); + if (minecraft.player == null || minecraft.level == null) { + return; + } + while (AntarchyKeyBindings.consumeRoyalInversionTogglePressed()) { + com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.send(new ToggleRoyalInversionPayload()); + } + } +} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/RoyalMountClientHandler.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/RoyalMountClientHandler.java new file mode 100644 index 00000000..19bbf7c3 --- /dev/null +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/RoyalMountClientHandler.java @@ -0,0 +1,78 @@ +package com.craisinlord.antarchy.fabric.client; + +import com.craisinlord.antarchy.content.entity.royal.RoyalMountEntity; +import com.craisinlord.antarchy.content.network.RoyalMountActionPayload; +import com.craisinlord.antarchy.content.network.RoyalMountVerticalPayload; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.world.phys.EntityHitResult; + +public final class RoyalMountClientHandler { + private static boolean wasAttack; + private static boolean wasSpecial; + private static boolean wasFlightToggle; + private static boolean wasAscend; + private static boolean wasDescend; + private static boolean wasUse; + + private RoyalMountClientHandler() { + } + + public static void tick() { + Minecraft mc = Minecraft.getInstance(); + LocalPlayer player = mc.player; + if (player == null || mc.screen != null) { + reset(); + wasUse = false; + return; + } + if (!(player.getVehicle() instanceof RoyalMountEntity)) { + reset(); + boolean use = mc.options.keyUse.isDown(); + if (use && !wasUse && !(mc.hitResult instanceof EntityHitResult) + && RoyalMountEntity.findAssistedMountTarget(player, 1.0D) != null) { + com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.send(new RoyalMountActionPayload(RoyalMountActionPayload.MOUNT)); + } + wasUse = use; + return; + } + wasUse = mc.options.keyUse.isDown(); + + boolean attack = mc.options.keyAttack.isDown(); + if (attack && !wasAttack) { + com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.send(new RoyalMountActionPayload(RoyalMountActionPayload.BITE)); + } + wasAttack = attack; + + boolean special = AntarchyKeyBindings.isMountSpecialPressed(); + if (special && !wasSpecial) { + com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.send(new RoyalMountActionPayload(RoyalMountActionPayload.SPIT)); + } + wasSpecial = special; + + boolean flightToggle = AntarchyKeyBindings.isMountFlightTogglePressed(); + if (flightToggle && !wasFlightToggle) { + com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.send(new RoyalMountActionPayload(RoyalMountActionPayload.FLIGHT_TOGGLE)); + } + wasFlightToggle = flightToggle; + + boolean ascend = mc.options.keyJump.isDown(); + boolean descend = mc.options.keyShift.isDown(); + if (ascend != wasAscend || descend != wasDescend) { + com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.send(new RoyalMountVerticalPayload(ascend, descend)); + wasAscend = ascend; + wasDescend = descend; + } + } + + private static void reset() { + if (wasAscend || wasDescend) { + com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.send(new RoyalMountVerticalPayload(false, false)); + } + wasAttack = false; + wasSpecial = false; + wasFlightToggle = false; + wasAscend = false; + wasDescend = false; + } +} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/SeparateLargeItemModels.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/SeparateLargeItemModels.java new file mode 100644 index 00000000..8ef6dbea --- /dev/null +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/SeparateLargeItemModels.java @@ -0,0 +1,50 @@ +package com.craisinlord.antarchy.fabric.client; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricItems; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; + +import java.util.Collection; +import java.util.Map; + +public final class SeparateLargeItemModels { + private static final Map GUI_MODELS = Map.ofEntries( + entry(AntarchyFabricItems.ATTITUDE_ADJUSTER.get(), "attitude_adjuster_gui"), + entry(AntarchyFabricItems.BATTLE_AXE.get(), "battle_axe_gui"), + entry(AntarchyFabricItems.BIG_BERTHA.get(), "big_bertha_gui"), + entry(AntarchyFabricItems.EYE_OF_THE_STORM.get(), "eye_of_the_storm_gui"), + entry(AntarchyFabricItems.GIANT_FRYING_PAN.get(), "giant_frying_pan_gui"), + entry(AntarchyFabricItems.GRAVITY_GUN.get(), "gravity_gun_gui"), + entry(AntarchyFabricItems.GROWTH_RAY.get(), "grow_ray_gui"), + entry(AntarchyFabricItems.KRAKENS_GRASP.get(), "krakens_grasp_gui"), + entry(AntarchyFabricItems.PORTAL_GUN.get(), "portal_gun_gui"), + entry(AntarchyFabricItems.PORTAL_GUN_ATLAS.get(), "portal_gun_atlas_gui"), + entry(AntarchyFabricItems.PORTAL_GUN_P_BODY.get(), "portal_gun_p_body_gui"), + entry(AntarchyFabricItems.PORTAL_GUN_CRAISIN.get(), "portal_gun_craisin_gui"), + entry(AntarchyFabricItems.PORTAL_GUN_LAYNCE.get(), "portal_gun_laynce_gui"), + entry(AntarchyFabricItems.ROYAL_ASSAILANT_BATTLEAXE.get(), "royal_assailant_battleaxe_gui"), + entry(AntarchyFabricItems.ROYAL_ASSAILANT_STAFF.get(), "royal_assailant_staff_gui"), + entry(AntarchyFabricItems.ROYAL_GUARDIAN_SWORD.get(), "royal_guardian_sword_gui"), + entry(AntarchyFabricItems.RPO_LAUNCHER.get(), "rpo_launcher_gui"), + entry(AntarchyFabricItems.SHRINK_RAY.get(), "shrink_ray_gui"), + entry(AntarchyFabricItems.SQUIDZOOKA.get(), "squidzooka_gui"), + entry(AntarchyFabricItems.WATER_CANNON.get(), "water_cannon_gui") + ); + + private SeparateLargeItemModels() { + } + + public static ResourceLocation modelFor(ItemStack stack) { + return GUI_MODELS.get(stack.getItem()); + } + + public static Collection all() { + return GUI_MODELS.values(); + } + + private static Map.Entry entry(Item item, String modelPath) { + return Map.entry(item, new ResourceLocation(Antarchy.MODID, "item/" + modelPath)); + } +} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/SpringyBootsClientHandler.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/SpringyBootsClientHandler.java new file mode 100644 index 00000000..8f3a315a --- /dev/null +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/SpringyBootsClientHandler.java @@ -0,0 +1,94 @@ +package com.craisinlord.antarchy.fabric.client; + +import com.craisinlord.antarchy.content.item.SpringyBootsHelper; +import com.craisinlord.antarchy.content.item.SpringyBootsItem; +import com.craisinlord.antarchy.content.network.SpringyBootsLaunchPayload; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; + +public final class SpringyBootsClientHandler { + private static int chargeTicks = 0; + private static boolean wasCharging = false; + private static int primeWindowTicks = 0; + private static int storedChargeTicks = 0; + + private SpringyBootsClientHandler() { + } + + public static void tick() { + Minecraft mc = Minecraft.getInstance(); + LocalPlayer player = mc.player; + + if (player == null || mc.level == null || mc.screen != null) { + reset(); + return; + } + + if (!SpringyBootsItem.isWearingSpringyBoots(player)) { + reset(); + return; + } + + boolean onGround = player.onGround(); + boolean sneaking = player.input.shiftKeyDown; + boolean jumpPressed = mc.options.keyJump.consumeClick(); + + if (primeWindowTicks > 0) { + primeWindowTicks--; + if (jumpPressed) { + com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.send(new SpringyBootsLaunchPayload(storedChargeTicks, player.isSprinting())); + reset(); + return; + } + if (primeWindowTicks <= 0) { + reset(); + } + return; + } + + if (!onGround) { + chargeTicks = 0; + wasCharging = false; + return; + } + + if (jumpPressed && wasCharging && chargeTicks > 0) { + com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.send(new SpringyBootsLaunchPayload(chargeTicks, player.isSprinting())); + reset(); + return; + } + + if (sneaking) { + chargeTicks = Math.min(chargeTicks + 1, SpringyBootsHelper.CHARGE_TICKS_MAX); + wasCharging = true; + } else if (wasCharging && chargeTicks > 0) { + storedChargeTicks = chargeTicks; + if (jumpPressed) { + com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking.send(new SpringyBootsLaunchPayload(storedChargeTicks, player.isSprinting())); + reset(); + return; + } + primeWindowTicks = SpringyBootsHelper.PRIME_WINDOW_TICKS; + chargeTicks = 0; + wasCharging = false; + } else { + chargeTicks = 0; + wasCharging = false; + } + } + + private static void reset() { + chargeTicks = 0; + wasCharging = false; + primeWindowTicks = 0; + storedChargeTicks = 0; + } + + public static boolean isCharging() { + return chargeTicks > 0; + } + + public static int getChargeTicks() { + return chargeTicks; + } +} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/SpringyBootsHudRenderer.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/SpringyBootsHudRenderer.java new file mode 100644 index 00000000..d5556c10 --- /dev/null +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/SpringyBootsHudRenderer.java @@ -0,0 +1,49 @@ +package com.craisinlord.antarchy.fabric.client; + +import com.craisinlord.antarchy.content.item.SpringyBootsHelper; +import com.craisinlord.antarchy.content.item.SpringyBootsItem; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.player.Player; + +public final class SpringyBootsHudRenderer { + private static final ResourceLocation JUMP_BAR_BACKGROUND = new ResourceLocation("textures/gui/sprites/hud/jump_bar_background.png"); + private static final ResourceLocation JUMP_BAR_PROGRESS = new ResourceLocation("textures/gui/sprites/hud/jump_bar_progress.png"); + private static final int BAR_WIDTH = 182; + private static final int BAR_HEIGHT = 5; + + private SpringyBootsHudRenderer() { + } + + public static void render(GuiGraphics guiGraphics) { + Minecraft mc = Minecraft.getInstance(); + Player player = mc.player; + if (player == null || mc.screen != null || player.isDeadOrDying()) { + return; + } + if (!SpringyBootsItem.isWearingSpringyBoots(player)) { + return; + } + if (!SpringyBootsClientHandler.isCharging()) { + return; + } + + int width = mc.getWindow().getGuiScaledWidth(); + int height = mc.getWindow().getGuiScaledHeight(); + int x0 = width / 2 - BAR_WIDTH / 2; + int y0 = height - 29; + + guiGraphics.blit(JUMP_BAR_BACKGROUND, x0, y0, 0, 0, BAR_WIDTH, BAR_HEIGHT, BAR_WIDTH, BAR_HEIGHT); + + int chargeTicks = SpringyBootsClientHandler.getChargeTicks(); + float chargeRatio = Mth.clamp(chargeTicks / (float) SpringyBootsHelper.CHARGE_TICKS_MAX, 0.0F, 1.0F); + int filledWidth = Mth.clamp((int) (chargeRatio * BAR_WIDTH), 0, BAR_WIDTH); + if (filledWidth > 0) { + guiGraphics.setColor(1.0F, 1.0F, 1.0F, 0.35F + chargeRatio * 0.65F); + guiGraphics.blit(JUMP_BAR_PROGRESS, x0, y0, 0, 0, filledWidth, BAR_HEIGHT, BAR_WIDTH, BAR_HEIGHT); + guiGraphics.setColor(1.0F, 1.0F, 1.0F, 1.0F); + } + } +} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/TearIdleSoundHandler.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/TearIdleSoundHandler.java new file mode 100644 index 00000000..76ed7cfa --- /dev/null +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/TearIdleSoundHandler.java @@ -0,0 +1,112 @@ +package com.craisinlord.antarchy.fabric.client; + +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.antarchy.content.entity.portal.DimensionalTearEntity; +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.sounds.AbstractTickableSoundInstance; +import net.minecraft.sounds.SoundSource; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +public final class TearIdleSoundHandler { + private static final double START_SCAN_RADIUS = 64.0D; + private static final int DISCOVERY_SCAN_INTERVAL_TICKS = 10; + private static final Map ACTIVE_LOOPS = new HashMap<>(); + private static long nextDiscoveryScanTick; + + private TearIdleSoundHandler() { + } + + public static void register() { + ClientTickEvents.END_CLIENT_TICK.register(client -> { + if (client.level == null || client.player == null || client.isPaused()) { + resetAll(client); + return; + } + + pruneStaleLoops(client); + + long gameTime = client.level.getGameTime(); + if (gameTime >= nextDiscoveryScanTick) { + nextDiscoveryScanTick = gameTime + DISCOVERY_SCAN_INTERVAL_TICKS; + discoverNearbyTears(client); + } + }); + } + + private static void discoverNearbyTears(Minecraft mc) { + List tears = mc.level.getEntitiesOfClass( + DimensionalTearEntity.class, + mc.player.getBoundingBox().inflate(START_SCAN_RADIUS) + ); + + for (DimensionalTearEntity tear : tears) { + if (!tear.shouldPlayIdleSound() || ACTIVE_LOOPS.containsKey(tear.getUUID())) { + continue; + } + TearIdleSound sound = new TearIdleSound(tear); + ACTIVE_LOOPS.put(tear.getUUID(), sound); + mc.getSoundManager().play(sound); + } + } + + private static void pruneStaleLoops(Minecraft mc) { + Iterator> iterator = ACTIVE_LOOPS.entrySet().iterator(); + while (iterator.hasNext()) { + TearIdleSound sound = iterator.next().getValue(); + if (!sound.isValid()) { + mc.getSoundManager().stop(sound); + iterator.remove(); + } + } + } + + private static void resetAll(Minecraft mc) { + for (TearIdleSound sound : ACTIVE_LOOPS.values()) { + mc.getSoundManager().stop(sound); + } + ACTIVE_LOOPS.clear(); + nextDiscoveryScanTick = 0L; + } + + private static final class TearIdleSound extends AbstractTickableSoundInstance { + private final DimensionalTearEntity tear; + + private TearIdleSound(DimensionalTearEntity tear) { + super(AntarchySoundEvents.DIMENSIONAL_TEAR_IDLE.get(), SoundSource.HOSTILE, tear.level().getRandom()); + this.tear = tear; + this.looping = true; + this.delay = 0; + this.volume = 0.6F; + this.pitch = 1.0F; + this.x = tear.getX(); + this.y = tear.getY(); + this.z = tear.getZ(); + } + + private boolean isValid() { + return !this.tear.isRemoved() && this.tear.shouldPlayIdleSound(); + } + + @Override + public void tick() { + if (!this.isValid()) { + this.stop(); + return; + } + this.x = this.tear.getX(); + this.y = this.tear.getY(); + this.z = this.tear.getZ(); + } + + @Override + public boolean canStartSilent() { + return true; + } + } +} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/TigerEyeCamouflageClientHandler.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/TigerEyeCamouflageClientHandler.java index 67475df2..805cc508 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/TigerEyeCamouflageClientHandler.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/TigerEyeCamouflageClientHandler.java @@ -18,11 +18,8 @@ public final class TigerEyeCamouflageClientHandler { } while (AntarchyKeyBindings.consumeTigerEyeCamouflagePressed()) { - AntarchyFabricClientNetworking.sendToServer( - new ToggleTigerEyeCamouflagePayload(), - ToggleTigerEyeCamouflagePayload.STREAM_CODEC, - ToggleTigerEyeCamouflagePayload.TYPE - ); + AntarchyFabricClientNetworking.send( + new ToggleTigerEyeCamouflagePayload()); } } diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/TriffidGooHudRenderer.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/TriffidGooHudRenderer.java deleted file mode 100644 index c2c59d05..00000000 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/TriffidGooHudRenderer.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.craisinlord.antarchy.fabric.client; -import com.craisinlord.antarchy.fabric.registry.AntarchyFabricBlocks; - -import com.craisinlord.antarchy.fabric.AntarchyFabricContent; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.core.BlockPos; -import net.minecraft.util.Mth; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.block.Block; - -public final class TriffidGooHudRenderer { - private TriffidGooHudRenderer() { - } - - private static float fadeProgress = 0f; - private static final float FADE_SPEED = 0.05f; - private static final int MAX_ALPHA = 0x55; - - public static void render(GuiGraphics guiGraphics) { - Minecraft minecraft = Minecraft.getInstance(); - Player player = minecraft.player; - if (player == null || player.isDeadOrDying()) { - fadeProgress = Math.max(0f, fadeProgress - FADE_SPEED); - if (fadeProgress <= 0f) return; - } else { - Block goo = AntarchyFabricBlocks.TRIFFID_GOO_BLOCK.get(); - BlockPos feet = player.blockPosition(); - boolean inGoo = player.level().getBlockState(feet).is(goo) - || player.level().getBlockState(feet.above()).is(goo); - - if (inGoo) { - fadeProgress = Math.min(1f, fadeProgress + FADE_SPEED); - } else { - fadeProgress = Math.max(0f, fadeProgress - FADE_SPEED); - } - - if (fadeProgress <= 0f || minecraft.screen != null) return; - } - - int alpha = Mth.floor(MAX_ALPHA * fadeProgress); - int color = (alpha << 24) | 0x003300; - int width = minecraft.getWindow().getGuiScaledWidth(); - int height = minecraft.getWindow().getGuiScaledHeight(); - guiGraphics.fill(0, 0, width, height, color); - } -} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/WormHookTetherRenderHandler.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/WormHookTetherRenderHandler.java new file mode 100644 index 00000000..3e584871 --- /dev/null +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/WormHookTetherRenderHandler.java @@ -0,0 +1,166 @@ +package com.craisinlord.antarchy.fabric.client; + +import com.craisinlord.antarchy.content.client.WormHookTetherClientState; +import com.craisinlord.antarchy.content.item.WormHookItem; +import com.craisinlord.antarchy.content.util.WormHookRope; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.BufferBuilder; +import com.mojang.blaze3d.vertex.BufferUploader; +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.Tesselator; +import com.mojang.blaze3d.vertex.VertexFormat; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; +import net.minecraft.client.Camera; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.HumanoidArm; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.phys.Vec3; +import org.joml.Matrix4f; + +public final class WormHookTetherRenderHandler { + private static final Map ROPES = new HashMap<>(); + + private WormHookTetherRenderHandler() { + } + + public static void tick() { + Minecraft minecraft = Minecraft.getInstance(); + if (minecraft.level == null) { + WormHookTetherClientState.clear(); + ROPES.clear(); + return; + } + + Map tethers = WormHookTetherClientState.snapshot(); + ROPES.keySet().removeIf(playerId -> !tethers.containsKey(playerId)); + + for (Map.Entry entry : tethers.entrySet()) { + Entity source = minecraft.level.getEntity(entry.getKey()); + Entity hook = minecraft.level.getEntity(entry.getValue()); + if (!(source instanceof Player player) || hook == null || hook.isRemoved()) { + continue; + } + + Vec3 anchor = hook.position(); + Vec3 playerEye = player.getEyePosition(); + WormHookRope rope = ROPES.computeIfAbsent(entry.getKey(), id -> new WormHookRope(anchor, playerEye)); + rope.update(hook, anchor, playerEye, anchor.distanceTo(playerEye) + 32.0D); + } + } + + public static void render(WorldRenderContext context) { + if (context.world() == null || context.matrixStack() == null) { + return; + } + + Minecraft minecraft = Minecraft.getInstance(); + if (minecraft.level == null) { + return; + } + + Map tethers = WormHookTetherClientState.snapshot(); + if (tethers.isEmpty()) { + return; + } + + Camera camera = context.camera(); + Vec3 cameraPos = camera.getPosition(); + Matrix4f pose = context.matrixStack().last().pose(); + + RenderSystem.enableBlend(); + RenderSystem.defaultBlendFunc(); + RenderSystem.depthMask(false); + RenderSystem.disableCull(); + RenderSystem.setShader(GameRenderer::getPositionColorShader); + + BufferBuilder buffer = Tesselator.getInstance().getBuilder(); + buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); + for (Map.Entry entry : tethers.entrySet()) { + Entity source = minecraft.level.getEntity(entry.getKey()); + Entity hook = minecraft.level.getEntity(entry.getValue()); + if (!(source instanceof Player player) || hook == null || hook.isRemoved()) { + continue; + } + + WormHookRope rope = ROPES.get(entry.getKey()); + List points = rope != null ? rope.points() : List.of(hook.position(), player.getEyePosition()); + + Vec3 handPos = tetherStart(player, context.tickDelta()); + for (int i = points.size() - 1; i > 0; i--) { + Vec3 start = i == points.size() - 1 ? handPos : points.get(i); + Vec3 end = points.get(i - 1); + buildTether(buffer, pose, start, end, cameraPos); + } + } + + BufferUploader.drawWithShader(buffer.end()); + + RenderSystem.enableCull(); + RenderSystem.depthMask(true); + RenderSystem.disableBlend(); + } + + private static Vec3 tetherStart(Player player, float partialTick) { + Vec3 start = player.getEyePosition(partialTick).add(0.0D, -0.45D, 0.0D); + boolean mainHandHook = player.getMainHandItem().getItem() instanceof WormHookItem; + boolean offHandHook = player.getOffhandItem().getItem() instanceof WormHookItem; + if (!mainHandHook && !offHandHook) { + return start; + } + + boolean useMainHand = mainHandHook || !offHandHook; + HumanoidArm arm = useMainHand ? player.getMainArm() : player.getMainArm().getOpposite(); + float bodyYaw = Mth.rotLerp(partialTick, player.yBodyRotO, player.yBodyRot); + double radians = Math.toRadians(bodyYaw + 90.0F); + double side = arm == HumanoidArm.RIGHT ? -0.28D : 0.28D; + return start.add(Math.cos(radians) * side, -0.12D, Math.sin(radians) * side); + } + + private static void buildTether(BufferBuilder buffer, Matrix4f pose, Vec3 start, Vec3 end, Vec3 cameraPos) { + Vec3 delta = end.subtract(start); + double length = delta.length(); + if (length < 0.001D) { + return; + } + + Vec3 forward = delta.scale(1.0D / length); + Vec3 right = forward.cross(new Vec3(0.0D, 1.0D, 0.0D)); + if (right.lengthSqr() < 1.0E-6D) { + right = forward.cross(new Vec3(1.0D, 0.0D, 0.0D)); + } + right = right.normalize(); + + int segments = Math.max(4, Mth.ceil(length * 8.0D)); + for (int i = 0; i < segments; i++) { + double t0 = (double) i / (double) segments; + double t1 = (double) (i + 1) / (double) segments; + Vec3 p0 = ropePoint(start, delta, t0, length); + Vec3 p1 = ropePoint(start, delta, t1, length); + float width = 0.04F; + Vec3 offset = right.scale(width); + + Vec3 a = p0.subtract(cameraPos); + Vec3 b = p1.subtract(cameraPos); + float shade = i % 2 == 0 ? 0.85F : 0.65F; + float red = 0.42F * shade; + float green = 0.36F * shade; + float blue = 0.24F * shade; + + buffer.vertex(pose, (float) (a.x + offset.x), (float) (a.y + offset.y), (float) (a.z + offset.z)).color(red, green, blue, 1.0F).endVertex(); + buffer.vertex(pose, (float) (a.x - offset.x), (float) (a.y - offset.y), (float) (a.z - offset.z)).color(red, green, blue, 1.0F).endVertex(); + buffer.vertex(pose, (float) (b.x - offset.x), (float) (b.y - offset.y), (float) (b.z - offset.z)).color(red, green, blue, 1.0F).endVertex(); + buffer.vertex(pose, (float) (b.x + offset.x), (float) (b.y + offset.y), (float) (b.z + offset.z)).color(red, green, blue, 1.0F).endVertex(); + } + } + + private static Vec3 ropePoint(Vec3 start, Vec3 delta, double t, double length) { + double sag = Math.sin(t * Math.PI) * Math.min(0.2D, length * 0.03D); + return start.add(delta.scale(t)).add(0.0D, -sag, 0.0D); + } +} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/multipart/MultipartClientPartLevelRegistry.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/multipart/MultipartClientPartLevelRegistry.java deleted file mode 100644 index e81af3e7..00000000 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/multipart/MultipartClientPartLevelRegistry.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.craisinlord.antarchy.fabric.client.multipart; - -import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner; -import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.world.entity.Entity; - -public final class MultipartClientPartLevelRegistry { - private MultipartClientPartLevelRegistry() { - } - - public static void register(MultipartEntityOwner owner) { - Entity[] parts = owner.antarchy$getMultipartParts(); - if (parts == null) { - return; - } - - ClientLevel clientLevel = (ClientLevel) ((Entity) owner).level(); - for (Entity part : parts) { - if (part != null && clientLevel.getEntity(part.getId()) != part) { - clientLevel.putNonPlayerEntity(part.getId(), part); - } - } - } - - public static void unregister(MultipartEntityOwner owner) { - Entity[] parts = owner.antarchy$getMultipartParts(); - if (parts == null) { - return; - } - - for (Entity part : parts) { - if (part != null && !part.isRemoved()) { - part.discard(); - } - } - } -} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/renderer/MultipartPartRenderer.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/renderer/MultipartPartRenderer.java deleted file mode 100644 index 0a0737e8..00000000 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/renderer/MultipartPartRenderer.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.craisinlord.antarchy.fabric.client.renderer; - -import com.craisinlord.antarchy.fabric.entity.multipart.MultipartPartEntity; -import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.entity.EntityRenderer; -import net.minecraft.client.renderer.entity.EntityRendererProvider; -import net.minecraft.resources.ResourceLocation; - -public class MultipartPartRenderer extends EntityRenderer { - private static final ResourceLocation TEXTURE = new ResourceLocation("textures/misc/white.png"); - - public MultipartPartRenderer(EntityRendererProvider.Context context) { - super(context); - this.shadowRadius = 0.0F; - } - - @Override - public void render(MultipartPartEntity entity, float entityYaw, float partialTick, PoseStack poseStack, MultiBufferSource buffer, int packedLight) { - } - - @Override - public ResourceLocation getTextureLocation(MultipartPartEntity entity) { - return TEXTURE; - } -} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/content/fluid/AntiwaterFluid.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/content/fluid/AntiwaterFluid.java index 8ae24da3..9b32a774 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/content/fluid/AntiwaterFluid.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/content/fluid/AntiwaterFluid.java @@ -1,6 +1,4 @@ package com.craisinlord.antarchy.fabric.content.fluid; - -import com.craisinlord.antarchy.content.fluid.AntiwaterBubbleColumnUtil; import com.craisinlord.antarchy.fabric.registry.AntarchyFabricBlocks; import com.craisinlord.antarchy.fabric.registry.AntarchyFabricItems; import com.craisinlord.antarchy.fabric.registry.AntarchyFabricMisc; @@ -171,8 +169,6 @@ public abstract class AntiwaterFluid extends FlowingFluid { return; } - AntiwaterBubbleColumnUtil.update(level, pos, state); - if (!state.isSource() && !this.isFlowingStateValid(level, pos, state)) { level.setBlockAndUpdate(pos, net.minecraft.world.level.block.Blocks.AIR.defaultBlockState()); this.scheduleCleanup(level, pos); diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/entity/multipart/FabricKrakenMultipartLayout.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/entity/multipart/FabricKrakenMultipartLayout.java deleted file mode 100644 index de51b887..00000000 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/entity/multipart/FabricKrakenMultipartLayout.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.craisinlord.antarchy.fabric.entity.multipart; - -import com.craisinlord.antarchy.content.entity.multipart.MultipartPartDefinition; - -public final class FabricKrakenMultipartLayout { - private static final MultipartPartDefinition[] PARTS = { - new MultipartPartDefinition( - "tentacle_mass", - 14.0F, - 18.0F, - 0.90F, - 12.0D, - 13.5D, - 0.00D, - true - ), - new MultipartPartDefinition( - "head", - 15.0F, - 11.5F, - 1.00F, - 26.0D, - 19.0D, - 0.00D, - true - ), - new MultipartPartDefinition( - "back_head", - 13.0F, - 11.0F, - 1.10F, - 38.0D, - 20.5D, - 0.00D, - true - ), - new MultipartPartDefinition( - "mantle", - 16.0F, - 14.0F, - 1.00F, - 51.0D, - 23.0D, - 0.00D, - true - ), - new MultipartPartDefinition( - "crest", - 12.0F, - 10.0F, - 1.10F, - 63.0D, - 28.0D, - 0.00D, - true - ) - }; - - private FabricKrakenMultipartLayout() { - } - - public static MultipartPartDefinition part(int partIndex) { - return PARTS[partIndex]; - } -} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/entity/multipart/MultipartPartEntity.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/entity/multipart/MultipartPartEntity.java deleted file mode 100644 index 2b91ea0f..00000000 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/entity/multipart/MultipartPartEntity.java +++ /dev/null @@ -1,199 +0,0 @@ -package com.craisinlord.antarchy.fabric.entity.multipart; - -import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner; -import com.craisinlord.antarchy.content.entity.multipart.MultipartFramework; -import com.craisinlord.antarchy.content.entity.multipart.MultipartPartAccess; -import com.craisinlord.antarchy.content.entity.multipart.MultipartPartDefinition; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.InteractionResult; -import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.EntityDimensions; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.Pose; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.Level; -import net.minecraft.world.phys.Vec3; -import org.jetbrains.annotations.Nullable; - -public class MultipartPartEntity extends Entity implements MultipartPartAccess { - @Nullable - private MultipartEntityOwner owner; - private int partIndex; - @Nullable - private MultipartPartDefinition definition; - - public MultipartPartEntity(EntityType entityType, Level level) { - super(entityType, level); - this.setNoGravity(true); - } - - public MultipartPartEntity antarchy$configure(MultipartEntityOwner owner, int partIndex, MultipartPartDefinition definition) { - this.owner = owner; - this.partIndex = partIndex; - this.definition = definition; - this.refreshDimensions(); - this.antarchy$syncFromParent(); - return this; - } - - @Nullable - public Entity antarchy$getMultipartParent() { - return this.owner == null ? null : (Entity) this.owner; - } - - public int getPartIndex() { - return this.partIndex; - } - - public String getPartName() { - return this.definition == null ? "" : this.definition.name(); - } - - public float getDamageMultiplier() { - return this.definition == null ? 1.0F : this.definition.damageMultiplier(); - } - - @Override - public void antarchy$syncFromParent() { - Entity parent = this.antarchy$getMultipartParent(); - MultipartPartDefinition definition = this.definition; - if (parent == null || definition == null || parent.isRemoved()) { - return; - } - - double oldX = this.getX(); - double oldY = this.getY(); - double oldZ = this.getZ(); - double yawRadians = Math.toRadians(parent.getYRot()); - Vec3 forward = new Vec3(-Math.sin(yawRadians), 0.0D, Math.cos(yawRadians)); - Vec3 right = new Vec3(forward.z, 0.0D, -forward.x); - Vec3 position = new Vec3( - parent.getX() + forward.x * definition.forwardOffset() + right.x * definition.lateralOffset(), - parent.getY() + definition.yOffset(), - parent.getZ() + forward.z * definition.forwardOffset() + right.z * definition.lateralOffset() - ); - this.setPos(position.x, position.y, position.z); - this.setYRot(parent.getYRot()); - this.setXRot(parent.getXRot()); - this.xo = oldX; - this.yo = oldY; - this.zo = oldZ; - this.xOld = oldX; - this.yOld = oldY; - this.zOld = oldZ; - } - - @Override - public boolean is(Entity entity) { - return entity == this || entity == this.antarchy$getMultipartParent(); - } - - @Override - public boolean isPickable() { - return true; - } - - @Override - public boolean isAttackable() { - return true; - } - - @Override - public boolean isPushable() { - return false; - } - - @Override - public boolean canBeCollidedWith() { - return !this.isRemoved(); - } - - @Override - public boolean canCollideWith(Entity entity) { - MultipartPartDefinition definition = this.definition; - if (definition == null || !definition.collisionEnabled()) { - return false; - } - - Entity parent = this.antarchy$getMultipartParent(); - if (entity == parent) { - return false; - } - - if (entity instanceof MultipartPartEntity otherPart && otherPart.antarchy$getMultipartParent() == parent) { - return false; - } - - return entity.canBeCollidedWith() && !this.isPassengerOfSameVehicle(entity); - } - - @Override - public boolean shouldBeSaved() { - return false; - } - - @Override - public ItemStack getPickResult() { - Entity parent = this.antarchy$getMultipartParent(); - return parent == null ? ItemStack.EMPTY : parent.getPickResult(); - } - - @Override - public boolean hurt(DamageSource source, float amount) { - Entity parent = this.antarchy$getMultipartParent(); - MultipartPartDefinition definition = this.definition; - if (parent == null || definition == null || parent.isRemoved()) { - return false; - } - - if (this.level().isClientSide()) { - if (source.getEntity() instanceof Player) { - MultipartFramework.sendMultipartAttack(parent.getUUID(), this.partIndex, amount * definition.damageMultiplier()); - } - return true; - } - - return this.owner != null && this.owner.antarchy$hurtMultipartPart(this, source, amount * definition.damageMultiplier()); - } - - @Override - public boolean isInvulnerableTo(DamageSource source) { - return false; - } - - @Override - public InteractionResult interactAt(Player player, Vec3 vec, InteractionHand hand) { - Entity parent = this.antarchy$getMultipartParent(); - if (parent == null || parent.isRemoved()) { - return InteractionResult.PASS; - } - - if (this.level().isClientSide()) { - MultipartFramework.sendMultipartInteract(parent.getUUID(), this.partIndex, hand.ordinal()); - return InteractionResult.SUCCESS; - } - - return this.owner == null ? InteractionResult.PASS : this.owner.antarchy$interactMultipartPart(this, player, vec, hand); - } - - @Override - public EntityDimensions getDimensions(Pose pose) { - MultipartPartDefinition definition = this.definition; - return definition == null ? super.getDimensions(pose) : EntityDimensions.scalable(definition.width(), definition.height()); - } - - @Override - protected void defineSynchedData() { - } - - @Override - protected void readAdditionalSaveData(CompoundTag tag) { - } - - @Override - protected void addAdditionalSaveData(CompoundTag tag) { - } -} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/entity/multipart/MultipartServerPartLevelRegistry.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/entity/multipart/MultipartServerPartLevelRegistry.java deleted file mode 100644 index b2b711ba..00000000 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/entity/multipart/MultipartServerPartLevelRegistry.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.craisinlord.antarchy.fabric.entity.multipart; - -import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.entity.Entity; - -public final class MultipartServerPartLevelRegistry { - private MultipartServerPartLevelRegistry() { - } - - public static void register(MultipartEntityOwner owner) { - Entity[] parts = owner.antarchy$getMultipartParts(); - if (parts == null) { - return; - } - - ServerLevel serverLevel = (ServerLevel) ((Entity) owner).level(); - for (Entity part : parts) { - if (part != null && serverLevel.getEntity(part.getId()) != part) { - serverLevel.addFreshEntity(part); - } - } - } - - public static void unregister(MultipartEntityOwner owner) { - Entity[] parts = owner.antarchy$getMultipartParts(); - if (parts == null) { - return; - } - - for (Entity part : parts) { - if (part != null && !part.isRemoved()) { - part.discard(); - } - } - } -} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntimetalInversionMixin.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntimetalInversionMixin.java index da724a84..bbaf6460 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntimetalInversionMixin.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntimetalInversionMixin.java @@ -2,9 +2,9 @@ package com.craisinlord.antarchy.fabric.mixin; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchyTags; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityTransition; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; +import com.craisinlord.anthology.gravity.GravityTransition; import net.minecraft.core.BlockPos; import net.minecraft.core.particles.DustParticleOptions; import net.minecraft.server.level.ServerLevel; @@ -65,7 +65,7 @@ public abstract class AntimetalInversionMixin { LivingEntity entity = (LivingEntity) (Object) this; if (entity.level().isClientSide()) return; if (effectInstance.getEffect() != AntarchyObjects.INVERTED_EFFECT.get()) return; - AntarchyGravityApi.setGravityDirection(entity, AntarchyGravityDirection.DOWN, new AntarchyGravityTransition(12)); + GravityApi.setGravityDirection(entity, GravityDirection.DOWN, new GravityTransition(12)); } private static void antarchy$spawnInversionParticles(LivingEntity entity) { diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntiwaterItemEntityMixin.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntiwaterItemEntityMixin.java index 44148469..0aa53d7d 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntiwaterItemEntityMixin.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntiwaterItemEntityMixin.java @@ -1,10 +1,7 @@ package com.craisinlord.antarchy.fabric.mixin; -import com.craisinlord.antarchy.content.fluid.AntarchyFluidChecks; import com.craisinlord.antarchy.fabric.util.CustomFluidPhysicsChecks; -import net.minecraft.core.BlockPos; import net.minecraft.world.entity.item.ItemEntity; -import net.minecraft.world.level.material.FluidState; import net.minecraft.world.phys.Vec3; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -16,7 +13,7 @@ public abstract class AntiwaterItemEntityMixin { @Inject(method = "tick", at = @At("TAIL")) private void antarchy$applyAntiwaterItemMovement(CallbackInfo ci) { ItemEntity entity = (ItemEntity) (Object) this; - if (!antarchy$isTouchingAntiwater(entity)) { + if (!CustomFluidPhysicsChecks.isTouchingAntiwater(entity)) { return; } @@ -29,22 +26,4 @@ public abstract class AntiwaterItemEntityMixin { motion.z * 0.99D + push.z ); } - - private boolean antarchy$isTouchingAntiwater(ItemEntity entity) { - BlockPos min = BlockPos.containing(entity.getBoundingBox().minX, entity.getBoundingBox().minY, entity.getBoundingBox().minZ); - BlockPos max = BlockPos.containing(entity.getBoundingBox().maxX, entity.getBoundingBox().maxY, entity.getBoundingBox().maxZ); - BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(); - for (int x = min.getX(); x <= max.getX(); x++) { - for (int y = min.getY(); y <= max.getY(); y++) { - for (int z = min.getZ(); z <= max.getZ(); z++) { - cursor.set(x, y, z); - FluidState fluidState = entity.level().getFluidState(cursor); - if (AntarchyFluidChecks.isAntiwater(fluidState)) { - return true; - } - } - } - } - return false; - } } diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntiwaterLivingEntityMixin.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntiwaterLivingEntityMixin.java index b5229227..9e8bac47 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntiwaterLivingEntityMixin.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntiwaterLivingEntityMixin.java @@ -1,17 +1,13 @@ package com.craisinlord.antarchy.fabric.mixin; import com.craisinlord.antarchy.content.AntarchyObjects; -import com.craisinlord.antarchy.content.fluid.AntarchyFluidChecks; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; +import com.craisinlord.anthology.gravity.GravityRotationUtil; import com.craisinlord.antarchy.fabric.util.CustomFluidPhysicsChecks; -import net.minecraft.core.BlockPos; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.MoverType; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.material.FluidState; -import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -23,7 +19,7 @@ public abstract class AntiwaterLivingEntityMixin { @Inject(method = "travel", at = @At("HEAD"), cancellable = true) private void antarchy$moveInAntiwater(Vec3 travelVector, CallbackInfo ci) { LivingEntity entity = (LivingEntity) (Object) this; - if (!antarchy$isTouchingAntiwaterLocal(entity)) { + if (!CustomFluidPhysicsChecks.isTouchingAntiwater(entity)) { return; } @@ -42,9 +38,9 @@ public abstract class AntiwaterLivingEntityMixin { motion = new Vec3(motion.x, 0.2D, motion.z); } - AntarchyGravityDirection gravityDirection = antarchy$getEffectiveGravityDirection(entity); + GravityDirection gravityDirection = antarchy$getEffectiveGravityDirection(entity); Vec3 worldMotion = gravityDirection.isInverted() - ? AntarchyGravityRotationUtil.vecPlayerToWorld(motion, gravityDirection) + ? GravityRotationUtil.vecPlayerToWorld(motion, gravityDirection) : motion; double drag = entity.isSwimming() ? 0.9D : 0.8D; @@ -60,7 +56,7 @@ public abstract class AntiwaterLivingEntityMixin { entity.setDeltaMovement( gravityDirection.isInverted() - ? AntarchyGravityRotationUtil.vecWorldToPlayer(worldMotion, gravityDirection) + ? GravityRotationUtil.vecWorldToPlayer(worldMotion, gravityDirection) : worldMotion ); @@ -72,7 +68,7 @@ public abstract class AntiwaterLivingEntityMixin { Vec3 boostedWorldMotion = new Vec3(worldMotion.x, 0.3D, worldMotion.z); entity.setDeltaMovement( gravityDirection.isInverted() - ? AntarchyGravityRotationUtil.vecWorldToPlayer(boostedWorldMotion, gravityDirection) + ? GravityRotationUtil.vecWorldToPlayer(boostedWorldMotion, gravityDirection) : boostedWorldMotion ); } @@ -80,31 +76,12 @@ public abstract class AntiwaterLivingEntityMixin { ci.cancel(); } - private AntarchyGravityDirection antarchy$getEffectiveGravityDirection(LivingEntity entity) { - AntarchyGravityDirection gravityDirection = AntarchyGravityApi.getGravityDirection(entity); + private GravityDirection antarchy$getEffectiveGravityDirection(LivingEntity entity) { + GravityDirection gravityDirection = GravityApi.getGravityDirection(entity); if (gravityDirection.isInverted() || !entity.hasEffect(AntarchyObjects.INVERTED_EFFECT.get())) { return gravityDirection; } - return AntarchyGravityDirection.UP; - } - - private boolean antarchy$isTouchingAntiwaterLocal(LivingEntity entity) { - AABB box = entity.getBoundingBox().inflate(0.05D); - BlockPos min = BlockPos.containing(box.minX, box.minY, box.minZ); - BlockPos max = BlockPos.containing(box.maxX, box.maxY, box.maxZ); - BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(); - for (int x = min.getX(); x <= max.getX(); x++) { - for (int y = min.getY(); y <= max.getY(); y++) { - for (int z = min.getZ(); z <= max.getZ(); z++) { - cursor.set(x, y, z); - FluidState fluidState = entity.level().getFluidState(cursor); - if (AntarchyFluidChecks.isAntiwater(fluidState)) { - return true; - } - } - } - } - return false; + return GravityDirection.UP; } } diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/DreamSandMovementMixin.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/DreamSandMovementMixin.java deleted file mode 100644 index 17c6896a..00000000 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/DreamSandMovementMixin.java +++ /dev/null @@ -1,113 +0,0 @@ -package com.craisinlord.antarchy.fabric.mixin; - -import com.craisinlord.antarchy.config.AntarchySettings; -import com.craisinlord.antarchy.content.AntarchyTags; -import com.craisinlord.antarchy.content.movement.DreamSandLowGravityAccess; -import com.craisinlord.antarchy.fabric.registry.AntarchyFabricBlocks; -import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.entity.LivingEntity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(LivingEntity.class) -public abstract class DreamSandMovementMixin { - @Inject(method = "jumpFromGround", at = @At("TAIL")) - private void antarchy$handleDreamSandJump(CallbackInfo ci) { - LivingEntity self = (LivingEntity) (Object) this; - if (self.level().isClientSide()) return; - - DreamSandLowGravityAccess access = (DreamSandLowGravityAccess) self; - if (!AntarchySettings.dreamSandEnabled() || antarchy$isDreamSandLowGravityBlacklisted(self)) { - access.antarchy$clearDreamSandLowGravity(); - } else if (antarchy$isStandingOnDreamSand(self)) { - antarchy$startDreamSandLowGravity(self, access); - } - } - - @Inject(method = "tick", at = @At("TAIL")) - private void antarchy$tickDreamSandLowGravity(CallbackInfo ci) { - LivingEntity self = (LivingEntity) (Object) this; - if (self.level().isClientSide()) return; - - DreamSandLowGravityAccess access = (DreamSandLowGravityAccess) self; - int landingGraceTicks = access.antarchy$getDreamSandLandingGraceTicks(); - if (landingGraceTicks > 0) { - access.antarchy$setDreamSandLandingGraceTicks(landingGraceTicks - 1); - } - - if (!AntarchySettings.dreamSandEnabled() || antarchy$isDreamSandLowGravityBlacklisted(self)) { - return; - } - - if (!access.antarchy$isDreamSandLowGravityActive() - && !self.onGround() - && antarchy$isStandingOnDreamSand(self)) { - antarchy$startDreamSandLowGravity(self, access); - } - - if (!access.antarchy$isDreamSandLowGravityActive()) { - return; - } - - int remainingTicks = access.antarchy$getDreamSandLowGravityTicksRemaining(); - if (remainingTicks > 0) { - access.antarchy$setDreamSandLowGravityTicksRemaining(remainingTicks - 1); - } - if (access.antarchy$getDreamSandLowGravityTicksRemaining() <= 0) { - access.antarchy$clearDreamSandLowGravity(); - return; - } - - if (antarchy$isOnSolidGround(self)) { - access.antarchy$setDreamSandLowGravityActive(false); - access.antarchy$setDreamSandLowGravityTicksRemaining(0); - access.antarchy$setDreamSandLandingGraceTicks(2); - } else if (!self.onGround() && self.getDeltaMovement().y < 0.0D) { - self.setDeltaMovement( - self.getDeltaMovement().x, - self.getDeltaMovement().y * AntarchySettings.dreamSandGravityMultiplier(), - self.getDeltaMovement().z - ); - } - } - - @Inject(method = "causeFallDamage", at = @At("HEAD"), cancellable = true) - private void antarchy$handleDreamSandFall(float fallDistance, float multiplier, DamageSource source, CallbackInfoReturnable cir) { - LivingEntity self = (LivingEntity) (Object) this; - DreamSandLowGravityAccess access = (DreamSandLowGravityAccess) self; - if (!AntarchySettings.dreamSandEnabled() - || antarchy$isDreamSandLowGravityBlacklisted(self) - || (!access.antarchy$isDreamSandLowGravityActive() && access.antarchy$getDreamSandLandingGraceTicks() <= 0)) { - return; - } - - self.resetFallDistance(); - cir.setReturnValue(false); - } - - private static boolean antarchy$isOnSolidGround(LivingEntity livingEntity) { - return livingEntity.onGround() && livingEntity.getBlockStateOn().blocksMotion(); - } - - private static boolean antarchy$isStandingOnDreamSand(LivingEntity livingEntity) { - return livingEntity.getBlockStateOn().is(AntarchyFabricBlocks.DREAM_SAND.get()); - } - - private static void antarchy$startDreamSandLowGravity(LivingEntity self, DreamSandLowGravityAccess access) { - self.setDeltaMovement( - self.getDeltaMovement().x, - self.getDeltaMovement().y * AntarchySettings.dreamSandJumpVelocityMultiplier(), - self.getDeltaMovement().z - ); - access.antarchy$setDreamSandLowGravityActive(true); - access.antarchy$setDreamSandLowGravityTicksRemaining((int) Math.max(1L, Math.round(AntarchySettings.dreamSandEffectDurationSeconds() * 20.0D))); - access.antarchy$setDreamSandLandingGraceTicks(0); - } - - private static boolean antarchy$isDreamSandLowGravityBlacklisted(LivingEntity livingEntity) { - return livingEntity.getType().is(AntarchyTags.Entities.DREAM_SAND_LOW_GRAVITY_BLACKLIST); - } -} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/ElytraFallFlyingMixin.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/ElytraFallFlyingMixin.java index 5239a901..34c7b4d3 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/ElytraFallFlyingMixin.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/ElytraFallFlyingMixin.java @@ -11,9 +11,6 @@ import org.spongepowered.asm.mixin.injection.Redirect; @Mixin(LivingEntity.class) public abstract class ElytraFallFlyingMixin { - /** - * Redirect to allow any ElytraItem subclass to sustain fall flying. - */ @Redirect( method = "updateFallFlying", at = @At( diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/EntityReachInteractMixin.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/EntityReachInteractMixin.java new file mode 100644 index 00000000..c4e00cb6 --- /dev/null +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/EntityReachInteractMixin.java @@ -0,0 +1,32 @@ +package com.craisinlord.antarchy.fabric.mixin; + +import com.craisinlord.antarchy.compat.entity.EntityReach; +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.network.ServerGamePacketListenerImpl; +import net.minecraft.world.entity.ai.attributes.AttributeInstance; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(ServerGamePacketListenerImpl.class) +public abstract class EntityReachInteractMixin { + @Shadow + public ServerPlayer player; + + @ModifyExpressionValue( + method = "handleInteract", + at = @At( + value = "FIELD", + target = "Lnet/minecraft/server/network/ServerGamePacketListenerImpl;MAX_INTERACTION_DISTANCE:D" + ) + ) + private double antarchy$entityInteractionDistance(double original) { + AttributeInstance reach = EntityReach.instance(this.player); + if (reach == null || reach.getModifiers().isEmpty()) { + return original; + } + double range = EntityReach.entityInteractionRange(this.player) + 1.0D; + return range * range; + } +} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/JumpyBootsFallDamageMixin.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/JumpyBootsFallDamageMixin.java deleted file mode 100644 index 3d4fbfcf..00000000 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/JumpyBootsFallDamageMixin.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.craisinlord.antarchy.fabric.mixin; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.item.BloodCrystalArmorItem; -import com.craisinlord.antarchy.content.item.JumpyBootsItem; -import com.craisinlord.antarchy.fabric.util.JumpyBootsFabricHelper; -import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.entity.EquipmentSlot; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.player.Player; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.ModifyVariable; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(LivingEntity.class) -public abstract class JumpyBootsFallDamageMixin { - @Inject(method = "causeFallDamage", at = @At("HEAD"), cancellable = true) - private void antarchy$cancelBloodCrystalBootsInvertedFallDamage(float fallDistance, float multiplier, DamageSource source, CallbackInfoReturnable cir) { - LivingEntity self = (LivingEntity) (Object) this; - if (!(self instanceof Player player)) { - return; - } - if (!AntarchyGravityApi.isGravityInverted(player)) { - return; - } - if (!(player.getItemBySlot(EquipmentSlot.FEET).getItem() instanceof BloodCrystalArmorItem)) { - return; - } - - player.fallDistance = 0.0F; - cir.setReturnValue(false); - } - - @ModifyVariable(method = "causeFallDamage", at = @At("HEAD"), ordinal = 0, argsOnly = true) - private float antarchy$reduceJumpyBootsFallDamage(float fallDistance) { - LivingEntity self = (LivingEntity) (Object) this; - if (!JumpyBootsItem.isWearingJumpyBoots(self)) return fallDistance; - long protectionUntil = JumpyBootsFabricHelper.getProtectionUntil(self); - if (self.level().getGameTime() < protectionUntil) { - return fallDistance * 0.25F; - } - return fallDistance; - } -} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/SpringyBootsFallDamageMixin.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/SpringyBootsFallDamageMixin.java new file mode 100644 index 00000000..e0ffdece --- /dev/null +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/SpringyBootsFallDamageMixin.java @@ -0,0 +1,45 @@ +package com.craisinlord.antarchy.fabric.mixin; + +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.antarchy.content.enchantment.AntarchyEnchantments; +import com.craisinlord.antarchy.content.item.SpringyBootsItem; +import com.craisinlord.antarchy.fabric.util.SpringyBootsFabricHelper; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.ModifyVariable; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(LivingEntity.class) +public abstract class SpringyBootsFallDamageMixin { + @Inject(method = "causeFallDamage", at = @At("HEAD"), cancellable = true) + private void antarchy$cancelBloodCrystalBootsInvertedFallDamage(float fallDistance, float multiplier, DamageSource source, CallbackInfoReturnable cir) { + LivingEntity self = (LivingEntity) (Object) this; + if (!(self instanceof Player player)) { + return; + } + if (!GravityApi.isGravityInverted(player)) { + return; + } + if (AntarchyEnchantments.featherRisingLevel(player) <= 0) { + return; + } + + player.fallDistance = 0.0F; + cir.setReturnValue(false); + } + + @ModifyVariable(method = "causeFallDamage", at = @At("HEAD"), ordinal = 0, argsOnly = true) + private float antarchy$reduceSpringyBootsFallDamage(float fallDistance) { + LivingEntity self = (LivingEntity) (Object) this; + if (!SpringyBootsItem.isWearingSpringyBoots(self)) return fallDistance; + long protectionUntil = SpringyBootsFabricHelper.getProtectionUntil(self); + if (self.level().getGameTime() < protectionUntil) { + return fallDistance * 0.25F; + } + return fallDistance; + } +} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/ThoraxisWaterBucketMixin.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/ThoraxisWaterBucketMixin.java new file mode 100644 index 00000000..d8cde783 --- /dev/null +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/ThoraxisWaterBucketMixin.java @@ -0,0 +1,72 @@ +package com.craisinlord.antarchy.fabric.mixin; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricMisc; +import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.BucketItem; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.level.material.Fluids; +import net.minecraft.world.phys.BlockHitResult; +import org.jetbrains.annotations.Nullable; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(BucketItem.class) +public abstract class ThoraxisWaterBucketMixin { + private static final ResourceLocation THORAXIS_DIMENSION_ID = + new ResourceLocation(Antarchy.MODID, "thoraxis"); + + @Shadow + @Final + public Fluid content; + + @Shadow + protected abstract void playEmptySound(@Nullable Player player, LevelAccessor level, BlockPos pos); + + @Inject(method = "emptyContents", at = @At("HEAD"), cancellable = true) + private void antarchy$replaceWaterWithAntiwaterInThoraxis( + @Nullable Player player, + Level level, + BlockPos pos, + @Nullable BlockHitResult hitResult, + CallbackInfoReturnable cir + ) { + if (this.content != Fluids.WATER || !level.dimension().location().equals(THORAXIS_DIMENSION_ID)) { + return; + } + + BlockState state = level.getBlockState(pos); + boolean canReplace = state.canBeReplaced(this.content); + + if (!state.isAir() && !canReplace && !state.getFluidState().isSource()) { + cir.setReturnValue(false); + return; + } + + if (!level.isClientSide && canReplace && !state.liquid()) { + level.destroyBlock(pos, true); + } + + boolean placed = level.setBlock( + pos, + AntarchyFabricMisc.ANTIWATER.get().defaultFluidState().createLegacyBlock(), + 11 + ); + if (placed || state.getFluidState().isSource()) { + this.playEmptySound(player, level, pos); + cir.setReturnValue(true); + return; + } + + cir.setReturnValue(false); + } +} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/BrutalflyElytraExperienceBarMixin.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/BrutalflyElytraExperienceBarMixin.java new file mode 100644 index 00000000..797c0d97 --- /dev/null +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/BrutalflyElytraExperienceBarMixin.java @@ -0,0 +1,22 @@ +package com.craisinlord.antarchy.fabric.mixin.client; + +import com.craisinlord.antarchy.content.item.BrutalflyElytraItem; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.player.LocalPlayer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(Gui.class) +public abstract class BrutalflyElytraExperienceBarMixin { + @Inject(method = "renderExperienceBar", at = @At("HEAD"), cancellable = true) + private void antarchy$hideExperienceBarForBrutalfly(GuiGraphics guiGraphics, int x, CallbackInfo ci) { + LocalPlayer player = Minecraft.getInstance().player; + if (player != null && BrutalflyElytraItem.isWearingBrutalflyElytra(player) && player.isFallFlying()) { + ci.cancel(); + } + } +} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/CameraShakeMixin.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/CameraShakeMixin.java deleted file mode 100644 index 212cc276..00000000 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/CameraShakeMixin.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.craisinlord.antarchy.fabric.mixin.client; - -import com.craisinlord.antarchy.content.client.CameraShakeClientState; -import com.craisinlord.antarchy.content.client.HerculesBeetleImpactShakeClientState; -import com.craisinlord.antarchy.content.item.BigBerthaItem; -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.math.Axis; -import net.minecraft.client.Minecraft; -import net.minecraft.util.Mth; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import net.minecraft.client.renderer.GameRenderer; - -@Mixin(GameRenderer.class) -public abstract class CameraShakeMixin { - private static final int TORETERROR_SHAKE_TICKS = 25; - - @Shadow @Final private Minecraft minecraft; - - @Inject(method = "bobView", at = @At("TAIL")) - private void applyCameraShake(PoseStack poseStack, float partialTick, CallbackInfo ci) { - if (minecraft.level == null || minecraft.player == null) { - CameraShakeClientState.clear(); - return; - } - - float shakeStrength = CameraShakeClientState.getStrength(minecraft.gameRenderer.getMainCamera().getPosition()); - - int beetleShakeTicks = HerculesBeetleImpactShakeClientState.getTicks(); - if (beetleShakeTicks > 0) { - shakeStrength += (float) beetleShakeTicks / TORETERROR_SHAKE_TICKS * 2.0F; - } - - int bigBerthaShakeTicks = BigBerthaItem.clientShakeTicks; - if (bigBerthaShakeTicks > 0) { - shakeStrength += (float) bigBerthaShakeTicks / TORETERROR_SHAKE_TICKS * 2.0F; - } - - if (shakeStrength <= 0.0F) return; - - float time = (float) (minecraft.player.tickCount + partialTick); - poseStack.mulPose(Axis.YP.rotationDegrees(Mth.sin(time * 1.5F) * shakeStrength * 2.5F)); - poseStack.mulPose(Axis.XP.rotationDegrees(Mth.cos(time * 1.8F) * shakeStrength * 2.0F)); - poseStack.mulPose(Axis.ZP.rotationDegrees(Mth.sin(time * 2.2F) * shakeStrength * 1.5F)); - } -} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/CrossbowArmPoseMixin.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/CrossbowArmPoseMixin.java index 573165a4..515e4929 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/CrossbowArmPoseMixin.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/CrossbowArmPoseMixin.java @@ -1,6 +1,7 @@ package com.craisinlord.antarchy.fabric.mixin.client; import com.craisinlord.antarchy.content.item.GravityGunItem; +import com.craisinlord.antarchy.content.item.PortalGunItem; import com.craisinlord.antarchy.content.item.RpoLauncherItem; import com.craisinlord.antarchy.content.item.SizeRayItem; import com.craisinlord.antarchy.content.item.SquidzookaItem; @@ -26,7 +27,7 @@ public class CrossbowArmPoseMixin { ItemStack stack = player.getItemInHand(hand); Item item = stack.getItem(); - if (item instanceof GravityGunItem || item instanceof SquidzookaItem || item instanceof RpoLauncherItem || item instanceof WaterCannonItem) { + if (item instanceof GravityGunItem || item instanceof PortalGunItem || item instanceof SquidzookaItem || item instanceof RpoLauncherItem || item instanceof WaterCannonItem) { cir.setReturnValue(HumanoidModel.ArmPose.CROSSBOW_HOLD); } else if (item instanceof SizeRayItem) { if (player.isUsingItem() && player.getUsedItemHand() == hand) { diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/DuctTapeInputMixin.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/DuctTapeInputMixin.java deleted file mode 100644 index 5aa823ad..00000000 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/DuctTapeInputMixin.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.craisinlord.antarchy.fabric.mixin.client; - -import com.craisinlord.antarchy.content.block.DuctTapeBlock; -import net.minecraft.client.Minecraft; -import net.minecraft.client.player.Input; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(Input.class) -public abstract class DuctTapeInputMixin { - - @Inject(method = "tick", at = @At("RETURN")) - private void blockInputInDuctTape(boolean isSneaking, float slowFactor, CallbackInfo ci) { - Minecraft mc = Minecraft.getInstance(); - if (mc.player == null || mc.level == null) return; - if (!mc.player.isNoGravity() && !DuctTapeBlock.isTouchingTape(mc.level, mc.player)) return; - - Input self = (Input) (Object) this; - self.left = false; - self.right = false; - self.up = false; - self.down = false; - self.leftImpulse = 0.0F; - self.forwardImpulse = 0.0F; - self.jumping = false; - self.shiftKeyDown = false; - } -} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/EntityReachPickMixin.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/EntityReachPickMixin.java new file mode 100644 index 00000000..eac0bfc6 --- /dev/null +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/EntityReachPickMixin.java @@ -0,0 +1,118 @@ +package com.craisinlord.antarchy.fabric.mixin.client; + +import com.craisinlord.antarchy.compat.entity.EntityReach; +import com.craisinlord.antarchy.config.AntarchySettings; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.AttributeInstance; +import net.minecraft.world.entity.projectile.ProjectileUtil; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.EntityHitResult; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(GameRenderer.class) +public abstract class EntityReachPickMixin { + @Shadow + @Final + Minecraft minecraft; + + @Inject(method = "pick(F)V", at = @At("HEAD"), cancellable = true) + private void antarchy$pickWithEntityReach(float partialTick, CallbackInfo ci) { + Entity camera = this.minecraft.getCameraEntity(); + LocalPlayer player = this.minecraft.player; + if (camera == null || player == null || this.minecraft.level == null || this.minecraft.gameMode == null) { + return; + } + AttributeInstance reach = EntityReach.instance(player); + if (reach == null || reach.getModifiers().isEmpty()) { + return; + } + + this.minecraft.getProfiler().push("pick"); + double blockRange = EntityReach.blockInteractionRange(player); + double entityRange = EntityReach.entityInteractionRange(player); + HitResult hitResult = antarchy$pick(camera, blockRange, entityRange, partialTick); + this.minecraft.hitResult = hitResult; + this.minecraft.crosshairPickEntity = hitResult instanceof EntityHitResult entityHitResult ? entityHitResult.getEntity() : null; + this.minecraft.getProfiler().pop(); + ci.cancel(); + } + + @Unique + private HitResult antarchy$pick(Entity camera, double blockRange, double entityRange, float partialTick) { + double maxRange = Math.max(blockRange, entityRange); + double maxRangeSq = maxRange * maxRange; + Vec3 eyePosition = camera.getEyePosition(partialTick); + HitResult blockHit = camera.pick(maxRange, partialTick, false); + double blockHitDistanceSq = blockHit.getLocation().distanceToSqr(eyePosition); + Double swingThroughReachSq = antarchy$swingThroughReachSq(blockHit, maxRangeSq); + if (blockHit.getType() != HitResult.Type.MISS) { + maxRangeSq = blockHitDistanceSq; + maxRange = Math.sqrt(maxRangeSq); + } + + Vec3 viewVector = camera.getViewVector(1.0F); + Vec3 reachEnd = eyePosition.add(viewVector.x * maxRange, viewVector.y * maxRange, viewVector.z * maxRange); + AABB searchBox = camera.getBoundingBox().expandTowards(viewVector.scale(maxRange)).inflate(1.0D, 1.0D, 1.0D); + double entitySearchSq = swingThroughReachSq != null ? swingThroughReachSq : maxRangeSq; + EntityHitResult entityHit = ProjectileUtil.getEntityHitResult(camera, eyePosition, reachEnd, searchBox, + entity -> !entity.isSpectator() && entity.isPickable(), entitySearchSq); + + if (entityHit != null && swingThroughReachSq != null && antarchy$canSwingThrough(entityHit.getEntity()) + && eyePosition.distanceToSqr(entityHit.getEntity().position()) < swingThroughReachSq) { + return antarchy$filterHitResult(entityHit, eyePosition, entityRange); + } + if (entityHit != null && entityHit.getLocation().distanceToSqr(eyePosition) < blockHitDistanceSq) { + return antarchy$filterHitResult(entityHit, eyePosition, entityRange); + } + return antarchy$filterHitResult(blockHit, eyePosition, blockRange); + } + + @Unique + private Double antarchy$swingThroughReachSq(HitResult hitResult, double maxRangeSq) { + if (!AntarchySettings.swingThroughGrassEnabled()) { + return null; + } + if (!(hitResult instanceof BlockHitResult blockHitResult) || hitResult.getType() != HitResult.Type.BLOCK || this.minecraft.level == null) { + return null; + } + BlockPos blockPos = blockHitResult.getBlockPos(); + if (this.minecraft.level.getBlockState(blockPos).getCollisionShape(this.minecraft.level, blockPos).isEmpty()) { + return maxRangeSq; + } + return null; + } + + @Unique + private boolean antarchy$canSwingThrough(Entity hitEntity) { + return hitEntity instanceof LivingEntity + && !hitEntity.isSpectator() + && hitEntity.isAttackable() + && this.minecraft.player != null + && hitEntity != this.minecraft.player.getVehicle(); + } + + @Unique + private static HitResult antarchy$filterHitResult(HitResult hitResult, Vec3 eyePosition, double range) { + Vec3 location = hitResult.getLocation(); + if (!location.closerThan(eyePosition, range)) { + Direction direction = Direction.getNearest(location.x - eyePosition.x, location.y - eyePosition.y, location.z - eyePosition.z); + return BlockHitResult.miss(location, direction, BlockPos.containing(location)); + } + return hitResult; + } +} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/KeybindingConflictFixMixin.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/KeybindingConflictFixMixin.java index f7141bf8..5d67b246 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/KeybindingConflictFixMixin.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/KeybindingConflictFixMixin.java @@ -19,6 +19,7 @@ public abstract class KeybindingConflictFixMixin { @Shadow @Final private static Map ALL; @Shadow private InputConstants.Key key; @Shadow private boolean isDown; + @Shadow private int clickCount; @Inject(method = "(Ljava/lang/String;Lcom/mojang/blaze3d/platform/InputConstants$Type;ILjava/lang/String;)V", at = @At("TAIL")) private void antarchy$addInitialMapping(String name, InputConstants.Type type, int key, String category, CallbackInfo ci) { @@ -44,8 +45,31 @@ public abstract class KeybindingConflictFixMixin { } } + @Inject(method = "click", at = @At("TAIL")) + private static void antarchy$clickConflicts(InputConstants.Key key, CallbackInfo ci) { + if (!AntarchySettings.fabricKeybindingConflictFixEnabled()) { + return; + } + KeyMapping active = MAP.get(key); + for (KeyMapping mapping : KeybindingConflictFixStore.others(key, active)) { + if (((KeybindingConflictFixMixin) (Object) mapping).antarchy$isSprint()) { + ((KeybindingConflictFixMixin) (Object) mapping).antarchy$click(); + } + } + } + @Unique private void antarchy$setDown(boolean down) { this.isDown = down; } + + @Unique + private boolean antarchy$isSprint() { + return KeybindingConflictFixStore.isSprint((KeyMapping) (Object) this); + } + + @Unique + private void antarchy$click() { + this.clickCount++; + } } diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/MultipartClientSpawnMixin.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/MultipartClientSpawnMixin.java deleted file mode 100644 index e39b6ea7..00000000 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/MultipartClientSpawnMixin.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.craisinlord.antarchy.fabric.mixin.client; -import com.craisinlord.antarchy.fabric.registry.AntarchyFabricEntities; - -import com.craisinlord.antarchy.fabric.AntarchyFabricContent; -import net.minecraft.client.multiplayer.ClientPacketListener; -import net.minecraft.network.protocol.game.ClientboundAddEntityPacket; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(ClientPacketListener.class) -public abstract class MultipartClientSpawnMixin { - @Inject(method = "handleAddEntity", at = @At("HEAD"), cancellable = true) - private void antarchy$skipTrackedMultipartPlaceholders(ClientboundAddEntityPacket packet, CallbackInfo ci) { - if (packet.getType() == AntarchyFabricEntities.KRAKEN_PART.get()) { - ci.cancel(); - } - } -} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/MultipartEntityLevelRegistryMixin.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/MultipartEntityLevelRegistryMixin.java deleted file mode 100644 index 1dc6ceaa..00000000 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/MultipartEntityLevelRegistryMixin.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.craisinlord.antarchy.fabric.mixin.client; - -import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner; -import com.craisinlord.antarchy.fabric.client.multipart.MultipartClientPartLevelRegistry; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.level.entity.EntityInLevelCallback; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(Entity.class) -public abstract class MultipartEntityLevelRegistryMixin { - @Inject(method = "setLevelCallback", at = @At("TAIL")) - private void antarchy$registerMultipartParts(EntityInLevelCallback entityInLevelCallback, CallbackInfo ci) { - Entity self = (Entity) (Object) this; - if (self instanceof MultipartEntityOwner owner - && entityInLevelCallback != EntityInLevelCallback.NULL - && self.level().isClientSide()) { - if (owner.antarchy$getMultipartParts() == null) { - owner.antarchy$spawnMultipartParts(); - } - MultipartClientPartLevelRegistry.register(owner); - } - } - - @Inject(method = "setRemoved", at = @At("HEAD")) - private void antarchy$unregisterMultipartParts(Entity.RemovalReason removalReason, CallbackInfo ci) { - Entity self = (Entity) (Object) this; - if (self instanceof MultipartEntityOwner owner && self.level().isClientSide()) { - MultipartClientPartLevelRegistry.unregister(owner); - } - } -} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/SeparateLargeItemGuiLightingMixin.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/SeparateLargeItemGuiLightingMixin.java new file mode 100644 index 00000000..8efda15f --- /dev/null +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/SeparateLargeItemGuiLightingMixin.java @@ -0,0 +1,28 @@ +package com.craisinlord.antarchy.fabric.mixin.client; + +import com.craisinlord.antarchy.fabric.client.SeparateLargeItemModels; +import com.llamalad7.mixinextras.sugar.Local; +import net.fabricmc.fabric.api.client.model.loading.v1.FabricBakedModelManager; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.world.item.ItemStack; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyVariable; + +@Mixin(GuiGraphics.class) +public abstract class SeparateLargeItemGuiLightingMixin { + @ModifyVariable( + method = "renderItem(Lnet/minecraft/world/entity/LivingEntity;Lnet/minecraft/world/level/Level;Lnet/minecraft/world/item/ItemStack;IIII)V", + at = @At("STORE"), + ordinal = 0 + ) + private BakedModel antarchy$useGuiModelForLighting(BakedModel original, @Local(argsOnly = true) ItemStack stack) { + var guiModel = SeparateLargeItemModels.modelFor(stack); + if (guiModel != null) { + return ((FabricBakedModelManager) Minecraft.getInstance().getModelManager()).getModel(guiModel); + } + return original; + } +} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/SeparateLargeItemModelsMixin.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/SeparateLargeItemModelsMixin.java new file mode 100644 index 00000000..98de727c --- /dev/null +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/SeparateLargeItemModelsMixin.java @@ -0,0 +1,33 @@ +package com.craisinlord.antarchy.fabric.mixin.client; + +import com.craisinlord.antarchy.fabric.client.SeparateLargeItemModels; +import com.llamalad7.mixinextras.sugar.Local; +import net.fabricmc.fabric.api.client.model.loading.v1.FabricBakedModelManager; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.entity.ItemRenderer; +import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.world.item.ItemDisplayContext; +import net.minecraft.world.item.ItemStack; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyVariable; + +@Mixin(ItemRenderer.class) +public abstract class SeparateLargeItemModelsMixin { + @ModifyVariable(method = "render", at = @At("HEAD"), argsOnly = true, ordinal = 0) + private BakedModel antarchy$selectGuiModel(BakedModel original, + @Local(argsOnly = true) ItemStack stack, + @Local(argsOnly = true) ItemDisplayContext displayContext) { + var guiModel = SeparateLargeItemModels.modelFor(stack); + if (guiModel != null && isGuiContext(displayContext)) { + return ((FabricBakedModelManager) Minecraft.getInstance().getModelManager()).getModel(guiModel); + } + return original; + } + + private static boolean isGuiContext(ItemDisplayContext displayContext) { + return displayContext == ItemDisplayContext.GUI + || displayContext == ItemDisplayContext.GROUND + || displayContext == ItemDisplayContext.FIXED; + } +} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/entity/MultipartEntityLevelRegistryMixin.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/entity/MultipartEntityLevelRegistryMixin.java deleted file mode 100644 index a2f3c9dc..00000000 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/entity/MultipartEntityLevelRegistryMixin.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.craisinlord.antarchy.fabric.mixin.entity; - -import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner; -import com.craisinlord.antarchy.fabric.entity.multipart.MultipartServerPartLevelRegistry; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.level.entity.EntityInLevelCallback; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(Entity.class) -/* - * Keeps multipart child entities registered in Fabric levels. - */ -public abstract class MultipartEntityLevelRegistryMixin { - @Inject(method = "setLevelCallback", at = @At("TAIL")) - private void antarchy$registerMultipartParts(EntityInLevelCallback entityInLevelCallback, CallbackInfo ci) { - Entity self = (Entity) (Object) this; - if (self instanceof MultipartEntityOwner owner - && entityInLevelCallback != EntityInLevelCallback.NULL - && !self.level().isClientSide()) { - if (owner.antarchy$getMultipartParts() == null) { - owner.antarchy$spawnMultipartParts(); - } - MultipartServerPartLevelRegistry.register(owner); - } - } - - @Inject(method = "setRemoved", at = @At("HEAD")) - private void antarchy$unregisterMultipartParts(Entity.RemovalReason removalReason, CallbackInfo ci) { - Entity self = (Entity) (Object) this; - if (self instanceof MultipartEntityOwner owner && !self.level().isClientSide()) { - MultipartServerPartLevelRegistry.unregister(owner); - } - } -} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/entity/ParalyzedMobFreezeMixin.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/entity/ParalyzedMobFreezeMixin.java new file mode 100644 index 00000000..a0195d80 --- /dev/null +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/entity/ParalyzedMobFreezeMixin.java @@ -0,0 +1,22 @@ +package com.craisinlord.antarchy.fabric.mixin.entity; + +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricMisc; +import net.minecraft.world.entity.Mob; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(Mob.class) +public abstract class ParalyzedMobFreezeMixin { + @Inject(method = "serverAiStep", at = @At("HEAD")) + private void antarchy$freezeAiWhileParalyzed(CallbackInfo ci) { + Mob mob = (Mob) (Object) this; + if (!mob.hasEffect(AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.PARALYZED))) { + return; + } + + mob.getNavigation().stop(); + mob.setJumping(false); + } +} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/infinity/AmendmentRareOresMixin.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/infinity/AmendmentRareOresMixin.java index 3209846d..73d19287 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/infinity/AmendmentRareOresMixin.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/infinity/AmendmentRareOresMixin.java @@ -12,12 +12,6 @@ import java.util.List; import java.util.Map; @Mixin(value = Amendment.class, remap = false) -/* - * Makes Antarchy's uranium/titanium ores and blocks much rarer in Infinite Dimensions' - * procedural dimensions. This is done natively via Infinity's own amendment system rather - * than relying on players editing infinity's config, keyed off the antarchy:infinity_dimension_rare_ores - * block tag so the list stays data-driven and native to Antarchy. - */ public class AmendmentRareOresMixin { @Inject(method = "getAmendmentList", at = @At("RETURN"), remap = false) private static void antarchy$addRareOreAmendment(CallbackInfoReturnable>> cir) { diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/infinity/WarpLogicMixin.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/infinity/WarpLogicMixin.java new file mode 100644 index 00000000..6876fad3 --- /dev/null +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/infinity/WarpLogicMixin.java @@ -0,0 +1,34 @@ +package com.craisinlord.antarchy.fabric.mixin.infinity; + +import com.craisinlord.antarchy.fabric.InfinityGenerationFailure; +import net.lerariemann.infinity.access.MinecraftServerAccess; +import net.lerariemann.infinity.util.teleport.PortalCreator; +import net.lerariemann.infinity.util.teleport.WarpLogic; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.MinecraftServer; +import net.minecraft.world.level.Level; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(WarpLogic.class) +public interface WarpLogicMixin { + @Redirect( + method = "requestWarp(Lnet/minecraft/server/level/ServerPlayer;Lnet/minecraft/resources/ResourceLocation;Z)V", + at = @At(value = "INVOKE", target = "Lnet/lerariemann/infinity/util/teleport/PortalCreator;tryAddInfinityDimension(Lnet/minecraft/server/MinecraftServer;Lnet/minecraft/resources/ResourceLocation;)Z") + ) + private static boolean antarchy$queuedDimensionCountsAsNew(MinecraftServer server, ResourceLocation dimensionId) throws Throwable { + ResourceKey key = ResourceKey.create(Registries.DIMENSION, dimensionId); + if (server instanceof MinecraftServerAccess access && access.infinity$hasToAdd(key)) { + return true; + } + try { + return PortalCreator.tryAddInfinityDimension(server, dimensionId); + } catch (Throwable throwable) { + InfinityGenerationFailure.mark(dimensionId); + throw throwable; + } + } +} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricClientNetworking.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricClientNetworking.java index 03bef8b9..565a41f4 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricClientNetworking.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricClientNetworking.java @@ -2,94 +2,38 @@ package com.craisinlord.antarchy.fabric.network; import com.craisinlord.antarchy.content.client.BloodglassClientState; import com.craisinlord.antarchy.content.client.BrutalflyElytraClientState; +import com.craisinlord.antarchy.content.client.HerculesBeetleImpactShakeClientState; import com.craisinlord.antarchy.content.client.HordeClientState; import com.craisinlord.antarchy.content.client.ScorpionWhipTetherClientState; +import com.craisinlord.antarchy.content.client.WormHookTetherClientState; import com.craisinlord.antarchy.content.client.TigerEyeCamouflageClientState; -import com.craisinlord.antarchy.content.client.ThoraxisWeatherClientState; -import com.craisinlord.antarchy.content.entity.multipart.MultipartFramework; -import com.craisinlord.antarchy.content.entity.multipart.network.MultipartAttackPayload; -import com.craisinlord.antarchy.content.entity.multipart.network.MultipartInteractPayload; import com.craisinlord.antarchy.content.network.*; -import com.craisinlord.antarchy.content.weather.ThoraxisWeatherKind; import com.craisinlord.antarchy.fabric.client.BloodCrystalKatanaTrailClientState; -import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; -import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; -import net.minecraft.client.Minecraft; -import net.minecraft.network.FriendlyByteBuf; +import com.craisinlord.anthology.network.AnthologyNetwork; +import com.craisinlord.anthology.network.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; public final class AntarchyFabricClientNetworking { private AntarchyFabricClientNetworking() { } - public static void bootstrapMultipartClient() { - MultipartFramework.bootstrap( - AntarchyFabricNetworking::createMultipartPart, - new MultipartFramework.NetworkBridge() { - @Override - public void sendAttack(java.util.UUID parentId, int partIndex, float damage) { - sendToServer(new MultipartAttackPayload(parentId, partIndex, damage), MultipartAttackPayload.STREAM_CODEC, MultipartAttackPayload.TYPE); - } - - @Override - public void sendInteract(java.util.UUID parentId, int partIndex, int handId) { - sendToServer(new MultipartInteractPayload(parentId, partIndex, handId), MultipartInteractPayload.STREAM_CODEC, MultipartInteractPayload.TYPE); - } - } - ); - } - - public static void sendToServer( - T payload, - com.craisinlord.antarchy.compat.network.StreamCodec streamCodec, - com.craisinlord.antarchy.compat.network.CustomPacketPayload.Type type - ) { - FriendlyByteBuf buf = PacketByteBufs.create(); - streamCodec.encode(buf, payload); - ClientPlayNetworking.send(type.id(), buf); - } - - private static void registerReceiver( - com.craisinlord.antarchy.compat.network.CustomPacketPayload.Type type, - com.craisinlord.antarchy.compat.network.StreamCodec streamCodec, - java.util.function.Consumer handler - ) { - ClientPlayNetworking.registerGlobalReceiver(type.id(), (client, handlerConn, buf, sender) -> { - T payload = streamCodec.decode(buf); - client.execute(() -> handler.accept(payload)); - }); + public static void send(CustomPacketPayload payload) { + AnthologyNetwork.sendToServer(payload); } public static void register() { - registerReceiver(GravityStatePayload.TYPE, GravityStatePayload.STREAM_CODEC, payload -> - AntarchyFabricNetworking.handleGravityState(Minecraft.getInstance().player, payload)); - registerReceiver(BloodglassStatePayload.TYPE, BloodglassStatePayload.STREAM_CODEC, payload -> - BloodglassClientState.update(payload.shieldsActive(), payload.shieldsMax())); - registerReceiver(BloodCrystalKatanaTrailPayload.TYPE, BloodCrystalKatanaTrailPayload.STREAM_CODEC, payload -> - BloodCrystalKatanaTrailClientState.trigger(payload.entityId(), payload.durationTicks())); - registerReceiver(ScorpionWhipTetherPayload.TYPE, ScorpionWhipTetherPayload.STREAM_CODEC, payload -> - ScorpionWhipTetherClientState.update(payload.playerId(), payload.targetId())); - registerReceiver(BrutalflyElytraAnimationPayload.TYPE, BrutalflyElytraAnimationPayload.STREAM_CODEC, payload -> - BrutalflyElytraClientState.trigger(payload.entityId(), payload.durationTicks(), payload.strength())); - registerReceiver(ThoraxisWeatherPayload.TYPE, ThoraxisWeatherPayload.STREAM_CODEC, payload -> - ThoraxisWeatherClientState.apply( - new ResourceLocation(payload.dimensionId()), - ThoraxisWeatherKind.byId(payload.weatherId()), - payload.expiresAt(), - payload.anchorX(), - payload.anchorY(), - payload.anchorZ() - )); - registerReceiver(HerculesBeetleImpactShakePayload.TYPE, HerculesBeetleImpactShakePayload.STREAM_CODEC, payload -> - AntarchyFabricNetworking.triggerHerculesBeetleImpactShake(payload.durationTicks())); - registerReceiver(ImpactShakePayload.TYPE, ImpactShakePayload.STREAM_CODEC, AntarchyFabricNetworking::triggerImpactShake); - registerReceiver(HordeIntensityPayload.TYPE, HordeIntensityPayload.STREAM_CODEC, payload -> - HordeClientState.update(payload.intensity())); - registerReceiver(TigerEyeCamouflageStatePayload.TYPE, TigerEyeCamouflageStatePayload.STREAM_CODEC, payload -> - TigerEyeCamouflageClientState.update(payload.entityId(), payload.active(), payload.blockStateId())); - registerReceiver(TimeDilationRatePayload.TYPE, TimeDilationRatePayload.STREAM_CODEC, payload -> - AntarchyFabricTimeDilationNetworking.handleRate(Minecraft.getInstance().player, payload)); - registerReceiver(TimeDilationFieldsPayload.TYPE, TimeDilationFieldsPayload.STREAM_CODEC, payload -> - com.craisinlord.antarchy.content.client.ClientTimeDilationTicker.applyFields(payload.fields())); + com.craisinlord.antarchy.content.client.PortalGunIndicatorClientState.setRequestSender(AntarchyFabricClientNetworking::send); + com.craisinlord.antarchy.content.client.MoonSkyTracker.setSender(AntarchyFabricClientNetworking::send); + com.craisinlord.antarchy.content.portalgun.PortalGunMoonAimSync.setClientReporter(com.craisinlord.antarchy.content.client.MoonSkyTracker::report); + AntarchyFabricNetworking.setClientHandler(PortalGunIndicatorPayload.TYPE, payload -> com.craisinlord.antarchy.content.client.PortalGunIndicatorClientState.update(payload)); + AntarchyFabricNetworking.setClientHandler(BloodglassStatePayload.TYPE, payload -> BloodglassClientState.update(payload.shieldsActive(), payload.shieldsMax())); + AntarchyFabricNetworking.setClientHandler(TigerEyeCamouflageStatePayload.TYPE, payload -> TigerEyeCamouflageClientState.update(payload.entityId(), payload.active(), payload.blockStateId())); + AntarchyFabricNetworking.setClientHandler(BloodCrystalKatanaTrailPayload.TYPE, payload -> BloodCrystalKatanaTrailClientState.trigger(payload.entityId(), payload.durationTicks())); + AntarchyFabricNetworking.setClientHandler(ScorpionWhipTetherPayload.TYPE, payload -> ScorpionWhipTetherClientState.update(payload.playerId(), payload.targetId())); + AntarchyFabricNetworking.setClientHandler(WormHookTetherPayload.TYPE, payload -> WormHookTetherClientState.update(payload.playerId(), payload.hookId())); + AntarchyFabricNetworking.setClientHandler(BrutalflyElytraAnimationPayload.TYPE, payload -> BrutalflyElytraClientState.trigger(payload.entityId(), payload.durationTicks(), payload.strength())); + AntarchyFabricNetworking.setClientHandler(HerculesBeetleImpactShakePayload.TYPE, payload -> HerculesBeetleImpactShakeClientState.trigger(payload.durationTicks())); + AntarchyFabricNetworking.setClientHandler(KingJudgmentFlashPayload.TYPE, payload -> com.craisinlord.antarchy.content.client.KingJudgmentFlashClientState.trigger(payload.durationTicks())); + AntarchyFabricNetworking.setClientHandler(HordeIntensityPayload.TYPE, payload -> HordeClientState.update(payload.intensity())); } } diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java index a28af3b2..6a6002ef 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java @@ -2,41 +2,40 @@ package com.craisinlord.antarchy.fabric.network; import com.craisinlord.antarchy.fabric.registry.AntarchyFabricEntities; import com.craisinlord.antarchy.content.entity.DiamondMinecartEntity; -import com.craisinlord.antarchy.content.client.CameraShakeClientState; -import com.craisinlord.antarchy.content.client.HerculesBeetleImpactShakeClientState; -import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner; -import com.craisinlord.antarchy.content.entity.multipart.MultipartFramework; -import com.craisinlord.antarchy.content.entity.multipart.network.MultipartAttackPayload; -import com.craisinlord.antarchy.content.entity.multipart.network.MultipartInteractPayload; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; import com.craisinlord.antarchy.content.entity.HerculesBeetleEntity; import com.craisinlord.antarchy.content.item.BrutalflyElytraFlightHelper; import com.craisinlord.antarchy.content.item.BrutalflyElytraItem; import com.craisinlord.antarchy.content.item.BigBerthaItem; -import com.craisinlord.antarchy.content.item.JumpyBootsHelper; -import com.craisinlord.antarchy.fabric.util.JumpyBootsFabricHelper; -import com.craisinlord.antarchy.content.item.JumpyBootsItem; +import com.craisinlord.antarchy.content.item.SpringyBootsHelper; +import com.craisinlord.antarchy.fabric.util.SpringyBootsFabricHelper; +import com.craisinlord.antarchy.content.item.SpringyBootsItem; +import com.craisinlord.antarchy.content.item.EyeOfTheStormItem; import com.craisinlord.antarchy.content.item.GravityGunItem; +import com.craisinlord.antarchy.content.item.TemporalTunerItem; +import com.craisinlord.antarchy.content.item.PortalGunItem; import com.craisinlord.antarchy.content.item.TigerEyeArmorUtil; +import com.craisinlord.antarchy.content.network.*; import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageController; import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageSync; -import com.craisinlord.antarchy.content.network.*; import com.craisinlord.antarchy.content.entity.DorrieEntity; import com.craisinlord.antarchy.content.network.DorrieJumpInputPayload; -import com.craisinlord.antarchy.content.network.JumpyBootsLaunchPayload; -import com.craisinlord.antarchy.content.weather.ThoraxisWeatherSnapshot; +import com.craisinlord.antarchy.content.network.SpringyBootsLaunchPayload; import com.craisinlord.antarchy.fabric.AntarchyFabricContent; -import com.craisinlord.antarchy.fabric.entity.multipart.MultipartPartEntity; -import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; -import net.fabricmc.fabric.api.networking.v1.PlayerLookup; -import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; +import com.craisinlord.anthology.network.AnthologyNetwork; +import com.craisinlord.anthology.network.CustomPacketPayload; +import com.craisinlord.anthology.network.StreamCodec; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.resources.ResourceLocation; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.BiConsumer; +import java.util.function.Consumer; +import net.fabricmc.fabric.api.networking.v1.PlayerLookup; import net.minecraft.network.protocol.game.ClientboundSetEntityMotionPacket; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; -import net.minecraft.world.InteractionHand; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.item.ItemStack; @@ -47,178 +46,147 @@ public final class AntarchyFabricNetworking { } public static void register() { + registerPayloadTypes(); registerServerReceivers(); + com.craisinlord.antarchy.content.portalgun.PortalGunIndicatorSync.setSender(AntarchyFabricNetworking::send); } - public static void sendToPlayer( - ServerPlayer player, - T payload, - com.craisinlord.antarchy.compat.network.StreamCodec streamCodec, - com.craisinlord.antarchy.compat.network.CustomPacketPayload.Type type - ) { - FriendlyByteBuf buf = PacketByteBufs.create(); - streamCodec.encode(buf, payload); - ServerPlayNetworking.send(player, type.id(), buf); - } + private static final Map> CLIENT_HANDLERS = new ConcurrentHashMap<>(); - private static void registerC2SReceiver( - com.craisinlord.antarchy.compat.network.CustomPacketPayload.Type type, - com.craisinlord.antarchy.compat.network.StreamCodec streamCodec, - java.util.function.BiConsumer handler - ) { - ServerPlayNetworking.registerGlobalReceiver(type.id(), (server, player, handlerConn, buf, sender) -> { - T payload = streamCodec.decode(buf); - server.execute(() -> handler.accept(player, payload)); + private static void registerS2C(CustomPacketPayload.Type type, StreamCodec codec) { + AnthologyNetwork.registerClientbound(type, codec, (payload, player) -> { + Consumer handler = CLIENT_HANDLERS.get(type.id()); + if (handler != null) { + handler.accept(payload); + } }); } - public static void bootstrapMultipartCommon() { - MultipartFramework.bootstrap( - AntarchyFabricNetworking::createMultipartPart, - new MultipartFramework.NetworkBridge() { - @Override - public void sendAttack(java.util.UUID parentId, int partIndex, float damage) { - } - - @Override - public void sendInteract(java.util.UUID parentId, int partIndex, int handId) { - } - } - ); + private static void registerC2S(CustomPacketPayload.Type type, StreamCodec codec) { + SERVER_CODECS.put(type.id(), codec); } - public static MultipartPartEntity createMultipartPart(MultipartEntityOwner owner, int partIndex, com.craisinlord.antarchy.content.entity.multipart.MultipartPartDefinition spec) { - return new MultipartPartEntity(AntarchyFabricEntities.KRAKEN_PART.get(), ((Entity) owner).level()) - .antarchy$configure(owner, partIndex, spec); + private static final Map> SERVER_CODECS = new ConcurrentHashMap<>(); + + @SuppressWarnings("unchecked") + private static void registerGlobalReceiver(CustomPacketPayload.Type type, BiConsumer handler) { + StreamCodec codec = (StreamCodec) SERVER_CODECS.get(type.id()); + AnthologyNetwork.registerServerbound(type, codec, handler); + } + + @SuppressWarnings("unchecked") + public static void setClientHandler(CustomPacketPayload.Type type, Consumer handler) { + CLIENT_HANDLERS.put(type.id(), payload -> handler.accept((T) payload)); + } + + public static void send(ServerPlayer player, CustomPacketPayload payload) { + AnthologyNetwork.sendToPlayer(player, payload); + } + + private static void registerPayloadTypes() { + registerS2C(PortalGunIndicatorPayload.TYPE, PortalGunIndicatorPayload.STREAM_CODEC); + registerS2C(BloodglassStatePayload.TYPE, BloodglassStatePayload.STREAM_CODEC); + registerS2C(TigerEyeCamouflageStatePayload.TYPE, TigerEyeCamouflageStatePayload.STREAM_CODEC); + registerS2C(BloodCrystalKatanaTrailPayload.TYPE, BloodCrystalKatanaTrailPayload.STREAM_CODEC); + registerS2C(ScorpionWhipTetherPayload.TYPE, ScorpionWhipTetherPayload.STREAM_CODEC); + registerS2C(WormHookTetherPayload.TYPE, WormHookTetherPayload.STREAM_CODEC); + registerS2C(BrutalflyElytraAnimationPayload.TYPE, BrutalflyElytraAnimationPayload.STREAM_CODEC); + registerS2C(HerculesBeetleImpactShakePayload.TYPE, HerculesBeetleImpactShakePayload.STREAM_CODEC); + registerS2C(KingJudgmentFlashPayload.TYPE, KingJudgmentFlashPayload.STREAM_CODEC); + registerS2C(HordeIntensityPayload.TYPE, HordeIntensityPayload.STREAM_CODEC); + + registerC2S(GravityGunPrimaryPayload.TYPE, GravityGunPrimaryPayload.STREAM_CODEC); + registerC2S(PortalGunPrimaryPayload.TYPE, PortalGunPrimaryPayload.STREAM_CODEC); + registerC2S(PortalGunIndicatorRequestPayload.TYPE, PortalGunIndicatorRequestPayload.STREAM_CODEC); + registerC2S(PortalGunResetPayload.TYPE, PortalGunResetPayload.STREAM_CODEC); + registerC2S(com.craisinlord.antarchy.content.network.PortalGunMoonAimPayload.TYPE, com.craisinlord.antarchy.content.network.PortalGunMoonAimPayload.STREAM_CODEC); + registerC2S(EyeOfStormPrimaryPayload.TYPE, EyeOfStormPrimaryPayload.STREAM_CODEC); + registerC2S(OpenGiantFryingPanPayload.TYPE, OpenGiantFryingPanPayload.STREAM_CODEC); + registerC2S(RoyalMountActionPayload.TYPE, RoyalMountActionPayload.STREAM_CODEC); + registerC2S(RoyalMountVerticalPayload.TYPE, RoyalMountVerticalPayload.STREAM_CODEC); + registerC2S(GravityGunScrollPayload.TYPE, GravityGunScrollPayload.STREAM_CODEC); + registerC2S(TemporalTunerScrollPayload.TYPE, TemporalTunerScrollPayload.STREAM_CODEC); + registerC2S(BigBerthaModeCyclePayload.TYPE, BigBerthaModeCyclePayload.STREAM_CODEC); + registerC2S(com.craisinlord.antarchy.content.network.RoyalGuardianSwordModeCyclePayload.TYPE, + com.craisinlord.antarchy.content.network.RoyalGuardianSwordModeCyclePayload.STREAM_CODEC); + registerC2S(ToggleTigerEyeCamouflagePayload.TYPE, ToggleTigerEyeCamouflagePayload.STREAM_CODEC); + registerC2S(ToggleRoyalInversionPayload.TYPE, ToggleRoyalInversionPayload.STREAM_CODEC); + registerC2S(com.craisinlord.antarchy.content.network.ActivateRoyalBoundaryPayload.TYPE, com.craisinlord.antarchy.content.network.ActivateRoyalBoundaryPayload.STREAM_CODEC); + registerC2S(DiamondMinecartInputPayload.TYPE, DiamondMinecartInputPayload.STREAM_CODEC); + registerC2S(BrutalflyElytraFlapPayload.TYPE, BrutalflyElytraFlapPayload.STREAM_CODEC); + registerC2S(SpringyBootsLaunchPayload.TYPE, SpringyBootsLaunchPayload.STREAM_CODEC); + registerC2S(DorrieJumpInputPayload.TYPE, DorrieJumpInputPayload.STREAM_CODEC); + registerC2S(com.craisinlord.antarchy.content.network.DorrieChargeJumpPayload.TYPE, com.craisinlord.antarchy.content.network.DorrieChargeJumpPayload.STREAM_CODEC); + registerC2S(HerculesBeetleJumpInputPayload.TYPE, HerculesBeetleJumpInputPayload.STREAM_CODEC); + registerC2S(HerculesBeetleFlightTogglePayload.TYPE, HerculesBeetleFlightTogglePayload.STREAM_CODEC); + registerC2S(HerculesBeetleMountedAttackPayload.TYPE, HerculesBeetleMountedAttackPayload.STREAM_CODEC); + registerC2S(HerculesBeetleMountedChargePayload.TYPE, HerculesBeetleMountedChargePayload.STREAM_CODEC); } private static void registerServerReceivers() { - registerC2SReceiver(GravityGunPrimaryPayload.TYPE, GravityGunPrimaryPayload.STREAM_CODEC, AntarchyFabricNetworking::handleGravityGunPrimary); - registerC2SReceiver(GravityGunScrollPayload.TYPE, GravityGunScrollPayload.STREAM_CODEC, AntarchyFabricNetworking::handleGravityGunScroll); - registerC2SReceiver(BigBerthaModeCyclePayload.TYPE, BigBerthaModeCyclePayload.STREAM_CODEC, AntarchyFabricNetworking::handleBigBerthaModeCycle); - registerC2SReceiver(DiamondMinecartInputPayload.TYPE, DiamondMinecartInputPayload.STREAM_CODEC, AntarchyFabricNetworking::handleDiamondMinecartInput); - registerC2SReceiver(BrutalflyElytraFlapPayload.TYPE, BrutalflyElytraFlapPayload.STREAM_CODEC, AntarchyFabricNetworking::handleBrutalflyFlap); - registerC2SReceiver(JumpyBootsLaunchPayload.TYPE, JumpyBootsLaunchPayload.STREAM_CODEC, AntarchyFabricNetworking::handleJumpyBootsLaunch); - registerC2SReceiver(DorrieJumpInputPayload.TYPE, DorrieJumpInputPayload.STREAM_CODEC, AntarchyFabricNetworking::handleDorrieJumpInput); - registerC2SReceiver(com.craisinlord.antarchy.content.network.DorrieChargeJumpPayload.TYPE, com.craisinlord.antarchy.content.network.DorrieChargeJumpPayload.STREAM_CODEC, AntarchyFabricNetworking::handleDorrieChargeJumpInput); - registerC2SReceiver(HerculesBeetleJumpInputPayload.TYPE, HerculesBeetleJumpInputPayload.STREAM_CODEC, AntarchyFabricNetworking::handleHerculesBeetleJumpInput); - registerC2SReceiver(HerculesBeetleFlightTogglePayload.TYPE, HerculesBeetleFlightTogglePayload.STREAM_CODEC, AntarchyFabricNetworking::handleHerculesBeetleFlightToggle); - registerC2SReceiver(HerculesBeetleMountedAttackPayload.TYPE, HerculesBeetleMountedAttackPayload.STREAM_CODEC, AntarchyFabricNetworking::handleHerculesBeetleMountedAttack); - registerC2SReceiver(HerculesBeetleMountedChargePayload.TYPE, HerculesBeetleMountedChargePayload.STREAM_CODEC, AntarchyFabricNetworking::handleHerculesBeetleMountedCharge); - registerC2SReceiver(MultipartAttackPayload.TYPE, MultipartAttackPayload.STREAM_CODEC, AntarchyFabricNetworking::handleMultipartAttack); - registerC2SReceiver(MultipartInteractPayload.TYPE, MultipartInteractPayload.STREAM_CODEC, AntarchyFabricNetworking::handleMultipartInteract); - registerC2SReceiver(ToggleTigerEyeCamouflagePayload.TYPE, ToggleTigerEyeCamouflagePayload.STREAM_CODEC, (player, payload) -> handleTigerEyeCamouflageToggle(player)); + registerGlobalReceiver(GravityGunPrimaryPayload.TYPE, (payload, player) -> handleGravityGunPrimary(player, payload)); + registerGlobalReceiver(PortalGunPrimaryPayload.TYPE, (payload, player) -> handlePortalGunPrimary(player, payload)); + registerGlobalReceiver(PortalGunIndicatorRequestPayload.TYPE, (payload, player) -> com.craisinlord.antarchy.content.portalgun.PortalGunIndicatorSync.handleRequest(player, payload)); + registerGlobalReceiver(com.craisinlord.antarchy.content.network.PortalGunMoonAimPayload.TYPE, (payload, player) -> com.craisinlord.antarchy.content.portalgun.PortalGunMoonAimSync.handle(player, payload)); + registerGlobalReceiver(PortalGunResetPayload.TYPE, (payload, player) -> com.craisinlord.antarchy.content.portalgun.PortalGunResetManager.handleInput(player, payload.action())); + registerGlobalReceiver(EyeOfStormPrimaryPayload.TYPE, (payload, player) -> handleEyeOfStormPrimary(player, payload)); + registerGlobalReceiver(OpenGiantFryingPanPayload.TYPE, (payload, player) -> com.craisinlord.antarchy.content.item.GiantFryingPanItem.openHeldMenu(player)); + registerGlobalReceiver(RoyalMountActionPayload.TYPE, (payload, player) -> handleRoyalMountAction(player, payload)); + registerGlobalReceiver(RoyalMountVerticalPayload.TYPE, (payload, player) -> handleRoyalMountVertical(player, payload)); + registerGlobalReceiver(GravityGunScrollPayload.TYPE, (payload, player) -> handleGravityGunScroll(player, payload)); + registerGlobalReceiver(TemporalTunerScrollPayload.TYPE, (payload, player) -> handleTemporalTunerScroll(player, payload)); + registerGlobalReceiver(BigBerthaModeCyclePayload.TYPE, (payload, player) -> handleBigBerthaModeCycle(player, payload)); + registerGlobalReceiver(com.craisinlord.antarchy.content.network.RoyalGuardianSwordModeCyclePayload.TYPE, (payload, player) -> handleRoyalGuardianSwordModeCycle(player)); + registerGlobalReceiver(ToggleTigerEyeCamouflagePayload.TYPE, (payload, player) -> handleTigerEyeCamouflageToggle(player)); + registerGlobalReceiver(ToggleRoyalInversionPayload.TYPE, (payload, player) -> com.craisinlord.antarchy.content.item.RoyalAssailantArmorItem.toggleInversion(player)); + registerGlobalReceiver(com.craisinlord.antarchy.content.network.ActivateRoyalBoundaryPayload.TYPE, (payload, player) -> com.craisinlord.antarchy.content.effect.RoyalBoundaryManager.activate(player)); + registerGlobalReceiver(DiamondMinecartInputPayload.TYPE, (payload, player) -> handleDiamondMinecartInput(player, payload)); + registerGlobalReceiver(BrutalflyElytraFlapPayload.TYPE, (payload, player) -> handleBrutalflyFlap(player, payload)); + registerGlobalReceiver(SpringyBootsLaunchPayload.TYPE, (payload, player) -> handleSpringyBootsLaunch(player, payload)); + registerGlobalReceiver(DorrieJumpInputPayload.TYPE, (payload, player) -> handleDorrieJumpInput(player, payload)); + registerGlobalReceiver(com.craisinlord.antarchy.content.network.DorrieChargeJumpPayload.TYPE, (payload, player) -> handleDorrieChargeJumpInput(player, payload)); + registerGlobalReceiver(HerculesBeetleJumpInputPayload.TYPE, (payload, player) -> handleHerculesBeetleJumpInput(player, payload)); + registerGlobalReceiver(HerculesBeetleFlightTogglePayload.TYPE, (payload, player) -> handleHerculesBeetleFlightToggle(player, payload)); + registerGlobalReceiver(HerculesBeetleMountedAttackPayload.TYPE, (payload, player) -> handleHerculesBeetleMountedAttack(player, payload)); + registerGlobalReceiver(HerculesBeetleMountedChargePayload.TYPE, (payload, player) -> handleHerculesBeetleMountedCharge(player, payload)); + } + + public static void syncBloodglass(ServerPlayer player, int shieldsActive, int shieldsMax) { + send(player, new BloodglassStatePayload(shieldsActive, shieldsMax)); } public static void syncTigerEyeCamouflage(ServerPlayer player) { TigerEyeCamouflageStatePayload payload = TigerEyeCamouflageSync.payload(player); for (ServerPlayer tracking : PlayerLookup.tracking(player)) { - sendToPlayer(tracking, payload, TigerEyeCamouflageStatePayload.STREAM_CODEC, TigerEyeCamouflageStatePayload.TYPE); + send(tracking, payload); } - sendToPlayer(player, payload, TigerEyeCamouflageStatePayload.STREAM_CODEC, TigerEyeCamouflageStatePayload.TYPE); - } - - private static void handleTigerEyeCamouflageToggle(ServerPlayer player) { - TigerEyeCamouflageController.ToggleResult result = TigerEyeCamouflageController.toggle(player); - if (result != TigerEyeCamouflageController.ToggleResult.NO_CHANGE) { - syncTigerEyeCamouflage(player); - } - String messageKey = switch (result) { - case ACTIVATED -> "message.antarchy.tiger_eye_camouflage.activated"; - case DEACTIVATED -> "message.antarchy.tiger_eye_camouflage.disabled"; - case FULL_SET_REQUIRED -> TigerEyeArmorUtil.countEquippedPieces(player) > 0 - ? "message.antarchy.tiger_eye_camouflage.full_set_required" - : null; - case INVALID_BLOCK -> "message.antarchy.tiger_eye_camouflage.invalid_block"; - case NO_CHANGE -> null; - }; - if (messageKey != null) { - player.displayClientMessage(net.minecraft.network.chat.Component.translatable(messageKey), true); - } - } - - public static void syncGravityToPlayer(ServerPlayer target, Entity entity) { - GravityStatePayload payload = new GravityStatePayload( - entity.getId(), - AntarchyGravityApi.getGravityDirection(entity), - AntarchyGravityApi.getPrevGravityDirection(entity), - AntarchyGravityApi.isGravityForced(entity), - AntarchyGravityApi.getTransitionDuration(entity), - AntarchyGravityApi.getTransitionRemaining(entity) - ); - sendToPlayer(target, payload, GravityStatePayload.STREAM_CODEC, GravityStatePayload.TYPE); - } - - public static void syncGravityEntity(Entity entity) { - GravityStatePayload payload = new GravityStatePayload( - entity.getId(), - AntarchyGravityApi.getGravityDirection(entity), - AntarchyGravityApi.getPrevGravityDirection(entity), - AntarchyGravityApi.isGravityForced(entity), - AntarchyGravityApi.getTransitionDuration(entity), - AntarchyGravityApi.getTransitionRemaining(entity) - ); - - for (ServerPlayer player : PlayerLookup.tracking(entity)) { - sendToPlayer(player, payload, GravityStatePayload.STREAM_CODEC, GravityStatePayload.TYPE); - } - if (entity instanceof ServerPlayer player) { - sendToPlayer(player, payload, GravityStatePayload.STREAM_CODEC, GravityStatePayload.TYPE); - } - } - - public static void syncBloodglass(ServerPlayer player, int shieldsActive, int shieldsMax) { - sendToPlayer(player, new BloodglassStatePayload(shieldsActive, shieldsMax), BloodglassStatePayload.STREAM_CODEC, BloodglassStatePayload.TYPE); + send(player, payload); } public static void syncKatanaTrail(Entity entity, int durationTicks) { BloodCrystalKatanaTrailPayload payload = new BloodCrystalKatanaTrailPayload(entity.getId(), durationTicks); for (ServerPlayer player : PlayerLookup.tracking(entity)) { - sendToPlayer(player, payload, BloodCrystalKatanaTrailPayload.STREAM_CODEC, BloodCrystalKatanaTrailPayload.TYPE); + send(player, payload); } if (entity instanceof ServerPlayer serverPlayer) { - sendToPlayer(serverPlayer, payload, BloodCrystalKatanaTrailPayload.STREAM_CODEC, BloodCrystalKatanaTrailPayload.TYPE); + send(serverPlayer, payload); } } public static void syncScorpionWhipTether(ServerPlayer player, int targetId) { ScorpionWhipTetherPayload payload = new ScorpionWhipTetherPayload(player.getId(), targetId); for (ServerPlayer tracking : PlayerLookup.tracking(player)) { - sendToPlayer(tracking, payload, ScorpionWhipTetherPayload.STREAM_CODEC, ScorpionWhipTetherPayload.TYPE); + send(tracking, payload); } - sendToPlayer(player, payload, ScorpionWhipTetherPayload.STREAM_CODEC, ScorpionWhipTetherPayload.TYPE); + send(player, payload); } - public static void syncThoraxisWeather(ServerLevel level, ThoraxisWeatherSnapshot snapshot) { - ThoraxisWeatherPayload payload = new ThoraxisWeatherPayload( - snapshot.dimension(), - snapshot.kind(), - snapshot.expiresAt(), - snapshot.anchor().getX(), - snapshot.anchor().getY(), - snapshot.anchor().getZ() - ); - for (ServerPlayer player : level.players()) { - sendToPlayer(player, payload, ThoraxisWeatherPayload.STREAM_CODEC, ThoraxisWeatherPayload.TYPE); + public static void syncWormHookTether(ServerPlayer player, int hookId) { + WormHookTetherPayload payload = new WormHookTetherPayload(player.getId(), hookId); + for (ServerPlayer tracking : PlayerLookup.tracking(player)) { + send(tracking, payload); } - } - - public static void handleGravityState(Entity contextPlayer, GravityStatePayload payload) { - Entity entity = contextPlayer.level().getEntity(payload.entityId()); - if (entity == null && contextPlayer.getId() == payload.entityId()) { - entity = contextPlayer; - } - if (entity == null) { - return; - } - AntarchyGravityApi.applySyncedState( - entity, - payload.direction(), - payload.previousDirection(), - payload.forced(), - payload.transitionDuration(), - payload.transitionRemaining() - ); + send(player, payload); } private static void handleGravityGunPrimary(ServerPlayer player, GravityGunPrimaryPayload payload) { @@ -228,6 +196,45 @@ public final class AntarchyFabricNetworking { gravityGunItem.firePrimary(player.serverLevel(), player, player.getMainHandItem()); } + private static void handlePortalGunPrimary(ServerPlayer player, PortalGunPrimaryPayload payload) { + ItemStack stack = payload.offhand() ? player.getOffhandItem() : player.getMainHandItem(); + if (!(stack.getItem() instanceof PortalGunItem portalGunItem)) { + return; + } + portalGunItem.firePrimary(player.serverLevel(), player, stack, payload.offhand()); + } + + private static void handleRoyalMountAction(ServerPlayer player, RoyalMountActionPayload payload) { + if (payload.action() == RoyalMountActionPayload.MOUNT) { + com.craisinlord.antarchy.content.entity.royal.RoyalMountEntity.tryAssistedMount(player); + return; + } + if (!(player.getVehicle() instanceof com.craisinlord.antarchy.content.entity.royal.RoyalMountEntity mount)) { + return; + } + switch (payload.action()) { + case RoyalMountActionPayload.FLIGHT_TOGGLE -> mount.toggleMountedFlight(player); + case RoyalMountActionPayload.BITE -> mount.handleMountedBite(player); + case RoyalMountActionPayload.SPIT -> mount.handleMountedSpit(player); + default -> { + } + } + } + + private static void handleRoyalMountVertical(ServerPlayer player, RoyalMountVerticalPayload payload) { + if (player.getVehicle() instanceof com.craisinlord.antarchy.content.entity.royal.RoyalMountEntity mount) { + mount.setRiderAscend(payload.ascend()); + mount.setRiderDescend(payload.descend()); + } + } + + private static void handleEyeOfStormPrimary(ServerPlayer player, EyeOfStormPrimaryPayload payload) { + if (!(player.getMainHandItem().getItem() instanceof EyeOfTheStormItem eyeOfTheStormItem)) { + return; + } + eyeOfTheStormItem.firePrimary(player.serverLevel(), player, player.getMainHandItem()); + } + private static void handleGravityGunScroll(ServerPlayer player, GravityGunScrollPayload payload) { if (!(player.getMainHandItem().getItem() instanceof GravityGunItem)) { return; @@ -239,7 +246,20 @@ public final class AntarchyFabricNetworking { if (!(player.getMainHandItem().getItem() instanceof BigBerthaItem bigBerthaItem)) { return; } - bigBerthaItem.tryCycleModeWhileCoolingDown(player.serverLevel(), player, player.getMainHandItem()); + bigBerthaItem.tryCycleModeFromInput(player.serverLevel(), player, player.getMainHandItem()); + } + + private static void handleTemporalTunerScroll(ServerPlayer player, TemporalTunerScrollPayload payload) { + if (TemporalTunerItem.isAvailable(player)) { + TemporalTunerItem.adjust(player, payload.delta()); + } + } + + private static void handleRoyalGuardianSwordModeCycle(ServerPlayer player) { + if (!(player.getMainHandItem().getItem() instanceof com.craisinlord.antarchy.content.item.RoyalGuardianSwordItem sword)) { + return; + } + sword.tryCycleModeFromInput(player.serverLevel(), player, player.getMainHandItem()); } private static void handleDiamondMinecartInput(ServerPlayer player, DiamondMinecartInputPayload payload) { @@ -274,7 +294,7 @@ public final class AntarchyFabricNetworking { player.hurtMarked = true; player.resetFallDistance(); player.connection.send(new ClientboundSetEntityMotionPacket(player)); - chestStack.hurtAndBreak(1, player, p -> p.broadcastBreakEvent(EquipmentSlot.CHEST)); + chestStack.hurtAndBreak(1, player, entity -> entity.broadcastBreakEvent(EquipmentSlot.CHEST)); player.getCooldowns().addCooldown(chestStack.getItem(), BrutalflyElytraFlightHelper.FLAP_COOLDOWN_TICKS); player.level().playSound(null, player.blockPosition(), SoundEvents.PHANTOM_FLAP, SoundSource.PLAYERS, 0.9F, tier == BrutalflyElytraFlightHelper.FlapTier.PERFECT ? 0.8F : tier == BrutalflyElytraFlightHelper.FlapTier.GOOD ? 0.95F : 1.1F); @@ -285,82 +305,30 @@ public final class AntarchyFabricNetworking { lift ); for (ServerPlayer tracking : PlayerLookup.tracking(player)) { - sendToPlayer(tracking, animationPayload, BrutalflyElytraAnimationPayload.STREAM_CODEC, BrutalflyElytraAnimationPayload.TYPE); + send(tracking, animationPayload); } - sendToPlayer(player, animationPayload, BrutalflyElytraAnimationPayload.STREAM_CODEC, BrutalflyElytraAnimationPayload.TYPE); + send(player, animationPayload); } - private static void handleMultipartAttack(ServerPlayer serverPlayer, MultipartAttackPayload payload) { - Entity entity = serverPlayer.serverLevel().getEntity(payload.parentId()); - if (!(entity instanceof MultipartEntityOwner owner)) { - return; - } - - Entity[] parts = owner.antarchy$getMultipartParts(); - if (parts == null) { - parts = owner.antarchy$createMultipartParts(); - owner.antarchy$setMultipartParts(parts); - owner.antarchy$syncMultipartParts(); - } - if (payload.partIndex() < 0 || payload.partIndex() >= parts.length) { - return; - } - - Entity part = parts[payload.partIndex()]; - if (part == null || part.isRemoved()) { - return; - } - if (serverPlayer.distanceToSqr(part) > 10000.0D) { - return; - } - - serverPlayer.attack(part); - } - - private static void handleMultipartInteract(ServerPlayer serverPlayer, MultipartInteractPayload payload) { - Entity entity = serverPlayer.serverLevel().getEntity(payload.parentId()); - if (!(entity instanceof MultipartEntityOwner owner)) { - return; - } - - Entity[] parts = owner.antarchy$getMultipartParts(); - if (parts == null) { - parts = owner.antarchy$createMultipartParts(); - owner.antarchy$setMultipartParts(parts); - owner.antarchy$syncMultipartParts(); - } - if (payload.partIndex() < 0 || payload.partIndex() >= parts.length) { - return; - } - - Entity part = parts[payload.partIndex()]; - if (part == null || part.isRemoved()) { - return; - } - - InteractionHand hand = payload.handId() == 0 ? InteractionHand.MAIN_HAND : InteractionHand.OFF_HAND; - owner.antarchy$interactMultipartPart(part, serverPlayer, part.position(), hand); - } - - private static void handleJumpyBootsLaunch(ServerPlayer player, JumpyBootsLaunchPayload payload) { - if (!JumpyBootsItem.isWearingJumpyBoots(player)) return; + private static void handleSpringyBootsLaunch(ServerPlayer player, SpringyBootsLaunchPayload payload) { + if (!SpringyBootsItem.isWearingSpringyBoots(player)) return; if (player.isSpectator() || player.isPassenger()) return; ItemStack boots = player.getItemBySlot(EquipmentSlot.FEET); if (player.getCooldowns().isOnCooldown(boots.getItem())) return; - int clampedCharge = Math.min(payload.chargeTicks(), JumpyBootsHelper.CHARGE_TICKS_MAX); + int clampedCharge = Math.min(payload.chargeTicks(), SpringyBootsHelper.CHARGE_TICKS_MAX); if (clampedCharge <= 0) return; - float verticalBoost = JumpyBootsHelper.verticalBoostFor(clampedCharge); + float verticalBoost = SpringyBootsHelper.verticalBoostFor(clampedCharge); Vec3 current = player.getDeltaMovement(); double newX = current.x; double newZ = current.z; if (payload.sprinting()) { Vec3 look = player.getLookAngle(); - newX += look.x * JumpyBootsHelper.SPRINT_FORWARD_BOOST; - newZ += look.z * JumpyBootsHelper.SPRINT_FORWARD_BOOST; + newX += look.x * SpringyBootsHelper.SPRINT_FORWARD_BOOST; + newZ += look.z * SpringyBootsHelper.SPRINT_FORWARD_BOOST; } player.setDeltaMovement(newX, verticalBoost, newZ); @@ -371,12 +339,12 @@ public final class AntarchyFabricNetworking { player.connection.send(new ClientboundSetEntityMotionPacket(player)); player.level().playSound(null, player.blockPosition(), SoundEvents.SLIME_JUMP, SoundSource.PLAYERS, - 1.0F, 0.6F + (clampedCharge / (float) JumpyBootsHelper.CHARGE_TICKS_MAX) * 0.6F); + 1.0F, 0.6F + (clampedCharge / (float) SpringyBootsHelper.CHARGE_TICKS_MAX) * 0.6F); - JumpyBootsFabricHelper.setProtectionUntil(player, - player.level().getGameTime() + JumpyBootsHelper.FALL_PROTECTION_TICKS); + SpringyBootsFabricHelper.setProtectionUntil(player, + player.level().getGameTime() + SpringyBootsHelper.FALL_PROTECTION_TICKS); - player.getCooldowns().addCooldown(boots.getItem(), JumpyBootsHelper.COOLDOWN_TICKS); + player.getCooldowns().addCooldown(boots.getItem(), SpringyBootsHelper.COOLDOWN_TICKS); } private static void handleDorrieJumpInput(ServerPlayer player, DorrieJumpInputPayload payload) { @@ -421,16 +389,23 @@ public final class AntarchyFabricNetworking { } } - public static void triggerHerculesBeetleImpactShake(int durationTicks) { - HerculesBeetleImpactShakeClientState.trigger(durationTicks); - } + private static void handleTigerEyeCamouflageToggle(ServerPlayer player) { + TigerEyeCamouflageController.ToggleResult result = TigerEyeCamouflageController.toggle(player); + if (result != TigerEyeCamouflageController.ToggleResult.NO_CHANGE) { + syncTigerEyeCamouflage(player); + } - public static void triggerImpactShake(ImpactShakePayload payload) { - CameraShakeClientState.triggerImpact( - new Vec3(payload.x(), payload.y(), payload.z()), - payload.intensity(), - payload.durationTicks(), - payload.radius() - ); + String messageKey = switch (result) { + case ACTIVATED -> "message.antarchy.tiger_eye_camouflage.activated"; + case DEACTIVATED -> "message.antarchy.tiger_eye_camouflage.disabled"; + case FULL_SET_REQUIRED -> TigerEyeArmorUtil.countEquippedPieces(player) > 0 + ? "message.antarchy.tiger_eye_camouflage.full_set_required" + : null; + case INVALID_BLOCK -> "message.antarchy.tiger_eye_camouflage.invalid_block"; + case NO_CHANGE -> null; + }; + if (messageKey != null) { + player.displayClientMessage(net.minecraft.network.chat.Component.translatable(messageKey), true); + } } } diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricTimeDilationNetworking.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricTimeDilationNetworking.java deleted file mode 100644 index 7b69caa7..00000000 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricTimeDilationNetworking.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.craisinlord.antarchy.fabric.network; - -import com.craisinlord.antarchy.content.network.TimeDilationFieldsPayload; -import com.craisinlord.antarchy.content.network.TimeDilationRatePayload; -import com.craisinlord.antarchy.content.time.TimeDilationFieldSnapshot; -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import java.util.List; -import net.fabricmc.fabric.api.networking.v1.PlayerLookup; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.entity.Entity; - -public final class AntarchyFabricTimeDilationNetworking { - private AntarchyFabricTimeDilationNetworking() {} - - public static void syncRate(Entity entity, double rate) { - TimeDilationRatePayload payload = new TimeDilationRatePayload(entity.getUUID(), rate); - for (ServerPlayer player : PlayerLookup.tracking(entity)) { - AntarchyFabricNetworking.sendToPlayer(player, payload, TimeDilationRatePayload.STREAM_CODEC, TimeDilationRatePayload.TYPE); - } - if (entity instanceof ServerPlayer player) { - AntarchyFabricNetworking.sendToPlayer(player, payload, TimeDilationRatePayload.STREAM_CODEC, TimeDilationRatePayload.TYPE); - } - } - - public static void syncRateToPlayer(ServerPlayer player, Entity entity, double rate) { - TimeDilationRatePayload payload = new TimeDilationRatePayload(entity.getUUID(), rate); - AntarchyFabricNetworking.sendToPlayer(player, payload, TimeDilationRatePayload.STREAM_CODEC, TimeDilationRatePayload.TYPE); - } - - public static void syncFields(ServerPlayer player, List fields) { - AntarchyFabricNetworking.sendToPlayer(player, new TimeDilationFieldsPayload(fields), - TimeDilationFieldsPayload.STREAM_CODEC, TimeDilationFieldsPayload.TYPE); - } - - public static void handleRate(Entity ignored, TimeDilationRatePayload payload) { - TimeDilationApi.applySyncedRate(payload.entityUuid(), payload.rate()); - } -} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricBlocks.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricBlocks.java index d144ed9a..c046ed12 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricBlocks.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricBlocks.java @@ -8,9 +8,18 @@ import com.craisinlord.antarchy.content.block.entity.AntNestBlockEntity; import com.craisinlord.antarchy.content.block.entity.CritterCageBlockEntity; import com.craisinlord.antarchy.content.block.entity.DreamCampfireBlockEntity; import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity; +import com.craisinlord.antarchy.content.block.entity.LucidAnchorBlockEntity; +import com.craisinlord.antarchy.content.block.DimensionalTearMarkerBlock; +import com.craisinlord.antarchy.content.block.entity.DimensionalTearMarkerBlockEntity; +import com.craisinlord.antarchy.content.block.entity.PortalGunPortalBaseBlockEntity; +import com.craisinlord.antarchy.content.block.entity.PortalGunPortalMasterBlockEntity; import com.craisinlord.antarchy.content.block.entity.PotentNyxiteBlockEntity; +import com.craisinlord.antarchy.content.block.entity.QueenTrailSpawnMarkerBlockEntity; import com.craisinlord.antarchy.content.block.entity.SeashellBlockEntity; import com.craisinlord.antarchy.content.block.entity.UpperBlockEntity; +import com.craisinlord.antarchy.content.block.entity.UndertrialSpawnerBlockEntity; +import com.craisinlord.antarchy.content.block.entity.UnderVaultBlockEntity; +import com.craisinlord.antarchy.content.block.entity.VortexLensBlockEntity; import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity; import com.craisinlord.antarchy.content.block.entity.UndertrialSpawnerBlockEntity; import com.craisinlord.antarchy.content.block.entity.UnderVaultBlockEntity; @@ -22,6 +31,7 @@ import com.craisinlord.antarchy.content.portal.PermanentPortalType; import com.mojang.serialization.MapCodec; import net.minecraft.core.registries.Registries; import net.minecraft.core.Direction; +import net.minecraft.sounds.SoundEvent; import net.minecraft.util.valueproviders.UniformInt; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.AmethystClusterBlock; @@ -44,6 +54,7 @@ import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.block.Mirror; import net.minecraft.world.level.block.Rotation; +import net.fabricmc.fabric.api.registry.StrippableBlockRegistry; public final class AntarchyFabricBlocks { @@ -52,6 +63,16 @@ public final class AntarchyFabricBlocks { public static final DeferredRegister> BLOCK_ENTITY_TYPES = DeferredRegister.create(Registries.BLOCK_ENTITY_TYPE, Antarchy.MODID); + public static final DeferredBlock UNDERTRIAL_SPAWNER = BLOCKS.register("undertrial_spawner", + () -> new UndertrialSpawnerBlock(AntarchyFabricBlocks::undertrialSpawnerBlockEntityType, + BlockBehaviour.Properties.of().mapColor(MapColor.STONE).instrument(net.minecraft.world.level.block.state.properties.NoteBlockInstrument.BASEDRUM).strength(50.0F).sound(SoundType.METAL).noOcclusion().isViewBlocking((state, level, pos) -> false))); + public static final DeferredBlock UNDERVAULT = BLOCKS.register("undervault", + () -> new UnderVaultBlock(AntarchyFabricBlocks::underVaultBlockEntityType, + BlockBehaviour.Properties.of().mapColor(MapColor.STONE).instrument(net.minecraft.world.level.block.state.properties.NoteBlockInstrument.BASEDRUM).strength(50.0F).sound(SoundType.METAL).noOcclusion().isViewBlocking((state, level, pos) -> false))); + public static final DeferredBlock QUEEN_TRAIL_SPAWN_MARKER = BLOCKS.register("queen_trail_spawn_marker", + () -> new QueenTrailSpawnMarkerBlock(AntarchyFabricBlocks::queenTrailSpawnMarkerBlockEntityType, + BlockBehaviour.Properties.copy(Blocks.BEDROCK).noLootTable())); + public static final DeferredBlock DUPLICATOR_LOG = BLOCKS.register("duplicator_log", () -> new DuplicatorLogBlock(BlockBehaviour.Properties.copy(Blocks.OAK_LOG).randomTicks())); @@ -133,6 +154,8 @@ public final class AntarchyFabricBlocks { public static final DeferredBlock PINK_MILKWEED = BLOCKS.register("pink_milkweed", () -> new MilkweedBlock(BlockBehaviour.Properties.copy(Blocks.PEONY))); + public static final DeferredBlock GLIMMERING_REED = BLOCKS.register("glimmering_reed", + () -> new com.craisinlord.antarchy.content.block.GlimmeringReedBlock(BlockBehaviour.Properties.copy(Blocks.SUNFLOWER).lightLevel(state -> 8))); public static final DeferredBlock CAMELLIA = BLOCKS.register("camellia", @@ -157,6 +180,14 @@ public final class AntarchyFabricBlocks { () -> new LucidAnchorBlock(BlockBehaviour.Properties.copy(Blocks.BEACON).strength(3.0F))); public static final DeferredBlock CRITTER_CAGE_BLOCK = BLOCKS.register("critter_cage_block", () -> new CritterCageBlock(BlockBehaviour.Properties.of().strength(5.0F, 6.0F).sound(net.minecraft.world.level.block.SoundType.METAL).noOcclusion())); + public static final DeferredBlock PORTAL_GUN_PORTAL_MASTER = BLOCKS.register("portal_gun_portal_master", + () -> new PortalGunPortalMasterBlock(AntarchyFabricBlocks::portalGunPortalMasterBlockEntityType, portalProperties())); + public static final DeferredBlock PORTAL_GUN_PORTAL_BASE = BLOCKS.register("portal_gun_portal_base", + () -> new PortalGunPortalBaseBlock(AntarchyFabricBlocks::portalGunPortalBaseBlockEntityType, portalProperties())); + public static final DeferredBlock DIMENSIONAL_TEAR_MARKER = BLOCKS.register("dimensional_tear_marker", + () -> new DimensionalTearMarkerBlock(AntarchyFabricBlocks::dimensionalTearMarkerBlockEntityType, + BlockBehaviour.Properties.of().noCollission().noOcclusion().noLootTable().instabreak() + .pushReaction(net.minecraft.world.level.material.PushReaction.DESTROY))); public static final DeferredBlock OURANWOOD_SIGN = BLOCKS.register("ouranwood_sign", @@ -309,8 +340,8 @@ public final class AntarchyFabricBlocks { () -> new net.minecraft.world.level.block.ButtonBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_BUTTON), net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE, 30, false)); - public static final DeferredBlock NADIR_VEIL = BLOCKS.register("nadir_veil", - () -> new Block(BlockBehaviour.Properties.copy(Blocks.MANGROVE_LEAVES).noCollission().noOcclusion())); + public static final DeferredBlock NADIR_VEIL = BLOCKS.register("nadir_veil", + () -> new com.craisinlord.antarchy.content.block.NadirVeilBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_LEAVES).sound(net.minecraft.world.level.block.SoundType.SLIME_BLOCK).noOcclusion())); public static final DeferredBlock NADIR_SAPLING = BLOCKS.register("nadir_sapling", @@ -339,6 +370,196 @@ public final class AntarchyFabricBlocks { () -> new DuplicatorSaplingBlock(BlockBehaviour.Properties.copy(Blocks.OAK_SAPLING).randomTicks().noCollission())); + public static final DeferredBlock ROYAL_LOG = BLOCKS.register("royal_log", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_LOG))); + + + public static final DeferredBlock ROYAL_WOOD = BLOCKS.register("royal_wood", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_WOOD))); + + + public static final DeferredBlock STRIPPED_ROYAL_LOG = BLOCKS.register("stripped_royal_log", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.copy(Blocks.STRIPPED_JUNGLE_LOG))); + + + public static final DeferredBlock STRIPPED_ROYAL_WOOD = BLOCKS.register("stripped_royal_wood", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.copy(Blocks.STRIPPED_JUNGLE_WOOD))); + + + public static final DeferredBlock ROYAL_PLANKS = BLOCKS.register("royal_planks", + () -> new Block(BlockBehaviour.Properties.copy(Blocks.JUNGLE_PLANKS))); + + + public static final DeferredBlock ROYAL_STAIRS = BLOCKS.register("royal_stairs", + () -> new net.minecraft.world.level.block.StairBlock(ROYAL_PLANKS.get().defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.JUNGLE_STAIRS))); + + + public static final DeferredBlock ROYAL_SLAB = BLOCKS.register("royal_slab", + () -> new net.minecraft.world.level.block.SlabBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_SLAB))); + + + public static final DeferredBlock ROYAL_FENCE = BLOCKS.register("royal_fence", + () -> new net.minecraft.world.level.block.FenceBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_FENCE))); + + + public static final DeferredBlock ROYAL_FENCE_GATE = BLOCKS.register("royal_fence_gate", + () -> new net.minecraft.world.level.block.FenceGateBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_FENCE_GATE), net.minecraft.world.level.block.state.properties.WoodType.JUNGLE)); + + + public static final DeferredBlock ROYAL_DOOR = BLOCKS.register("royal_door", + () -> new net.minecraft.world.level.block.DoorBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_DOOR), net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE)); + + + public static final DeferredBlock ROYAL_TRAPDOOR = BLOCKS.register("royal_trapdoor", + () -> new net.minecraft.world.level.block.TrapDoorBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_TRAPDOOR), net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE)); + + + public static final DeferredBlock ROYAL_PRESSURE_PLATE = BLOCKS.register("royal_pressure_plate", + () -> new net.minecraft.world.level.block.PressurePlateBlock(net.minecraft.world.level.block.PressurePlateBlock.Sensitivity.EVERYTHING, BlockBehaviour.Properties.copy(Blocks.JUNGLE_PRESSURE_PLATE), net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE)); + + + public static final DeferredBlock ROYAL_BUTTON = BLOCKS.register("royal_button", + () -> new net.minecraft.world.level.block.ButtonBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_BUTTON), net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE, 30, true)); + + + public static final DeferredBlock ROYAL_LEAVES = BLOCKS.register("royal_leaves", + () -> new com.craisinlord.antarchy.content.block.RoyalLeavesBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_LEAVES).randomTicks())); + + + public static final DeferredBlock ROYAL_FLOWERING_LEAVES = BLOCKS.register("royal_flowering_leaves", + () -> new com.craisinlord.antarchy.content.block.RoyalLeavesBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_LEAVES).randomTicks().lightLevel(state -> 12))); + + + public static final DeferredBlock ROYAL_SAPLING = BLOCKS.register("royal_sapling", + () -> new com.craisinlord.antarchy.content.block.RoyalSaplingBlock(BlockBehaviour.Properties.copy(Blocks.OAK_SAPLING).noCollission())); + public static final DeferredBlock POTTED_ROYAL_SAPLING = BLOCKS.register("potted_royal_sapling", + () -> new net.minecraft.world.level.block.FlowerPotBlock(ROYAL_SAPLING.get(), BlockBehaviour.Properties.copy(Blocks.POTTED_DANDELION))); + + + public static final DeferredBlock ROYAL_SIGN = BLOCKS.register("royal_sign", + () -> new net.minecraft.world.level.block.StandingSignBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_SIGN), AntarchyWoodTypes.ROYAL)); + + + public static final DeferredBlock ROYAL_WALL_SIGN = BLOCKS.register("royal_wall_sign", + () -> new net.minecraft.world.level.block.WallSignBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_WALL_SIGN), AntarchyWoodTypes.ROYAL)); + + + public static final DeferredBlock ROYAL_HANGING_SIGN = BLOCKS.register("royal_hanging_sign", + () -> new net.minecraft.world.level.block.CeilingHangingSignBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_HANGING_SIGN), AntarchyWoodTypes.ROYAL)); + + + public static final DeferredBlock ROYAL_WALL_HANGING_SIGN = BLOCKS.register("royal_wall_hanging_sign", + () -> new net.minecraft.world.level.block.WallHangingSignBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_WALL_HANGING_SIGN), AntarchyWoodTypes.ROYAL)); + + + public static final DeferredBlock TRUFFALO_LOG = BLOCKS.register("truffalo_log", + () -> new com.craisinlord.antarchy.content.block.TruffaloLogBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_LOG))); + + + public static final DeferredBlock TRUFFALO_WOOD = BLOCKS.register("truffalo_wood", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_WOOD))); + + + public static final DeferredBlock STRIPPED_TRUFFALO_LOG = BLOCKS.register("stripped_truffalo_log", + () -> new com.craisinlord.antarchy.content.block.TruffaloLogBlock(BlockBehaviour.Properties.copy(Blocks.STRIPPED_JUNGLE_LOG))); + + + public static final DeferredBlock STRIPPED_TRUFFALO_WOOD = BLOCKS.register("stripped_truffalo_wood", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.copy(Blocks.STRIPPED_JUNGLE_WOOD))); + + + public static final DeferredBlock TRUFFALO_PLANKS = BLOCKS.register("truffalo_planks", + () -> new Block(BlockBehaviour.Properties.copy(Blocks.JUNGLE_PLANKS))); + + + public static final DeferredBlock TRUFFALO_STAIRS = BLOCKS.register("truffalo_stairs", + () -> new net.minecraft.world.level.block.StairBlock(TRUFFALO_PLANKS.get().defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.JUNGLE_STAIRS))); + + + public static final DeferredBlock TRUFFALO_SLAB = BLOCKS.register("truffalo_slab", + () -> new net.minecraft.world.level.block.SlabBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_SLAB))); + + + public static final DeferredBlock TRUFFALO_FENCE = BLOCKS.register("truffalo_fence", + () -> new net.minecraft.world.level.block.FenceBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_FENCE))); + + + public static final DeferredBlock TRUFFALO_FENCE_GATE = BLOCKS.register("truffalo_fence_gate", + () -> new net.minecraft.world.level.block.FenceGateBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_FENCE_GATE), net.minecraft.world.level.block.state.properties.WoodType.JUNGLE)); + + + public static final DeferredBlock TRUFFALO_DOOR = BLOCKS.register("truffalo_door", + () -> new net.minecraft.world.level.block.DoorBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_DOOR), net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE)); + + + public static final DeferredBlock TRUFFALO_TRAPDOOR = BLOCKS.register("truffalo_trapdoor", + () -> new net.minecraft.world.level.block.TrapDoorBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_TRAPDOOR), net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE)); + + + public static final DeferredBlock TRUFFALO_PRESSURE_PLATE = BLOCKS.register("truffalo_pressure_plate", + () -> new net.minecraft.world.level.block.PressurePlateBlock(net.minecraft.world.level.block.PressurePlateBlock.Sensitivity.EVERYTHING, BlockBehaviour.Properties.copy(Blocks.JUNGLE_PRESSURE_PLATE), net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE)); + + + public static final DeferredBlock TRUFFALO_BUTTON = BLOCKS.register("truffalo_button", + () -> new net.minecraft.world.level.block.ButtonBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_BUTTON), net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE, 30, true)); + + + public static final DeferredBlock TRUFFALO_SAPLING = BLOCKS.register("truffalo_sapling", + () -> new com.craisinlord.antarchy.content.block.TruffaloSaplingBlock(BlockBehaviour.Properties.copy(Blocks.OAK_SAPLING).randomTicks().noCollission())); + public static final DeferredBlock POTTED_TRUFFALO_SAPLING = BLOCKS.register("potted_truffalo_sapling", + () -> new net.minecraft.world.level.block.FlowerPotBlock(TRUFFALO_SAPLING.get(), BlockBehaviour.Properties.copy(Blocks.POTTED_DANDELION))); + + + public static final DeferredBlock TRUFFALO_SIGN = BLOCKS.register("truffalo_sign", + () -> new net.minecraft.world.level.block.StandingSignBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_SIGN), AntarchyWoodTypes.TRUFFALO)); + + + public static final DeferredBlock TRUFFALO_WALL_SIGN = BLOCKS.register("truffalo_wall_sign", + () -> new net.minecraft.world.level.block.WallSignBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_WALL_SIGN), AntarchyWoodTypes.TRUFFALO)); + + + public static final DeferredBlock TRUFFALO_HANGING_SIGN = BLOCKS.register("truffalo_hanging_sign", + () -> new net.minecraft.world.level.block.CeilingHangingSignBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_HANGING_SIGN), AntarchyWoodTypes.TRUFFALO)); + + + public static final DeferredBlock TRUFFALO_WALL_HANGING_SIGN = BLOCKS.register("truffalo_wall_hanging_sign", + () -> new net.minecraft.world.level.block.WallHangingSignBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_WALL_HANGING_SIGN), AntarchyWoodTypes.TRUFFALO)); + + + public static final DeferredBlock TRUFFALO_TUFT_WHITE = BLOCKS.register("white_truffalo_tuft", + () -> new com.craisinlord.antarchy.content.block.TruffaloTuftBlock(BlockBehaviour.Properties.copy(Blocks.WHITE_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_ORANGE = BLOCKS.register("orange_truffalo_tuft", + () -> new com.craisinlord.antarchy.content.block.TruffaloTuftBlock(BlockBehaviour.Properties.copy(Blocks.ORANGE_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_MAGENTA = BLOCKS.register("magenta_truffalo_tuft", + () -> new com.craisinlord.antarchy.content.block.TruffaloTuftBlock(BlockBehaviour.Properties.copy(Blocks.MAGENTA_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_LIGHT_BLUE = BLOCKS.register("light_blue_truffalo_tuft", + () -> new com.craisinlord.antarchy.content.block.TruffaloTuftBlock(BlockBehaviour.Properties.copy(Blocks.LIGHT_BLUE_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_YELLOW = BLOCKS.register("yellow_truffalo_tuft", + () -> new com.craisinlord.antarchy.content.block.TruffaloTuftBlock(BlockBehaviour.Properties.copy(Blocks.YELLOW_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_LIME = BLOCKS.register("lime_truffalo_tuft", + () -> new com.craisinlord.antarchy.content.block.TruffaloTuftBlock(BlockBehaviour.Properties.copy(Blocks.LIME_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_PINK = BLOCKS.register("pink_truffalo_tuft", + () -> new com.craisinlord.antarchy.content.block.TruffaloTuftBlock(BlockBehaviour.Properties.copy(Blocks.PINK_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_GRAY = BLOCKS.register("gray_truffalo_tuft", + () -> new com.craisinlord.antarchy.content.block.TruffaloTuftBlock(BlockBehaviour.Properties.copy(Blocks.GRAY_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_LIGHT_GRAY = BLOCKS.register("light_gray_truffalo_tuft", + () -> new com.craisinlord.antarchy.content.block.TruffaloTuftBlock(BlockBehaviour.Properties.copy(Blocks.LIGHT_GRAY_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_CYAN = BLOCKS.register("cyan_truffalo_tuft", + () -> new com.craisinlord.antarchy.content.block.TruffaloTuftBlock(BlockBehaviour.Properties.copy(Blocks.CYAN_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_PURPLE = BLOCKS.register("purple_truffalo_tuft", + () -> new com.craisinlord.antarchy.content.block.TruffaloTuftBlock(BlockBehaviour.Properties.copy(Blocks.PURPLE_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_BLUE = BLOCKS.register("blue_truffalo_tuft", + () -> new com.craisinlord.antarchy.content.block.TruffaloTuftBlock(BlockBehaviour.Properties.copy(Blocks.BLUE_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_BROWN = BLOCKS.register("brown_truffalo_tuft", + () -> new com.craisinlord.antarchy.content.block.TruffaloTuftBlock(BlockBehaviour.Properties.copy(Blocks.BROWN_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_GREEN = BLOCKS.register("green_truffalo_tuft", + () -> new com.craisinlord.antarchy.content.block.TruffaloTuftBlock(BlockBehaviour.Properties.copy(Blocks.GREEN_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_RED = BLOCKS.register("red_truffalo_tuft", + () -> new com.craisinlord.antarchy.content.block.TruffaloTuftBlock(BlockBehaviour.Properties.copy(Blocks.RED_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_BLACK = BLOCKS.register("black_truffalo_tuft", + () -> new com.craisinlord.antarchy.content.block.TruffaloTuftBlock(BlockBehaviour.Properties.copy(Blocks.BLACK_WOOL))); + + public static final DeferredBlock DUCT_TAPE = BLOCKS.register("duct_tape", () -> new DuctTapeBlock(BlockBehaviour.Properties.of() .strength(0.2F) @@ -369,6 +590,8 @@ public final class AntarchyFabricBlocks { public static final DeferredBlock NYXITE_BRICKS = BLOCKS.register("nyxite_bricks", () -> new Block(nyxiteProperties())); + public static final DeferredBlock MOSSY_NYXITE_BRICKS = BLOCKS.register("mossy_nyxite_bricks", + () -> new Block(nyxiteProperties())); public static final DeferredBlock NYXITE_STAIRS = BLOCKS.register("nyxite_stairs", @@ -410,6 +633,12 @@ public final class AntarchyFabricBlocks { public static final DeferredBlock NYXITE_BRICK_WALL = BLOCKS.register("nyxite_brick_wall", () -> new net.minecraft.world.level.block.WallBlock(nyxiteProperties())); + public static final DeferredBlock MOSSY_NYXITE_BRICK_STAIRS = BLOCKS.register("mossy_nyxite_brick_stairs", + () -> new net.minecraft.world.level.block.StairBlock(MOSSY_NYXITE_BRICKS.get().defaultBlockState(), nyxiteProperties())); + public static final DeferredBlock MOSSY_NYXITE_BRICK_SLAB = BLOCKS.register("mossy_nyxite_brick_slab", + () -> new net.minecraft.world.level.block.SlabBlock(nyxiteProperties())); + public static final DeferredBlock MOSSY_NYXITE_BRICK_WALL = BLOCKS.register("mossy_nyxite_brick_wall", + () -> new net.minecraft.world.level.block.WallBlock(nyxiteProperties())); public static final DeferredBlock NYXITE_PILLAR = BLOCKS.register("nyxite_pillar", () -> new RotatedPillarBlock(nyxiteProperties())); @@ -491,14 +720,14 @@ public final class AntarchyFabricBlocks { () -> new RotatedPillarBlock(AntarchyObjects.shellstoneProperties())); - public static final DeferredBlock TRIFFID_GOO_BLOCK = BLOCKS.register("flytrap_goo_block", - () -> new com.craisinlord.antarchy.content.block.TriffidGooBlock(BlockBehaviour.Properties.copy(Blocks.SLIME_BLOCK).noOcclusion().isViewBlocking((s, l, p) -> false).isSuffocating((s, l, p) -> false))); + public static final DeferredBlock FLYTRAP_GOO_BLOCK = BLOCKS.register("flytrap_goo_block", + () -> new com.craisinlord.antarchy.content.block.FlytrapGooBlock(BlockBehaviour.Properties.copy(Blocks.SLIME_BLOCK).noOcclusion().isViewBlocking((s, l, p) -> false).isSuffocating((s, l, p) -> false))); public static final DeferredBlock CLOUD_BLOCK = BLOCKS.register("cloud_block", () -> new com.craisinlord.antarchy.content.block.CloudBlock( AntarchyFabricItems::cloudBucketItem, - BlockBehaviour.Properties.copy(Blocks.POWDER_SNOW).noLootTable().noOcclusion() + BlockBehaviour.Properties.copy(Blocks.POWDER_SNOW).noLootTable().noOcclusion().emissiveRendering((state, level, pos) -> true) )); @@ -535,6 +764,40 @@ public final class AntarchyFabricBlocks { public static final DeferredBlock MYRMITE = BLOCKS.register("myrmite", () -> new Block(nyxiteProperties())); + public static final DeferredBlock MYRMITE_STAIRS = BLOCKS.register("myrmite_stairs", + () -> new StairBlock(MYRMITE.get().defaultBlockState(), nyxiteProperties())); + public static final DeferredBlock MYRMITE_SLAB = BLOCKS.register("myrmite_slab", + () -> new SlabBlock(nyxiteProperties())); + public static final DeferredBlock MYRMITE_WALL = BLOCKS.register("myrmite_wall", + () -> new WallBlock(nyxiteProperties())); + public static final DeferredBlock POLISHED_MYRMITE = BLOCKS.register("polished_myrmite", + () -> new Block(nyxiteProperties())); + public static final DeferredBlock POLISHED_MYRMITE_STAIRS = BLOCKS.register("polished_myrmite_stairs", + () -> new StairBlock(POLISHED_MYRMITE.get().defaultBlockState(), nyxiteProperties())); + public static final DeferredBlock POLISHED_MYRMITE_SLAB = BLOCKS.register("polished_myrmite_slab", + () -> new SlabBlock(nyxiteProperties())); + public static final DeferredBlock POLISHED_MYRMITE_WALL = BLOCKS.register("polished_myrmite_wall", + () -> new WallBlock(nyxiteProperties())); + public static final DeferredBlock CHISELED_MYRMITE = BLOCKS.register("chiseled_myrmite", + () -> new Block(nyxiteProperties())); + public static final DeferredBlock MYRMITE_BRICKS = BLOCKS.register("myrmite_bricks", + () -> new Block(nyxiteProperties())); + public static final DeferredBlock MYRMITE_BRICK_STAIRS = BLOCKS.register("myrmite_brick_stairs", + () -> new StairBlock(MYRMITE_BRICKS.get().defaultBlockState(), nyxiteProperties())); + public static final DeferredBlock MYRMITE_BRICK_SLAB = BLOCKS.register("myrmite_brick_slab", + () -> new SlabBlock(nyxiteProperties())); + public static final DeferredBlock MYRMITE_BRICK_WALL = BLOCKS.register("myrmite_brick_wall", + () -> new WallBlock(nyxiteProperties())); + public static final DeferredBlock MOSSY_MYRMITE_BRICKS = BLOCKS.register("mossy_myrmite_bricks", + () -> new Block(nyxiteProperties())); + public static final DeferredBlock MOSSY_MYRMITE_BRICK_STAIRS = BLOCKS.register("mossy_myrmite_brick_stairs", + () -> new StairBlock(MOSSY_MYRMITE_BRICKS.get().defaultBlockState(), nyxiteProperties())); + public static final DeferredBlock MOSSY_MYRMITE_BRICK_SLAB = BLOCKS.register("mossy_myrmite_brick_slab", + () -> new SlabBlock(nyxiteProperties())); + public static final DeferredBlock MOSSY_MYRMITE_BRICK_WALL = BLOCKS.register("mossy_myrmite_brick_wall", + () -> new WallBlock(nyxiteProperties())); + public static final DeferredBlock MYRMITE_PILLAR = BLOCKS.register("myrmite_pillar", + () -> new RotatedPillarBlock(nyxiteProperties())); public static final DeferredBlock BIOMITE = BLOCKS.register("biomite", @@ -571,6 +834,8 @@ public final class AntarchyFabricBlocks { public static final DeferredBlock BROODSTONE_BRICKS = BLOCKS.register("broodstone_bricks", () -> new Block(broodstoneProperties())); + public static final DeferredBlock MOSSY_BROODSTONE_BRICKS = BLOCKS.register("mossy_broodstone_bricks", + () -> new Block(broodstoneProperties())); public static final DeferredBlock BROODSTONE_STAIRS = BLOCKS.register("broodstone_stairs", @@ -607,6 +872,12 @@ public final class AntarchyFabricBlocks { public static final DeferredBlock BROODSTONE_BRICK_WALL = BLOCKS.register("broodstone_brick_wall", () -> new WallBlock(broodstoneProperties())); + public static final DeferredBlock MOSSY_BROODSTONE_BRICK_STAIRS = BLOCKS.register("mossy_broodstone_brick_stairs", + () -> new StairBlock(MOSSY_BROODSTONE_BRICKS.get().defaultBlockState(), broodstoneProperties())); + public static final DeferredBlock MOSSY_BROODSTONE_BRICK_SLAB = BLOCKS.register("mossy_broodstone_brick_slab", + () -> new SlabBlock(broodstoneProperties())); + public static final DeferredBlock MOSSY_BROODSTONE_BRICK_WALL = BLOCKS.register("mossy_broodstone_brick_wall", + () -> new WallBlock(broodstoneProperties())); public static final DeferredBlock BROODSTONE_URANIUM_ORE = BLOCKS.register("broodstone_uranium_ore", @@ -697,12 +968,17 @@ public final class AntarchyFabricBlocks { .replaceable())); - public static final DeferredBlock CREEPING_HORROR_EGG = BLOCKS.register("crawling_blight_egg", - () -> new CreepingHorrorEggBlock(BlockBehaviour.Properties.copy(Blocks.TURTLE_EGG))); + public static final DeferredBlock CRAWLING_BLIGHT_EGG = BLOCKS.register("crawling_blight_egg", + () -> new CrawlingBlightEggBlock(BlockBehaviour.Properties.copy(Blocks.TURTLE_EGG))); + + public static final DeferredBlock PRINCE_EGG = BLOCKS.register("prince_egg", + () -> new com.craisinlord.antarchy.content.block.PrinceEggBlock(BlockBehaviour.Properties.copy(Blocks.DRAGON_EGG).randomTicks().noOcclusion())); + public static final DeferredBlock PRINCESS_EGG = BLOCKS.register("princess_egg", + () -> new com.craisinlord.antarchy.content.block.PrincessEggBlock(BlockBehaviour.Properties.copy(Blocks.DRAGON_EGG).randomTicks().noOcclusion())); - public static final DeferredBlock JUMPY_BUG_EGG = BLOCKS.register("springbug_egg", - () -> new JumpyBugEggBlock(BlockBehaviour.Properties.copy(Blocks.TURTLE_EGG))); + public static final DeferredBlock SPRINGBUG_EGG = BLOCKS.register("springbug_egg", + () -> new SpringbugEggBlock(BlockBehaviour.Properties.copy(Blocks.TURTLE_EGG))); public static final DeferredBlock SPIT_BUG_EGG = BLOCKS.register("spit_bug_egg", @@ -713,8 +989,8 @@ public final class AntarchyFabricBlocks { () -> new JerryEggBlock(BlockBehaviour.Properties.copy(Blocks.TURTLE_EGG).randomTicks())); - public static final DeferredBlock LURKING_TERROR_EGG = BLOCKS.register("skulking_fright_egg", - () -> new LurkingTerrorEggBlock(BlockBehaviour.Properties.copy(Blocks.TURTLE_EGG))); + public static final DeferredBlock SKULKING_FRIGHT_EGG = BLOCKS.register("skulking_fright_egg", + () -> new SkulkingFrightEggBlock(BlockBehaviour.Properties.copy(Blocks.TURTLE_EGG))); static { @@ -792,6 +1068,11 @@ public final class AntarchyFabricBlocks { public static final DeferredBlock TERMITE_NEST = BLOCKS.register("termite_nest", () -> new AntNestBlock(AntarchyFabricEntities.TERMITE, AntarchyFabricBlocks::antNestBlockEntityType, BlockBehaviour.Properties.copy(Blocks.DIRT).noLootTable())); + public static final DeferredBlock ANT_TRAP = BLOCKS.register("ant_trap", + () -> new com.craisinlord.antarchy.content.block.AntTrapBlock( + () -> java.util.List.of(AntarchyFabricEntities.RED_ANT.get(), AntarchyFabricEntities.BROWN_ANT.get(), AntarchyFabricEntities.RAINBOW_ANT.get(), AntarchyFabricEntities.TERMITE.get()), + AntarchyFabricBlocks::antNestBlockEntityType, BlockBehaviour.Properties.copy(Blocks.OAK_PRESSURE_PLATE).noOcclusion())); + public static final DeferredBlock URANIUM_ORE = BLOCKS.register("uranium_ore", () -> createOre(Blocks.EMERALD_ORE, 4, 8, MapColor.COLOR_YELLOW)); @@ -819,6 +1100,9 @@ public final class AntarchyFabricBlocks { public static final DeferredBlock BLUESTONE_BLOCK = BLOCKS.register("bluestone_block", () -> new BluestoneBlock(BlockBehaviour.Properties.copy(Blocks.REDSTONE_BLOCK).mapColor(MapColor.COLOR_BLUE))); + public static final DeferredBlock VORTEX_LENS = BLOCKS.register("vortex_lens", + () -> new VortexLensBlock(AntarchyFabricBlocks::vortexLensBlockEntityType, + BlockBehaviour.Properties.copy(Blocks.COPPER_BLOCK).mapColor(MapColor.COLOR_GREEN).strength(3.0F, 6.0F).requiresCorrectToolForDrops().noOcclusion())); public static final DeferredBlock BLUESTONE_REPEATER = BLOCKS.register("bluestone_repeater", () -> new BluestoneRepeaterBlock(BlockBehaviour.Properties.copy(Blocks.REPEATER).mapColor(MapColor.COLOR_BLUE).noCollission())); public static final DeferredBlock BLUESTONE_COMPARATOR = BLOCKS.register("bluestone_comparator", @@ -829,6 +1113,10 @@ public final class AntarchyFabricBlocks { () -> new BluestoneLampBlock(BlockBehaviour.Properties.copy(Blocks.REDSTONE_LAMP).mapColor(MapColor.COLOR_BLUE))); + public static final DeferredBlock TIGERS_EYE_BLOCK = BLOCKS.register("tigers_eye_block", + () -> createStorageBlock(Blocks.EMERALD_BLOCK, MapColor.COLOR_ORANGE)); + + public static final DeferredBlock URANIUM_BLOCK = BLOCKS.register("uranium_block", () -> createStorageBlock(Blocks.EMERALD_BLOCK, MapColor.COLOR_YELLOW)); @@ -910,23 +1198,23 @@ public final class AntarchyFabricBlocks { public static final DeferredBlock ANTIMETAL = BLOCKS.register("antimetal", - () -> new net.minecraft.world.level.block.RotatedPillarBlock(BlockBehaviour.Properties.copy(Blocks.BASALT))); + () -> new net.minecraft.world.level.block.RotatedPillarBlock(BlockBehaviour.Properties.copy(Blocks.BASALT).sound(antimetalSoundType()))); public static final DeferredBlock POLISHED_ANTIMETAL = BLOCKS.register("polished_antimetal", - () -> new net.minecraft.world.level.block.RotatedPillarBlock(BlockBehaviour.Properties.copy(Blocks.POLISHED_BASALT))); + () -> new net.minecraft.world.level.block.RotatedPillarBlock(BlockBehaviour.Properties.copy(Blocks.POLISHED_BASALT).sound(antimetalSoundType()))); public static final DeferredBlock ANTIMETAL_STAIRS = BLOCKS.register("antimetal_stairs", - () -> new StairBlock(ANTIMETAL.get().defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.BASALT))); + () -> new StairBlock(ANTIMETAL.get().defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.BASALT).sound(antimetalSoundType()))); public static final DeferredBlock ANTIMETAL_SLAB = BLOCKS.register("antimetal_slab", - () -> new SlabBlock(BlockBehaviour.Properties.copy(Blocks.BASALT))); + () -> new SlabBlock(BlockBehaviour.Properties.copy(Blocks.BASALT).sound(antimetalSoundType()))); public static final DeferredBlock POLISHED_ANTIMETAL_STAIRS = BLOCKS.register("polished_antimetal_stairs", - () -> new StairBlock(POLISHED_ANTIMETAL.get().defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.POLISHED_BASALT))); + () -> new StairBlock(POLISHED_ANTIMETAL.get().defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.POLISHED_BASALT).sound(antimetalSoundType()))); public static final DeferredBlock POLISHED_ANTIMETAL_SLAB = BLOCKS.register("polished_antimetal_slab", - () -> new SlabBlock(BlockBehaviour.Properties.copy(Blocks.POLISHED_BASALT))); + () -> new SlabBlock(BlockBehaviour.Properties.copy(Blocks.POLISHED_BASALT).sound(antimetalSoundType()))); public static final DeferredBlock ANTIMETAL_SCAFFOLDING = BLOCKS.register("antimetal_scaffolding", - () -> new com.craisinlord.antarchy.content.block.AntimetalScaffoldingBlock(BlockBehaviour.Properties.copy(Blocks.SCAFFOLDING))); + () -> new com.craisinlord.antarchy.content.block.AntimetalScaffoldingBlock(BlockBehaviour.Properties.copy(Blocks.SCAFFOLDING).sound(antimetalScaffoldingSoundType()))); public static final DeferredBlock ANTIMETAL_RAIL = BLOCKS.register("antimetal_rail", @@ -1014,12 +1302,26 @@ public final class AntarchyFabricBlocks { () -> new AntigravelBlock(BlockBehaviour.Properties.copy(Blocks.GRAVEL))); public static final DeferredBlock LOAM = BLOCKS.register("loam", () -> new Block(BlockBehaviour.Properties.copy(Blocks.MUD))); - public static final DeferredBlock MUCUS = BLOCKS.register("mucus", - () -> new MucusBlock(BlockBehaviour.Properties.copy(Blocks.GLOW_LICHEN).friction(0.98F).lightLevel(state -> 0).sound(net.minecraft.world.level.block.SoundType.SLIME_BLOCK))); + public static final DeferredBlock PACKED_LOAM = BLOCKS.register("packed_loam", + () -> new Block(BlockBehaviour.Properties.copy(Blocks.PACKED_MUD))); + public static final DeferredBlock LOAM_BRICKS = BLOCKS.register("loam_bricks", + () -> new Block(BlockBehaviour.Properties.copy(Blocks.MUD_BRICKS))); + public static final DeferredBlock LOAM_BRICK_STAIRS = BLOCKS.register("loam_brick_stairs", + () -> new StairBlock(LOAM_BRICKS.get().defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.MUD_BRICK_STAIRS))); + public static final DeferredBlock LOAM_BRICK_SLAB = BLOCKS.register("loam_brick_slab", + () -> new SlabBlock(BlockBehaviour.Properties.copy(Blocks.MUD_BRICK_SLAB))); + public static final DeferredBlock LOAM_BRICK_WALL = BLOCKS.register("loam_brick_wall", + () -> new WallBlock(BlockBehaviour.Properties.copy(Blocks.MUD_BRICK_WALL))); + public static final DeferredBlock CHISELED_LOAM_BRICKS = BLOCKS.register("chiseled_loam_bricks", + () -> new Block(BlockBehaviour.Properties.copy(Blocks.MUD_BRICKS))); - public static final DeferredBlock DREAM_SANDSTONE = BLOCKS.register("dream_sandstone", - () -> new Block(BlockBehaviour.Properties.copy(Blocks.SANDSTONE))); + public static final DeferredBlock MUCUS = BLOCKS.register("mucus", + () -> new com.craisinlord.antarchy.content.block.MucusBlock(BlockBehaviour.Properties.copy(Blocks.GLOW_LICHEN).friction(0.995F).lightLevel(state -> 0).sound(SoundType.SLIME_BLOCK))); + + + public static final DeferredBlock DREAM_SANDSTONE = BLOCKS.register("dream_sandstone", + () -> new DreamSandstoneBlock(BlockBehaviour.Properties.copy(Blocks.SANDSTONE))); public static final DeferredBlock CHISELED_DREAM_SANDSTONE = BLOCKS.register("chiseled_dream_sandstone", @@ -1058,6 +1360,58 @@ public final class AntarchyFabricBlocks { () -> new net.minecraft.world.level.block.SlabBlock(BlockBehaviour.Properties.copy(Blocks.CUT_SANDSTONE_SLAB))); + public static final DeferredBlock TYPHONITE = BLOCKS.register("typhonite", + () -> new Block(BlockBehaviour.Properties.copy(Blocks.BLACKSTONE))); + public static final DeferredBlock NADIR_NYXIUM = BLOCKS.register("nadir_nyxium", + () -> new DirectionalNyxiumBlock(nyxiteProperties(), DirectionalNyxiumBlock.Type.NADIR)); + public static final DeferredBlock VERDANT_NYXIUM = BLOCKS.register("verdant_nyxium", + () -> new DirectionalNyxiumBlock(nyxiteProperties(), DirectionalNyxiumBlock.Type.VERDANT)); + public static final DeferredBlock TYPHONITE_PILLAR = BLOCKS.register("typhonite_pillar", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.copy(Blocks.BLACKSTONE))); + public static final DeferredBlock TYPHONITE_BRICKS = BLOCKS.register("typhonite_bricks", + () -> new Block(BlockBehaviour.Properties.copy(Blocks.BLACKSTONE))); + public static final DeferredBlock CHISELED_TYPHONITE = BLOCKS.register("chiseled_typhonite", + () -> new Block(BlockBehaviour.Properties.copy(Blocks.BLACKSTONE))); + public static final DeferredBlock POLISHED_TYPHONITE = BLOCKS.register("polished_typhonite", + () -> new Block(BlockBehaviour.Properties.copy(Blocks.BLACKSTONE))); + public static final DeferredBlock VEINED_TYPHONITE = BLOCKS.register("veined_typhonite", + () -> new Block(BlockBehaviour.Properties.copy(Blocks.BLACKSTONE).lightLevel(state -> 8))); + public static final DeferredBlock TYPHONITE_SPIKE = BLOCKS.register("typhonite_spike", + () -> new TyphoniteSpikeBlock(BlockBehaviour.Properties.copy(Blocks.POINTED_DRIPSTONE))); + public static final DeferredBlock TYPHONITE_STAIRS = BLOCKS.register("typhonite_stairs", + () -> new StairBlock(TYPHONITE.get().defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.BLACKSTONE_STAIRS))); + public static final DeferredBlock TYPHONITE_SLAB = BLOCKS.register("typhonite_slab", + () -> new SlabBlock(BlockBehaviour.Properties.copy(Blocks.BLACKSTONE_SLAB))); + public static final DeferredBlock TYPHONITE_WALL = BLOCKS.register("typhonite_wall", + () -> new WallBlock(BlockBehaviour.Properties.copy(Blocks.BLACKSTONE_WALL))); + public static final DeferredBlock TYPHONITE_BRICK_STAIRS = BLOCKS.register("typhonite_brick_stairs", + () -> new StairBlock(TYPHONITE_BRICKS.get().defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.BLACKSTONE_STAIRS))); + public static final DeferredBlock TYPHONITE_BRICK_SLAB = BLOCKS.register("typhonite_brick_slab", + () -> new SlabBlock(BlockBehaviour.Properties.copy(Blocks.BLACKSTONE_SLAB))); + public static final DeferredBlock TYPHONITE_BRICK_WALL = BLOCKS.register("typhonite_brick_wall", + () -> new WallBlock(BlockBehaviour.Properties.copy(Blocks.BLACKSTONE_WALL))); + public static final DeferredBlock POLISHED_TYPHONITE_STAIRS = BLOCKS.register("polished_typhonite_stairs", + () -> new StairBlock(POLISHED_TYPHONITE.get().defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.BLACKSTONE_STAIRS))); + public static final DeferredBlock POLISHED_TYPHONITE_SLAB = BLOCKS.register("polished_typhonite_slab", + () -> new SlabBlock(BlockBehaviour.Properties.copy(Blocks.BLACKSTONE_SLAB))); + public static final DeferredBlock POLISHED_TYPHONITE_WALL = BLOCKS.register("polished_typhonite_wall", + () -> new WallBlock(BlockBehaviour.Properties.copy(Blocks.BLACKSTONE_WALL))); + public static final DeferredBlock SPIRALING_VINES = BLOCKS.register("spiraling_vines", + () -> new SpiralingVinesBlock(BlockBehaviour.Properties.copy(Blocks.TWISTING_VINES))); + public static final DeferredBlock GOREVINE = BLOCKS.register("gorevine", + () -> new GorevineBlock(BlockBehaviour.Properties.copy(Blocks.WEEPING_VINES).lightLevel(state -> 4))); + public static final DeferredBlock WHIRLFLOWER = BLOCKS.register("whirlflower", + () -> new WhirlflowerBlock(BlockBehaviour.Properties.copy(Blocks.ALLIUM))); + public static final DeferredBlock NADIR_FERN = BLOCKS.register("nadir_fern", + () -> new NadirFernBlock(BlockBehaviour.Properties.copy(Blocks.FERN))); + public static final DeferredBlock LARGE_NADIR_FERN = BLOCKS.register("large_nadir_fern", + () -> new LargeNadirFernBlock(BlockBehaviour.Properties.copy(Blocks.LARGE_FERN).noCollission())); + public static final DeferredBlock DUSKBELL = BLOCKS.register("duskbell", + () -> new DirectionalThoraxisFlowerBlock(BlockBehaviour.Properties.copy(Blocks.ALLIUM).lightLevel(state -> 4))); + public static final DeferredBlock NADIR_ROOTS = BLOCKS.register("nadir_roots", + () -> new DirectionalThoraxisFlowerBlock(BlockBehaviour.Properties.copy(Blocks.CRIMSON_ROOTS))); + public static final DeferredBlock VERDANT_ROOTS = BLOCKS.register("verdant_roots", + () -> new DirectionalThoraxisFlowerBlock(BlockBehaviour.Properties.copy(Blocks.WARPED_ROOTS))); public static final DeferredBlock DEAD_STAR_CORAL_BLOCK = BLOCKS.register("dead_star_coral_block", () -> new Block(BlockBehaviour.Properties.copy(Blocks.TUBE_CORAL_BLOCK))); @@ -1089,16 +1443,12 @@ public final class AntarchyFabricBlocks { public static final DeferredBlock STAR_CORAL_WALL_FAN = BLOCKS.register("star_coral_wall_fan", () -> new StarCoralWallFanBlock(DEAD_STAR_CORAL_WALL_FAN.get(), BlockBehaviour.Properties.copy(Blocks.TUBE_CORAL_WALL_FAN).lightLevel(state -> 8))); - public static final DeferredBlock UNDERTRIAL_SPAWNER = BLOCKS.register("undertrial_spawner", - () -> new UndertrialSpawnerBlock(AntarchyFabricBlocks::undertrialSpawnerBlockEntityType, - BlockBehaviour.Properties.copy(Blocks.OBSIDIAN).noOcclusion())); - public static final DeferredBlock UNDERVAULT = BLOCKS.register("undervault", - () -> new UnderVaultBlock(AntarchyFabricBlocks::underVaultBlockEntityType, - BlockBehaviour.Properties.copy(Blocks.OBSIDIAN).noOcclusion())); - public static final DeferredBlock QUEEN_TRAIL_SPAWN_MARKER = BLOCKS.register("queen_trail_spawn_marker", - () -> new QueenTrailSpawnMarkerBlock(AntarchyFabricBlocks::queenTrailSpawnMarkerBlockEntityType, - BlockBehaviour.Properties.of().noCollission().noOcclusion().noLootTable().strength(-1.0F))); - + public static final DeferredHolder, BlockEntityType> ROYAL_EGG_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("royal_egg", + () -> BlockEntityType.Builder.of( + com.craisinlord.antarchy.content.block.entity.RoyalEggBlockEntity::new, + PRINCE_EGG.get(), + PRINCESS_EGG.get() + ).build(null)); public static final DeferredHolder, BlockEntityType> ANT_NEST_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("ant_nest", () -> BlockEntityType.Builder.of( @@ -1106,7 +1456,8 @@ public final class AntarchyFabricBlocks { RED_ANT_NEST.get(), BROWN_ANT_NEST.get(), RAINBOW_ANT_NEST.get(), - TERMITE_NEST.get() + TERMITE_NEST.get(), + ANT_TRAP.get() ).build(null)); @@ -1161,27 +1512,35 @@ public final class AntarchyFabricBlocks { (pos, state) -> new UpperBlockEntity(pos, state, AntarchyFabricBlocks::upperBlockEntityType), UPPER.get() ).build(null)); - public static final DeferredHolder, BlockEntityType> UNDERTRIAL_SPAWNER_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("undertrial_spawner", - () -> BlockEntityType.Builder.of((pos, state) -> new UndertrialSpawnerBlockEntity(pos, state, AntarchyFabricBlocks::undertrialSpawnerBlockEntityType), - UNDERTRIAL_SPAWNER.get()).build(null)); - public static final DeferredHolder, BlockEntityType> UNDERVAULT_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("undervault", - () -> BlockEntityType.Builder.of((pos, state) -> new UnderVaultBlockEntity(pos, state, AntarchyFabricBlocks::underVaultBlockEntityType), - UNDERVAULT.get()).build(null)); + public static final DeferredHolder, BlockEntityType> VORTEX_LENS_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("vortex_lens", + () -> BlockEntityType.Builder.of( + (pos, state) -> new VortexLensBlockEntity(pos, state, AntarchyFabricBlocks::vortexLensBlockEntityType), + VORTEX_LENS.get() + ).build(null)); + public static final DeferredHolder, BlockEntityType> PORTAL_GUN_PORTAL_MASTER_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("portal_gun_portal_master", + () -> BlockEntityType.Builder.of( + (pos, state) -> new PortalGunPortalMasterBlockEntity(pos, state, AntarchyFabricBlocks::portalGunPortalMasterBlockEntityType), + PORTAL_GUN_PORTAL_MASTER.get() + ).build(null)); + public static final DeferredHolder, BlockEntityType> PORTAL_GUN_PORTAL_BASE_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("portal_gun_portal_base", + () -> BlockEntityType.Builder.of( + (pos, state) -> new PortalGunPortalBaseBlockEntity(pos, state, AntarchyFabricBlocks::portalGunPortalBaseBlockEntityType), + PORTAL_GUN_PORTAL_BASE.get() + ).build(null)); + public static final DeferredHolder, BlockEntityType> DIMENSIONAL_TEAR_MARKER_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("dimensional_tear_marker", + () -> BlockEntityType.Builder.of( + (pos, state) -> new DimensionalTearMarkerBlockEntity(pos, state, AntarchyFabricBlocks::dimensionalTearMarkerBlockEntityType), + DIMENSIONAL_TEAR_MARKER.get() + ).build(null)); public static final DeferredHolder, BlockEntityType> QUEEN_TRAIL_SPAWN_MARKER_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("queen_trail_spawn_marker", - () -> BlockEntityType.Builder.of((pos, state) -> new QueenTrailSpawnMarkerBlockEntity(pos, state, AntarchyFabricBlocks::queenTrailSpawnMarkerBlockEntityType), - QUEEN_TRAIL_SPAWN_MARKER.get()).build(null)); - - private static BlockEntityType undertrialSpawnerBlockEntityType() { - return UNDERTRIAL_SPAWNER_BLOCK_ENTITY.get(); - } - - private static BlockEntityType underVaultBlockEntityType() { - return UNDERVAULT_BLOCK_ENTITY.get(); - } - - private static BlockEntityType queenTrailSpawnMarkerBlockEntityType() { - return QUEEN_TRAIL_SPAWN_MARKER_BLOCK_ENTITY.get(); - } + () -> BlockEntityType.Builder.of( + (pos, state) -> new QueenTrailSpawnMarkerBlockEntity(pos, state, AntarchyFabricBlocks::queenTrailSpawnMarkerBlockEntityType), + QUEEN_TRAIL_SPAWN_MARKER.get() + ).build(null)); + public static final DeferredHolder, BlockEntityType> UNDERTRIAL_SPAWNER_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("undertrial_spawner", + () -> BlockEntityType.Builder.of((pos, state) -> new UndertrialSpawnerBlockEntity(pos, state, AntarchyFabricBlocks::undertrialSpawnerBlockEntityType), UNDERTRIAL_SPAWNER.get()).build(null)); + public static final DeferredHolder, BlockEntityType> UNDERVAULT_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("undervault", + () -> BlockEntityType.Builder.of((pos, state) -> new UnderVaultBlockEntity(pos, state, AntarchyFabricBlocks::underVaultBlockEntityType), UNDERVAULT.get()).build(null)); @@ -1213,6 +1572,34 @@ public final class AntarchyFabricBlocks { return UPPER_BLOCK_ENTITY.get(); } + private static BlockEntityType vortexLensBlockEntityType() { + return VORTEX_LENS_BLOCK_ENTITY.get(); + } + + private static BlockEntityType portalGunPortalMasterBlockEntityType() { + return PORTAL_GUN_PORTAL_MASTER_BLOCK_ENTITY.get(); + } + + private static BlockEntityType portalGunPortalBaseBlockEntityType() { + return PORTAL_GUN_PORTAL_BASE_BLOCK_ENTITY.get(); + } + + private static BlockEntityType dimensionalTearMarkerBlockEntityType() { + return DIMENSIONAL_TEAR_MARKER_BLOCK_ENTITY.get(); + } + + private static BlockEntityType queenTrailSpawnMarkerBlockEntityType() { + return QUEEN_TRAIL_SPAWN_MARKER_BLOCK_ENTITY.get(); + } + + private static BlockEntityType undertrialSpawnerBlockEntityType() { + return UNDERTRIAL_SPAWNER_BLOCK_ENTITY.get(); + } + + private static BlockEntityType underVaultBlockEntityType() { + return UNDERVAULT_BLOCK_ENTITY.get(); + } + private static Block smallBloodCrystalBudBlock() { @@ -1342,9 +1729,38 @@ public final class AntarchyFabricBlocks { } + private static SoundType antimetalSoundType() { + return new SoundType(1.0F, 1.0F, + AntarchyFabricSounds.ANTIMETAL_PLACE.get(), + AntarchyFabricSounds.ANTIMETAL_STEP.get(), + AntarchyFabricSounds.ANTIMETAL_PLACE.get(), + AntarchyFabricSounds.ANTIMETAL_STEP.get(), + AntarchyFabricSounds.ANTIMETAL_PLACE.get()); + } + + + private static SoundType antimetalScaffoldingSoundType() { + SoundEvent scaffold = AntarchyFabricSounds.ANTIMETAL_SCAFFOLD.get(); + return new SoundType(1.0F, 1.0F, scaffold, scaffold, scaffold, scaffold, scaffold); + } + + public static void register() { BLOCKS.register(); BLOCK_ENTITY_TYPES.register(); } + public static void registerStripping() { + StrippableBlockRegistry.register(OURANWOOD_LOG.get(), STRIPPED_OURANWOOD_LOG.get()); + StrippableBlockRegistry.register(OURANWOOD_WOOD.get(), STRIPPED_OURANWOOD_WOOD.get()); + StrippableBlockRegistry.register(PEACH_LOG.get(), STRIPPED_PEACH_LOG.get()); + StrippableBlockRegistry.register(PEACH_WOOD.get(), STRIPPED_PEACH_WOOD.get()); + StrippableBlockRegistry.register(NADIR_LOG.get(), STRIPPED_NADIR_LOG.get()); + StrippableBlockRegistry.register(NADIR_WOOD.get(), STRIPPED_NADIR_WOOD.get()); + StrippableBlockRegistry.register(ROYAL_LOG.get(), STRIPPED_ROYAL_LOG.get()); + StrippableBlockRegistry.register(ROYAL_WOOD.get(), STRIPPED_ROYAL_WOOD.get()); + StrippableBlockRegistry.register(TRUFFALO_LOG.get(), STRIPPED_TRUFFALO_LOG.get()); + StrippableBlockRegistry.register(TRUFFALO_WOOD.get(), STRIPPED_TRUFFALO_WOOD.get()); + } + } diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntities.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntities.java index 965075da..9d7157ac 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntities.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntities.java @@ -4,7 +4,7 @@ import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.AppleCow; import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.EnchantedGoldenAppleCow; import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.GoldenAppleCow; -import com.craisinlord.antarchy.content.entity.cloud_shark.CloudSharkEntity; +import com.craisinlord.antarchy.content.entity.stratoshark.StratosharkEntity; import com.craisinlord.antarchy.content.entity.BedBugEntity; import com.craisinlord.antarchy.content.entity.ButterflyEntity; import com.craisinlord.antarchy.content.entity.CaterpillarEntity; @@ -19,16 +19,23 @@ import com.craisinlord.antarchy.content.entity.MissileSquidEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidBoltEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidEyeProjectileEntity; +import com.craisinlord.antarchy.content.entity.vortex.VortexChargeProjectileEntity; +import com.craisinlord.antarchy.content.entity.vortex.VortexEntity; +import com.craisinlord.antarchy.content.entity.vortex.WindVortexEntity; import com.craisinlord.antarchy.content.entity.HushProjectileEntity; import com.craisinlord.antarchy.content.entity.CritterCageProjectileEntity; -import com.craisinlord.antarchy.content.entity.JumpyBugEntity; +import com.craisinlord.antarchy.content.entity.WormHookProjectileEntity; +import com.craisinlord.antarchy.content.entity.SpringbugEntity; import com.craisinlord.antarchy.content.entity.StinkBugEntity; -import com.craisinlord.antarchy.content.entity.NadirBoatEntity; -import com.craisinlord.antarchy.content.entity.NadirChestBoatEntity; +import com.craisinlord.antarchy.content.entity.HoverboardEntity; import com.craisinlord.antarchy.content.entity.OuranwoodBoatEntity; import com.craisinlord.antarchy.content.entity.OuranwoodChestBoatEntity; -import com.craisinlord.antarchy.content.entity.portal.DimensionalTearEntity; -import com.craisinlord.antarchy.content.time.TimeDilationFieldEntity; +import com.craisinlord.antarchy.content.entity.NadirBoatEntity; +import com.craisinlord.antarchy.content.entity.NadirChestBoatEntity; +import com.craisinlord.antarchy.content.entity.RoyalBoatEntity; +import com.craisinlord.antarchy.content.entity.RoyalChestBoatEntity; +import com.craisinlord.antarchy.content.entity.TruffaloBoatEntity; +import com.craisinlord.antarchy.content.entity.TruffaloChestBoatEntity; import com.craisinlord.antarchy.content.entity.AlphaMantisEntity; import com.craisinlord.antarchy.content.entity.MantisEntity; import com.craisinlord.antarchy.content.entity.RollyPollyEntity; @@ -36,8 +43,11 @@ import com.craisinlord.antarchy.content.entity.basilisk.BasiliskEntity; import com.craisinlord.antarchy.content.entity.EmperorScorpionEntity; import com.craisinlord.antarchy.content.entity.ScorpionEntity; import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity; -import com.craisinlord.antarchy.content.entity.nightmare.NightmareBiteEntity; import com.craisinlord.antarchy.content.entity.nightmare.NightmarePortalEntity; +import com.craisinlord.antarchy.content.entity.nightmare.NightmareBiteEntity; +import com.craisinlord.antarchy.content.entity.portal.DimensionalTearEntity; +import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; +import com.craisinlord.antarchy.content.portalgun.PortalGunProjectileEntity; import com.craisinlord.antarchy.content.entity.ToreterrorEntity; import com.craisinlord.antarchy.content.entity.WaterBombEntity; import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; @@ -46,9 +56,10 @@ import com.craisinlord.antarchy.content.entity.kraken.TentacleEntity; import com.craisinlord.antarchy.content.entity.OctopusBombEntity; import com.craisinlord.antarchy.content.entity.MolevoreEntity; import com.craisinlord.antarchy.content.entity.MolewormEntity; +import com.craisinlord.antarchy.content.entity.WormEntity; import com.craisinlord.antarchy.content.entity.BomberEntity; import com.craisinlord.antarchy.content.entity.SizeRayProjectileEntity; -import com.craisinlord.antarchy.content.entity.TriffidEntity; +import com.craisinlord.antarchy.content.entity.FlytrapEntity; import com.craisinlord.antarchy.content.entity.WaspEntity; import com.craisinlord.antarchy.content.entity.ant.BaseAntEntity; import com.craisinlord.antarchy.content.entity.ant.BrownAntEntity; @@ -87,11 +98,23 @@ public final class AntarchyFabricEntities { .build("rolly_polly")); + public static final DeferredHolder, EntityType> HOVERBOARD = ENTITY_TYPES.register("hoverboard", + () -> EntityType.Builder.of(HoverboardEntity::new, MobCategory.MISC) + .sized(1.5F, 0.6875F) + .clientTrackingRange(10) + .build("hoverboard")); + + public static final DeferredHolder, EntityType> MOLEWORM = ENTITY_TYPES.register("moleworm", () -> EntityType.Builder.of(MolewormEntity::new, MobCategory.MONSTER) .sized(0.4F, 0.3F) .clientTrackingRange(8) .build("moleworm")); + public static final DeferredHolder, EntityType> WORM = ENTITY_TYPES.register("worm", + () -> EntityType.Builder.of(WormEntity::new, MobCategory.MONSTER) + .sized(1.35F, 2.75F) + .clientTrackingRange(10) + .build("worm")); public static final DeferredHolder, EntityType> MANTIS = ENTITY_TYPES.register("mantis", @@ -156,6 +179,38 @@ public final class AntarchyFabricEntities { .build("nadir_chest_boat")); + public static final DeferredHolder, EntityType> ROYAL_BOAT_ENTITY = ENTITY_TYPES.register("royal_boat", + () -> EntityType.Builder.of(RoyalBoatEntity::new, MobCategory.MISC) + .sized(1.375F, 0.5625F) + .clientTrackingRange(10) + .updateInterval(10) + .build("royal_boat")); + + + public static final DeferredHolder, EntityType> ROYAL_CHEST_BOAT_ENTITY = ENTITY_TYPES.register("royal_chest_boat", + () -> EntityType.Builder.of(RoyalChestBoatEntity::new, MobCategory.MISC) + .sized(1.375F, 0.5625F) + .clientTrackingRange(10) + .updateInterval(10) + .build("royal_chest_boat")); + + + public static final DeferredHolder, EntityType> TRUFFALO_BOAT_ENTITY = ENTITY_TYPES.register("truffalo_boat", + () -> EntityType.Builder.of(TruffaloBoatEntity::new, MobCategory.MISC) + .sized(1.375F, 0.5625F) + .clientTrackingRange(10) + .updateInterval(10) + .build("truffalo_boat")); + + + public static final DeferredHolder, EntityType> TRUFFALO_CHEST_BOAT_ENTITY = ENTITY_TYPES.register("truffalo_chest_boat", + () -> EntityType.Builder.of(TruffaloChestBoatEntity::new, MobCategory.MISC) + .sized(1.375F, 0.5625F) + .clientTrackingRange(10) + .updateInterval(10) + .build("truffalo_chest_boat")); + + public static final DeferredHolder, EntityType> MOLEVORE = ENTITY_TYPES.register("molevore", () -> EntityType.Builder.of(MolevoreEntity::new, MobCategory.MONSTER) .sized(1.95F, 1.1F) @@ -163,8 +218,8 @@ public final class AntarchyFabricEntities { .build("molevore")); - public static final DeferredHolder, EntityType> TRIFFID = ENTITY_TYPES.register("flytrap", - () -> EntityType.Builder.of(TriffidEntity::new, MobCategory.MONSTER) + public static final DeferredHolder, EntityType> FLYTRAP = ENTITY_TYPES.register("flytrap", + () -> EntityType.Builder.of(FlytrapEntity::new, MobCategory.MONSTER) .sized(2.0F, 5.0F) .clientTrackingRange(10) .build("flytrap")); @@ -198,8 +253,8 @@ public final class AntarchyFabricEntities { .build("bomber")); - public static final DeferredHolder, EntityType> JUMPY_BUG = ENTITY_TYPES.register("springbug", - () -> EntityType.Builder.of(JumpyBugEntity::new, MobCategory.MONSTER) + public static final DeferredHolder, EntityType> SPRINGBUG = ENTITY_TYPES.register("springbug", + () -> EntityType.Builder.of(SpringbugEntity::new, MobCategory.MONSTER) .sized(3.0F, 6.0F) .clientTrackingRange(8) .build("springbug")); @@ -305,8 +360,8 @@ public final class AntarchyFabricEntities { .build("dr_trayaurus")); - public static final DeferredHolder, EntityType> CLOUD_SHARK = ENTITY_TYPES.register("stratoshark", - () -> EntityType.Builder.of(CloudSharkEntity::new, MobCategory.MONSTER) + public static final DeferredHolder, EntityType> STRATOSHARK = ENTITY_TYPES.register("stratoshark", + () -> EntityType.Builder.of(StratosharkEntity::new, MobCategory.MONSTER) .sized(2.4F, 0.9F) .clientTrackingRange(10) .build("stratoshark")); @@ -319,16 +374,6 @@ public final class AntarchyFabricEntities { .build("kraken")); - public static final DeferredHolder, EntityType> KRAKEN_PART = ENTITY_TYPES.register("kraken_part", - () -> EntityType.Builder.of( - com.craisinlord.antarchy.fabric.entity.multipart.MultipartPartEntity::new, - MobCategory.MISC - ) - .sized(1.0F, 1.0F) - .clientTrackingRange(12) - .updateInterval(1) - .build("kraken_part")); - public static final DeferredHolder, EntityType> MISSILE_SQUID = ENTITY_TYPES.register("missile_squid", () -> EntityType.Builder.of(MissileSquidEntity::new, MobCategory.MONSTER) @@ -357,6 +402,27 @@ public final class AntarchyFabricEntities { .updateInterval(1) .build("nightmare_portal")); + public static final DeferredHolder, EntityType> DIMENSIONAL_TEAR = ENTITY_TYPES.register("dimensional_tear", + () -> EntityType.Builder.of(DimensionalTearEntity::new, MobCategory.MISC) + .sized(2.8F, 3.2F) + .clientTrackingRange(12) + .updateInterval(1) + .build("dimensional_tear")); + + public static final DeferredHolder, EntityType> PORTAL_GUN_PORTAL = ENTITY_TYPES.register("portal_gun_portal", + () -> EntityType.Builder.of(PortalGunPortalEntity::new, MobCategory.MISC) + .sized(1.0F, 2.0F) + .clientTrackingRange(10) + .updateInterval(1) + .build("portal_gun_portal")); + + public static final DeferredHolder, EntityType> PORTAL_GUN_PROJECTILE = ENTITY_TYPES.register("portal_gun_projectile", + () -> EntityType.Builder.of(PortalGunProjectileEntity::new, MobCategory.MISC) + .sized(0.25F, 0.25F) + .clientTrackingRange(8) + .updateInterval(1) + .build("portal_gun_projectile")); + public static final DeferredHolder, EntityType> NIGHTMARE_BITE = ENTITY_TYPES.register("nightmare_bite", () -> EntityType.Builder.of(NightmareBiteEntity::new, MobCategory.MISC) .sized(2.5F, 2.0F) @@ -371,6 +437,37 @@ public final class AntarchyFabricEntities { .clientTrackingRange(10) .build("lucid")); + public static final DeferredHolder, EntityType> VORTEX = ENTITY_TYPES.register("vortex", + () -> EntityType.Builder.of(VortexEntity::new, MobCategory.MONSTER) + .sized(2.0F, 2.0F) + .clientTrackingRange(10) + .fireImmune() + .build("vortex")); + + public static final DeferredHolder, EntityType> WIND_VORTEX = ENTITY_TYPES.register("wind_vortex", + () -> EntityType.Builder.of(WindVortexEntity::new, MobCategory.MISC) + .sized(3.0F, 5.0F) + .clientTrackingRange(10) + .updateInterval(1) + .fireImmune() + .build("wind_vortex")); + + + public static final DeferredHolder, EntityType> ROYAL_BLACK_HOLE = ENTITY_TYPES.register("royal_black_hole", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.royal.RoyalBlackHoleEntity::new, MobCategory.MISC) + .sized(1.0F, 1.0F) + .clientTrackingRange(16) + .updateInterval(2) + .fireImmune() + .build("royal_black_hole")); + public static final DeferredHolder, EntityType> ROYAL_ASSAILANT_BLACK_HOLE = ENTITY_TYPES.register("royal_assailant_black_hole", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.royal.RoyalAssailantBlackHoleEntity::new, MobCategory.MISC) + .sized(1.0F, 1.0F) + .clientTrackingRange(16) + .updateInterval(2) + .fireImmune() + .build("royal_assailant_black_hole")); + public static final DeferredHolder, EntityType> LUCID_BOLT = ENTITY_TYPES.register("lucid_bolt", () -> EntityType.Builder.of(LucidBoltEntity::new, MobCategory.MISC) @@ -398,6 +495,7 @@ public final class AntarchyFabricEntities { () -> EntityType.Builder.of(ScorpionEntity::new, MobCategory.MONSTER) .sized(1.5F, 1.0F) .clientTrackingRange(8) + .fireImmune() .build("scorpion")); @@ -412,6 +510,7 @@ public final class AntarchyFabricEntities { () -> EntityType.Builder.of(EmperorScorpionEntity::new, MobCategory.MONSTER) .sized(6.0F, 3.0F) .clientTrackingRange(12) + .fireImmune() .build("emperor_scorpion")); @@ -421,12 +520,24 @@ public final class AntarchyFabricEntities { .clientTrackingRange(8) .updateInterval(1) .build("lucid_pearl_projectile")); + public static final DeferredHolder, EntityType> VORTEX_CHARGE_PROJECTILE = ENTITY_TYPES.register("vortex_charge_projectile", + () -> EntityType.Builder.of(VortexChargeProjectileEntity::new, MobCategory.MISC) + .sized(0.25F, 0.25F) + .clientTrackingRange(8) + .updateInterval(1) + .build("vortex_charge_projectile")); public static final DeferredHolder, EntityType> CRITTER_CAGE_PROJECTILE = ENTITY_TYPES.register("critter_cage_projectile", () -> EntityType.Builder.of(CritterCageProjectileEntity::new, MobCategory.MISC) .sized(0.25F, 0.25F) .clientTrackingRange(8) .updateInterval(1) .build("critter_cage_projectile")); + public static final DeferredHolder, EntityType> WORM_HOOK_PROJECTILE = ENTITY_TYPES.register("worm_hook_projectile", + () -> EntityType.Builder.of(WormHookProjectileEntity::new, MobCategory.MISC) + .sized(0.25F, 0.25F) + .clientTrackingRange(10) + .updateInterval(1) + .build("worm_hook_projectile")); public static final DeferredHolder, EntityType> HUSH_PROJECTILE = ENTITY_TYPES.register("hush_projectile", @@ -454,29 +565,6 @@ public final class AntarchyFabricEntities { .build("upward_falling_block")); - public static final DeferredHolder, EntityType> DIMENSIONAL_TEAR = ENTITY_TYPES.register("dimensional_tear", - () -> EntityType.Builder.of(DimensionalTearEntity::new, MobCategory.MISC) - .sized(1.0F, 2.75F) - .clientTrackingRange(12) - .updateInterval(2) - .build("dimensional_tear")); - - public static final DeferredHolder, EntityType> TIME_DILATION_FIELD = ENTITY_TYPES.register("time_dilation_field", - () -> EntityType.Builder.of(TimeDilationFieldEntity::new, MobCategory.MISC) - .sized(0.5F, 0.5F) - .clientTrackingRange(16) - .updateInterval(20) - .build("time_dilation_field")); - - public static final DeferredHolder, EntityType> ROYAL_ASSAILANT_BLACK_HOLE = ENTITY_TYPES.register("royal_assailant_black_hole", - () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.royal.RoyalAssailantBlackHoleEntity::new, MobCategory.MISC) - .sized(1.0F, 1.0F) - .clientTrackingRange(16) - .updateInterval(2) - .fireImmune() - .build("royal_assailant_black_hole")); - - public static final DeferredHolder, EntityType> TORETERROR = ENTITY_TYPES.register("toreterror", () -> EntityType.Builder.of(ToreterrorEntity::new, MobCategory.MONSTER) .sized(2.0F, 3.0F) @@ -493,19 +581,26 @@ public final class AntarchyFabricEntities { - public static final DeferredHolder, EntityType> CREEPING_HORROR = ENTITY_TYPES.register("crawling_blight", - () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.CreepingHorrorEntity::new, MobCategory.MONSTER) + public static final DeferredHolder, EntityType> CRAWLING_BLIGHT = ENTITY_TYPES.register("crawling_blight", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.CrawlingBlightEntity::new, MobCategory.MONSTER) .sized(1.3F, 1.5F) .clientTrackingRange(10) .build("crawling_blight")); - public static final DeferredHolder, EntityType> LURKING_TERROR = ENTITY_TYPES.register("skulking_fright", - () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.LurkingTerrorEntity::new, MobCategory.MONSTER) + public static final DeferredHolder, EntityType> SKULKING_FRIGHT = ENTITY_TYPES.register("skulking_fright", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.SkulkingFrightEntity::new, MobCategory.MONSTER) .sized(1.3F, 1.5F) .clientTrackingRange(10) .build("skulking_fright")); + public static final DeferredHolder, EntityType> MANTICORE = ENTITY_TYPES.register("manticore", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.ManticoreEntity::new, MobCategory.MONSTER) + .sized(1.95F, 2.75F) + .clientTrackingRange(10) + .fireImmune() + .build("manticore")); + public static final DeferredHolder, EntityType> JERRY = ENTITY_TYPES.register("jerry", () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.JerryEntity::new, MobCategory.MONSTER) @@ -535,6 +630,53 @@ public final class AntarchyFabricEntities { .clientTrackingRange(12) .build("hercules_beetle")); + public static final DeferredHolder, EntityType> PRINCE = ENTITY_TYPES.register("prince", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.royal.PrinceEntity::new, MobCategory.CREATURE) + .sized(2.2F, 1.5F) + .clientTrackingRange(10) + .updateInterval(3) + .fireImmune().build("prince")); + + public static final DeferredHolder, EntityType> PRINCESS = ENTITY_TYPES.register("princess", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.royal.PrincessEntity::new, MobCategory.CREATURE) + .sized(2.2F, 1.5F) + .clientTrackingRange(10) + .updateInterval(3) + .fireImmune().build("princess")); + + public static final DeferredHolder, EntityType> KING = ENTITY_TYPES.register("king", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.royal.KingEntity::new, MobCategory.MONSTER) + .sized(com.craisinlord.antarchy.content.entity.royal.RoyalBossEntity.GAMEPLAY_WIDTH, com.craisinlord.antarchy.content.entity.royal.RoyalBossEntity.GAMEPLAY_HEIGHT) + .clientTrackingRange(16) + .updateInterval(3) + .fireImmune().build("king")); + + public static final DeferredHolder, EntityType> QUEEN = ENTITY_TYPES.register("queen", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.royal.QueenEntity::new, MobCategory.MONSTER) + .sized(com.craisinlord.antarchy.content.entity.royal.RoyalBossEntity.GAMEPLAY_WIDTH, com.craisinlord.antarchy.content.entity.royal.RoyalBossEntity.GAMEPLAY_HEIGHT) + .clientTrackingRange(16) + .updateInterval(3) + .fireImmune().build("queen")); + + public static final DeferredHolder, EntityType> ROYAL_BOLT = ENTITY_TYPES.register("royal_bolt", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.royal.RoyalBoltEntity::new, MobCategory.MISC) + .sized(0.4F, 0.4F) + .clientTrackingRange(8) + .updateInterval(1) + .fireImmune().build("royal_bolt")); + public static final DeferredHolder, EntityType> ROYAL_ELEMENTAL_PROJECTILE = ENTITY_TYPES.register("royal_elemental_projectile", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.royal.RoyalElementalProjectileEntity::new, MobCategory.MISC) + .sized(1.0F, 1.0F) + .clientTrackingRange(16) + .updateInterval(1) + .fireImmune().build("royal_elemental_projectile")); + public static final DeferredHolder, EntityType> ROYAL_ICE_SPIKE = ENTITY_TYPES.register("royal_ice_spike", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.royal.RoyalIceSpikeEntity::new, MobCategory.MISC) + .sized(2.0F, 4.0F) + .clientTrackingRange(16) + .updateInterval(1) + .fireImmune().build("royal_ice_spike")); + public static final DeferredHolder, EntityType> OURANWOOD_DEER = ENTITY_TYPES.register("ouranwood_deer", () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.OuranwoodDeerEntity::new, MobCategory.CREATURE) diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntityAttributes.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntityAttributes.java index b70ade7e..04e857d2 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntityAttributes.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntityAttributes.java @@ -1,7 +1,7 @@ package com.craisinlord.antarchy.fabric.registry; import com.craisinlord.antarchy.config.AntarchySettings; -import com.craisinlord.antarchy.content.entity.cloud_shark.CloudSharkEntity; +import com.craisinlord.antarchy.content.entity.stratoshark.StratosharkEntity; import com.craisinlord.antarchy.content.entity.BedBugEntity; import com.craisinlord.antarchy.content.entity.ButterflyEntity; import com.craisinlord.antarchy.content.entity.CaterpillarEntity; @@ -10,7 +10,7 @@ import com.craisinlord.antarchy.content.entity.flying_squirrel.FlyingSquirrelEnt import com.craisinlord.antarchy.content.entity.ReverieEntity; import com.craisinlord.antarchy.content.entity.MissileSquidEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; -import com.craisinlord.antarchy.content.entity.JumpyBugEntity; +import com.craisinlord.antarchy.content.entity.SpringbugEntity; import com.craisinlord.antarchy.content.entity.StinkBugEntity; import com.craisinlord.antarchy.content.entity.AlphaMantisEntity; import com.craisinlord.antarchy.content.entity.MantisEntity; @@ -26,8 +26,9 @@ import com.craisinlord.antarchy.content.entity.OctopusBombEntity; import com.craisinlord.antarchy.content.entity.MolevoreEntity; import com.craisinlord.antarchy.content.entity.MolewormEntity; import com.craisinlord.antarchy.content.entity.BomberEntity; -import com.craisinlord.antarchy.content.entity.TriffidEntity; +import com.craisinlord.antarchy.content.entity.FlytrapEntity; import com.craisinlord.antarchy.content.entity.WaspEntity; +import com.craisinlord.antarchy.content.entity.WormEntity; import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry; import net.minecraft.world.entity.ai.attributes.AttributeSupplier; import net.minecraft.world.entity.ai.attributes.Attributes; @@ -51,7 +52,7 @@ public final class AntarchyFabricEntityAttributes { FabricDefaultAttributeRegistry.register( net.minecraft.world.entity.EntityType.PLAYER, net.minecraft.world.entity.player.Player.createAttributes() - .add(AntarchyFabricMisc.SCALE.get()) + .add(AntarchyFabricMisc.ENTITY_INTERACTION_RANGE.get()) .add(AntarchyFabricMisc.DOUBLE_DAMAGE_CHANCE.get()) .add(AntarchyFabricMisc.BLOODGLASS_MAX_HEARTS.get()) .build() @@ -70,7 +71,7 @@ public final class AntarchyFabricEntityAttributes { FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.GOLDEN_APPLE_COW.get(), cowAttributes); FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.ENCHANTED_GOLDEN_APPLE_COW.get(), cowAttributes); FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.DR_TRAYAURUS.get(), Villager.createAttributes().build()); - FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.CLOUD_SHARK.get(), CloudSharkEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.STRATOSHARK.get(), StratosharkEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.KRAKEN.get(), KrakenEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.MISSILE_SQUID.get(), MissileSquidEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.OCTOPUS_BOMB.get(), OctopusBombEntity.createAttributes().build()); @@ -80,26 +81,33 @@ public final class AntarchyFabricEntityAttributes { FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.STINK_BUG.get(), StinkBugEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.WASP.get(), WaspEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.BOMBER.get(), BomberEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.JUMPY_BUG.get(), JumpyBugEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.SPRINGBUG.get(), SpringbugEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.SPIT_BUG.get(), com.craisinlord.antarchy.content.entity.SpitBugEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.MANTIS.get(), MantisEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.ALPHA_MANTIS.get(), AlphaMantisEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.ROLLY_POLLY.get(), RollyPollyEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.TRIFFID.get(), TriffidEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.FLYTRAP.get(), FlytrapEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.LUCID.get(), LucidEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.VORTEX.get(), com.craisinlord.antarchy.content.entity.vortex.VortexEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.SCORPION.get(), ScorpionEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.BASILISK.get(), BasiliskEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.EMPEROR_SCORPION.get(), EmperorScorpionEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.TORETERROR.get(), ToreterrorEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.CREEPING_HORROR.get(), com.craisinlord.antarchy.content.entity.CreepingHorrorEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.LURKING_TERROR.get(), com.craisinlord.antarchy.content.entity.LurkingTerrorEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.CRAWLING_BLIGHT.get(), com.craisinlord.antarchy.content.entity.CrawlingBlightEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.SKULKING_FRIGHT.get(), com.craisinlord.antarchy.content.entity.SkulkingFrightEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.MANTICORE.get(), com.craisinlord.antarchy.content.entity.ManticoreEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.JERRY.get(), com.craisinlord.antarchy.content.entity.JerryEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.CHEEP.get(), com.craisinlord.antarchy.content.entity.CheepEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.DORRIE.get(), com.craisinlord.antarchy.content.entity.DorrieEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.HERCULES_BEETLE.get(), com.craisinlord.antarchy.content.entity.HerculesBeetleEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.PRINCE.get(), com.craisinlord.antarchy.content.entity.royal.PrinceEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.PRINCESS.get(), com.craisinlord.antarchy.content.entity.royal.PrincessEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.KING.get(), com.craisinlord.antarchy.content.entity.royal.KingEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.QUEEN.get(), com.craisinlord.antarchy.content.entity.royal.QueenEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.OURANWOOD_DEER.get(), com.craisinlord.antarchy.content.entity.OuranwoodDeerEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.GLIMMER.get(), com.craisinlord.antarchy.content.entity.glimmer.GlimmerEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.ELKA.get(), com.craisinlord.antarchy.content.entity.ElkaEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.HOVERBOARD.get(), com.craisinlord.antarchy.content.entity.HoverboardEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.RED_ANT.get(), buildAntAttributes( AntarchySettings.redAntHealth(), @@ -122,6 +130,7 @@ public final class AntarchyFabricEntityAttributes { AntarchySettings.termiteAttackDamage() ).build()); FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.MOLEWORM.get(), MolewormEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.WORM.get(), WormEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.MOLEVORE.get(), MolevoreEntity.createAttributes().build()); } diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java index cb234124..42f57201 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java @@ -2,63 +2,29 @@ package com.craisinlord.antarchy.fabric.registry; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.config.AntarchySettings; -import com.craisinlord.antarchy.content.item.BloodCrystalArmorItem; -import com.craisinlord.antarchy.content.item.BloodCrystalAppleItem; -import com.craisinlord.antarchy.content.item.BloodCrystalKatanaItem; -import com.craisinlord.antarchy.content.item.CritterCageItem; +import com.craisinlord.antarchy.content.item.*; import com.craisinlord.antarchy.fabric.item.DeferredSpawnEggItem; -import com.craisinlord.antarchy.content.item.LucidAnchorBlockItem; -import com.craisinlord.antarchy.content.item.LucidEyeItem; -import com.craisinlord.antarchy.content.item.LucidPearlItem; -import com.craisinlord.antarchy.content.item.PrimordialArmorItem; -import com.craisinlord.antarchy.content.item.WaterCannonItem; import com.craisinlord.antarchy.content.entity.SizeRayProjectileEntity; -import com.craisinlord.antarchy.content.item.BattleAxeItem; -import com.craisinlord.antarchy.content.item.AttitudeAdjusterItem; -import com.craisinlord.antarchy.content.item.BasiliskDaggerItem; -import com.craisinlord.antarchy.content.item.BigBerthaItem; -import com.craisinlord.antarchy.content.item.KrakensGraspItem; -import com.craisinlord.antarchy.content.item.AntimetalBlockItem; -import com.craisinlord.antarchy.content.item.AntimetalScaffoldingItem; -import com.craisinlord.antarchy.content.item.CloudSharkFinSoupItem; -import com.craisinlord.antarchy.content.item.CorneaEarItem; -import com.craisinlord.antarchy.content.item.GravityGunItem; -import com.craisinlord.antarchy.content.item.MantisClawItem; -import com.craisinlord.antarchy.content.item.DuctTapeBlockItem; -import com.craisinlord.antarchy.content.item.BrutalflyElytraItem; -import com.craisinlord.antarchy.content.item.BluestoneDustItem; -import com.craisinlord.antarchy.content.item.CeilingPlacementTooltipBlockItem; -import com.craisinlord.antarchy.content.item.CeilingPlacementTooltipItem; -import com.craisinlord.antarchy.content.item.MobComingSoonTooltipItem; -import com.craisinlord.antarchy.content.item.MogglesItem; import com.craisinlord.antarchy.content.item.ultimate.UltimateAxeItem; import com.craisinlord.antarchy.content.item.ultimate.UltimateHoeItem; import com.craisinlord.antarchy.content.item.ultimate.UltimatePickaxeItem; import com.craisinlord.antarchy.content.item.ultimate.UtlimateShovelItem; import com.craisinlord.antarchy.content.item.ultimate.UltimateSwordItem; -import com.craisinlord.antarchy.content.item.DiamondMinecartItem; -import com.craisinlord.antarchy.content.item.ReverieBottleItem; -import com.craisinlord.antarchy.content.item.ScorpionWhipItem; -import com.craisinlord.antarchy.content.item.SizeRayItem; -import com.craisinlord.antarchy.content.item.SquidzookaItem; -import com.craisinlord.antarchy.content.item.RpoLauncherItem; -import com.craisinlord.antarchy.content.item.SimpleToolTier; import com.craisinlord.antarchy.content.item.ultimate.UltimateArmorItem; import com.craisinlord.antarchy.content.item.ultimate.UltimateBowItem; import com.craisinlord.antarchy.content.item.ultimate.UltimateCrossbowItem; -import com.craisinlord.antarchy.content.item.NightmareArmorItem; -import com.craisinlord.antarchy.content.item.NightmareSwordItem; -import com.craisinlord.antarchy.content.item.OuranwoodBoatOnlyItem; -import com.craisinlord.antarchy.content.item.OuranwoodChestBoatItem; -import com.craisinlord.antarchy.content.item.RainbowSugarItem; import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffects; import net.minecraft.world.item.ArmorItem; import net.minecraft.world.item.BucketItem; +import net.minecraft.world.item.DyeColor; import net.minecraft.world.item.Item; import net.minecraft.world.item.Items; +import net.minecraft.world.item.MobBucketItem; import net.minecraft.world.item.Rarity; import net.minecraft.world.item.StandingAndWallBlockItem; import net.minecraft.world.food.FoodProperties; @@ -66,6 +32,7 @@ import net.minecraft.world.item.Tier; import net.minecraft.world.item.Tiers; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.core.Direction; +import net.minecraft.sounds.SoundEvents; public final class AntarchyFabricItems { @@ -99,9 +66,43 @@ public final class AntarchyFabricItems { () -> Ingredient.of(AntarchyFabricItems.HERCULES_HORN.get()) ); + private static final Tier ROYAL_GUARDIAN_TIER = new SimpleToolTier( + AntarchySettings.royalWeaponDurability(), + 12.0F, + 0.0F, + Tiers.NETHERITE.getLevel(), + AntarchySettings.royalWeaponEnchantability(), + () -> Ingredient.of(AntarchyFabricItems.KING_SCALE.get()) + ); + + private static final Tier ROYAL_ASSAILANT_TIER = new SimpleToolTier( + AntarchySettings.royalWeaponDurability(), + 12.0F, + 0.0F, + Tiers.NETHERITE.getLevel(), + AntarchySettings.royalWeaponEnchantability(), + () -> Ingredient.of(AntarchyFabricItems.QUEEN_SCALE.get()) + ); + public static final DeferredItem NIGHTMARE_SCALE = ITEMS.registerSimpleItem("nightmare_scale", new Item.Properties().rarity(Rarity.RARE).fireResistant()); + public static final DeferredItem MUSIC_DISC_UNDERSIDE = ITEMS.register("music_disc_underside", + () -> new net.minecraft.world.item.RecordItem(13, AntarchyFabricSounds.MUSIC_DISC_UNDERSIDE.get(), + new Item.Properties().stacksTo(1).rarity(Rarity.RARE), 225)); + + public static final DeferredItem MUSIC_DISC_THE_QUEEN = ITEMS.register("music_disc_the_queen", + () -> new net.minecraft.world.item.RecordItem(13, AntarchyFabricSounds.THE_QUEEN.get(), + new Item.Properties().stacksTo(1).rarity(Rarity.RARE), 180)); + + public static final DeferredItem MUSIC_DISC_VERDANCE = ITEMS.register("music_disc_verdance", + () -> new net.minecraft.world.item.RecordItem(13, AntarchyFabricSounds.MUSIC_DISC_VERDANCE.get(), + new Item.Properties().stacksTo(1).rarity(Rarity.RARE), 136)); + + public static final DeferredItem MUSIC_DISC_GROTESQUE = ITEMS.register("music_disc_grotesque", + () -> new net.minecraft.world.item.RecordItem(13, AntarchyFabricSounds.MUSIC_DISC_GROTESQUE.get(), + new Item.Properties().stacksTo(1).rarity(Rarity.RARE), 207)); + public static final DeferredItem PRIMORDIAL_SCUTE = ITEMS.registerSimpleItem("primordial_scute", new Item.Properties().rarity(Rarity.UNCOMMON)); @@ -256,6 +257,7 @@ public final class AntarchyFabricItems { public static final DeferredItem PINK_MILKWEED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.PINK_MILKWEED); + public static final DeferredItem GLIMMERING_REED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.GLIMMERING_REED); public static final DeferredItem CAMELLIA_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CAMELLIA); @@ -269,6 +271,9 @@ public final class AntarchyFabricItems { public static final DeferredItem SEASHELL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SEASHELL); public static final DeferredItem LUCID_ANCHOR_ITEM = ITEMS.register("lucid_anchor", () -> new LucidAnchorBlockItem(AntarchyFabricBlocks.LUCID_ANCHOR.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem UNDERTRIAL_SPAWNER_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.UNDERTRIAL_SPAWNER); + public static final DeferredItem UNDERVAULT_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.UNDERVAULT); + public static final DeferredItem UNDERTRIAL_KEY = ITEMS.register("undertrial_key", () -> new Item(new Item.Properties())); public static final DeferredItem LOTUS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.LOTUS); @@ -288,6 +293,42 @@ public final class AntarchyFabricItems { () -> new OuranwoodChestBoatItem(AntarchyFabricEntities.OURANWOOD_CHEST_BOAT_ENTITY, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD = ITEMS.register("hoverboard", + () -> new HoverboardItem(AntarchyFabricEntities.HOVERBOARD.get(), null, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_WHITE = ITEMS.register("hoverboard_white", + () -> new HoverboardItem(AntarchyFabricEntities.HOVERBOARD.get(), DyeColor.WHITE, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_ORANGE = ITEMS.register("hoverboard_orange", + () -> new HoverboardItem(AntarchyFabricEntities.HOVERBOARD.get(), DyeColor.ORANGE, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_MAGENTA = ITEMS.register("hoverboard_magenta", + () -> new HoverboardItem(AntarchyFabricEntities.HOVERBOARD.get(), DyeColor.MAGENTA, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_LIGHT_BLUE = ITEMS.register("hoverboard_light_blue", + () -> new HoverboardItem(AntarchyFabricEntities.HOVERBOARD.get(), DyeColor.LIGHT_BLUE, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_YELLOW = ITEMS.register("hoverboard_yellow", + () -> new HoverboardItem(AntarchyFabricEntities.HOVERBOARD.get(), DyeColor.YELLOW, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_LIME = ITEMS.register("hoverboard_lime", + () -> new HoverboardItem(AntarchyFabricEntities.HOVERBOARD.get(), DyeColor.LIME, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_PINK = ITEMS.register("hoverboard_pink", + () -> new HoverboardItem(AntarchyFabricEntities.HOVERBOARD.get(), DyeColor.PINK, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_GRAY = ITEMS.register("hoverboard_gray", + () -> new HoverboardItem(AntarchyFabricEntities.HOVERBOARD.get(), DyeColor.GRAY, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_LIGHT_GRAY = ITEMS.register("hoverboard_light_gray", + () -> new HoverboardItem(AntarchyFabricEntities.HOVERBOARD.get(), DyeColor.LIGHT_GRAY, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_CYAN = ITEMS.register("hoverboard_cyan", + () -> new HoverboardItem(AntarchyFabricEntities.HOVERBOARD.get(), DyeColor.CYAN, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_PURPLE = ITEMS.register("hoverboard_purple", + () -> new HoverboardItem(AntarchyFabricEntities.HOVERBOARD.get(), DyeColor.PURPLE, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_BLUE = ITEMS.register("hoverboard_blue", + () -> new HoverboardItem(AntarchyFabricEntities.HOVERBOARD.get(), DyeColor.BLUE, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_BROWN = ITEMS.register("hoverboard_brown", + () -> new HoverboardItem(AntarchyFabricEntities.HOVERBOARD.get(), DyeColor.BROWN, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_GREEN = ITEMS.register("hoverboard_green", + () -> new HoverboardItem(AntarchyFabricEntities.HOVERBOARD.get(), DyeColor.GREEN, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_RED = ITEMS.register("hoverboard_red", + () -> new HoverboardItem(AntarchyFabricEntities.HOVERBOARD.get(), DyeColor.RED, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_BLACK = ITEMS.register("hoverboard_black", + () -> new HoverboardItem(AntarchyFabricEntities.HOVERBOARD.get(), DyeColor.BLACK, new Item.Properties().stacksTo(1))); + + public static final DeferredItem PEACH_SIGN_ITEM = ITEMS.register("peach_sign", () -> new net.minecraft.world.item.SignItem(new Item.Properties().stacksTo(16), AntarchyFabricBlocks.PEACH_SIGN.get(), AntarchyFabricBlocks.PEACH_WALL_SIGN.get())); @@ -320,6 +361,146 @@ public final class AntarchyFabricItems { () -> new com.craisinlord.antarchy.content.item.NadirChestBoatItem(AntarchyFabricEntities.NADIR_CHEST_BOAT_ENTITY, new Item.Properties().stacksTo(1))); + public static final DeferredItem ROYAL_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.ROYAL_LOG); + + + public static final DeferredItem ROYAL_WOOD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.ROYAL_WOOD); + + + public static final DeferredItem STRIPPED_ROYAL_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.STRIPPED_ROYAL_LOG); + + + public static final DeferredItem STRIPPED_ROYAL_WOOD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.STRIPPED_ROYAL_WOOD); + + + public static final DeferredItem ROYAL_PLANKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.ROYAL_PLANKS); + + + public static final DeferredItem ROYAL_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.ROYAL_STAIRS); + + + public static final DeferredItem ROYAL_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.ROYAL_SLAB); + + + public static final DeferredItem ROYAL_FENCE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.ROYAL_FENCE); + + + public static final DeferredItem ROYAL_FENCE_GATE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.ROYAL_FENCE_GATE); + + + public static final DeferredItem ROYAL_DOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.ROYAL_DOOR); + + + public static final DeferredItem ROYAL_TRAPDOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.ROYAL_TRAPDOOR); + + + public static final DeferredItem ROYAL_PRESSURE_PLATE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.ROYAL_PRESSURE_PLATE); + + + public static final DeferredItem ROYAL_BUTTON_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.ROYAL_BUTTON); + + + public static final DeferredItem ROYAL_LEAVES_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.ROYAL_LEAVES); + + + public static final DeferredItem ROYAL_FLOWERING_LEAVES_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.ROYAL_FLOWERING_LEAVES); + + + public static final DeferredItem ROYAL_SAPLING_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.ROYAL_SAPLING); + + + public static final DeferredItem ROYAL_SIGN_ITEM = ITEMS.register("royal_sign", + () -> new net.minecraft.world.item.SignItem(new Item.Properties().stacksTo(16), AntarchyFabricBlocks.ROYAL_SIGN.get(), AntarchyFabricBlocks.ROYAL_WALL_SIGN.get())); + + + public static final DeferredItem ROYAL_HANGING_SIGN_ITEM = ITEMS.register("royal_hanging_sign", + () -> new net.minecraft.world.item.HangingSignItem(AntarchyFabricBlocks.ROYAL_HANGING_SIGN.get(), AntarchyFabricBlocks.ROYAL_WALL_HANGING_SIGN.get(), new Item.Properties().stacksTo(16))); + + + public static final DeferredItem ROYAL_BOAT = ITEMS.register("royal_boat", + () -> new com.craisinlord.antarchy.content.item.RoyalBoatOnlyItem(AntarchyFabricEntities.ROYAL_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); + + + public static final DeferredItem ROYAL_CHEST_BOAT = ITEMS.register("royal_chest_boat", + () -> new com.craisinlord.antarchy.content.item.RoyalChestBoatItem(AntarchyFabricEntities.ROYAL_CHEST_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); + + + public static final DeferredItem TRUFFALO_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_LOG); + + + public static final DeferredItem TRUFFALO_WOOD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_WOOD); + + + public static final DeferredItem STRIPPED_TRUFFALO_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.STRIPPED_TRUFFALO_LOG); + + + public static final DeferredItem STRIPPED_TRUFFALO_WOOD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.STRIPPED_TRUFFALO_WOOD); + + + public static final DeferredItem TRUFFALO_PLANKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_PLANKS); + + + public static final DeferredItem TRUFFALO_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_STAIRS); + + + public static final DeferredItem TRUFFALO_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_SLAB); + + + public static final DeferredItem TRUFFALO_FENCE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_FENCE); + + + public static final DeferredItem TRUFFALO_FENCE_GATE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_FENCE_GATE); + + + public static final DeferredItem TRUFFALO_DOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_DOOR); + + + public static final DeferredItem TRUFFALO_TRAPDOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_TRAPDOOR); + + + public static final DeferredItem TRUFFALO_PRESSURE_PLATE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_PRESSURE_PLATE); + + + public static final DeferredItem TRUFFALO_BUTTON_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_BUTTON); + + + public static final DeferredItem TRUFFALO_SAPLING_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_SAPLING); + + + public static final DeferredItem TRUFFALO_SIGN_ITEM = ITEMS.register("truffalo_sign", + () -> new net.minecraft.world.item.SignItem(new Item.Properties().stacksTo(16), AntarchyFabricBlocks.TRUFFALO_SIGN.get(), AntarchyFabricBlocks.TRUFFALO_WALL_SIGN.get())); + + + public static final DeferredItem TRUFFALO_HANGING_SIGN_ITEM = ITEMS.register("truffalo_hanging_sign", + () -> new net.minecraft.world.item.HangingSignItem(AntarchyFabricBlocks.TRUFFALO_HANGING_SIGN.get(), AntarchyFabricBlocks.TRUFFALO_WALL_HANGING_SIGN.get(), new Item.Properties().stacksTo(16))); + + + public static final DeferredItem TRUFFALO_BOAT = ITEMS.register("truffalo_boat", + () -> new com.craisinlord.antarchy.content.item.TruffaloBoatOnlyItem(AntarchyFabricEntities.TRUFFALO_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); + + + public static final DeferredItem TRUFFALO_CHEST_BOAT = ITEMS.register("truffalo_chest_boat", + () -> new com.craisinlord.antarchy.content.item.TruffaloChestBoatItem(AntarchyFabricEntities.TRUFFALO_CHEST_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); + + + public static final DeferredItem TRUFFALO_TUFT_WHITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_TUFT_WHITE); + public static final DeferredItem TRUFFALO_TUFT_ORANGE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_TUFT_ORANGE); + public static final DeferredItem TRUFFALO_TUFT_MAGENTA_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_TUFT_MAGENTA); + public static final DeferredItem TRUFFALO_TUFT_LIGHT_BLUE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_TUFT_LIGHT_BLUE); + public static final DeferredItem TRUFFALO_TUFT_YELLOW_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_TUFT_YELLOW); + public static final DeferredItem TRUFFALO_TUFT_LIME_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_TUFT_LIME); + public static final DeferredItem TRUFFALO_TUFT_PINK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_TUFT_PINK); + public static final DeferredItem TRUFFALO_TUFT_GRAY_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_TUFT_GRAY); + public static final DeferredItem TRUFFALO_TUFT_LIGHT_GRAY_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_TUFT_LIGHT_GRAY); + public static final DeferredItem TRUFFALO_TUFT_CYAN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_TUFT_CYAN); + public static final DeferredItem TRUFFALO_TUFT_PURPLE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_TUFT_PURPLE); + public static final DeferredItem TRUFFALO_TUFT_BLUE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_TUFT_BLUE); + public static final DeferredItem TRUFFALO_TUFT_BROWN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_TUFT_BROWN); + public static final DeferredItem TRUFFALO_TUFT_GREEN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_TUFT_GREEN); + public static final DeferredItem TRUFFALO_TUFT_RED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_TUFT_RED); + public static final DeferredItem TRUFFALO_TUFT_BLACK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_TUFT_BLACK); + + public static final DeferredItem CRITTER_CAGE = ITEMS.register("critter_cage", () -> new CritterCageItem(new Item.Properties().stacksTo(16))); @@ -336,6 +517,11 @@ public final class AntarchyFabricItems { public static final DeferredItem RAINBOW_ANT_NEST_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.RAINBOW_ANT_NEST); public static final DeferredItem TERMITE_NEST_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TERMITE_NEST); + public static final DeferredItem ANT_TRAP_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.ANT_TRAP); + + public static final DeferredItem BUG_SPRAY = ITEMS.register("bug_spray", + () -> new com.craisinlord.antarchy.content.item.BugSprayItem(new Item.Properties().durability(128))); + public static final DeferredItem URANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.URANIUM_ORE, new Item.Properties().rarity(Rarity.UNCOMMON)); @@ -353,6 +539,8 @@ public final class AntarchyFabricItems { () -> new BluestoneDustItem(AntarchyFabricBlocks.BLUESTONE_WIRE.get(), new Item.Properties())); public static final DeferredItem BLUESTONE_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BLUESTONE_ORE); public static final DeferredItem BLUESTONE_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BLUESTONE_BLOCK); + public static final DeferredItem VORTEX_LENS_ITEM = ITEMS.register("vortex_lens", + () -> new VortexLensBlockItem(AntarchyFabricBlocks.VORTEX_LENS.get(), new Item.Properties())); public static final DeferredItem BLUESTONE_REPEATER_ITEM = ITEMS.register("bluestone_repeater", () -> new CeilingPlacementTooltipBlockItem(AntarchyFabricBlocks.BLUESTONE_REPEATER.get(), new Item.Properties())); public static final DeferredItem BLUESTONE_COMPARATOR_ITEM = ITEMS.register("bluestone_comparator", @@ -362,6 +550,7 @@ public final class AntarchyFabricItems { public static final DeferredItem BLUESTONE_LAMP_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BLUESTONE_LAMP); + public static final DeferredItem TIGERS_EYE_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TIGERS_EYE_BLOCK, new Item.Properties().rarity(Rarity.UNCOMMON)); public static final DeferredItem URANIUM_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.URANIUM_BLOCK, new Item.Properties().rarity(Rarity.UNCOMMON)); @@ -477,6 +666,12 @@ public final class AntarchyFabricItems { public static final DeferredItem DREAM_SAND_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DREAM_SAND); public static final DeferredItem ANTIGRAVEL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.ANTIGRAVEL); public static final DeferredItem LOAM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.LOAM); + public static final DeferredItem PACKED_LOAM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.PACKED_LOAM); + public static final DeferredItem LOAM_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.LOAM_BRICKS); + public static final DeferredItem LOAM_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.LOAM_BRICK_STAIRS); + public static final DeferredItem LOAM_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.LOAM_BRICK_SLAB); + public static final DeferredItem LOAM_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.LOAM_BRICK_WALL); + public static final DeferredItem CHISELED_LOAM_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CHISELED_LOAM_BRICKS); public static final DeferredItem MUCUS_ITEM = ITEMS.register("mucus", () -> new com.craisinlord.antarchy.content.item.MucusBlockItem(AntarchyFabricBlocks.MUCUS.get(), new Item.Properties())); @@ -511,6 +706,32 @@ public final class AntarchyFabricItems { public static final DeferredItem CUT_DREAM_SANDSTONE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CUT_DREAM_SANDSTONE_SLAB); + public static final DeferredItem TYPHONITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TYPHONITE); + public static final DeferredItem NADIR_NYXIUM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NADIR_NYXIUM); + public static final DeferredItem VERDANT_NYXIUM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.VERDANT_NYXIUM); + public static final DeferredItem TYPHONITE_PILLAR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TYPHONITE_PILLAR); + public static final DeferredItem TYPHONITE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TYPHONITE_BRICKS); + public static final DeferredItem CHISELED_TYPHONITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CHISELED_TYPHONITE); + public static final DeferredItem POLISHED_TYPHONITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.POLISHED_TYPHONITE); + public static final DeferredItem VEINED_TYPHONITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.VEINED_TYPHONITE); + public static final DeferredItem TYPHONITE_SPIKE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TYPHONITE_SPIKE); + public static final DeferredItem TYPHONITE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TYPHONITE_STAIRS); + public static final DeferredItem TYPHONITE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TYPHONITE_SLAB); + public static final DeferredItem TYPHONITE_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TYPHONITE_WALL); + public static final DeferredItem TYPHONITE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TYPHONITE_BRICK_STAIRS); + public static final DeferredItem TYPHONITE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TYPHONITE_BRICK_SLAB); + public static final DeferredItem TYPHONITE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TYPHONITE_BRICK_WALL); + public static final DeferredItem POLISHED_TYPHONITE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.POLISHED_TYPHONITE_STAIRS); + public static final DeferredItem POLISHED_TYPHONITE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.POLISHED_TYPHONITE_SLAB); + public static final DeferredItem POLISHED_TYPHONITE_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.POLISHED_TYPHONITE_WALL); + public static final DeferredItem SPIRALING_VINES_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SPIRALING_VINES); + public static final DeferredItem GOREVINE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.GOREVINE); + public static final DeferredItem WHIRLFLOWER_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.WHIRLFLOWER); + public static final DeferredItem NADIR_FERN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NADIR_FERN); + public static final DeferredItem LARGE_NADIR_FERN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.LARGE_NADIR_FERN); + public static final DeferredItem DUSKBELL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DUSKBELL); + public static final DeferredItem NADIR_ROOTS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NADIR_ROOTS); + public static final DeferredItem VERDANT_ROOTS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.VERDANT_ROOTS); public static final DeferredItem DEAD_STAR_CORAL_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DEAD_STAR_CORAL_BLOCK); @@ -543,6 +764,23 @@ public final class AntarchyFabricItems { public static final DeferredItem NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NYXITE); public static final DeferredItem MYRMITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MYRMITE); + public static final DeferredItem MYRMITE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MYRMITE_STAIRS); + public static final DeferredItem MYRMITE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MYRMITE_SLAB); + public static final DeferredItem MYRMITE_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MYRMITE_WALL); + public static final DeferredItem POLISHED_MYRMITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.POLISHED_MYRMITE); + public static final DeferredItem POLISHED_MYRMITE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.POLISHED_MYRMITE_STAIRS); + public static final DeferredItem POLISHED_MYRMITE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.POLISHED_MYRMITE_SLAB); + public static final DeferredItem POLISHED_MYRMITE_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.POLISHED_MYRMITE_WALL); + public static final DeferredItem CHISELED_MYRMITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CHISELED_MYRMITE); + public static final DeferredItem MYRMITE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MYRMITE_BRICKS); + public static final DeferredItem MYRMITE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MYRMITE_BRICK_STAIRS); + public static final DeferredItem MYRMITE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MYRMITE_BRICK_SLAB); + public static final DeferredItem MYRMITE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MYRMITE_BRICK_WALL); + public static final DeferredItem MOSSY_MYRMITE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MOSSY_MYRMITE_BRICKS); + public static final DeferredItem MOSSY_MYRMITE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MOSSY_MYRMITE_BRICK_STAIRS); + public static final DeferredItem MOSSY_MYRMITE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MOSSY_MYRMITE_BRICK_SLAB); + public static final DeferredItem MOSSY_MYRMITE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MOSSY_MYRMITE_BRICK_WALL); + public static final DeferredItem MYRMITE_PILLAR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MYRMITE_PILLAR); public static final DeferredItem BIOMITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BIOMITE); public static final DeferredItem BIOMITE_TURF_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BIOMITE_TURF); public static final DeferredItem BIOWART_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BIOWART); @@ -551,6 +789,7 @@ public final class AntarchyFabricItems { public static final DeferredItem POLISHED_BROODSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.POLISHED_BROODSTONE); public static final DeferredItem CHISELED_BROODSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CHISELED_BROODSTONE); public static final DeferredItem BROODSTONE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BROODSTONE_BRICKS); + public static final DeferredItem MOSSY_BROODSTONE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MOSSY_BROODSTONE_BRICKS); public static final DeferredItem BROODSTONE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BROODSTONE_STAIRS); public static final DeferredItem BROODSTONE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BROODSTONE_SLAB); public static final DeferredItem BROODSTONE_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BROODSTONE_WALL); @@ -560,6 +799,10 @@ public final class AntarchyFabricItems { public static final DeferredItem BROODSTONE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BROODSTONE_BRICK_STAIRS); public static final DeferredItem BROODSTONE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BROODSTONE_BRICK_SLAB); public static final DeferredItem BROODSTONE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BROODSTONE_BRICK_WALL); + public static final DeferredItem MOSSY_BROODSTONE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MOSSY_BROODSTONE_BRICK_STAIRS); + public static final DeferredItem MOSSY_BROODSTONE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MOSSY_BROODSTONE_BRICK_SLAB); + public static final DeferredItem MOSSY_BROODSTONE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MOSSY_BROODSTONE_BRICK_WALL); + public static final DeferredItem BROODSTONE_PILLAR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BROODSTONE_PILLAR); public static final DeferredItem MYRMITE_COAL_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MYRMITE_COAL_ORE); public static final DeferredItem BROODSTONE_URANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BROODSTONE_URANIUM_ORE, new Item.Properties().rarity(Rarity.UNCOMMON)); public static final DeferredItem BROODSTONE_TITANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BROODSTONE_TITANIUM_ORE, new Item.Properties().rarity(Rarity.UNCOMMON)); @@ -572,6 +815,7 @@ public final class AntarchyFabricItems { public static final DeferredItem NYXITE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NYXITE_BRICKS); + public static final DeferredItem MOSSY_NYXITE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MOSSY_NYXITE_BRICKS); public static final DeferredItem CHITIN_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CHITIN_BLOCK); @@ -603,6 +847,10 @@ public final class AntarchyFabricItems { public static final DeferredItem NYXITE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NYXITE_BRICK_WALL); + public static final DeferredItem MOSSY_NYXITE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MOSSY_NYXITE_BRICK_STAIRS); + public static final DeferredItem MOSSY_NYXITE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MOSSY_NYXITE_BRICK_SLAB); + public static final DeferredItem MOSSY_NYXITE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MOSSY_NYXITE_BRICK_WALL); + public static final DeferredItem NYXITE_PILLAR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NYXITE_PILLAR); public static final DeferredItem SHELLSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SHELLSTONE); @@ -657,10 +905,11 @@ public final class AntarchyFabricItems { public static final DeferredItem SHELLSTONE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SHELLSTONE_BRICK_WALL); + public static final DeferredItem SHELLSTONE_PILLAR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SHELLSTONE_PILLAR); - public static final DeferredItem TRIFFID_GOO_BLOCK_ITEM = ITEMS.register("flytrap_goo_block", - () -> new com.craisinlord.antarchy.content.item.TriffidGooBlockItem(AntarchyFabricBlocks.TRIFFID_GOO_BLOCK.get(), new Item.Properties())); + public static final DeferredItem FLYTRAP_GOO_BLOCK_ITEM = ITEMS.register("flytrap_goo_block", + () -> new com.craisinlord.antarchy.content.item.FlytrapGooBlockItem(AntarchyFabricBlocks.FLYTRAP_GOO_BLOCK.get(), new Item.Properties())); public static final DeferredItem PALE_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.PALE_NYXITE); @@ -701,11 +950,15 @@ public final class AntarchyFabricItems { public static final DeferredItem BED_BUG_EGG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BED_BUG_EGG); - public static final DeferredItem CREEPING_HORROR_EGG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CREEPING_HORROR_EGG); - public static final DeferredItem JUMPY_BUG_EGG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.JUMPY_BUG_EGG); + public static final DeferredItem CRAWLING_BLIGHT_EGG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CRAWLING_BLIGHT_EGG); + public static final DeferredItem PRINCE_EGG_ITEM = ITEMS.register("prince_egg", + () -> new net.minecraft.world.item.BlockItem(AntarchyFabricBlocks.PRINCE_EGG.get(), new Item.Properties().rarity(Rarity.EPIC).fireResistant())); + public static final DeferredItem PRINCESS_EGG_ITEM = ITEMS.register("princess_egg", + () -> new net.minecraft.world.item.BlockItem(AntarchyFabricBlocks.PRINCESS_EGG.get(), new Item.Properties().rarity(Rarity.EPIC).fireResistant())); + public static final DeferredItem SPRINGBUG_EGG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SPRINGBUG_EGG); public static final DeferredItem SPIT_BUG_EGG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SPIT_BUG_EGG); public static final DeferredItem JERRY_EGG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.JERRY_EGG); - public static final DeferredItem LURKING_TERROR_EGG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.LURKING_TERROR_EGG); + public static final DeferredItem SKULKING_FRIGHT_EGG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SKULKING_FRIGHT_EGG); public static final DeferredItem WASP_NEST_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.WASP_NEST); @@ -715,9 +968,6 @@ public final class AntarchyFabricItems { public static final DeferredItem HANGING_CREEPROOTS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.HANGING_CREEPROOTS); public static final DeferredItem GLOWCAP_MUSHROOM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.GLOWCAP_MUSHROOM); public static final DeferredItem GLOWCAP_MUSHROOM_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.GLOWCAP_MUSHROOM_BLOCK); - public static final DeferredItem UNDERTRIAL_SPAWNER_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.UNDERTRIAL_SPAWNER); - public static final DeferredItem UNDERVAULT_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.UNDERVAULT); - public static final DeferredItem UNDERTRIAL_KEY = ITEMS.registerSimpleItem("undertrial_key", new Item.Properties()); public static final DeferredItem MOLTING_VINES_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MOLTING_VINES); @@ -804,6 +1054,9 @@ public final class AntarchyFabricItems { AntarchySettings.bloodCrystalKatanaAttackDamage(), -2.2F )); + public static final DeferredItem BLOOD_GODS_BLADE = ITEMS.register("blood_gods_blade", + () -> new BloodGodsBladeItem(ULTIMATE_TIER, + new Item.Properties().stacksTo(1).durability(4096).rarity(Rarity.EPIC).fireResistant(), 24, -2.4F)); public static final DeferredItem MANTIS_CLAW = ITEMS.register("mantis_claw", @@ -811,12 +1064,12 @@ public final class AntarchyFabricItems { public static final DeferredItem HERCULES_HORN = ITEMS.registerSimpleItem("hercules_horn", new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem KING_SCALE = ITEMS.register("king_scale", - () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); + public static final DeferredItem KING_SCALE = ITEMS.registerSimpleItem("king_scale", new Item.Properties().rarity(Rarity.RARE).fireResistant()); - public static final DeferredItem QUEEN_SCALE = ITEMS.register("queen_scale", - () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); + public static final DeferredItem QUEEN_SCALE = ITEMS.registerSimpleItem("queen_scale", new Item.Properties().rarity(Rarity.RARE).fireResistant()); + public static final DeferredItem TEMPORAL_TUNER = ITEMS.register("temporal_tuner", + () -> new com.craisinlord.antarchy.content.item.TemporalTunerItem(new Item.Properties().rarity(Rarity.RARE).fireResistant())); public static final DeferredItem CHITIN = ITEMS.registerSimpleItem("chitin", new Item.Properties().rarity(Rarity.UNCOMMON)); @@ -833,13 +1086,13 @@ public final class AntarchyFabricItems { public static final DeferredItem STINK_BUG_ITEM = ITEMS.registerSimpleItem("stink_bug", new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem JUMPY_BUG_LEG = ITEMS.registerSimpleItem("springbug_leg", new Item.Properties().rarity(Rarity.UNCOMMON)); + public static final DeferredItem SPRINGBUG_LEG = ITEMS.registerSimpleItem("springbug_leg", new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem JUMPY_BOOTS = ITEMS.register("springy_boots", - () -> new com.craisinlord.antarchy.content.item.JumpyBootsItem( - AntarchyFabricMisc.JUMPY_BOOTS_ARMOR_MATERIAL, - new Item.Properties().stacksTo(1).rarity(Rarity.UNCOMMON).fireResistant().durability(AntarchyFabricMisc.JUMPY_BOOTS_ARMOR_MATERIAL.getDurabilityForType(ArmorItem.Type.BOOTS)) + public static final DeferredItem SPRINGY_BOOTS = ITEMS.register("springy_boots", + () -> new com.craisinlord.antarchy.content.item.SpringyBootsItem( + AntarchyFabricMisc.SPRINGY_BOOTS_ARMOR_MATERIAL, + new Item.Properties().stacksTo(1).rarity(Rarity.UNCOMMON).fireResistant().durability(AntarchyFabricMisc.SPRINGY_BOOTS_ARMOR_MATERIAL.getDurabilityForType(ArmorItem.Type.BOOTS)) )); @@ -848,6 +1101,9 @@ public final class AntarchyFabricItems { public static final DeferredItem BRUTALFLY_ELYTRA = ITEMS.register("brutalfly_elytra", () -> new BrutalflyElytraItem(new Item.Properties().rarity(Rarity.UNCOMMON).durability(480))); + public static final DeferredItem MANTICORE_WING = ITEMS.registerSimpleItem("manticore_wing", new Item.Properties().rarity(Rarity.UNCOMMON)); + public static final DeferredItem MANTICORE_WINGS = ITEMS.register("manticore_wings", + () -> new ManticoreWingsItem(new Item.Properties().rarity(Rarity.RARE).durability(480))); public static final DeferredItem CORNEA_EAR = ITEMS.register("cornea_ear", @@ -883,6 +1139,13 @@ public final class AntarchyFabricItems { .nutrition(2) .saturationMod(0.1F) .effect(new MobEffectInstance(MobEffects.DAMAGE_BOOST, 100, 0), 1.0F) + .build()))); + public static final DeferredItem BROODFRUIT_COBBLER = ITEMS.register("broodfruit_cobbler", + () -> new Item(new Item.Properties() + .food(new FoodProperties.Builder() + .nutrition(8) + .saturationMod(0.8F) + .effect(new MobEffectInstance(MobEffects.DAMAGE_BOOST, 20 * 90, 1), 1.0F) .build()))); public static final DeferredItem RAW_BUG_MEAT = ITEMS.register("raw_bug_meat", () -> new Item(new Item.Properties() @@ -977,12 +1240,12 @@ public final class AntarchyFabricItems { .build()))); - public static final DeferredItem TRIFFID_GOO = ITEMS.registerSimpleItem("flytrap_goo", + public static final DeferredItem FLYTRAP_GOO = ITEMS.registerSimpleItem("flytrap_goo", new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem VORTEX_EYE = ITEMS.register("vortex_eye", - () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); + public static final DeferredItem VORTEX_CHARGE = ITEMS.register("vortex_charge", + () -> new VortexChargeItem(new Item.Properties().stacksTo(64).rarity(Rarity.RARE), AntarchyFabricEntities.VORTEX_CHARGE_PROJECTILE)); public static final DeferredItem RAW_URANIUM_SCRAP = ITEMS.registerSimpleItem("raw_uranium_scrap", new Item.Properties().rarity(Rarity.UNCOMMON)); @@ -1034,13 +1297,17 @@ public final class AntarchyFabricItems { .saturationMod(0.0F) .effect(new MobEffectInstance(MobEffects.HUNGER, 600), 0.8F) .build()))); + public static final DeferredItem WORM_TOOTH = ITEMS.register("worm_tooth", + () -> new Item(new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem WORM_HOOK = ITEMS.register("worm_hook", + () -> new WormHookItem(new Item.Properties().stacksTo(1).durability(256).rarity(Rarity.UNCOMMON))); - public static final DeferredItem CLOUD_SHARK_FIN = ITEMS.registerSimpleItem("stratoshark_fin", new Item.Properties().rarity(Rarity.UNCOMMON)); + public static final DeferredItem STRATOSHARK_FIN = ITEMS.registerSimpleItem("stratoshark_fin", new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem CLOUD_SHARK_FIN_SOUP = ITEMS.register("stratoshark_fin_soup", - () -> new CloudSharkFinSoupItem(new Item.Properties() + public static final DeferredItem STRATOSHARK_FIN_SOUP = ITEMS.register("stratoshark_fin_soup", + () -> new StratosharkFinSoupItem(new Item.Properties() .stacksTo(1) .craftRemainder(Items.BOWL) .food(new FoodProperties.Builder() @@ -1229,6 +1496,47 @@ public final class AntarchyFabricItems { )); + public static final DeferredItem ROYAL_GUARDIAN_HELMET = ITEMS.register("royal_guardian_helmet", + () -> new RoyalGuardianArmorItem(AntarchyFabricMisc.ROYAL_GUARDIAN_ARMOR_MATERIAL, ArmorItem.Type.HELMET, + new Item.Properties().rarity(Rarity.EPIC).fireResistant())); + public static final DeferredItem ROYAL_GUARDIAN_CHESTPLATE = ITEMS.register("royal_guardian_chestplate", + () -> new RoyalGuardianArmorItem(AntarchyFabricMisc.ROYAL_GUARDIAN_ARMOR_MATERIAL, ArmorItem.Type.CHESTPLATE, + new Item.Properties().rarity(Rarity.EPIC).fireResistant())); + public static final DeferredItem ROYAL_GUARDIAN_LEGGINGS = ITEMS.register("royal_guardian_leggings", + () -> new RoyalGuardianArmorItem(AntarchyFabricMisc.ROYAL_GUARDIAN_ARMOR_MATERIAL, ArmorItem.Type.LEGGINGS, + new Item.Properties().rarity(Rarity.EPIC).fireResistant())); + public static final DeferredItem ROYAL_GUARDIAN_BOOTS = ITEMS.register("royal_guardian_boots", + () -> new RoyalGuardianArmorItem(AntarchyFabricMisc.ROYAL_GUARDIAN_ARMOR_MATERIAL, ArmorItem.Type.BOOTS, + new Item.Properties().rarity(Rarity.EPIC).fireResistant())); + + public static final DeferredItem ROYAL_ASSAILANT_HELMET = ITEMS.register("royal_assailant_helmet", + () -> new RoyalAssailantArmorItem(AntarchyFabricMisc.ROYAL_ASSAILANT_ARMOR_MATERIAL, ArmorItem.Type.HELMET, + new Item.Properties().rarity(Rarity.EPIC).fireResistant())); + public static final DeferredItem ROYAL_ASSAILANT_CHESTPLATE = ITEMS.register("royal_assailant_chestplate", + () -> new RoyalAssailantArmorItem(AntarchyFabricMisc.ROYAL_ASSAILANT_ARMOR_MATERIAL, ArmorItem.Type.CHESTPLATE, + new Item.Properties().rarity(Rarity.EPIC).fireResistant())); + public static final DeferredItem ROYAL_ASSAILANT_LEGGINGS = ITEMS.register("royal_assailant_leggings", + () -> new RoyalAssailantArmorItem(AntarchyFabricMisc.ROYAL_ASSAILANT_ARMOR_MATERIAL, ArmorItem.Type.LEGGINGS, + new Item.Properties().rarity(Rarity.EPIC).fireResistant())); + public static final DeferredItem ROYAL_ASSAILANT_BOOTS = ITEMS.register("royal_assailant_boots", + () -> new RoyalAssailantArmorItem(AntarchyFabricMisc.ROYAL_ASSAILANT_ARMOR_MATERIAL, ArmorItem.Type.BOOTS, + new Item.Properties().rarity(Rarity.EPIC).fireResistant())); + + public static final DeferredItem ROYAL_GUARDIAN_SWORD = ITEMS.register("royal_guardian_sword", + () -> new RoyalGuardianSwordItem(ROYAL_GUARDIAN_TIER, + new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant())); + public static final DeferredItem GIANT_FRYING_PAN = ITEMS.register("giant_frying_pan", + () -> new GiantFryingPanItem(ROYAL_GUARDIAN_TIER, + new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant())); + public static final DeferredItem ROYAL_ASSAILANT_BATTLEAXE = ITEMS.register("royal_assailant_battleaxe", + () -> new RoyalAssailantBattleAxeItem(ROYAL_ASSAILANT_TIER, + new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant())); + public static final DeferredItem ROYAL_GUARDIAN_SHIELD = ITEMS.register("royal_guardian_shield", + () -> new RoyalGuardianShieldItem( + new Item.Properties().durability(AntarchySettings.royalGuardianShieldDurability()).rarity(Rarity.EPIC).fireResistant(), + () -> Ingredient.of(AntarchyFabricItems.KING_SCALE.get()))); + + public static final DeferredItem SHRINK_RAY = ITEMS.register("shrink_ray", () -> new SizeRayItem( new Item.Properties().stacksTo(1).durability(512).rarity(Rarity.RARE).fireResistant(), @@ -1256,6 +1564,55 @@ public final class AntarchyFabricItems { public static final DeferredItem GRAVITY_GUN = ITEMS.register("gravity_gun", () -> new GravityGunItem(new Item.Properties().stacksTo(1).durability(512).rarity(Rarity.RARE).fireResistant())); + public static final DeferredItem PORTAL_GUN = ITEMS.register("portal_gun", + () -> new PortalGunItem( + new Item.Properties().stacksTo(1).durability(256).rarity(Rarity.RARE), + AntarchyFabricEntities.PORTAL_GUN_PORTAL, + AntarchyFabricEntities.PORTAL_GUN_PROJECTILE, + AntarchyFabricBlocks.PORTAL_GUN_PORTAL_MASTER, + AntarchyFabricBlocks.PORTAL_GUN_PORTAL_BASE, + com.craisinlord.antarchy.content.portalgun.PortalGunVariant.DEFAULT + )); + public static final DeferredItem PORTAL_GUN_ATLAS = ITEMS.register("portal_gun_atlas", + () -> new PortalGunItem( + new Item.Properties().stacksTo(1).durability(256).rarity(Rarity.RARE), + AntarchyFabricEntities.PORTAL_GUN_PORTAL, + AntarchyFabricEntities.PORTAL_GUN_PROJECTILE, + AntarchyFabricBlocks.PORTAL_GUN_PORTAL_MASTER, + AntarchyFabricBlocks.PORTAL_GUN_PORTAL_BASE, + com.craisinlord.antarchy.content.portalgun.PortalGunVariant.ATLAS + )); + public static final DeferredItem PORTAL_GUN_P_BODY = ITEMS.register("portal_gun_p_body", + () -> new PortalGunItem( + new Item.Properties().stacksTo(1).durability(256).rarity(Rarity.RARE), + AntarchyFabricEntities.PORTAL_GUN_PORTAL, + AntarchyFabricEntities.PORTAL_GUN_PROJECTILE, + AntarchyFabricBlocks.PORTAL_GUN_PORTAL_MASTER, + AntarchyFabricBlocks.PORTAL_GUN_PORTAL_BASE, + com.craisinlord.antarchy.content.portalgun.PortalGunVariant.P_BODY + )); + public static final DeferredItem PORTAL_GUN_CRAISIN = ITEMS.register("portal_gun_craisin", + () -> new PortalGunItem( + new Item.Properties().stacksTo(1).durability(256).rarity(Rarity.RARE), + AntarchyFabricEntities.PORTAL_GUN_PORTAL, + AntarchyFabricEntities.PORTAL_GUN_PROJECTILE, + AntarchyFabricBlocks.PORTAL_GUN_PORTAL_MASTER, + AntarchyFabricBlocks.PORTAL_GUN_PORTAL_BASE, + com.craisinlord.antarchy.content.portalgun.PortalGunVariant.CRAISIN + )); + public static final DeferredItem PORTAL_GUN_LAYNCE = ITEMS.register("portal_gun_laynce", + () -> new PortalGunItem( + new Item.Properties().stacksTo(1).durability(256).rarity(Rarity.RARE), + AntarchyFabricEntities.PORTAL_GUN_PORTAL, + AntarchyFabricEntities.PORTAL_GUN_PROJECTILE, + AntarchyFabricBlocks.PORTAL_GUN_PORTAL_MASTER, + AntarchyFabricBlocks.PORTAL_GUN_PORTAL_BASE, + com.craisinlord.antarchy.content.portalgun.PortalGunVariant.LAYNCE + )); + + public static final DeferredItem EYE_OF_THE_STORM = ITEMS.register("eye_of_the_storm", + () -> new EyeOfTheStormItem(new Item.Properties().stacksTo(1).durability(384).rarity(Rarity.EPIC))); + @@ -1363,6 +1720,18 @@ public final class AntarchyFabricItems { public static final DeferredItem BRUTALFLY_SPAWN_EGG = ITEMS.register("brutalfly_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyFabricEntities.BRUTALFLY, 0x4A2214, 0xFF8A1D, new Item.Properties().rarity(Rarity.EPIC))); + public static final DeferredItem KING_SPAWN_EGG = ITEMS.register("king_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.KING, 0xFFFFFF, 0xD4AF37, new Item.Properties().rarity(Rarity.EPIC).fireResistant())); + + public static final DeferredItem QUEEN_SPAWN_EGG = ITEMS.register("queen_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.QUEEN, 0x080608, 0xB11226, new Item.Properties().rarity(Rarity.EPIC).fireResistant())); + + public static final DeferredItem PRINCE_SPAWN_EGG = ITEMS.register("prince_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.PRINCE, 0xFFFFFF, 0xD4AF37, new Item.Properties().rarity(Rarity.EPIC).fireResistant())); + + public static final DeferredItem PRINCESS_SPAWN_EGG = ITEMS.register("princess_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.PRINCESS, 0x3B0A45, 0xB11226, new Item.Properties().rarity(Rarity.EPIC).fireResistant())); + public static final DeferredItem RED_ANT_SPAWN_EGG = ITEMS.register("red_ant_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyFabricEntities.RED_ANT, 0xA31818, 0x2B0909, new Item.Properties())); @@ -1382,6 +1751,8 @@ public final class AntarchyFabricItems { public static final DeferredItem MOLEWORM_SPAWN_EGG = ITEMS.register("moleworm_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyFabricEntities.MOLEWORM, 0xB8B8B8, 0x8A623A, new Item.Properties())); + public static final DeferredItem WORM_SPAWN_EGG = ITEMS.register("worm_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.WORM, 0x7A5742, 0xE4D2A6, new Item.Properties())); public static final DeferredItem MANTIS_SPAWN_EGG = ITEMS.register("mantis_spawn_egg", @@ -1400,8 +1771,8 @@ public final class AntarchyFabricItems { () -> new DeferredSpawnEggItem(AntarchyFabricEntities.MOLEVORE, 0x4A4A4A, 0x6B4A2B, new Item.Properties().rarity(Rarity.UNCOMMON))); - public static final DeferredItem TRIFFID_SPAWN_EGG = ITEMS.register("flytrap_spawn_egg", - () -> new DeferredSpawnEggItem(AntarchyFabricEntities.TRIFFID, 0x4C8F3A, 0xFF2FB3, new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem FLYTRAP_SPAWN_EGG = ITEMS.register("flytrap_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.FLYTRAP, 0x4C8F3A, 0xFF2FB3, new Item.Properties().rarity(Rarity.UNCOMMON))); public static final DeferredItem APPLE_COW_SPAWN_EGG = ITEMS.register("apple_cow_spawn_egg", @@ -1428,8 +1799,8 @@ public final class AntarchyFabricItems { () -> new DeferredSpawnEggItem(AntarchyFabricEntities.BOMBER, 0x7A7A7A, 0xB32020, new Item.Properties())); - public static final DeferredItem JUMPY_BUG_SPAWN_EGG = ITEMS.register("springbug_spawn_egg", - () -> new DeferredSpawnEggItem(AntarchyFabricEntities.JUMPY_BUG, 0x0A1636, 0x8A3E00, new Item.Properties())); + public static final DeferredItem SPRINGBUG_SPAWN_EGG = ITEMS.register("springbug_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.SPRINGBUG, 0x0A1636, 0x8A3E00, new Item.Properties())); public static final DeferredItem SPIT_BUG_SPAWN_EGG = ITEMS.register("spit_bug_spawn_egg", @@ -1440,8 +1811,8 @@ public final class AntarchyFabricItems { () -> new DeferredSpawnEggItem(AntarchyFabricEntities.STINK_BUG, 0x111111, 0xFF7A00, new Item.Properties())); - public static final DeferredItem CLOUD_SHARK_SPAWN_EGG = ITEMS.register("stratoshark_spawn_egg", - () -> new DeferredSpawnEggItem(AntarchyFabricEntities.CLOUD_SHARK, 0xDDEAF4, 0x7F96A8, new Item.Properties())); + public static final DeferredItem STRATOSHARK_SPAWN_EGG = ITEMS.register("stratoshark_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.STRATOSHARK, 0xDDEAF4, 0x7F96A8, new Item.Properties())); public static final DeferredItem KRAKEN_SPAWN_EGG = ITEMS.register("kraken_spawn_egg", @@ -1467,6 +1838,9 @@ public final class AntarchyFabricItems { public static final DeferredItem LUCID_SPAWN_EGG = ITEMS.register("lucid_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyFabricEntities.LUCID, 0xE53935, 0xF4D03F, new Item.Properties().rarity(Rarity.RARE))); + public static final DeferredItem VORTEX_SPAWN_EGG = ITEMS.register("vortex_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.VORTEX, 0x36FF6A, 0x0A5C2A, new Item.Properties().rarity(Rarity.RARE))); + public static final DeferredItem SCORPION_SPAWN_EGG = ITEMS.register("scorpion_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyFabricEntities.SCORPION, 0xA8D8FF, 0xE04B5A, new Item.Properties())); @@ -1489,6 +1863,8 @@ public final class AntarchyFabricItems { new Item.Properties().stacksTo(16).rarity(Rarity.UNCOMMON), AntarchyFabricEntities.LUCID_PEARL_PROJECTILE )); + public static final DeferredItem ROYAL_ASSAILANT_STAFF = ITEMS.register("royal_assailant_staff", + () -> new RoyalAssailantStaffItem(new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant())); public static final DeferredItem WATER_CANNON = ITEMS.register("water_cannon", @@ -1515,12 +1891,15 @@ public final class AntarchyFabricItems { new Item.Properties().stacksTo(1).rarity(Rarity.RARE).fireResistant().durability(AntarchyFabricMisc.PRIMORDIAL_ARMOR_MATERIAL.getDurabilityForType(ArmorItem.Type.BOOTS)))); - public static final DeferredItem CREEPING_HORROR_SPAWN_EGG = ITEMS.register("crawling_blight_spawn_egg", - () -> new DeferredSpawnEggItem(AntarchyFabricEntities.CREEPING_HORROR, 0x6B3A1F, 0x6B0000, new Item.Properties())); + public static final DeferredItem CRAWLING_BLIGHT_SPAWN_EGG = ITEMS.register("crawling_blight_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.CRAWLING_BLIGHT, 0x6B3A1F, 0x6B0000, new Item.Properties())); - public static final DeferredItem LURKING_TERROR_SPAWN_EGG = ITEMS.register("skulking_fright_spawn_egg", - () -> new DeferredSpawnEggItem(AntarchyFabricEntities.LURKING_TERROR, 0x2D5A1B, 0x8B0000, new Item.Properties())); + public static final DeferredItem SKULKING_FRIGHT_SPAWN_EGG = ITEMS.register("skulking_fright_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.SKULKING_FRIGHT, 0x2D5A1B, 0x8B0000, new Item.Properties())); + + public static final DeferredItem MANTICORE_SPAWN_EGG = ITEMS.register("manticore_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.MANTICORE, 0xA3AEE9, 0x956570, new Item.Properties())); public static final DeferredItem HERCULES_BEETLE_SPAWN_EGG = ITEMS.register("hercules_beetle_spawn_egg", @@ -1542,6 +1921,14 @@ public final class AntarchyFabricItems { .nutrition(2) .saturationMod(0.1F) .build()))); + public static final DeferredItem COOKED_CHEEP = ITEMS.register("cooked_cheep", + () -> new Item(new Item.Properties() + .food(new net.minecraft.world.food.FoodProperties.Builder() + .nutrition(5) + .saturationMod(0.6F) + .build()))); + public static final DeferredItem CHEEP_BUCKET = ITEMS.register("cheep_bucket", + () -> new MobBucketItem(AntarchyFabricEntities.CHEEP.get(), net.minecraft.world.level.material.Fluids.WATER, SoundEvents.BUCKET_EMPTY_FISH, new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); public static final DeferredItem DORRIE_SPAWN_EGG = ITEMS.register("dorrie_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyFabricEntities.DORRIE, 0x6F8CFF, 0xD2F2FF, new Item.Properties())); diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java index 3e773d1b..f81965da 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java @@ -1,10 +1,9 @@ package com.craisinlord.antarchy.fabric.registry; +import com.craisinlord.anthology.effect.AnthologyEffects; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.recipe.AmericanizeRecipe; -import com.craisinlord.antarchy.content.enchantment.ChronosphereEnchantment; -import com.craisinlord.antarchy.content.enchantment.FeatherRisingEnchantment; import com.craisinlord.antarchy.content.worldgen.ants.BrownAntNestFeature; import com.craisinlord.antarchy.content.worldgen.ants.RainbowAntNestFeature; import com.craisinlord.antarchy.content.worldgen.ants.RedAntNestFeature; @@ -20,21 +19,23 @@ import com.craisinlord.antarchy.content.worldgen.overworld.CornPatchFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.NyxiteSpikeConfiguration; import com.craisinlord.antarchy.content.worldgen.thoraxis.AntiwaterSpringsConfiguration; import com.craisinlord.antarchy.content.worldgen.thoraxis.AntiwaterSpringsFeature; -import com.craisinlord.antarchy.content.worldgen.thoraxis.DimensionalTearFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.NyxiteSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.TyphoniteSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.TyphoniteSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.TyphoniteSwirlFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.PotentNyxiteFeature; -import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisTransitionThroatFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.QueenHavocTrailFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisIchorLakeFeature; import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterFluid; import com.craisinlord.antarchy.content.effect.DreadMobEffect; +import com.craisinlord.antarchy.content.effect.BleedingMobEffect; +import com.craisinlord.antarchy.content.effect.BloodMoonMobEffect; import com.craisinlord.antarchy.content.effect.GoopedMobEffect; import com.craisinlord.antarchy.content.effect.GrowthMobEffect; -import com.craisinlord.antarchy.content.effect.InvertedMobEffect; +import com.craisinlord.antarchy.content.effect.CommandedMobEffect; import com.craisinlord.antarchy.content.effect.ParalyzedMobEffect; import com.craisinlord.antarchy.content.effect.ShrinkMobEffect; import com.craisinlord.antarchy.content.effect.StinkyMobEffect; -import com.craisinlord.antarchy.content.effect.DilatedMobEffect; -import com.craisinlord.antarchy.content.effect.ContractedMobEffect; import com.craisinlord.antarchy.content.worldgen.elythia.CoralSpikeFeature; import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaBiomeSource; import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaRiverCarveFunction; @@ -62,23 +63,30 @@ import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeConfigurat import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeFeature; import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeConfiguration; import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeFeature; -import com.craisinlord.antarchy.content.worldgen.elythia.TriffidPatchFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.FlytrapPatchFeature; import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynEggPatchFeature; import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitinSpikeConfiguration; import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitinSpikeFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugNestFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugSurfaceClusterFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.DimensionalTearFeature; import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaCloudFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.LucidAntiwaterPoolFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.NadirTreeConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.NadirTreeFeature; +import com.craisinlord.antarchy.content.worldgen.truffalo.TruffaloTreeConfiguration; +import com.craisinlord.antarchy.content.worldgen.truffalo.TruffaloTreeFeature; +import com.craisinlord.antarchy.content.worldgen.royal.RoyalTreeConfiguration; +import com.craisinlord.antarchy.content.worldgen.royal.RoyalTreeFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBiomeSource; import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneConfiguration; import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisFissureConfiguration; import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisFissureFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisTransitionThroatFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBloodCrystalConfiguration; import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBloodCrystalFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisAntiwaterPoolConfiguration; -import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisAntiwaterPoolFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisRibColumnsConfiguration; import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisRibColumnsFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeConfiguration; @@ -88,22 +96,24 @@ import com.craisinlord.antarchy.content.client.particle.InvertedGeyserParticleOp import java.util.List; -import com.mojang.serialization.MapCodec; -import net.minecraft.advancements.critereon.EntitySubPredicate; import net.minecraft.core.Holder; import net.minecraft.core.registries.Registries; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvents; import net.minecraft.world.item.alchemy.Potion; +import net.minecraft.world.effect.MobEffect; import net.minecraft.world.item.enchantment.Enchantment; import net.minecraft.world.entity.EquipmentSlot; -import net.minecraft.world.effect.MobEffect; +import com.craisinlord.antarchy.content.enchantment.ChronosphereEnchantment; +import com.craisinlord.antarchy.content.enchantment.FeatherRisingEnchantment; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffects; import net.minecraft.tags.TagKey; import net.minecraft.world.damagesource.DamageType; import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.village.poi.PoiType; +import net.minecraft.world.entity.npc.VillagerProfession; import net.minecraft.world.item.ArmorItem; import net.minecraft.world.item.ArmorMaterial; import net.minecraft.world.item.Items; @@ -121,6 +131,26 @@ import com.craisinlord.antarchy.fabric.AntarchyFabricContent; public final class AntarchyFabricMisc { + public static final DeferredRegister POI_TYPES = DeferredRegister.create(Registries.POINT_OF_INTEREST_TYPE, Antarchy.MODID); + + public static final DeferredRegister VILLAGER_PROFESSIONS = DeferredRegister.create(Registries.VILLAGER_PROFESSION, Antarchy.MODID); + + public static final DeferredHolder PEST_CONTROL_POI = POI_TYPES.register("pest_control", + () -> new PoiType(java.util.Set.copyOf(AntarchyFabricBlocks.ANT_TRAP.get().getStateDefinition().getPossibleStates()), 1, 1)); + + public static final DeferredHolder ELYTHIA_PORTAL_POI = POI_TYPES.register("elythia_portal", + () -> new PoiType(java.util.Set.copyOf(AntarchyFabricBlocks.ELYTHIA_PORTAL.get().getStateDefinition().getPossibleStates()), 0, 1)); + + public static final DeferredHolder THORAXIS_PORTAL_POI = POI_TYPES.register("thoraxis_portal", + () -> new PoiType(java.util.Set.copyOf(AntarchyFabricBlocks.THORAXIS_PORTAL.get().getStateDefinition().getPossibleStates()), 0, 1)); + + public static final DeferredHolder CAVARYN_PORTAL_POI = POI_TYPES.register("cavaryn_portal", + () -> new PoiType(java.util.Set.copyOf(AntarchyFabricBlocks.CAVARYN_PORTAL.get().getStateDefinition().getPossibleStates()), 0, 1)); + + public static final DeferredHolder PEST_CONTROL = VILLAGER_PROFESSIONS.register("pest_control", + () -> new VillagerProfession("pest_control", holder -> holder.value() == PEST_CONTROL_POI.get(), + holder -> holder.value() == PEST_CONTROL_POI.get(), com.google.common.collect.ImmutableSet.of(), com.google.common.collect.ImmutableSet.of(), SoundEvents.VILLAGER_WORK_FLETCHER)); + private static final java.util.Map BASE_DURABILITY = java.util.Map.of( ArmorItem.Type.BOOTS, 13, ArmorItem.Type.LEGGINGS, 15, @@ -132,7 +162,7 @@ public final class AntarchyFabricMisc { int durabilityMultiplier, java.util.Map defense, int enchantmentValue, - net.minecraft.sounds.SoundEvent equipSound, + java.util.function.Supplier equipSound, java.util.function.Supplier repairIngredient, float toughness, float knockbackResistance, @@ -156,7 +186,7 @@ public final class AntarchyFabricMisc { @Override public net.minecraft.sounds.SoundEvent getEquipSound() { - return equipSound; + return equipSound.get(); } @Override @@ -201,9 +231,9 @@ public final class AntarchyFabricMisc { TagKey.create(net.minecraft.core.registries.Registries.DAMAGE_TYPE, new ResourceLocation("antarchy", "bypasses_bloodglass")); - public static final DeferredHolder SCALE = ATTRIBUTES.register( - "scale", - () -> new net.minecraft.world.entity.ai.attributes.RangedAttribute("attribute.antarchy.scale", 1.0, 0.0625, 16.0).setSyncable(true) + public static final DeferredHolder ENTITY_INTERACTION_RANGE = ATTRIBUTES.register( + "entity_interaction_range", + () -> new net.minecraft.world.entity.ai.attributes.RangedAttribute("attribute.antarchy.entity_interaction_range", 3.0, 0.0, 64.0).setSyncable(true) ); @@ -225,9 +255,9 @@ public final class AntarchyFabricMisc { public static final DeferredRegister> MENUS = DeferredRegister.create(Registries.MENU, Antarchy.MODID); public static final DeferredRegister ENCHANTMENTS = DeferredRegister.create(Registries.ENCHANTMENT, Antarchy.MODID); public static final DeferredHolder FEATHER_RISING = ENCHANTMENTS.register("feather_rising", - () -> new FeatherRisingEnchantment(Enchantment.Rarity.RARE, EquipmentSlot.FEET)); + () -> new FeatherRisingEnchantment()); public static final DeferredHolder CHRONOSPHERE = ENCHANTMENTS.register("chronosphere", - () -> new ChronosphereEnchantment(Enchantment.Rarity.RARE, EquipmentSlot.CHEST)); + () -> new ChronosphereEnchantment()); public static final DeferredRegister FROG_VARIANTS = DeferredRegister.create(Registries.FROG_VARIANT, Antarchy.MODID); @@ -241,6 +271,10 @@ public final class AntarchyFabricMisc { public static final DeferredHolder, net.minecraft.world.inventory.MenuType> DORRIE_INVENTORY_MENU = MENUS.register("dorrie_inventory", () -> new net.minecraft.world.inventory.MenuType<>(com.craisinlord.antarchy.content.menu.DorrieInventoryMenu::new, FeatureFlags.DEFAULT_FLAGS)); + public static final DeferredHolder, net.minecraft.world.inventory.MenuType> ROYAL_JUDGMENT_MENU = + MENUS.register("royal_judgment", () -> new net.minecraft.world.inventory.MenuType<>(com.craisinlord.antarchy.content.menu.RoyalJudgmentMenu::new, FeatureFlags.DEFAULT_FLAGS)); + public static final DeferredHolder, net.minecraft.world.inventory.MenuType> GIANT_FRYING_PAN_MENU = + MENUS.register("giant_frying_pan", () -> new net.minecraft.world.inventory.MenuType<>(com.craisinlord.antarchy.content.menu.GiantFryingPanMenu::new, FeatureFlags.DEFAULT_FLAGS)); public static final DeferredRegister> RECIPE_SERIALIZERS = @@ -249,47 +283,57 @@ public final class AntarchyFabricMisc { public static final DeferredHolder, net.minecraft.world.item.crafting.RecipeSerializer> AMERICANIZE_SERIALIZER = RECIPE_SERIALIZERS.register("americanize", () -> AmericanizeRecipe.SERIALIZER); + public static final DeferredHolder, net.minecraft.world.item.crafting.RecipeSerializer> PORTAL_GUN_VARIANT_SERIALIZER = + RECIPE_SERIALIZERS.register("portal_gun_variant", () -> com.craisinlord.antarchy.content.recipe.PortalGunVariantRecipe.SERIALIZER); public static final ArmorMaterial ULTIMATE_ARMOR_MATERIAL = armorMaterial( - 40, createUltimateArmorDefense(), 10, SoundEvents.ARMOR_EQUIP_DIAMOND, - AntarchyFabricItems::ultimateRepairIngredient, 2.0F, - (float) AntarchySettings.ultimateArmorKnockbackResistance(), "ultimate_armor"); + 62, createUltimateArmorDefense(), 10, () -> SoundEvents.ARMOR_EQUIP_DIAMOND, + AntarchyFabricItems::ultimateRepairIngredient, 2.0F, (float) AntarchySettings.ultimateArmorKnockbackResistance(), "ultimate_armor"); public static final ArmorMaterial NIGHTMARE_ARMOR_MATERIAL = armorMaterial( - 37, createNightmareArmorDefense(), 10, SoundEvents.ARMOR_EQUIP_NETHERITE, - () -> Ingredient.of(AntarchyFabricItems.NIGHTMARE_SCALE.get()), 3.0F, - (float) AntarchySettings.nightmareArmorKnockbackResistance(), "nightmare_armor"); + 41, createNightmareArmorDefense(), 10, () -> SoundEvents.ARMOR_EQUIP_NETHERITE, + () -> Ingredient.of(AntarchyFabricItems.NIGHTMARE_SCALE.get()), 3.0F, (float) AntarchySettings.nightmareArmorKnockbackResistance(), "nightmare_armor"); public static final ArmorMaterial PRIMORDIAL_ARMOR_MATERIAL = armorMaterial( - 33, createPrimordialArmorDefense(), 15, SoundEvents.ARMOR_EQUIP_NETHERITE, - () -> Ingredient.of(AntarchyFabricItems.PRIMORDIAL_SCUTE.get()), 3.0F, 0.1F, "primordial"); + 37, createPrimordialArmorDefense(), 15, () -> SoundEvents.ARMOR_EQUIP_NETHERITE, + () -> Ingredient.of(AntarchyFabricItems.PRIMORDIAL_SCUTE.get()), 3.5F, 0.1F, "primordial"); public static final ArmorMaterial BLOOD_CRYSTAL_ARMOR_MATERIAL = armorMaterial( - 33, createBloodCrystalArmorDefense(), 30, SoundEvents.ARMOR_EQUIP_DIAMOND, + 33, createBloodCrystalArmorDefense(), 30, AntarchyFabricSounds.BLOOD_CRYSTAL_ARMOR_EQUIP, AntarchyFabricItems::bloodCrystalRepairIngredient, 0.0F, 0.0F, "blood_crystal"); + public static final ArmorMaterial TIGERS_EYE_ARMOR_MATERIAL = armorMaterial( + 18, createDiamondArmorDefense(), 18, () -> SoundEvents.ARMOR_EQUIP_GOLD, + () -> Ingredient.of(AntarchyFabricItems.TIGERS_EYE.get()), 2.0F, 0.0F, "tigers_eye"); public static final ArmorMaterial MOGGLES_ARMOR_MATERIAL = armorMaterial( - 25, createMogglesArmorDefense(), 12, SoundEvents.ARMOR_EQUIP_GOLD, + 0, createMogglesArmorDefense(), 12, () -> SoundEvents.ARMOR_EQUIP_GOLD, () -> Ingredient.of(Items.GOLD_INGOT), 0.0F, 0.0F, "moggles"); public static final ArmorMaterial FALLEN_KING_CROWN_ARMOR_MATERIAL = armorMaterial( - 25, createFallenKingCrownDefense(), 25, SoundEvents.ARMOR_EQUIP_GOLD, + 7, createFallenKingCrownDefense(), 25, () -> SoundEvents.ARMOR_EQUIP_GOLD, () -> Ingredient.of(Items.GOLD_INGOT), 0.0F, 0.0F, "fallen_king_crown"); - public static final ArmorMaterial TIGERS_EYE_ARMOR_MATERIAL = armorMaterial( - 18, createDiamondArmorDefense(), 18, SoundEvents.ARMOR_EQUIP_GOLD, - () -> Ingredient.of(AntarchyFabricItems.TIGERS_EYE.get()), 2.0F, 0.0F, "tigers_eye"); + public static final ArmorMaterial ROYAL_GUARDIAN_ARMOR_MATERIAL = armorMaterial( + 37, new java.util.EnumMap<>(ArmorItem.Type.class), AntarchySettings.royalArmorEnchantability(), () -> SoundEvents.ARMOR_EQUIP_NETHERITE, + () -> Ingredient.of(AntarchyFabricItems.KING_SCALE.get()), 0.0F, 0.0F, "royal_guardian"); + + + public static final ArmorMaterial ROYAL_ASSAILANT_ARMOR_MATERIAL = armorMaterial( + 37, new java.util.EnumMap<>(ArmorItem.Type.class), AntarchySettings.royalArmorEnchantability(), () -> SoundEvents.ARMOR_EQUIP_NETHERITE, + () -> Ingredient.of(AntarchyFabricItems.QUEEN_SCALE.get()), 0.0F, 0.0F, "royal_assailant"); public static final DeferredHolder, SimpleParticleType> DREAM_FIRE_FLAME = PARTICLE_TYPES.register("dream_fire_flame", () -> simpleParticleType()); + public static final DeferredHolder, SimpleParticleType> BUG_SPRAY_PARTICLE = PARTICLE_TYPES.register("bug_spray", + () -> simpleParticleType()); public static final DeferredHolder, SimpleParticleType> NIGHTMARE_FIRE_FLAME = PARTICLE_TYPES.register("nightmare_fire_flame", () -> simpleParticleType()); @@ -343,7 +387,6 @@ public final class AntarchyFabricMisc { public static final DeferredHolder, SimpleParticleType> UNDERVAULT_CONNECTION = PARTICLE_TYPES.register("undervault_connection", () -> simpleParticleType()); - public static final DeferredHolder, ParticleType> INVERTED_GEYSER_BASE = PARTICLE_TYPES.register("inverted_geyser_base", () -> particleType(InvertedGeyserBaseParticleOptions.deserializer())); @@ -361,15 +404,14 @@ public final class AntarchyFabricMisc { public static final DeferredHolder DREAD = MOB_EFFECTS.register("dread", DreadMobEffect::new); + public static final DeferredHolder BLEEDING = MOB_EFFECTS.register("bleeding", BleedingMobEffect::new); + public static final DeferredHolder BLOOD_MOON = MOB_EFFECTS.register("blood_moon", BloodMoonMobEffect::new); public static final DeferredHolder PARALYZED = MOB_EFFECTS.register("paralyzed", ParalyzedMobEffect::new); - public static final DeferredHolder INVERTED = MOB_EFFECTS.register("inverted", InvertedMobEffect::new); - - public static final DeferredHolder DILATED = MOB_EFFECTS.register("dilated", DilatedMobEffect::new); - public static final DeferredHolder CONTRACTED = MOB_EFFECTS.register("contracted", ContractedMobEffect::new); + public static final DeferredHolder COMMANDED = MOB_EFFECTS.register("commanded", CommandedMobEffect::new); public static final DeferredHolder STINKY = MOB_EFFECTS.register("stinky", StinkyMobEffect::new); @@ -381,6 +423,10 @@ public final class AntarchyFabricMisc { public static final DeferredHolder BLOODGLASS_WARD = MOB_EFFECTS.register("bloodglass_ward", com.craisinlord.antarchy.content.effect.BloodglassWardEffect::new); + public static final DeferredHolder GLIMMERING = MOB_EFFECTS.register("glimmering", com.craisinlord.antarchy.content.effect.GlimmeringMobEffect::new); + public static final DeferredHolder ROYAL_VITALITY_PENALTY = MOB_EFFECTS.register("royal_vitality_penalty", com.craisinlord.antarchy.content.effect.RoyalVitalityPenaltyEffect::new); + + public static final DeferredHolder BLOODGLASS_MAX_HEARTS = ATTRIBUTES.register( "bloodglass_max_hearts", () -> new net.minecraft.world.entity.ai.attributes.RangedAttribute("attribute.antarchy.bloodglass_max_hearts", 0.0, 0.0, 8.0).setSyncable(true) @@ -396,17 +442,23 @@ public final class AntarchyFabricMisc { public static final DeferredHolder INVERSION = POTIONS.register("inversion", - () -> new Potion(new MobEffectInstance(mobEffectHolder(INVERTED), 600))); + () -> new Potion(new MobEffectInstance(AnthologyEffects.inverted(), 600))); public static final DeferredHolder LONG_INVERSION = POTIONS.register("long_inversion", - () -> new Potion("inversion", new MobEffectInstance(mobEffectHolder(INVERTED), 2400))); - + () -> new Potion("inversion", new MobEffectInstance(AnthologyEffects.inverted(), 2400))); + public static final DeferredHolder COMMAND = POTIONS.register("command", + () -> new Potion(new MobEffectInstance(mobEffectHolder(COMMANDED), 600))); + public static final DeferredHolder LONG_COMMAND = POTIONS.register("long_command", + () -> new Potion("command", new MobEffectInstance(mobEffectHolder(COMMANDED), 1200))); public static final DeferredHolder TIME_DILATION = POTIONS.register("time_dilation", - () -> new Potion(new MobEffectInstance(mobEffectHolder(DILATED), 1200))); - + () -> new Potion(new MobEffectInstance(AnthologyEffects.dilated(), 1200))); public static final DeferredHolder LONG_TIME_DILATION = POTIONS.register("long_time_dilation", - () -> new Potion("time_dilation", new MobEffectInstance(mobEffectHolder(DILATED), 1200, 1))); + () -> new Potion("time_dilation", new MobEffectInstance(AnthologyEffects.dilated(), 1200, 1))); + public static final DeferredHolder TIME_CONTRACTION = POTIONS.register("time_contraction", + () -> new Potion(new MobEffectInstance(AnthologyEffects.contracted(), 1200))); + public static final DeferredHolder LONG_TIME_CONTRACTION = POTIONS.register("long_time_contraction", + () -> new Potion("time_contraction", new MobEffectInstance(AnthologyEffects.contracted(), 1200, 1))); public static final DeferredHolder STINKY_POTION = POTIONS.register("stinky", @@ -421,7 +473,6 @@ public final class AntarchyFabricMisc { public static final DeferredHolder GROWTH_EFFECT = MOB_EFFECTS.register("growth", GrowthMobEffect::new); - public static final DeferredHolder GLIMMERING = MOB_EFFECTS.register("glimmering", com.craisinlord.antarchy.content.effect.GlimmeringMobEffect::new); public static final DeferredHolder PARALYSIS = POTIONS.register("paralysis", @@ -586,13 +637,25 @@ public final class AntarchyFabricMisc { () -> new PeachTreeFeature(PeachTreeConfiguration.CODEC)); - public static final DeferredHolder, ElythiaFloraFeature> ELYTHIA_FOREST_FLORA = FEATURES.register("elythia_forest_flora", - () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.FOREST)); + public static final DeferredHolder, NadirTreeFeature> NADIR_TREE_FEATURE = FEATURES.register("nadir_tree", + () -> new NadirTreeFeature(NadirTreeConfiguration.CODEC)); + + + public static final DeferredHolder, TruffaloTreeFeature> TRUFFALO_TREE_FEATURE = FEATURES.register("truffalo_tree", + () -> new TruffaloTreeFeature(TruffaloTreeConfiguration.CODEC)); + + + public static final DeferredHolder, RoyalTreeFeature> ROYAL_TREE_FEATURE = FEATURES.register("royal_tree", + () -> new RoyalTreeFeature(RoyalTreeConfiguration.CODEC)); public static final DeferredHolder, KingsTreeGridFeature> KINGS_TREE_GRID = FEATURES.register("kings_tree_grid", () -> new KingsTreeGridFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, ElythiaFloraFeature> ELYTHIA_FOREST_FLORA = FEATURES.register("elythia_forest_flora", + () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.FOREST)); + + public static final DeferredHolder, ElythiaFloraFeature> ELYTHIA_MEADOW_FLORA = FEATURES.register("elythia_meadow_flora", () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.MEADOW)); @@ -647,16 +710,16 @@ public final class AntarchyFabricMisc { () -> new MolewormSurfaceMoundsFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, TriffidPatchFeature> TRIFFID_PATCH = FEATURES.register("flytrap_patch", - () -> new TriffidPatchFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, FlytrapPatchFeature> FLYTRAP_PATCH = FEATURES.register("flytrap_patch", + () -> new FlytrapPatchFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, com.mojang.serialization.Codec> ELYTHIA_BIOME_SOURCE = BIOME_SOURCES.register("elythia_biome_source", - () -> (com.mojang.serialization.Codec) (com.mojang.serialization.Codec) ElythiaBiomeSource.CODEC); + () -> ElythiaBiomeSource.CODEC); public static final DeferredHolder, com.mojang.serialization.Codec> ELYTHIA_RIVER_CARVE = DENSITY_FUNCTION_TYPES.register("elythia_river_carve", - () -> (com.mojang.serialization.Codec) (com.mojang.serialization.Codec) ElythiaRiverCarveFunction.KEY_CODEC.codec()); + () -> ElythiaRiverCarveFunction.KEY_CODEC.codec()); public static final DeferredHolder, ElythiaPondFeature> ELYTHIA_POND = FEATURES.register("elythia_pond", @@ -669,6 +732,12 @@ public final class AntarchyFabricMisc { public static final DeferredHolder, LumenLilyPadFeature> LUMEN_LILY_PADS = FEATURES.register("lumen_lily_pads", () -> new LumenLilyPadFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.elythia.GlimmeringReedFeature> GLIMMERING_REEDS = FEATURES.register("glimmering_reeds", + () -> new com.craisinlord.antarchy.content.worldgen.elythia.GlimmeringReedFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.thoraxis.NaturalDirectionalVineFeature> SPIRALING_VINES = FEATURES.register("spiraling_vines", + () -> new com.craisinlord.antarchy.content.worldgen.thoraxis.NaturalDirectionalVineFeature(NoneFeatureConfiguration.CODEC, "spiraling_vines", net.minecraft.core.Direction.UP, 4, 12)); + public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.thoraxis.NaturalDirectionalVineFeature> GOREVINE = FEATURES.register("gorevine", + () -> new com.craisinlord.antarchy.content.worldgen.thoraxis.NaturalDirectionalVineFeature(NoneFeatureConfiguration.CODEC, "gorevine", net.minecraft.core.Direction.DOWN, 8, 16)); public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.elythia.GiantLilyPadPatchFeature> GIANT_LILY_PAD_PATCH = FEATURES.register("giant_lily_pad_patch", () -> new com.craisinlord.antarchy.content.worldgen.elythia.GiantLilyPadPatchFeature(NoneFeatureConfiguration.CODEC)); @@ -701,10 +770,11 @@ public final class AntarchyFabricMisc { public static final DeferredHolder, ThoraxisFissureFeature> THORAXIS_FISSURE = FEATURES.register("thoraxis_fissure", () -> new ThoraxisFissureFeature(ThoraxisFissureConfiguration.CODEC)); - public static final DeferredHolder, QueenHavocTrailFeature> QUEEN_HAVOC_TRAIL = FEATURES.register("queen_havoc_trail", - QueenHavocTrailFeature::new); + public static final DeferredHolder, ThoraxisTransitionThroatFeature> THORAXIS_TRANSITION_THROAT = FEATURES.register("thoraxis_transition_throat", ThoraxisTransitionThroatFeature::new); + public static final DeferredHolder, QueenHavocTrailFeature> QUEEN_HAVOC_TRAIL = FEATURES.register("queen_havoc_trail", + QueenHavocTrailFeature::new); public static final DeferredHolder, ThoraxisRibColumnsFeature> THORAXIS_RIB_COLUMNS = FEATURES.register("thoraxis_rib_columns", @@ -717,6 +787,10 @@ public final class AntarchyFabricMisc { public static final DeferredHolder, NyxiteSpikeFeature> NYXITE_SPIKES = FEATURES.register("nyxite_spikes", () -> new NyxiteSpikeFeature(NyxiteSpikeConfiguration.CODEC)); + public static final DeferredHolder, TyphoniteSpikeFeature> TYPHONITE_SPIKES = FEATURES.register("typhonite_spikes", + () -> new TyphoniteSpikeFeature(TyphoniteSpikeConfiguration.CODEC)); + public static final DeferredHolder, TyphoniteSwirlFeature> TYPHONITE_SWIRLS = FEATURES.register("typhonite_swirls", + () -> new TyphoniteSwirlFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, ChitinSpikeFeature> CAVARYN_CHITIN_SPIKES = FEATURES.register("cavaryn_chitin_spikes", @@ -744,8 +818,8 @@ public final class AntarchyFabricMisc { public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.cavaryn.GroundMoltingVinesFeature> GROUND_MOLTING_VINES = FEATURES.register("ground_molting_vines", () -> new com.craisinlord.antarchy.content.worldgen.cavaryn.GroundMoltingVinesFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.cavaryn.JumpyBugEggCeilingFeature> JUMPY_BUG_EGG_CEILING = FEATURES.register("springbug_egg_ceiling", - () -> new com.craisinlord.antarchy.content.worldgen.cavaryn.JumpyBugEggCeilingFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.cavaryn.SpringbugEggCeilingFeature> SPRINGBUG_EGG_CEILING = FEATURES.register("springbug_egg_ceiling", + () -> new com.craisinlord.antarchy.content.worldgen.cavaryn.SpringbugEggCeilingFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.cavaryn.SpitBugEggPatchFeature> SPIT_BUG_EGG_PATCH = FEATURES.register("spit_bug_egg_patch", () -> new com.craisinlord.antarchy.content.worldgen.cavaryn.SpitBugEggPatchFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.cavaryn.RollyCavesGiantCavernFeature> ROLLY_CAVES_GIANT_CAVERN = FEATURES.register("rolly_caves_giant_cavern", @@ -790,9 +864,6 @@ public final class AntarchyFabricMisc { () -> new com.craisinlord.antarchy.content.worldgen.mushroom.GlowcapHugeMushroomWorldgenFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, ThoraxisAntiwaterPoolFeature> THORAXIS_ANTIWATER_POOL = FEATURES.register("thoraxis_antiwater_pool", - () -> new ThoraxisAntiwaterPoolFeature(ThoraxisAntiwaterPoolConfiguration.CODEC)); - public static final DeferredHolder, LucidAntiwaterPoolFeature> LUCID_ANTIWATER_POOL = FEATURES.register("lucid_antiwater_pool", () -> new LucidAntiwaterPoolFeature(ThoraxisAntiwaterPoolConfiguration.CODEC)); @@ -801,15 +872,17 @@ public final class AntarchyFabricMisc { public static final DeferredHolder, ThoraxisDuneFeature> THORAXIS_DUNE = FEATURES.register("thoraxis_dune", () -> new ThoraxisDuneFeature(ThoraxisDuneConfiguration.CODEC)); + public static final DeferredHolder, DimensionalTearFeature> DIMENSIONAL_TEAR = FEATURES.register("dimensional_tear", + () -> new DimensionalTearFeature(NoneFeatureConfiguration.CODEC)); + + public static final DeferredHolder, ThoraxisIchorLakeFeature> THORAXIS_ICHOR_LAKE = FEATURES.register("thoraxis_ichor_lake", + () -> new ThoraxisIchorLakeFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, CoralSpikeFeature> ELYTHIA_CORAL_SPIKE = FEATURES.register("elythia_coral_spike", () -> new CoralSpikeFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, DimensionalTearFeature> DIMENSIONAL_TEAR = FEATURES.register("dimensional_tear", - () -> new DimensionalTearFeature(NoneFeatureConfiguration.CODEC)); - - public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.elythia.FallenOuranwoodFeature> FALLEN_OURANWOOD_TREE = FEATURES.register("fallen_ouranwood_tree", () -> new com.craisinlord.antarchy.content.worldgen.elythia.FallenOuranwoodFeature(NoneFeatureConfiguration.CODEC)); @@ -819,11 +892,11 @@ public final class AntarchyFabricMisc { public static final DeferredHolder, com.mojang.serialization.Codec> THORAXIS_BIOME_SOURCE = BIOME_SOURCES.register("thoraxis_biome_source", - () -> (com.mojang.serialization.Codec) (com.mojang.serialization.Codec) ThoraxisBiomeSource.CODEC); + () -> ThoraxisBiomeSource.CODEC); - public static final ArmorMaterial JUMPY_BOOTS_ARMOR_MATERIAL = armorMaterial( - 37, createJumpyBootsDefense(), 15, net.minecraft.sounds.SoundEvents.ARMOR_EQUIP_NETHERITE, + public static final ArmorMaterial SPRINGY_BOOTS_ARMOR_MATERIAL = armorMaterial( + 37, createSpringyBootsDefense(), 15, () -> net.minecraft.sounds.SoundEvents.ARMOR_EQUIP_NETHERITE, () -> Ingredient.of(net.minecraft.world.item.Items.NETHERITE_BOOTS), 3.0F, 0.1F, "springy_boots"); @@ -840,9 +913,6 @@ public final class AntarchyFabricMisc { - - - private static java.util.EnumMap createUltimateArmorDefense() { java.util.EnumMap defense = new java.util.EnumMap<>(ArmorItem.Type.class); defense.put(ArmorItem.Type.BOOTS, 6); @@ -865,7 +935,7 @@ public final class AntarchyFabricMisc { - private static java.util.EnumMap createJumpyBootsDefense() { + private static java.util.EnumMap createSpringyBootsDefense() { java.util.EnumMap defense = new java.util.EnumMap<>(ArmorItem.Type.class); defense.put(ArmorItem.Type.BOOTS, 3); defense.put(ArmorItem.Type.LEGGINGS, 0); @@ -876,17 +946,6 @@ public final class AntarchyFabricMisc { - private static java.util.EnumMap createDiamondArmorDefense() { - java.util.EnumMap defense = new java.util.EnumMap<>(ArmorItem.Type.class); - defense.put(ArmorItem.Type.BOOTS, 3); - defense.put(ArmorItem.Type.LEGGINGS, 6); - defense.put(ArmorItem.Type.CHESTPLATE, 8); - defense.put(ArmorItem.Type.HELMET, 3); - return defense; - } - - - private static java.util.EnumMap createBloodCrystalArmorDefense() { java.util.EnumMap defense = new java.util.EnumMap<>(ArmorItem.Type.class); defense.put(ArmorItem.Type.BOOTS, 2); @@ -896,6 +955,15 @@ public final class AntarchyFabricMisc { return defense; } + private static java.util.EnumMap createDiamondArmorDefense() { + java.util.EnumMap defense = new java.util.EnumMap<>(ArmorItem.Type.class); + defense.put(ArmorItem.Type.BOOTS, 3); + defense.put(ArmorItem.Type.LEGGINGS, 6); + defense.put(ArmorItem.Type.CHESTPLATE, 8); + defense.put(ArmorItem.Type.HELMET, 3); + return defense; + } + private static java.util.EnumMap createMogglesArmorDefense() { @@ -951,6 +1019,8 @@ public final class AntarchyFabricMisc { public static void register() { + POI_TYPES.register(); + VILLAGER_PROFESSIONS.register(); FLUIDS.register(); ATTRIBUTES.register(); PARTICLE_TYPES.register(); @@ -960,6 +1030,7 @@ public final class AntarchyFabricMisc { MOB_EFFECTS.register(); POTIONS.register(); MENUS.register(); + ENCHANTMENTS.register(); FROG_VARIANTS.register(); RECIPE_SERIALIZERS.register(); } diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSounds.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSounds.java index bee09de1..ed4f211e 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSounds.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSounds.java @@ -13,13 +13,25 @@ public final class AntarchyFabricSounds { public static final DeferredHolder SQUIDZOOKA_FIRE = registerSoundEvent("squidzooka_fire"); - public static final DeferredHolder SHRINK_RAY_SOUND = registerSoundEvent("shrink_ray"); + public static final DeferredHolder SHRINK_RAY_CHARGE = registerSoundEvent("shrink_ray_charge"); - public static final DeferredHolder GROWTH_RAY_SOUND = registerSoundEvent("growth_ray"); + public static final DeferredHolder SHRINK_RAY_LOOP = registerSoundEvent("shrink_ray_loop"); - public static final DeferredHolder SIZE_RAY_CHARGE = registerSoundEvent("size_ray_charge"); + public static final DeferredHolder GROWTH_RAY_CHARGE = registerSoundEvent("growth_ray_charge"); + + + public static final DeferredHolder GROWTH_RAY_LOOP = registerSoundEvent("growth_ray_loop"); + + + public static final DeferredHolder SIZE_RAY_WEAKSHOT = registerSoundEvent("size_ray_weakshot"); + + + public static final DeferredHolder SIZE_RAY_MEDIUMSHOT = registerSoundEvent("size_ray_mediumshot"); + + + public static final DeferredHolder SIZE_RAY_CRITSHOT = registerSoundEvent("size_ray_critshot"); public static final DeferredHolder ANT_AMBIENT = registerSoundEvent("ant_ambient"); @@ -40,19 +52,19 @@ public final class AntarchyFabricSounds { public static final DeferredHolder ANT_NEST = registerSoundEvent("ant_nest"); - public static final DeferredHolder CLOUD_SHARK_BITE = registerSoundEvent("stratoshark_bite"); + public static final DeferredHolder STRATOSHARK_BITE = registerSoundEvent("stratoshark_bite"); - public static final DeferredHolder CLOUD_SHARK_IDLE = registerSoundEvent("stratoshark_idle"); + public static final DeferredHolder STRATOSHARK_IDLE = registerSoundEvent("stratoshark_idle"); - public static final DeferredHolder CLOUD_SHARK_HURT = registerSoundEvent("stratoshark_hurt"); + public static final DeferredHolder STRATOSHARK_HURT = registerSoundEvent("stratoshark_hurt"); - public static final DeferredHolder CLOUD_SHARK_DEATH = registerSoundEvent("stratoshark_death"); + public static final DeferredHolder STRATOSHARK_DEATH = registerSoundEvent("stratoshark_death"); - public static final DeferredHolder CLOUD_SHARK_FLY = registerSoundEvent("stratoshark_fly"); + public static final DeferredHolder STRATOSHARK_FLY = registerSoundEvent("stratoshark_fly"); public static final DeferredHolder CATERPILLAR_IDLE = registerSoundEvent("caterpillar_idle"); @@ -169,6 +181,28 @@ public final class AntarchyFabricSounds { public static final DeferredHolder THORAXIS_LUCID_POOLS_MOOD = registerSoundEvent("thoraxis_lucid_pools_mood"); + public static final DeferredHolder LUCID_LULLABY = registerSoundEvent("lucid_lullaby"); + + + public static final DeferredHolder WHISTLING_VOID = registerSoundEvent("whistling_void"); + + + public static final DeferredHolder MUSIC_GAME_THORAXIS = registerSoundEvent("music.game.thoraxis"); + public static final DeferredHolder DIMENSIONAL_TEAR_OPEN = registerSoundEvent("dimensional_tear_open"); + public static final DeferredHolder DIMENSIONAL_TEAR_IDLE = registerSoundEvent("dimensional_tear_idle"); + public static final DeferredHolder DIMENSIONAL_TEAR_CREATURE_LEAVES = registerSoundEvent("dimensional_tear_creature_leaves"); + public static final DeferredHolder DIMENSIONAL_TEAR_CLOSE = registerSoundEvent("dimensional_tear_close"); + + + public static final DeferredHolder MUSIC_GAME_CAVARYN = registerSoundEvent("music.game.cavaryn"); + + + public static final DeferredHolder WISTFUL_WANDERINGS = registerSoundEvent("wistful_wanderings"); + + + public static final DeferredHolder MUSIC_GAME_ELYTHIA = registerSoundEvent("music.game.elythia"); + + public static final DeferredHolder LUCID_AMBIENT = registerSoundEvent("lucid_ambient"); @@ -241,22 +275,22 @@ public final class AntarchyFabricSounds { public static final DeferredHolder NIGHTMARE_FLAP = registerSoundEvent("nightmare_flap"); - public static final DeferredHolder TRIFFID_ATTACK = registerSoundEvent("flytrap_attack"); + public static final DeferredHolder FLYTRAP_ATTACK = registerSoundEvent("flytrap_attack"); - public static final DeferredHolder TRIFFID_GRAB = registerSoundEvent("flytrap_grab"); + public static final DeferredHolder FLYTRAP_GRAB = registerSoundEvent("flytrap_grab"); - public static final DeferredHolder TRIFFID_HURT = registerSoundEvent("flytrap_hurt"); + public static final DeferredHolder FLYTRAP_HURT = registerSoundEvent("flytrap_hurt"); - public static final DeferredHolder TRIFFID_DEATH = registerSoundEvent("flytrap_death"); + public static final DeferredHolder FLYTRAP_DEATH = registerSoundEvent("flytrap_death"); - public static final DeferredHolder TRIFFID_HISS = registerSoundEvent("flytrap_hiss"); + public static final DeferredHolder FLYTRAP_HISS = registerSoundEvent("flytrap_hiss"); - public static final DeferredHolder TRIFFID_GROWL = registerSoundEvent("flytrap_growl"); + public static final DeferredHolder FLYTRAP_GROWL = registerSoundEvent("flytrap_growl"); public static final DeferredHolder MANTIS_AMBIENT = registerSoundEvent("mantis_ambient"); @@ -271,6 +305,14 @@ public final class AntarchyFabricSounds { public static final DeferredHolder MANTIS_FLY_LOOP = registerSoundEvent("mantis_fly_loop"); + public static final DeferredHolder MANTICORE_IDLE = registerSoundEvent("manticore_idle"); + + public static final DeferredHolder MANTICORE_WALK = registerSoundEvent("manticore_walk"); + + public static final DeferredHolder MANTICORE_FLY = registerSoundEvent("manticore_fly"); + + public static final DeferredHolder MANTICORE_BITE = registerSoundEvent("manticore_bite"); + public static final DeferredHolder GRAVITY_GUN_PICKUP = registerSoundEvent("gravity_gun_pickup"); @@ -286,6 +328,27 @@ public final class AntarchyFabricSounds { public static final DeferredHolder GRAVITY_GUN_DRYFIRE = registerSoundEvent("gravity_gun_dryfire"); + public static final DeferredHolder PORTAL_GUN_FIRE_BLUE = registerSoundEvent("portal_gun_fire_blue"); + + + public static final DeferredHolder PORTAL_GUN_FIRE_ORANGE = registerSoundEvent("portal_gun_fire_orange"); + + + public static final DeferredHolder PORTAL_GUN_INVALID_SURFACE = registerSoundEvent("portal_gun_invalid_surface"); + + + public static final DeferredHolder PORTAL_OPEN_BLUE = registerSoundEvent("portal_open_blue"); + + + public static final DeferredHolder PORTAL_OPEN_ORANGE = registerSoundEvent("portal_open_orange"); + + + public static final DeferredHolder PORTAL_FIZZLE = registerSoundEvent("portal_fizzle"); + public static final DeferredHolder PORTAL_ENTER = registerSoundEvent("portal_enter"); + public static final DeferredHolder PORTAL_EXIT = registerSoundEvent("portal_exit"); + public static final DeferredHolder PORTAL_AMBIENT = registerSoundEvent("portal_ambient"); + + public static final DeferredHolder BED_BUG_AMBIENT = registerSoundEvent("bed_bug_ambient"); @@ -400,6 +463,9 @@ public final class AntarchyFabricSounds { public static final DeferredHolder CAVARYN_HEARTBEAT = registerSoundEvent("cavaryn_heartbeat"); + public static final DeferredHolder VENENATUS = registerSoundEvent("venenatus"); + + public static final DeferredHolder ROLLY_POLLY_IDLE = registerSoundEvent("rolly_polly_idle"); public static final DeferredHolder ROLLY_POLLY_WHEEL_MODE = registerSoundEvent("rolly_polly_wheel_mode"); public static final DeferredHolder ROLLY_POLLY_NORMAL_MODE = registerSoundEvent("rolly_polly_normal_mode"); @@ -414,35 +480,35 @@ public final class AntarchyFabricSounds { public static final DeferredHolder JERRY_ADULT_ATTACK = registerSoundEvent("jerry_adult_attack"); - public static final DeferredHolder CREEPING_HORROR_GROWL = registerSoundEvent("crawling_blight_growl"); + public static final DeferredHolder CRAWLING_BLIGHT_GROWL = registerSoundEvent("crawling_blight_growl"); - public static final DeferredHolder CREEPING_HORROR_HURT = registerSoundEvent("crawling_blight_hurt"); + public static final DeferredHolder CRAWLING_BLIGHT_HURT = registerSoundEvent("crawling_blight_hurt"); - public static final DeferredHolder CREEPING_HORROR_BITE = registerSoundEvent("crawling_blight_bite"); + public static final DeferredHolder CRAWLING_BLIGHT_BITE = registerSoundEvent("crawling_blight_bite"); - public static final DeferredHolder LURKING_TERROR_SNARL = registerSoundEvent("skulking_fright_snarl"); + public static final DeferredHolder SKULKING_FRIGHT_SNARL = registerSoundEvent("skulking_fright_snarl"); - public static final DeferredHolder LURKING_TERROR_HURT = registerSoundEvent("skulking_fright_hurt"); + public static final DeferredHolder SKULKING_FRIGHT_HURT = registerSoundEvent("skulking_fright_hurt"); - public static final DeferredHolder LURKING_TERROR_BITE = registerSoundEvent("skulking_fright_bite"); + public static final DeferredHolder SKULKING_FRIGHT_BITE = registerSoundEvent("skulking_fright_bite"); - public static final DeferredHolder LURKING_TERROR_FLY_LOOP = registerSoundEvent("skulking_fright_fly_loop"); + public static final DeferredHolder SKULKING_FRIGHT_FLY_LOOP = registerSoundEvent("skulking_fright_fly_loop"); public static final DeferredHolder HERCULES_BEETLE_IDLE = registerSoundEvent("hercules_beetle_idle"); public static final DeferredHolder HERCULES_BEETLE_HURT = registerSoundEvent("hercules_beetle_hurt"); public static final DeferredHolder HERCULES_BEETLE_ATTACK = registerSoundEvent("hercules_beetle_attack"); public static final DeferredHolder HERCULES_BEETLE_CRY = registerSoundEvent("hercules_beetle_cry"); public static final DeferredHolder HERCULES_BEETLE_CHARGE_START = registerSoundEvent("hercules_beetle_charge_start"); public static final DeferredHolder HERCULES_BEETLE_KNOCKED_DOWN = registerSoundEvent("hercules_beetle_knocked_down"); - public static final DeferredHolder JUMPY_BUG_IDLE = registerSoundEvent("springbug_idle"); + public static final DeferredHolder SPRINGBUG_IDLE = registerSoundEvent("springbug_idle"); public static final DeferredHolder SPIT_BUG_IDLE = registerSoundEvent("spit_bug_idle"); - public static final DeferredHolder JUMPY_BUG_HURT = registerSoundEvent("springbug_hurt"); - public static final DeferredHolder JUMPY_BUG_JUMP = registerSoundEvent("springbug_jump"); + public static final DeferredHolder SPRINGBUG_HURT = registerSoundEvent("springbug_hurt"); + public static final DeferredHolder SPRINGBUG_JUMP = registerSoundEvent("springbug_jump"); public static final DeferredHolder SPIT_BUG_HURT = registerSoundEvent("spit_bug_hurt"); public static final DeferredHolder SPIT_BUG_SPIT = registerSoundEvent("spit_bug_spit"); public static final DeferredHolder BRUTALFLY_SPIT = registerSoundEvent("brutalfly_spit"); @@ -464,6 +530,69 @@ public final class AntarchyFabricSounds { public static final DeferredHolder POTENT_NYXITE_GEYSER_CONTINUOUS_ACTIVE = registerSoundEvent("potent_nyxite_geyser_continuous_active"); + public static final DeferredHolder MUSIC_DISC_UNDERSIDE = registerSoundEvent("music_disc_underside"); + public static final DeferredHolder THE_QUEEN = registerSoundEvent("the_queen"); + public static final DeferredHolder MUSIC_DISC_VERDANCE = registerSoundEvent("music_disc_verdance"); + public static final DeferredHolder MUSIC_DISC_GROTESQUE = registerSoundEvent("music_disc_grotesque"); + public static final DeferredHolder WORM_HOOK_FLYING = registerSoundEvent("worm_hook_flying"); + public static final DeferredHolder BLOOD_CRYSTAL_KATANA_DASH = registerSoundEvent("blood_crystal_katana_dash"); + public static final DeferredHolder BLOOD_CRYSTAL_ARMOR_EQUIP = registerSoundEvent("blood_crystal_armor_equip"); + public static final DeferredHolder BLOODGLASS_WARD_HEART_BREAK = registerSoundEvent("bloodglass_ward_heart_break"); + public static final DeferredHolder BLOODGLASS_WARD_HEART_REGEN = registerSoundEvent("bloodglass_ward_heart_regen"); + + + public static final DeferredHolder ANTIMETAL_PLACE = registerSoundEvent("antimetal_place"); + public static final DeferredHolder ANTIMETAL_STEP = registerSoundEvent("antimetal_step"); + public static final DeferredHolder ANTIMETAL_SCAFFOLD = registerSoundEvent("antimetal_scaffold"); + public static final DeferredHolder UNDERTRIAL_DETECT_PLAYER1 = registerSoundEvent("undertrial_detect_player1"); + public static final DeferredHolder UNDERTRIAL_DETECT_PLAYER2 = registerSoundEvent("undertrial_detect_player2"); + + public static final DeferredHolder KING_IDLE = registerSoundEvent("king_idle"); + public static final DeferredHolder KING_WALK = registerSoundEvent("king_walk"); + public static final DeferredHolder KING_FLY_LOOP = registerSoundEvent("king_fly_loop"); + public static final DeferredHolder KING_WING_FLAP = registerSoundEvent("king_wing_flap"); + public static final DeferredHolder KING_BITE = registerSoundEvent("king_bite"); + public static final DeferredHolder KING_STOMP = registerSoundEvent("king_stomp"); + public static final DeferredHolder KING_ROAR = registerSoundEvent("king_roar"); + public static final DeferredHolder KING_HURT = registerSoundEvent("king_hurt"); + public static final DeferredHolder KING_DEATH = registerSoundEvent("king_death"); + public static final DeferredHolder KING_BEAM_SHOOT = registerSoundEvent("king_beam_shoot"); + public static final DeferredHolder KING_FIREBALL_SHOOT = registerSoundEvent("king_fireball_shoot"); + public static final DeferredHolder KING_ICE_SPIKES = registerSoundEvent("king_ice_spikes"); + public static final DeferredHolder KING_DECREE_CAST = registerSoundEvent("king_decree_cast"); + public static final DeferredHolder KING_DECREE = registerSoundEvent("king_decree"); + public static final DeferredHolder KING_SUCCESS = registerSoundEvent("king_success"); + public static final DeferredHolder KING_JUDGEMENT = registerSoundEvent("king_judgement"); + + public static final DeferredHolder QUEEN_IDLE = registerSoundEvent("queen_idle"); + public static final DeferredHolder QUEEN_WALK = registerSoundEvent("queen_walk"); + public static final DeferredHolder QUEEN_FLY_LOOP = registerSoundEvent("queen_fly_loop"); + public static final DeferredHolder QUEEN_WING_FLAP = registerSoundEvent("queen_wing_flap"); + public static final DeferredHolder QUEEN_BITE = registerSoundEvent("queen_bite"); + public static final DeferredHolder QUEEN_STOMP = registerSoundEvent("queen_stomp"); + public static final DeferredHolder QUEEN_ROAR = registerSoundEvent("queen_roar"); + public static final DeferredHolder QUEEN_HURT = registerSoundEvent("queen_hurt"); + public static final DeferredHolder QUEEN_DEATH = registerSoundEvent("queen_death"); + public static final DeferredHolder QUEEN_BEAM_SHOOT = registerSoundEvent("queen_beam_shoot"); + public static final DeferredHolder QUEEN_BEAM_START = registerSoundEvent("queen_beam_start"); + public static final DeferredHolder QUEEN_BEAM_LOOP = registerSoundEvent("queen_beam_loop"); + public static final DeferredHolder QUEEN_BEAM_END = registerSoundEvent("queen_beam_end"); + public static final DeferredHolder QUEEN_BLACK_HOLE_SHOOT = registerSoundEvent("queen_black_hole_shoot"); + public static final DeferredHolder QUEEN_CAST_SHOOT = registerSoundEvent("queen_cast_shoot"); + + public static final DeferredHolder PRINCE_IDLE = registerSoundEvent("prince_idle"); + public static final DeferredHolder PRINCE_BITE = registerSoundEvent("prince_bite"); + public static final DeferredHolder PRINCE_SHOOT = registerSoundEvent("prince_shoot"); + public static final DeferredHolder PRINCE_FLY = registerSoundEvent("prince_fly"); + public static final DeferredHolder PRINCE_STEP = registerSoundEvent("prince_step"); + public static final DeferredHolder PRINCESS_IDLE = registerSoundEvent("princess_idle"); + public static final DeferredHolder PRINCESS_BITE = registerSoundEvent("princess_bite"); + public static final DeferredHolder PRINCESS_SHOOT = registerSoundEvent("princess_shoot"); + public static final DeferredHolder PRINCESS_FLY = registerSoundEvent("princess_fly"); + public static final DeferredHolder PRINCESS_STEP = registerSoundEvent("princess_step"); + public static final DeferredHolder HOVERBOARD_MOUNT = registerSoundEvent("hoverboard_mount"); + public static final DeferredHolder HOVERBOARD_DISMOUNT = registerSoundEvent("hoverboard_dismount"); + public static final DeferredHolder HOVERBOARD_IDLE = registerSoundEvent("hoverboard_idle"); diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSpawnPlacements.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSpawnPlacements.java index 0f8f3199..b7e8e4e1 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSpawnPlacements.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSpawnPlacements.java @@ -1,6 +1,6 @@ package com.craisinlord.antarchy.fabric.registry; -import com.craisinlord.antarchy.content.entity.cloud_shark.CloudSharkEntity; +import com.craisinlord.antarchy.content.entity.stratoshark.StratosharkEntity; import com.craisinlord.antarchy.content.entity.BedBugEntity; import com.craisinlord.antarchy.content.entity.ButterflyEntity; import com.craisinlord.antarchy.content.entity.CaterpillarEntity; @@ -8,7 +8,7 @@ import com.craisinlord.antarchy.content.entity.flying_squirrel.FlyingSquirrelEnt import com.craisinlord.antarchy.content.entity.ReverieEntity; import com.craisinlord.antarchy.content.entity.MissileSquidEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; -import com.craisinlord.antarchy.content.entity.JumpyBugEntity; +import com.craisinlord.antarchy.content.entity.SpringbugEntity; import com.craisinlord.antarchy.content.entity.StinkBugEntity; import com.craisinlord.antarchy.content.entity.AlphaMantisEntity; import com.craisinlord.antarchy.content.entity.MantisEntity; @@ -21,6 +21,7 @@ import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; import com.craisinlord.antarchy.content.entity.OctopusBombEntity; import com.craisinlord.antarchy.content.entity.MolevoreEntity; import com.craisinlord.antarchy.content.entity.MolewormEntity; +import com.craisinlord.antarchy.content.entity.WormEntity; import com.craisinlord.antarchy.content.entity.BomberEntity; import com.craisinlord.antarchy.content.entity.WaspEntity; import net.minecraft.world.entity.animal.Cow; @@ -40,10 +41,10 @@ public final class AntarchyFabricSpawnPlacements { SpawnPlacements.register(AntarchyFabricEntities.APPLE_COW.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Cow::checkAnimalSpawnRules); SpawnPlacements.register(AntarchyFabricEntities.GOLDEN_APPLE_COW.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Cow::checkAnimalSpawnRules); SpawnPlacements.register(AntarchyFabricEntities.ENCHANTED_GOLDEN_APPLE_COW.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Cow::checkAnimalSpawnRules); - SpawnPlacements.register(AntarchyFabricEntities.CLOUD_SHARK.get(), SpawnPlacements.Type.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, CloudSharkEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.STRATOSHARK.get(), SpawnPlacements.Type.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, StratosharkEntity::canSpawn); SpawnPlacements.register(AntarchyFabricEntities.WASP.get(), SpawnPlacements.Type.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, WaspEntity::canSpawn); SpawnPlacements.register(AntarchyFabricEntities.BOMBER.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BomberEntity::canSpawn); - SpawnPlacements.register(AntarchyFabricEntities.JUMPY_BUG.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, JumpyBugEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.SPRINGBUG.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, SpringbugEntity::canSpawn); SpawnPlacements.register(AntarchyFabricEntities.SPIT_BUG.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, com.craisinlord.antarchy.content.entity.SpitBugEntity::canSpawn); SpawnPlacements.register(AntarchyFabricEntities.KRAKEN.get(), SpawnPlacements.Type.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, KrakenEntity::canSpawn); SpawnPlacements.register(AntarchyFabricEntities.MISSILE_SQUID.get(), SpawnPlacements.Type.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MissileSquidEntity::canSpawn); @@ -55,21 +56,24 @@ public final class AntarchyFabricSpawnPlacements { SpawnPlacements.register(AntarchyFabricEntities.ELKA.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules); SpawnPlacements.register(AntarchyFabricEntities.NIGHTMARE.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, NightmareEntity::canSpawn); SpawnPlacements.register(AntarchyFabricEntities.MOLEWORM.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MolewormEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.WORM.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, WormEntity::canSpawn); SpawnPlacements.register(AntarchyFabricEntities.MANTIS.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MantisEntity::canSpawn); SpawnPlacements.register(AntarchyFabricEntities.ALPHA_MANTIS.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, AlphaMantisEntity::checkAlphaMantisSpawnRules); SpawnPlacements.register(AntarchyFabricEntities.MOLEVORE.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MolevoreEntity::canSpawn); SpawnPlacements.register(AntarchyFabricEntities.BED_BUG.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BedBugEntity::canSpawn); - SpawnPlacements.register(AntarchyFabricEntities.STINK_BUG.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, StinkBugEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.STINK_BUG.get(), SpawnPlacements.Type.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, StinkBugEntity::canSpawn); SpawnPlacements.register(AntarchyFabricEntities.LUCID.get(), SpawnPlacements.Type.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, LucidEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.VORTEX.get(), SpawnPlacements.Type.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, com.craisinlord.antarchy.content.entity.vortex.VortexEntity::canSpawn); SpawnPlacements.register(AntarchyFabricEntities.SCORPION.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, ScorpionEntity::canSpawn); SpawnPlacements.register(AntarchyFabricEntities.BASILISK.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BasiliskEntity::canSpawn); - SpawnPlacements.register(AntarchyFabricEntities.EMPEROR_SCORPION.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EmperorScorpionEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.EMPEROR_SCORPION.get(), SpawnPlacements.Type.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EmperorScorpionEntity::canSpawn); SpawnPlacements.register(AntarchyFabricEntities.TORETERROR.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, ToreterrorEntity::canSpawn); - SpawnPlacements.register(AntarchyFabricEntities.CREEPING_HORROR.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, com.craisinlord.antarchy.content.entity.CreepingHorrorEntity::canSpawn); - SpawnPlacements.register(AntarchyFabricEntities.LURKING_TERROR.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, com.craisinlord.antarchy.content.entity.LurkingTerrorEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.CRAWLING_BLIGHT.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, com.craisinlord.antarchy.content.entity.CrawlingBlightEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.SKULKING_FRIGHT.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, com.craisinlord.antarchy.content.entity.SkulkingFrightEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.MANTICORE.get(), SpawnPlacements.Type.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, com.craisinlord.antarchy.content.entity.ManticoreEntity::canSpawn); SpawnPlacements.register(AntarchyFabricEntities.JERRY.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, com.craisinlord.antarchy.content.entity.JerryEntity::canSpawn); SpawnPlacements.register(AntarchyFabricEntities.TERMITE.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules); - SpawnPlacements.register(AntarchyFabricEntities.ROLLY_POLLY.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, com.craisinlord.antarchy.content.entity.RollyPollyEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.ROLLY_POLLY.get(), SpawnPlacements.Type.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, com.craisinlord.antarchy.content.entity.RollyPollyEntity::canSpawn); } } diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/DeferredHolder.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/DeferredHolder.java index 555df69e..86a936d6 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/DeferredHolder.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/DeferredHolder.java @@ -1,6 +1,7 @@ package com.craisinlord.antarchy.fabric.registry; import java.util.function.Supplier; + import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/util/CustomFluidPhysicsChecks.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/util/CustomFluidPhysicsChecks.java index e25839d3..251b0ed2 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/util/CustomFluidPhysicsChecks.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/util/CustomFluidPhysicsChecks.java @@ -2,45 +2,45 @@ package com.craisinlord.antarchy.fabric.util; import com.craisinlord.antarchy.content.fluid.AntarchyFluidChecks; import net.minecraft.core.BlockPos; +import net.minecraft.util.Mth; import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.Level; import net.minecraft.world.level.material.FluidState; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; +import java.util.function.Predicate; + public final class CustomFluidPhysicsChecks { private CustomFluidPhysicsChecks() { } public static boolean isTouchingAntiwater(Entity entity) { - AABB box = entity.getBoundingBox().inflate(0.05D); - BlockPos min = BlockPos.containing(box.minX, box.minY, box.minZ); - BlockPos max = BlockPos.containing(box.maxX, box.maxY, box.maxZ); - BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(); - for (int x = min.getX(); x <= max.getX(); x++) { - for (int y = min.getY(); y <= max.getY(); y++) { - for (int z = min.getZ(); z <= max.getZ(); z++) { - cursor.set(x, y, z); - FluidState fluidState = entity.level().getFluidState(cursor); - if (AntarchyFluidChecks.isAntiwater(fluidState)) { - return true; - } - } - } - } - return false; + return isTouching(entity, AntarchyFluidChecks::isAntiwater); } public static boolean isTouchingWaterlikeFluid(Entity entity) { - AABB box = entity.getBoundingBox().inflate(0.05D); - BlockPos min = BlockPos.containing(box.minX, box.minY, box.minZ); - BlockPos max = BlockPos.containing(box.maxX, box.maxY, box.maxZ); + return isTouching(entity, AntarchyFluidChecks::usesWaterLikePhysics); + } + + public static Vec3 getAntiwaterFlow(Entity entity) { + return getAverageFlow(entity, AntarchyFluidChecks::isAntiwater); + } + + public static Vec3 getWaterlikeFlow(Entity entity) { + return getAverageFlow(entity, AntarchyFluidChecks::usesWaterLikePhysics); + } + + private static boolean isTouching(Entity entity, Predicate matches) { + AABB box = entity.getBoundingBox().deflate(0.001D); + Level level = entity.level(); BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(); - for (int x = min.getX(); x <= max.getX(); x++) { - for (int y = min.getY(); y <= max.getY(); y++) { - for (int z = min.getZ(); z <= max.getZ(); z++) { + for (int x = Mth.floor(box.minX); x < Mth.ceil(box.maxX); x++) { + for (int y = Mth.floor(box.minY); y < Mth.ceil(box.maxY); y++) { + for (int z = Mth.floor(box.minZ); z < Mth.ceil(box.maxZ); z++) { cursor.set(x, y, z); - FluidState fluidState = entity.level().getFluidState(cursor); - if (AntarchyFluidChecks.usesWaterLikePhysics(fluidState)) { + FluidState fluidState = level.getFluidState(cursor); + if (matches.test(fluidState) && y + fluidState.getHeight(level, cursor) >= box.minY) { return true; } } @@ -49,43 +49,31 @@ public final class CustomFluidPhysicsChecks { return false; } - public static Vec3 getAntiwaterFlow(Entity entity) { - return getAverageFlow(entity, true); - } - - public static Vec3 getWaterlikeFlow(Entity entity) { - return getAverageFlow(entity, false); - } - - private static Vec3 getAverageFlow(Entity entity, boolean antiwater) { - AABB box = entity.getBoundingBox().inflate(0.05D); - BlockPos min = BlockPos.containing(box.minX, box.minY, box.minZ); - BlockPos max = BlockPos.containing(box.maxX, box.maxY, box.maxZ); + private static Vec3 getAverageFlow(Entity entity, Predicate matches) { + AABB box = entity.getBoundingBox().deflate(0.001D); + Level level = entity.level(); BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(); Vec3 totalFlow = Vec3.ZERO; - int matches = 0; - for (int x = min.getX(); x <= max.getX(); x++) { - for (int y = min.getY(); y <= max.getY(); y++) { - for (int z = min.getZ(); z <= max.getZ(); z++) { + int count = 0; + for (int x = Mth.floor(box.minX); x < Mth.ceil(box.maxX); x++) { + for (int y = Mth.floor(box.minY); y < Mth.ceil(box.maxY); y++) { + for (int z = Mth.floor(box.minZ); z < Mth.ceil(box.maxZ); z++) { cursor.set(x, y, z); - FluidState fluidState = entity.level().getFluidState(cursor); - boolean matchesFluid = antiwater - ? AntarchyFluidChecks.isAntiwater(fluidState) - : AntarchyFluidChecks.usesWaterLikePhysics(fluidState); - if (!matchesFluid) { + FluidState fluidState = level.getFluidState(cursor); + if (!matches.test(fluidState) || y + fluidState.getHeight(level, cursor) < box.minY) { continue; } - totalFlow = totalFlow.add(fluidState.getFlow(entity.level(), cursor)); - matches++; + totalFlow = totalFlow.add(fluidState.getFlow(level, cursor)); + count++; } } } - if (matches == 0 || totalFlow.lengthSqr() < 1.0E-6D) { + if (count == 0 || totalFlow.lengthSqr() < 1.0E-6D) { return Vec3.ZERO; } - return totalFlow.scale(1.0D / matches); + return totalFlow.scale(1.0D / count); } } diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/util/JumpyBootsFabricHelper.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/util/JumpyBootsFabricHelper.java deleted file mode 100644 index 5386ac41..00000000 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/util/JumpyBootsFabricHelper.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.craisinlord.antarchy.fabric.util; - -import net.minecraft.world.entity.LivingEntity; - -import java.util.Map; -import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; - -public class JumpyBootsFabricHelper { - private static final Map PROTECTION_TIMES = new ConcurrentHashMap<>(); - - public static long getProtectionUntil(LivingEntity entity) { - return PROTECTION_TIMES.getOrDefault(entity.getUUID(), 0L); - } - - public static void setProtectionUntil(LivingEntity entity, long gameTime) { - PROTECTION_TIMES.put(entity.getUUID(), gameTime); - } -} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/util/SpringyBootsFabricHelper.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/util/SpringyBootsFabricHelper.java new file mode 100644 index 00000000..ed38195f --- /dev/null +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/util/SpringyBootsFabricHelper.java @@ -0,0 +1,19 @@ +package com.craisinlord.antarchy.fabric.util; + +import net.minecraft.world.entity.LivingEntity; + +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + +public class SpringyBootsFabricHelper { + private static final Map PROTECTION_TIMES = new ConcurrentHashMap<>(); + + public static long getProtectionUntil(LivingEntity entity) { + return PROTECTION_TIMES.getOrDefault(entity.getUUID(), 0L); + } + + public static void setProtectionUntil(LivingEntity entity, long gameTime) { + PROTECTION_TIMES.put(entity.getUUID(), gameTime); + } +} diff --git a/fabric-1.20.1/src/main/resources/antarchy-fabric.mixins.json b/fabric-1.20.1/src/main/resources/antarchy-fabric.mixins.json index f84cc256..4990b470 100644 --- a/fabric-1.20.1/src/main/resources/antarchy-fabric.mixins.json +++ b/fabric-1.20.1/src/main/resources/antarchy-fabric.mixins.json @@ -4,10 +4,38 @@ "refmap": "antarchy.mixins.refmap.json", "compatibilityLevel": "JAVA_17", "mixins": [ + "AntiwaterLivingEntityMixin", + "AntiwaterItemEntityMixin", + "LivingEntityJumpingAccessor", + "WaterlikeFluidLivingEntityMixin", + "WaterlikeFluidItemEntityMixin", + "AntimetalInversionMixin", + "BrewingStandCustomIngredientMixin", + "ElytraStartFlyingMixin", + "ElytraFallFlyingMixin", + "BloodglassEquipMixin", + "BloodglassEffectMixin", + "BloodglassRespawnMixin", + "DreamCampfireBlockEntityMixin", + "SpringyBootsFallDamageMixin", + "ThoraxisWaterBucketMixin", + "entity.ParalyzedMobFreezeMixin", + "WoodTypeInvoker", + "infinity.PortalCreatorMixin", + "infinity.WarpLogicMixin", "infinity.AmendmentRareOresMixin", - "BrewingStandCustomIngredientMixin" + "EntityReachInteractMixin" ], "client": [ + "client.SeparateLargeItemModelsMixin", + "client.SeparateLargeItemGuiLightingMixin", + "client.BrutalflyElytraExperienceBarMixin", + "client.BloodglassChatOrderMixin", + "client.LiquidFogMixin", + "client.GravityGunMouseScrollMixin", + "client.KeybindingConflictFixMixin", + "client.CrossbowArmPoseMixin", + "client.EntityReachPickMixin" ], "injectors": { "defaultRequire": 1 diff --git a/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/attitude_adjuster.json b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/attitude_adjuster.json index 91de2a88..598f0b99 100644 --- a/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/attitude_adjuster.json +++ b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/attitude_adjuster.json @@ -1,3 +1,4 @@ { - "parent": "antarchy:item/attitude_adjuster_held" + "parent": "antarchy:item/attitude_adjuster_held", + "gui_light": "front" } diff --git a/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/giant_frying_pan.json b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/giant_frying_pan.json new file mode 100644 index 00000000..c19ba072 --- /dev/null +++ b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/giant_frying_pan.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:item/giant_frying_pan_held" +} diff --git a/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/krakens_grasp.json b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/krakens_grasp.json index 9a00568c..19b02e4e 100644 --- a/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/krakens_grasp.json +++ b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/krakens_grasp.json @@ -1,3 +1,4 @@ { - "parent": "antarchy:item/krakens_grasp_held" + "parent": "antarchy:item/krakens_grasp_held", + "gui_light": "front" } diff --git a/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun_atlas.json b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun_atlas.json new file mode 100644 index 00000000..a3b81466 --- /dev/null +++ b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun_atlas.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:item/portal_gun_held_geo" +} diff --git a/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun_craisin.json b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun_craisin.json new file mode 100644 index 00000000..a3b81466 --- /dev/null +++ b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun_craisin.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:item/portal_gun_held_geo" +} diff --git a/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun_laynce.json b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun_laynce.json new file mode 100644 index 00000000..a3b81466 --- /dev/null +++ b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun_laynce.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:item/portal_gun_held_geo" +} diff --git a/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun_p_body.json b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun_p_body.json new file mode 100644 index 00000000..a3b81466 --- /dev/null +++ b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun_p_body.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:item/portal_gun_held_geo" +} diff --git a/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/royal_assailant_staff_gui.json b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/royal_assailant_staff_gui.json new file mode 100644 index 00000000..0425788d --- /dev/null +++ b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/royal_assailant_staff_gui.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "gui_light": "front", + "textures": { + "layer0": "antarchy:item/royal_assailant_staff_item" + } +} diff --git a/fabric-1.20.1/src/main/resources/data/minecraft/tags/fluid/water.json b/fabric-1.20.1/src/main/resources/data/minecraft/tags/fluids/water.json similarity index 100% rename from fabric-1.20.1/src/main/resources/data/minecraft/tags/fluid/water.json rename to fabric-1.20.1/src/main/resources/data/minecraft/tags/fluids/water.json diff --git a/fabric-1.20.1/src/main/resources/fabric.mod.json b/fabric-1.20.1/src/main/resources/fabric.mod.json index 80f382e2..995b2346 100644 --- a/fabric-1.20.1/src/main/resources/fabric.mod.json +++ b/fabric-1.20.1/src/main/resources/fabric.mod.json @@ -21,6 +21,9 @@ ], "client": [ "com.craisinlord.antarchy.fabric.client.AntarchyFabricClient" + ], + "modmenu": [ + "com.craisinlord.antarchy.fabric.client.AntarchyModMenuIntegration" ] }, "mixins": [ @@ -28,12 +31,23 @@ "antarchy-fabric.mixins.json" ], "depends": { + "anthology": ">=1.0.0", "fabricloader": ">=${fabric_loader_version}", "minecraft": "~${minecraft_version}", "java": ">=17", - "fabric-api": "*" + "fabric-api": "*", + "integrated_api": ">=1.8.1", + "geckolib": "*", + "sizeable_foliage": "*", + "pehkui": "*" }, "breaks": { - "apple_cows": "*" + "infinity": "<2.7.2", + "apple_cows": "*", + "hoverboards": "*" + }, + "suggests": { + "modmenu": "*", + "cloth-config": "*" } } diff --git a/forge-1.20.1/build.gradle b/forge-1.20.1/build.gradle index 3949e5fc..244222c7 100644 --- a/forge-1.20.1/build.gradle +++ b/forge-1.20.1/build.gradle @@ -17,19 +17,17 @@ java { repositories { mavenCentral() maven { url = 'https://maven.minecraftforge.net' } + maven { url = 'https://maven.architectury.dev/' } maven { url = 'https://maven.parchmentmc.org' } maven { url = 'https://repo.spongepowered.org/repository/maven-public/' } maven { url = 'https://www.cursemaven.com' } maven { url = 'https://maven.blamejared.com' } maven { url = 'https://jitpack.io' } - exclusiveContent { - forRepository { - maven { - name = "GeckoLib" - url = "https://dl.cloudsmith.io/public/geckolib3/geckolib/maven/" - } - } - filter { + flatDir { dirs file('../anthology_jars'), file('../infinite_dimensions_jars'), file('../integrated_api_jars') } + maven { + name = "GeckoLib" + url = "https://dl.cloudsmith.io/public/geckolib3/geckolib/maven/" + content { includeGroup("software.bernie.geckolib") includeGroup("com.eliotlash.mclib") } @@ -71,6 +69,10 @@ minecraft { } server { + jvmArgs( + "-Dmixin.env.remapRefMap=true", + "-Dmixin.env.refMapRemappingFile=${projectDir}/build/createSrgToMcp/output.srg" + ) args '--nogui' } } @@ -93,27 +95,34 @@ sourceSets { dependencies { minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}" - implementation "software.bernie.geckolib:geckolib-forge-${minecraft_version}:${geckolib_version}" + implementation fg.deobf("software.bernie.geckolib:geckolib-forge-${minecraft_version}:${geckolib_version}") + + implementation fg.deobf("com.craisinlord:anthology:${anthology_version}+1.20.1-forge") compileOnly("curse.maven:sizeable_foliage-${sizeable_foliage_curseforge_id}:${sizeable_foliage_curseforge_file_id_forge}") - runtimeOnly("curse.maven:sizeable_foliage-${sizeable_foliage_curseforge_id}:${sizeable_foliage_curseforge_file_id_forge}") + runtimeOnly fg.deobf("curse.maven:sizeable_foliage-${sizeable_foliage_curseforge_id}:${sizeable_foliage_curseforge_file_id_forge}") - compileOnly("curse.maven:intapi-${intapi_curseforge_id}:${intapi_curseforge_file_id_forge}") - runtimeOnly("curse.maven:intapi-${intapi_curseforge_id}:${intapi_curseforge_file_id_forge}") + compileOnly fg.deobf("blank:antos-forge-1.20.1:1.4.0") + runtimeOnly fg.deobf("blank:antos-forge-1.20.1:1.4.0") + + compileOnly fg.deobf("blank:integrated_api-forge-1.20.1:1.9.1") + runtimeOnly(files("$rootDir/../integrated_api_jars/integrated_api-forge-1.20.1-1.9.1-dev-shadow.jar")) compileOnly("curse.maven:pehkui-${pehkui_curseforge_id}:${pehkui_curseforge_file_id_forge}") - runtimeOnly("curse.maven:pehkui-${pehkui_curseforge_id}:${pehkui_curseforge_file_id_forge}") + runtimeOnly fg.deobf("curse.maven:pehkui-${pehkui_curseforge_id}:${pehkui_curseforge_file_id_forge}") compileOnly(files("$rootDir/../infinite_dimensions_jars/infinity-2.7.2+1.20.1-forge.jar")) - runtimeOnly(files("$rootDir/../infinite_dimensions_jars/infinity-2.7.2+1.20.1-forge.jar")) + runtimeOnly fg.deobf("blank:infinity:2.7.2+1.20.1-forge") + runtimeOnly fg.deobf("dev.architectury:architectury-forge:9.2.14") compileOnly "mezz.jei:jei-${minecraft_version}-common-api:${jei_version}" compileOnly "mezz.jei:jei-${minecraft_version}-forge-api:${jei_version}" - runtimeOnly "mezz.jei:jei-${minecraft_version}-forge:${jei_version}" + runtimeOnly fg.deobf("mezz.jei:jei-${minecraft_version}-forge:${jei_version}") annotationProcessor 'org.spongepowered:mixin:0.8.5:processor' - implementation(annotationProcessor("io.github.llamalad7:mixinextras-common:${mixin_extras}")) + compileOnly(annotationProcessor("io.github.llamalad7:mixinextras-common:${mixin_extras}")) + implementation "io.github.llamalad7:mixinextras-forge:${mixin_extras}" } mixin { diff --git a/forge-1.20.1/gradle.properties b/forge-1.20.1/gradle.properties index 7813e356..cb4c2f1a 100644 --- a/forge-1.20.1/gradle.properties +++ b/forge-1.20.1/gradle.properties @@ -17,7 +17,8 @@ parchment_version=2023.09.03-1.20.1 jei_version=15.20.0.104 geckolib_version=4.8.4 -mixin_extras=0.5.0 +mixin_extras=0.4.1 +anthology_version=1.0.0 sizeable_foliage_curseforge_id=1601832 sizeable_foliage_curseforge_file_id_forge=8468688 diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyConfigModuleForge.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyConfigModuleForge.java index 1058d06d..39da2532 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyConfigModuleForge.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyConfigModuleForge.java @@ -1,10 +1,11 @@ package com.craisinlord.antarchy.forge; import com.craisinlord.antarchy.config.AntarchySettings; -import com.craisinlord.antarchy.content.network.ImpactShakeSync; import com.craisinlord.antarchy.config.ConfigResetGuard; import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakePayload; import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakeSync; +import com.craisinlord.antarchy.content.network.KingJudgmentFlashPayload; +import com.craisinlord.antarchy.content.network.KingJudgmentFlashSync; import com.craisinlord.antarchy.content.network.HordeIntensitySync; import java.nio.file.Path; import net.minecraftforge.fml.loading.FMLPaths; @@ -18,7 +19,7 @@ public final class AntarchyConfigModuleForge { public static void init() { Path configDir = FMLPaths.CONFIGDIR.get().resolve("antarchy"); - ConfigResetGuard.wipeIfNeeded( + ConfigResetGuard.migrateIfNeeded( configDir, configDir.resolve("antarchy_mobs.toml"), configDir.resolve("antarchy_tools.toml"), @@ -28,7 +29,7 @@ public final class AntarchyConfigModuleForge { ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, AntarchyToolsConfig.SPEC, "antarchy/antarchy_tools.toml"); ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, AntarchyMiscConfig.SPEC, "antarchy/antarchy_misc.toml"); HerculesBeetleImpactShakeSync.setSink((player, ticks) -> AntarchyForgeNetworkCore.sendToPlayer(player, new HerculesBeetleImpactShakePayload(ticks))); - ImpactShakeSync.setSink(AntarchyForgeNetworkCore::sendToPlayer); + KingJudgmentFlashSync.setSink((player, ticks) -> AntarchyForgeNetworkCore.sendToPlayer(player, new KingJudgmentFlashPayload(ticks))); HordeIntensitySync.setSink(AntarchyForgeNetworkCore::sendToPlayer); AntarchyForge.modEventBusTempHolder.addListener(AntarchyConfigModuleForge::onConfigChange); } @@ -96,16 +97,15 @@ public final class AntarchyConfigModuleForge { AntarchySettings.setBomberExplosionDamage(AntarchyMobsConfig.bomberExplosionDamage()); AntarchySettings.setBomberExplosionRadius(AntarchyMobsConfig.bomberExplosionRadius()); - AntarchySettings.setJumpyBugHealth(AntarchyMobsConfig.jumpyBugHealth()); - AntarchySettings.setJumpyBugPounceDamage(AntarchyMobsConfig.jumpyBugPounceDamage()); - AntarchySettings.setJumpyBugLatchDamage(AntarchyMobsConfig.jumpyBugLatchDamage()); - AntarchySettings.setJumpyBugCamouflageAlpha(AntarchyMobsConfig.jumpyBugCamouflageAlpha()); + AntarchySettings.setSpringbugHealth(AntarchyMobsConfig.springbugHealth()); + AntarchySettings.setSpringbugPounceDamage(AntarchyMobsConfig.springbugPounceDamage()); + AntarchySettings.setSpringbugCamouflageAlpha(AntarchyMobsConfig.springbugCamouflageAlpha()); AntarchySettings.setEmperorScorpionHealth(AntarchyMobsConfig.emperorScorpionHealth()); AntarchySettings.setEmperorScorpionAttackDamage(AntarchyMobsConfig.emperorScorpionAttackDamage()); + AntarchySettings.setEmperorScorpionMovementSpeed(AntarchyMobsConfig.emperorScorpionMovementSpeed()); AntarchySettings.setEmperorScorpionArmor(AntarchyMobsConfig.emperorScorpionArmor()); AntarchySettings.setEmperorScorpionKnockbackResistance(AntarchyMobsConfig.emperorScorpionKnockbackResistance()); - AntarchySettings.setEmperorScorpionMovementSpeed(AntarchyMobsConfig.emperorScorpionMovementSpeed()); AntarchySettings.setEmperorScorpionFollowRange(AntarchyMobsConfig.emperorScorpionFollowRange()); AntarchySettings.setEmperorScorpionXpReward(AntarchyMobsConfig.emperorScorpionXpReward()); AntarchySettings.setEmperorScorpionClawAnimTicks(AntarchyMobsConfig.emperorScorpionClawAnimTicks()); @@ -123,19 +123,108 @@ public final class AntarchyConfigModuleForge { AntarchySettings.setEmperorScorpionDamageRange(AntarchyMobsConfig.emperorScorpionDamageRange()); AntarchySettings.setEmperorScorpionMinDespawnTicks(AntarchyMobsConfig.emperorScorpionMinDespawnTicks()); + AntarchySettings.setScorpionHealth(AntarchyMobsConfig.scorpionHealth()); + AntarchySettings.setScorpionAttackDamage(AntarchyMobsConfig.scorpionAttackDamage()); + AntarchySettings.setScorpionMovementSpeed(AntarchyMobsConfig.scorpionMovementSpeed()); + AntarchySettings.setScorpionArmor(AntarchyMobsConfig.scorpionArmor()); + AntarchySettings.setScorpionKnockbackResistance(AntarchyMobsConfig.scorpionKnockbackResistance()); + AntarchySettings.setKrakenHealth(AntarchyMobsConfig.krakenHealth()); AntarchySettings.setKrakenAttackDamage(AntarchyMobsConfig.krakenAttackDamage()); - AntarchySettings.setKrakenArmor(AntarchyMobsConfig.krakenArmor()); - AntarchySettings.setKrakenKnockbackResistance(AntarchyMobsConfig.krakenKnockbackResistance()); - AntarchySettings.setKrakenMovementSpeed(AntarchyMobsConfig.krakenMovementSpeed()); - AntarchySettings.setKrakenFlyingSpeed(AntarchyMobsConfig.krakenFlyingSpeed()); - AntarchySettings.setKrakenBossBarRange(AntarchyMobsConfig.krakenBossBarRange()); - AntarchySettings.setKrakenLightningDamagePhaseOne((float) AntarchyMobsConfig.krakenLightningDamagePhaseOne()); AntarchySettings.setKrakenSquidSpawnEnabled(AntarchyMobsConfig.krakenSquidSpawnEnabled()); AntarchySettings.setKrakenMassSpawnEnabled(AntarchyMobsConfig.krakenMassSpawnEnabled()); AntarchySettings.setKrakenRequireBadOmenToSummon(AntarchyMobsConfig.krakenRequireBadOmenToSummon()); AntarchySettings.setKrakenFollowRange(AntarchyMobsConfig.krakenFollowRange()); AntarchySettings.setKrakenDamageRange(AntarchyMobsConfig.krakenDamageRange()); + AntarchySettings.setKrakenArmor(AntarchyMobsConfig.krakenArmor()); + AntarchySettings.setKrakenKnockbackResistance(AntarchyMobsConfig.krakenKnockbackResistance()); + AntarchySettings.setKrakenMovementSpeed(AntarchyMobsConfig.krakenMovementSpeed()); + AntarchySettings.setKrakenFlyingSpeed(AntarchyMobsConfig.krakenFlyingSpeed()); + AntarchySettings.setKrakenBossBarRange(AntarchyMobsConfig.krakenBossBarRange()); + AntarchySettings.setKrakenLightningDamagePhaseOne(AntarchyMobsConfig.krakenLightningDamagePhaseOne()); + + AntarchySettings.setKingHealth(AntarchyMobsConfig.kingHealth()); + AntarchySettings.setQueenHealth(AntarchyMobsConfig.queenHealth()); + AntarchySettings.setKingAttackDamage(AntarchyMobsConfig.kingAttackDamage()); + AntarchySettings.setQueenAttackDamage(AntarchyMobsConfig.queenAttackDamage()); + AntarchySettings.setRoyalBossArmor(AntarchyMobsConfig.royalBossArmor()); + AntarchySettings.setKingArmor(AntarchyMobsConfig.kingArmor()); + AntarchySettings.setRoyalBossFollowRange(AntarchyMobsConfig.royalBossFollowRange()); + AntarchySettings.setRoyalBossMovementSpeed(AntarchyMobsConfig.royalBossMovementSpeed()); + AntarchySettings.setRoyalBossKnockbackResistance(AntarchyMobsConfig.royalBossKnockbackResistance()); + AntarchySettings.setRoyalBossStepHeight(AntarchyMobsConfig.royalBossStepHeight()); + AntarchySettings.setRoyalBossMaxSingleHitDamage(AntarchyMobsConfig.royalBossMaxSingleHitDamage()); + AntarchySettings.setRoyalBossBiteReach(AntarchyMobsConfig.royalBossBiteReach()); + AntarchySettings.setRoyalBossBiteDamageMultiplier(AntarchyMobsConfig.royalBossBiteDamageMultiplier()); + AntarchySettings.setRoyalBossBiteCooldownTicks(AntarchyMobsConfig.royalBossBiteCooldownTicks()); + AntarchySettings.setRoyalBossMultiplayerScalingEnabled(AntarchyMobsConfig.royalBossMultiplayerScalingEnabled()); + AntarchySettings.setRoyalBossScalingMaxPlayers(AntarchyMobsConfig.royalBossScalingMaxPlayers()); + AntarchySettings.setRoyalBossHealthPerAdditionalPlayer(AntarchyMobsConfig.royalBossHealthPerAdditionalPlayer()); + AntarchySettings.setRoyalBossDamagePerAdditionalPlayer(AntarchyMobsConfig.royalBossDamagePerAdditionalPlayer()); + AntarchySettings.setRoyalBoundaryRadius(AntarchyMobsConfig.royalBoundaryRadius()); + AntarchySettings.setRoyalBoundaryWarningRadius(AntarchyMobsConfig.royalBoundaryWarningRadius()); + AntarchySettings.setRoyalBoundaryGraceTicks(AntarchyMobsConfig.royalBoundaryGraceTicks()); + AntarchySettings.setQueenBeamDamage(AntarchyMobsConfig.queenBeamDamage()); + AntarchySettings.setQueenBeamRange(AntarchyMobsConfig.queenBeamRange()); + AntarchySettings.setQueenBeamMinimumRange(AntarchyMobsConfig.queenBeamMinimumRange()); + AntarchySettings.setQueenBeamDurationTicks(AntarchyMobsConfig.queenBeamDurationTicks()); + AntarchySettings.setQueenBeamWindupTicks(AntarchyMobsConfig.queenBeamWindupTicks()); + AntarchySettings.setQueenBeamTravelTicks(AntarchyMobsConfig.queenBeamTravelTicks()); + AntarchySettings.setQueenBeamCooldownTicks(AntarchyMobsConfig.queenBeamCooldownTicks()); + AntarchySettings.setQueenBeamTracking(AntarchyMobsConfig.queenBeamTracking()); + AntarchySettings.setQueenBeamTerrainRadius(AntarchyMobsConfig.queenBeamTerrainRadius()); + AntarchySettings.setQueenBeamTerrainCap(AntarchyMobsConfig.queenBeamTerrainCap()); + AntarchySettings.setQueenBeamPhaseOneCap(AntarchyMobsConfig.queenBeamPhaseOneCap()); + AntarchySettings.setQueenBeamPhaseTwoCap(AntarchyMobsConfig.queenBeamPhaseTwoCap()); + AntarchySettings.setQueenBeamPhaseThreeCap(AntarchyMobsConfig.queenBeamPhaseThreeCap()); + AntarchySettings.setQueenBeamPhaseThreeMaxVolleyChance(AntarchyMobsConfig.queenBeamPhaseThreeMaxVolleyChance()); + AntarchySettings.setKingBeamDamage(AntarchyMobsConfig.kingBeamDamage()); + AntarchySettings.setKingBeamRange(AntarchyMobsConfig.kingBeamRange()); + AntarchySettings.setKingBeamMinimumRange(AntarchyMobsConfig.kingBeamMinimumRange()); + AntarchySettings.setKingBeamDurationTicks(AntarchyMobsConfig.kingBeamDurationTicks()); + AntarchySettings.setKingBeamWindupTicks(AntarchyMobsConfig.kingBeamWindupTicks()); + AntarchySettings.setKingBeamTravelTicks(AntarchyMobsConfig.kingBeamTravelTicks()); + AntarchySettings.setKingBeamCooldownTicks(AntarchyMobsConfig.kingBeamCooldownTicks()); + AntarchySettings.setKingBeamTracking(AntarchyMobsConfig.kingBeamTracking()); + AntarchySettings.setKingBeamTerrainRadius(AntarchyMobsConfig.kingBeamTerrainRadius()); + AntarchySettings.setKingBeamTerrainCap(AntarchyMobsConfig.kingBeamTerrainCap()); + AntarchySettings.setRoyalDecreeCooldownTicks(AntarchyMobsConfig.royalDecreeCooldownTicks()); + AntarchySettings.setKingRoyalMusterCooldownTicks(AntarchyMobsConfig.kingRoyalMusterCooldownTicks()); + AntarchySettings.setKingRoyalMusterWindupTicks(AntarchyMobsConfig.kingRoyalMusterWindupTicks()); + AntarchySettings.setKingRoyalMusterDurationTicks(AntarchyMobsConfig.kingRoyalMusterDurationTicks()); + AntarchySettings.setKingRoyalMusterRadius(AntarchyMobsConfig.kingRoyalMusterRadius()); + AntarchySettings.setKingRoyalMusterCap(AntarchyMobsConfig.kingRoyalMusterCap()); + AntarchySettings.setQueenBlackHoleRadius(AntarchyMobsConfig.queenBlackHoleRadius()); + AntarchySettings.setQueenBlackHoleActiveTicks(AntarchyMobsConfig.queenBlackHoleActiveTicks()); + AntarchySettings.setQueenBlackHolePullStrength(AntarchyMobsConfig.queenBlackHolePullStrength()); + AntarchySettings.setQueenBlackHoleBlockSuctionCap(AntarchyMobsConfig.queenBlackHoleBlockSuctionCap()); + AntarchySettings.setKingFireballDamage(AntarchyMobsConfig.kingFireballDamage()); + AntarchySettings.setKingFireballRadius(AntarchyMobsConfig.kingFireballRadius()); + AntarchySettings.setKingFireballCooldownTicks(AntarchyMobsConfig.kingFireballCooldownTicks()); + AntarchySettings.setKingIceballDamage(AntarchyMobsConfig.kingIceballDamage()); + AntarchySettings.setKingIceballRadius(AntarchyMobsConfig.kingIceballRadius()); + AntarchySettings.setKingIceballCooldownTicks(AntarchyMobsConfig.kingIceballCooldownTicks()); + AntarchySettings.setKingIceSpikeDamage(AntarchyMobsConfig.kingIceSpikeDamage()); + AntarchySettings.setKingIceSpikeCooldownTicks(AntarchyMobsConfig.kingIceSpikeCooldownTicks()); + AntarchySettings.setKingElementalTerrainCap(AntarchyMobsConfig.kingElementalTerrainCap()); + AntarchySettings.setRoyalBossSoundVolume(AntarchyMobsConfig.royalBossSoundVolume()); + + AntarchySettings.setRoyalEggHatchChance(AntarchyMobsConfig.royalEggHatchChance()); + AntarchySettings.setRoyalBoltDamage(AntarchyMobsConfig.royalBoltDamage()); + AntarchySettings.setPrinceHealth(AntarchyMobsConfig.princeHealth()); + AntarchySettings.setPrinceAttackDamage(AntarchyMobsConfig.princeAttackDamage()); + AntarchySettings.setPrinceMovementSpeed(AntarchyMobsConfig.princeMovementSpeed()); + AntarchySettings.setPrinceFlyingSpeed(AntarchyMobsConfig.princeFlyingSpeed()); + AntarchySettings.setPrinceArmor(AntarchyMobsConfig.princeArmor()); + AntarchySettings.setPrinceKnockbackResistance(AntarchyMobsConfig.princeKnockbackResistance()); + AntarchySettings.setPrinceFollowRange(AntarchyMobsConfig.princeFollowRange()); + AntarchySettings.setPrincessHealth(AntarchyMobsConfig.princessHealth()); + AntarchySettings.setPrincessAttackDamage(AntarchyMobsConfig.princessAttackDamage()); + AntarchySettings.setPrincessMovementSpeed(AntarchyMobsConfig.princessMovementSpeed()); + AntarchySettings.setPrincessFlyingSpeed(AntarchyMobsConfig.princessFlyingSpeed()); + AntarchySettings.setPrincessArmor(AntarchyMobsConfig.princessArmor()); + AntarchySettings.setPrincessKnockbackResistance(AntarchyMobsConfig.princessKnockbackResistance()); + AntarchySettings.setPrincessFollowRange(AntarchyMobsConfig.princessFollowRange()); AntarchySettings.setBrutalflyHealth(AntarchyMobsConfig.brutalflyHealth()); AntarchySettings.setBrutalflySwipeDamage(AntarchyMobsConfig.brutalflySwipeDamage()); @@ -143,9 +232,9 @@ public final class AntarchyConfigModuleForge { AntarchySettings.setBrutalflyDamageRange(AntarchyMobsConfig.brutalflyDamageRange()); AntarchySettings.setBrutalflyArmor(AntarchyMobsConfig.brutalflyArmor()); AntarchySettings.setBrutalflyArmorToughness(AntarchyMobsConfig.brutalflyArmorToughness()); + AntarchySettings.setBrutalflyKnockbackResistance(AntarchyMobsConfig.brutalflyKnockbackResistance()); AntarchySettings.setBrutalflyMovementSpeed(AntarchyMobsConfig.brutalflyMovementSpeed()); AntarchySettings.setBrutalflyFlyingSpeed(AntarchyMobsConfig.brutalflyFlyingSpeed()); - AntarchySettings.setBrutalflyKnockbackResistance(AntarchyMobsConfig.brutalflyKnockbackResistance()); AntarchySettings.setMantisHealth(AntarchyMobsConfig.mantisHealth()); AntarchySettings.setMantisAttackDamage(AntarchyMobsConfig.mantisAttackDamage()); @@ -170,11 +259,47 @@ public final class AntarchyConfigModuleForge { AntarchySettings.setRollyPollyArmor(AntarchyMobsConfig.rollyPollyArmor()); AntarchySettings.setRollyPollyRolledArmorBonus(AntarchyMobsConfig.rollyPollyRolledArmorBonus()); - AntarchySettings.setTriffidHealth(AntarchyMobsConfig.triffidHealth()); - AntarchySettings.setTriffidAttackDamage(AntarchyMobsConfig.triffidAttackDamage()); - AntarchySettings.setTriffidGrabDamage(AntarchyMobsConfig.triffidGrabDamage()); + AntarchySettings.setFlytrapHealth(AntarchyMobsConfig.flytrapHealth()); + AntarchySettings.setFlytrapAttackDamage(AntarchyMobsConfig.flytrapAttackDamage()); + AntarchySettings.setFlytrapGrabDamage(AntarchyMobsConfig.flytrapGrabDamage()); + AntarchySettings.setFlytrapSweepHitCooldownTicks(AntarchyMobsConfig.flytrapSweepHitCooldownTicks()); + AntarchySettings.setCaterpillarHealth(AntarchyMobsConfig.caterpillarHealth()); + AntarchySettings.setCaterpillarMovementSpeed(AntarchyMobsConfig.caterpillarMovementSpeed()); AntarchySettings.setCaterpillarPupationTimeSeconds(AntarchyMobsConfig.caterpillarPupationTimeSeconds()); + AntarchySettings.setFlyingSquirrelHealth(AntarchyMobsConfig.flyingSquirrelHealth()); + AntarchySettings.setFlyingSquirrelMovementSpeed(AntarchyMobsConfig.flyingSquirrelMovementSpeed()); + AntarchySettings.setButterflyHealth(AntarchyMobsConfig.butterflyHealth()); + AntarchySettings.setButterflyMovementSpeed(AntarchyMobsConfig.butterflyMovementSpeed()); + AntarchySettings.setButterflyFlyingSpeed(AntarchyMobsConfig.butterflyFlyingSpeed()); + AntarchySettings.setBedBugHealth(AntarchyMobsConfig.bedBugHealth()); + AntarchySettings.setBedBugAttackDamage(AntarchyMobsConfig.bedBugAttackDamage()); + AntarchySettings.setBedBugMovementSpeed(AntarchyMobsConfig.bedBugMovementSpeed()); + AntarchySettings.setBedBugArmor(AntarchyMobsConfig.bedBugArmor()); + + AntarchySettings.setStratosharkHealth(AntarchyMobsConfig.stratosharkHealth()); + AntarchySettings.setStratosharkAttackDamage(AntarchyMobsConfig.stratosharkAttackDamage()); + AntarchySettings.setStratosharkMovementSpeed(AntarchyMobsConfig.stratosharkMovementSpeed()); + AntarchySettings.setStratosharkFlyingSpeed(AntarchyMobsConfig.stratosharkFlyingSpeed()); + AntarchySettings.setStratosharkKnockbackResistance(AntarchyMobsConfig.stratosharkKnockbackResistance()); + AntarchySettings.setMissileSquidHealth(AntarchyMobsConfig.missileSquidHealth()); + AntarchySettings.setMissileSquidAttackDamage(AntarchyMobsConfig.missileSquidAttackDamage()); + AntarchySettings.setMissileSquidMovementSpeed(AntarchyMobsConfig.missileSquidMovementSpeed()); + AntarchySettings.setMissileSquidFlyingSpeed(AntarchyMobsConfig.missileSquidFlyingSpeed()); + AntarchySettings.setMissileSquidKnockbackResistance(AntarchyMobsConfig.missileSquidKnockbackResistance()); + AntarchySettings.setMolewormHealth(AntarchyMobsConfig.molewormHealth()); + AntarchySettings.setMolewormAttackDamage(AntarchyMobsConfig.molewormAttackDamage()); + AntarchySettings.setMolewormMovementSpeed(AntarchyMobsConfig.molewormMovementSpeed()); + AntarchySettings.setMolevoreHealth(AntarchyMobsConfig.molevoreHealth()); + AntarchySettings.setMolevoreAttackDamage(AntarchyMobsConfig.molevoreAttackDamage()); + AntarchySettings.setMolevoreSpinTicks(AntarchyMobsConfig.molevoreSpinTicks()); + AntarchySettings.setMolevoreCooldownTicks(AntarchyMobsConfig.molevoreCooldownTicks()); + AntarchySettings.setMolevoreChargeSpeed(AntarchyMobsConfig.molevoreChargeSpeed()); + AntarchySettings.setMolevoreBreakRange(AntarchyMobsConfig.molevoreBreakRange()); + AntarchySettings.setMolevoreBreakVerticalRange(AntarchyMobsConfig.molevoreBreakVerticalRange()); + AntarchySettings.setMolevoreBreakHalfWidth(AntarchyMobsConfig.molevoreBreakHalfWidth()); + AntarchySettings.setOctopusBombHealth(AntarchyMobsConfig.octopusBombHealth()); + AntarchySettings.setOctopusBombAttackDamage(AntarchyMobsConfig.octopusBombAttackDamage()); AntarchySettings.setReverieHealth(AntarchyMobsConfig.reverieHealth()); AntarchySettings.setReverieInterestRadius(AntarchyMobsConfig.reverieInterestRadius()); @@ -194,6 +319,12 @@ public final class AntarchyConfigModuleForge { AntarchySettings.setNightmareMovementSpeed(AntarchyMobsConfig.nightmareMovementSpeed()); AntarchySettings.setNightmareWeaknessTicks(AntarchyMobsConfig.nightmareWeaknessTicks()); AntarchySettings.setNightmareDreadTicks(AntarchyMobsConfig.nightmareDreadTicks()); + AntarchySettings.setDimensionalTearLifetimeTicks(AntarchyMobsConfig.dimensionalTearLifetimeTicks()); + AntarchySettings.setDimensionalTearInvertedDurationTicks(AntarchyMobsConfig.dimensionalTearInvertedDurationTicks()); + AntarchySettings.setDimensionalTearEmergenceMinIntervalTicks(AntarchyMobsConfig.dimensionalTearEmergenceMinIntervalTicks()); + AntarchySettings.setDimensionalTearEmergenceMaxIntervalTicks(AntarchyMobsConfig.dimensionalTearEmergenceMaxIntervalTicks()); + AntarchySettings.setDimensionalTearLucidEventChance(AntarchyMobsConfig.dimensionalTearLucidEventChance()); + AntarchySettings.setDimensionalTearsSpawnNaturally(AntarchyMobsConfig.dimensionalTearsSpawnNaturally()); AntarchySettings.setBasiliskPetrifyingGazeEnabled(AntarchyMobsConfig.basiliskPetrifyingGazeEnabled()); AntarchySettings.setBasiliskSpawnMaxLightLevel(AntarchyMobsConfig.basiliskSpawnMaxLightLevel()); @@ -224,57 +355,21 @@ public final class AntarchyConfigModuleForge { AntarchySettings.setLucidMovementSpeed(AntarchyMobsConfig.lucidMovementSpeed()); AntarchySettings.setLucidFlyingSpeed(AntarchyMobsConfig.lucidFlyingSpeed()); AntarchySettings.setLucidKnockbackResistance(AntarchyMobsConfig.lucidKnockbackResistance()); - - AntarchySettings.setMissileSquidHealth(AntarchyMobsConfig.missileSquidHealth()); - AntarchySettings.setMissileSquidAttackDamage(AntarchyMobsConfig.missileSquidAttackDamage()); - AntarchySettings.setMissileSquidMovementSpeed(AntarchyMobsConfig.missileSquidMovementSpeed()); - AntarchySettings.setMissileSquidFlyingSpeed(AntarchyMobsConfig.missileSquidFlyingSpeed()); - AntarchySettings.setMissileSquidKnockbackResistance(AntarchyMobsConfig.missileSquidKnockbackResistance()); - - AntarchySettings.setOctopusBombHealth(AntarchyMobsConfig.octopusBombHealth()); - AntarchySettings.setOctopusBombAttackDamage(AntarchyMobsConfig.octopusBombAttackDamage()); - - AntarchySettings.setBedBugHealth(AntarchyMobsConfig.bedBugHealth()); - AntarchySettings.setBedBugAttackDamage(AntarchyMobsConfig.bedBugAttackDamage()); - AntarchySettings.setBedBugMovementSpeed(AntarchyMobsConfig.bedBugMovementSpeed()); - AntarchySettings.setBedBugArmor(AntarchyMobsConfig.bedBugArmor()); - - AntarchySettings.setCloudSharkHealth(AntarchyMobsConfig.cloudSharkHealth()); - AntarchySettings.setCloudSharkAttackDamage(AntarchyMobsConfig.cloudSharkAttackDamage()); - AntarchySettings.setCloudSharkMovementSpeed(AntarchyMobsConfig.cloudSharkMovementSpeed()); - AntarchySettings.setCloudSharkFlyingSpeed(AntarchyMobsConfig.cloudSharkFlyingSpeed()); - AntarchySettings.setCloudSharkKnockbackResistance(AntarchyMobsConfig.cloudSharkKnockbackResistance()); - - AntarchySettings.setFlyingSquirrelHealth(AntarchyMobsConfig.flyingSquirrelHealth()); - AntarchySettings.setFlyingSquirrelMovementSpeed(AntarchyMobsConfig.flyingSquirrelMovementSpeed()); - - AntarchySettings.setMolevoreHealth(AntarchyMobsConfig.molevoreHealth()); - AntarchySettings.setMolevoreAttackDamage(AntarchyMobsConfig.molevoreAttackDamage()); - AntarchySettings.setMolevoreMovementSpeed(AntarchyMobsConfig.molevoreMovementSpeed()); - AntarchySettings.setMolevoreArmor(AntarchyMobsConfig.molevoreArmor()); - AntarchySettings.setMolevoreKnockbackResistance(AntarchyMobsConfig.molevoreKnockbackResistance()); - AntarchySettings.setMolevoreFollowRange(AntarchyMobsConfig.molevoreFollowRange()); - AntarchySettings.setMolevoreXpReward(AntarchyMobsConfig.molevoreXpReward()); - AntarchySettings.setMolevoreSpinTicks(AntarchyMobsConfig.molevoreSpinTicks()); - AntarchySettings.setMolevoreCooldownTicks(AntarchyMobsConfig.molevoreCooldownTicks()); - AntarchySettings.setMolevoreChargeSpeed(AntarchyMobsConfig.molevoreChargeSpeed()); - AntarchySettings.setMolevoreBreakRange(AntarchyMobsConfig.molevoreBreakRange()); - AntarchySettings.setMolevoreBreakVerticalRange(AntarchyMobsConfig.molevoreBreakVerticalRange()); - AntarchySettings.setMolevoreBreakHalfWidth(AntarchyMobsConfig.molevoreBreakHalfWidth()); - - AntarchySettings.setMolewormHealth(AntarchyMobsConfig.molewormHealth()); - AntarchySettings.setMolewormAttackDamage(AntarchyMobsConfig.molewormAttackDamage()); - AntarchySettings.setMolewormMovementSpeed(AntarchyMobsConfig.molewormMovementSpeed()); - - AntarchySettings.setScorpionHealth(AntarchyMobsConfig.scorpionHealth()); - AntarchySettings.setScorpionAttackDamage(AntarchyMobsConfig.scorpionAttackDamage()); - AntarchySettings.setScorpionMovementSpeed(AntarchyMobsConfig.scorpionMovementSpeed()); - AntarchySettings.setScorpionArmor(AntarchyMobsConfig.scorpionArmor()); - AntarchySettings.setScorpionKnockbackResistance(AntarchyMobsConfig.scorpionKnockbackResistance()); - - AntarchySettings.setButterflyHealth(AntarchyMobsConfig.butterflyHealth()); - AntarchySettings.setButterflyMovementSpeed(AntarchyMobsConfig.butterflyMovementSpeed()); - AntarchySettings.setButterflyFlyingSpeed(AntarchyMobsConfig.butterflyFlyingSpeed()); + AntarchySettings.setVortexHealth(AntarchyMobsConfig.vortexHealth()); + AntarchySettings.setVortexAttackDamage(AntarchyMobsConfig.vortexAttackDamage()); + AntarchySettings.setVortexMovementSpeed(AntarchyMobsConfig.vortexMovementSpeed()); + AntarchySettings.setVortexFlyingSpeed(AntarchyMobsConfig.vortexFlyingSpeed()); + AntarchySettings.setVortexMaxActiveVortexes(AntarchyMobsConfig.vortexMaxActiveVortexes()); + AntarchySettings.setWindVortexDurationTicks(AntarchyMobsConfig.windVortexDurationTicks()); + AntarchySettings.setWindVortexPullStrength(AntarchyMobsConfig.windVortexPullStrength()); + AntarchySettings.setWindVortexLaunchStrength(AntarchyMobsConfig.windVortexLaunchStrength()); + AntarchySettings.setVortexLensMinRadius(AntarchyMobsConfig.vortexLensMinRadius()); + AntarchySettings.setVortexLensMaxRadius(AntarchyMobsConfig.vortexLensMaxRadius()); + AntarchySettings.setVortexLensMinHeight(AntarchyMobsConfig.vortexLensMinHeight()); + AntarchySettings.setVortexLensMaxHeight(AntarchyMobsConfig.vortexLensMaxHeight()); + AntarchySettings.setVortexLensPullStrength(AntarchyMobsConfig.vortexLensPullStrength()); + AntarchySettings.setVortexLensPushStrength(AntarchyMobsConfig.vortexLensPushStrength()); + AntarchySettings.setVortexLensLaunchStrength(AntarchyMobsConfig.vortexLensLaunchStrength()); AntarchySettings.setDreadHallucinationSoundsEnabled(AntarchyMobsConfig.dreadHallucinationSoundsEnabled()); AntarchySettings.setDreadHallucinationSoundMinInterval(AntarchyMobsConfig.dreadHallucinationSoundMinInterval()); @@ -289,18 +384,23 @@ public final class AntarchyConfigModuleForge { AntarchySettings.setToreterrorJumpAttackKnockback(AntarchyMobsConfig.toreterrorJumpAttackKnockback()); AntarchySettings.setToreterrorSpinDamage(AntarchyMobsConfig.toreterrorSpinDamage()); AntarchySettings.setToreterrorSpinKnockback(AntarchyMobsConfig.toreterrorSpinKnockback()); - AntarchySettings.setToreterrorRangedWaterBombChance(AntarchyMobsConfig.toreterrorRangedWaterBombChance()); AntarchySettings.setToreterrorProjectileDamageMultiplier(AntarchyMobsConfig.toreterrorProjectileDamageMultiplier()); AntarchySettings.setWaterBombDamage(AntarchyMobsConfig.waterBombDamage()); AntarchySettings.setWaterBombLifetimeTicks(AntarchyMobsConfig.waterBombLifetimeTicks()); AntarchySettings.setWaterBombGravity(AntarchyMobsConfig.waterBombGravity()); AntarchySettings.setWaterBombKnockback(AntarchyMobsConfig.waterBombKnockback()); - AntarchySettings.setWaterCannonCooldownSeconds(AntarchyMobsConfig.waterCannonCooldownSeconds()); - AntarchySettings.setCreepingHorrorHealth(AntarchyMobsConfig.creepingHorrorHealth()); - AntarchySettings.setCreepingHorrorAttackDamage(AntarchyMobsConfig.creepingHorrorAttackDamage()); - AntarchySettings.setLurkingTerrorHealth(AntarchyMobsConfig.lurkingTerrorHealth()); - AntarchySettings.setLurkingTerrorAttackDamage(AntarchyMobsConfig.lurkingTerrorAttackDamage()); + AntarchySettings.setCrawlingBlightHealth(AntarchyMobsConfig.crawlingBlightHealth()); + AntarchySettings.setCrawlingBlightAttackDamage(AntarchyMobsConfig.crawlingBlightAttackDamage()); + AntarchySettings.setSkulkingFrightHealth(AntarchyMobsConfig.skulkingFrightHealth()); + AntarchySettings.setSkulkingFrightAttackDamage(AntarchyMobsConfig.skulkingFrightAttackDamage()); + AntarchySettings.setManticoreHealth(AntarchyMobsConfig.manticoreHealth()); + AntarchySettings.setManticoreAttackDamage(AntarchyMobsConfig.manticoreAttackDamage()); + AntarchySettings.setManticoreStingPoisonTicks(AntarchyMobsConfig.manticoreStingPoisonTicks()); + AntarchySettings.setQueenManticoreCap(AntarchyMobsConfig.queenManticoreCap()); + AntarchySettings.setQueenManticoreSummonCooldownTicks(AntarchyMobsConfig.queenManticoreSummonCooldownTicks()); + AntarchySettings.setQueenManticoreSummonCount(AntarchyMobsConfig.queenManticoreSummonCount()); + AntarchySettings.setQueenManticoreSummonRange(AntarchyMobsConfig.queenManticoreSummonRange()); AntarchySettings.setJerryInfantHealth(AntarchyMobsConfig.jerryInfantHealth()); AntarchySettings.setJerryInfantAttackDamage(AntarchyMobsConfig.jerryInfantAttackDamage()); AntarchySettings.setJerryMatureHealth(AntarchyMobsConfig.jerryMatureHealth()); @@ -318,7 +418,6 @@ public final class AntarchyConfigModuleForge { AntarchySettings.setHerculesBeetleDamageRange(AntarchyMobsConfig.herculesBeetleDamageRange()); AntarchySettings.setOuranwoodDeerHealth(AntarchyMobsConfig.ouranwoodDeerHealth()); AntarchySettings.setGlimmerHealth(AntarchyMobsConfig.glimmerHealth()); - AntarchySettings.setAntDanceRadius(AntarchyMobsConfig.antDanceRadius()); } @@ -351,6 +450,10 @@ public final class AntarchyConfigModuleForge { AntarchySettings.setUltimateCrossbowChargeSpeedMultiplier(AntarchyToolsConfig.ultimateCrossbowChargeSpeedMultiplier()); AntarchySettings.setUltimateCrossbowEnchantability(AntarchyToolsConfig.ultimateCrossbowEnchantability()); + AntarchySettings.setUltimateMaceDamageMultiplier(AntarchyToolsConfig.ultimateMaceDamageMultiplier()); + AntarchySettings.setUltimateMaceAttackSpeed(AntarchyToolsConfig.ultimateMaceAttackSpeed()); + AntarchySettings.setUltimateMaceEnchantability(AntarchyToolsConfig.ultimateMaceEnchantability()); + AntarchySettings.setUltimateArmorComesEnchanted(AntarchyToolsConfig.ultimateArmorComesEnchanted()); AntarchySettings.setUltimateArmorEnchantability(AntarchyToolsConfig.ultimateArmorEnchantability()); AntarchySettings.setUltimateHelmetArmorValue(AntarchyToolsConfig.ultimateHelmetArmorValue()); @@ -363,6 +466,66 @@ public final class AntarchyConfigModuleForge { AntarchySettings.setUltimateBootsArmorToughness(AntarchyToolsConfig.ultimateBootsArmorToughness()); AntarchySettings.setUltimateArmorKnockbackResistance(AntarchyToolsConfig.ultimateArmorKnockbackResistance()); + AntarchySettings.setRoyalArmorComesEnchanted(AntarchyToolsConfig.royalArmorComesEnchanted()); + AntarchySettings.setRoyalArmorProtectionLevel(AntarchyToolsConfig.royalArmorProtectionLevel()); + AntarchySettings.setRoyalArmorEnchantability(AntarchyToolsConfig.royalArmorEnchantability()); + AntarchySettings.setRoyalArmorDurabilityMultiplier(AntarchyToolsConfig.royalArmorDurabilityMultiplier()); + AntarchySettings.setRoyalGuardianHelmetArmorValue(AntarchyToolsConfig.royalGuardianHelmetArmorValue()); + AntarchySettings.setRoyalGuardianChestplateArmorValue(AntarchyToolsConfig.royalGuardianChestplateArmorValue()); + AntarchySettings.setRoyalGuardianLeggingsArmorValue(AntarchyToolsConfig.royalGuardianLeggingsArmorValue()); + AntarchySettings.setRoyalGuardianBootsArmorValue(AntarchyToolsConfig.royalGuardianBootsArmorValue()); + AntarchySettings.setRoyalGuardianArmorToughness(AntarchyToolsConfig.royalGuardianArmorToughness()); + AntarchySettings.setRoyalGuardianArmorKnockbackResistance(AntarchyToolsConfig.royalGuardianArmorKnockbackResistance()); + AntarchySettings.setRoyalGuardianHelmetJudgmentBonus(AntarchyToolsConfig.royalGuardianHelmetJudgmentBonus()); + AntarchySettings.setRoyalGuardianChestplateJudgmentBonus(AntarchyToolsConfig.royalGuardianChestplateJudgmentBonus()); + AntarchySettings.setRoyalGuardianLeggingsJudgmentBonus(AntarchyToolsConfig.royalGuardianLeggingsJudgmentBonus()); + AntarchySettings.setRoyalGuardianBootsJudgmentBonus(AntarchyToolsConfig.royalGuardianBootsJudgmentBonus()); + AntarchySettings.setRoyalGuardianJudgmentDurationTicks(AntarchyToolsConfig.royalGuardianJudgmentDurationTicks()); + AntarchySettings.setRoyalAssailantHelmetArmorValue(AntarchyToolsConfig.royalAssailantHelmetArmorValue()); + AntarchySettings.setRoyalAssailantChestplateArmorValue(AntarchyToolsConfig.royalAssailantChestplateArmorValue()); + AntarchySettings.setRoyalAssailantLeggingsArmorValue(AntarchyToolsConfig.royalAssailantLeggingsArmorValue()); + AntarchySettings.setRoyalAssailantBootsArmorValue(AntarchyToolsConfig.royalAssailantBootsArmorValue()); + AntarchySettings.setRoyalAssailantArmorToughness(AntarchyToolsConfig.royalAssailantArmorToughness()); + AntarchySettings.setRoyalAssailantArmorKnockbackResistance(AntarchyToolsConfig.royalAssailantArmorKnockbackResistance()); + AntarchySettings.setRoyalAssailantHelmetDoubleDamageChance(AntarchyToolsConfig.royalAssailantHelmetDoubleDamageChance()); + AntarchySettings.setRoyalAssailantChestplateDoubleDamageChance(AntarchyToolsConfig.royalAssailantChestplateDoubleDamageChance()); + AntarchySettings.setRoyalAssailantLeggingsDoubleDamageChance(AntarchyToolsConfig.royalAssailantLeggingsDoubleDamageChance()); + AntarchySettings.setRoyalAssailantBootsDoubleDamageChance(AntarchyToolsConfig.royalAssailantBootsDoubleDamageChance()); + AntarchySettings.setRoyalGuardianSwordAttackDamage(AntarchyToolsConfig.royalGuardianSwordAttackDamage()); + AntarchySettings.setGiantFryingPanAttackDamage(AntarchyToolsConfig.giantFryingPanAttackDamage()); + AntarchySettings.setGiantFryingPanCookTimeTicks(AntarchyToolsConfig.giantFryingPanCookTimeTicks()); + AntarchySettings.setRoyalGuardianSwordAttackSpeed(AntarchyToolsConfig.royalGuardianSwordAttackSpeed()); + AntarchySettings.setRoyalGuardianSwordElementalCooldownTicks(AntarchyToolsConfig.royalGuardianSwordElementalCooldownTicks()); + AntarchySettings.setRoyalGuardianSwordFirePrimaryDamage(AntarchyToolsConfig.royalGuardianSwordFirePrimaryDamage()); + AntarchySettings.setRoyalGuardianSwordFireSplashDamage(AntarchyToolsConfig.royalGuardianSwordFireSplashDamage()); + AntarchySettings.setRoyalGuardianSwordFrostSpikeDamage(AntarchyToolsConfig.royalGuardianSwordFrostSpikeDamage()); + AntarchySettings.setRoyalGuardianSwordStormPrimaryDamage(AntarchyToolsConfig.royalGuardianSwordStormPrimaryDamage()); + AntarchySettings.setRoyalGuardianSwordStormJumpDamage(AntarchyToolsConfig.royalGuardianSwordStormJumpDamage()); + AntarchySettings.setRoyalGuardianSwordStormMaxJumps(AntarchyToolsConfig.royalGuardianSwordStormMaxJumps()); + AntarchySettings.setRoyalGuardianSwordStormJumpRange(AntarchyToolsConfig.royalGuardianSwordStormJumpRange()); + AntarchySettings.setRoyalAssailantBattleAxeAttackDamage(AntarchyToolsConfig.royalAssailantBattleAxeAttackDamage()); + AntarchySettings.setRoyalAssailantBattleAxeAttackSpeed(AntarchyToolsConfig.royalAssailantBattleAxeAttackSpeed()); + AntarchySettings.setRoyalWeaponAttackReachBonus(AntarchyToolsConfig.royalWeaponAttackReachBonus()); + AntarchySettings.setRoyalWeaponAttackKnockbackBonus(AntarchyToolsConfig.royalWeaponAttackKnockbackBonus()); + AntarchySettings.setRoyalWeaponDurability(AntarchyToolsConfig.royalWeaponDurability()); + AntarchySettings.setRoyalWeaponEnchantability(AntarchyToolsConfig.royalWeaponEnchantability()); + AntarchySettings.setRoyalGuardianShieldDurability(AntarchyToolsConfig.royalGuardianShieldDurability()); + AntarchySettings.setRoyalGuardianMusterRange(AntarchyToolsConfig.royalGuardianMusterRange()); + AntarchySettings.setRoyalGuardianMusterDurationTicks(AntarchyToolsConfig.royalGuardianMusterDurationTicks()); + AntarchySettings.setRoyalGuardianMusterCooldownTicks(AntarchyToolsConfig.royalGuardianMusterCooldownTicks()); + AntarchySettings.setRoyalGuardianMusterMobCap(AntarchyToolsConfig.royalGuardianMusterMobCap()); + AntarchySettings.setRoyalGuardianMusterDamageReduction(AntarchyToolsConfig.royalGuardianMusterDamageReduction()); + AntarchySettings.setRoyalGuardianMusterAttackBonus(AntarchyToolsConfig.royalGuardianMusterAttackBonus()); + AntarchySettings.setRoyalGuardianMusterSpeedBonus(AntarchyToolsConfig.royalGuardianMusterSpeedBonus()); + AntarchySettings.setRoyalGuardianMusterPassiveDamageFloor(AntarchyToolsConfig.royalGuardianMusterPassiveDamageFloor()); + AntarchySettings.setRoyalGuardianBoundaryRadius(AntarchyToolsConfig.royalGuardianBoundaryRadius()); + AntarchySettings.setRoyalGuardianBoundaryDurationTicks(AntarchyToolsConfig.royalGuardianBoundaryDurationTicks()); + AntarchySettings.setRoyalGuardianBoundaryCooldownTicks(AntarchyToolsConfig.royalGuardianBoundaryCooldownTicks()); + AntarchySettings.setRoyalGuardianBoundaryStrengthAmplifier(AntarchyToolsConfig.royalGuardianBoundaryStrengthAmplifier()); + AntarchySettings.setRoyalGuardianBoundaryArrestTicks(AntarchyToolsConfig.royalGuardianBoundaryArrestTicks()); + AntarchySettings.setRoyalGuardianBoundaryDropTicks(AntarchyToolsConfig.royalGuardianBoundaryDropTicks()); + AntarchySettings.setRoyalGuardianBoundaryProjectileCap(AntarchyToolsConfig.royalGuardianBoundaryProjectileCap()); + AntarchySettings.setBattleAxeAttackDamage(AntarchyToolsConfig.battleAxeAttackDamage()); AntarchySettings.setBattleAxeAttackSpeed(AntarchyToolsConfig.battleAxeAttackSpeed()); @@ -389,6 +552,7 @@ public final class AntarchyConfigModuleForge { AntarchySettings.setKrakensGraspTentacleSlownessAmplifier(AntarchyToolsConfig.krakensGraspTentacleSlownessAmplifier()); AntarchySettings.setKrakensGraspTentacleSlownessRefreshTicks(AntarchyToolsConfig.krakensGraspTentacleSlownessRefreshTicks()); AntarchySettings.setScorpionWhipBaseDamage(AntarchyToolsConfig.scorpionWhipBaseDamage()); + AntarchySettings.setScorpionWhipReachBonus(AntarchyToolsConfig.scorpionWhipReachBonus()); AntarchySettings.setScorpionWhipPoisonDurationTicks(AntarchyToolsConfig.scorpionWhipPoisonDurationTicks()); AntarchySettings.setScorpionWhipTetherMaxRange(AntarchyToolsConfig.scorpionWhipTetherMaxRange()); AntarchySettings.setScorpionWhipSnapBonusDamage(AntarchyToolsConfig.scorpionWhipSnapBonusDamage()); @@ -398,6 +562,9 @@ public final class AntarchyConfigModuleForge { AntarchySettings.setBloodCrystalKatanaAttackDamage(AntarchyToolsConfig.bloodCrystalKatanaAttackDamage()); AntarchySettings.setBloodCrystalKatanaLaunchStrength(AntarchyToolsConfig.bloodCrystalKatanaLaunchStrength()); AntarchySettings.setBloodCrystalKatanaTrailDurationTicks(AntarchyToolsConfig.bloodCrystalKatanaTrailDurationTicks()); + AntarchySettings.setBloodCrystalKatanaReachBonus(AntarchyToolsConfig.bloodCrystalKatanaReachBonus()); + AntarchySettings.setBloodCrystalKatanaInvulnTicks(AntarchyToolsConfig.bloodCrystalKatanaInvulnTicks()); + AntarchySettings.setBloodCrystalKatanaDashCooldownTicks(AntarchyToolsConfig.bloodCrystalKatanaDashCooldownTicks()); AntarchySettings.setNightmareHelmetArmorValue(AntarchyToolsConfig.nightmareHelmetArmorValue()); AntarchySettings.setNightmareChestplateArmorValue(AntarchyToolsConfig.nightmareChestplateArmorValue()); @@ -434,8 +601,6 @@ public final class AntarchyConfigModuleForge { AntarchySettings.setShrinkingPotionDelta(AntarchyToolsConfig.shrinkingPotionDelta()); AntarchySettings.setGrowthPotionDelta(AntarchyToolsConfig.growthPotionDelta()); - AntarchySettings.setInvertProjectilesFromInvertedPlayers(AntarchyToolsConfig.invertProjectilesFromInvertedPlayers()); - AntarchySettings.setGravityGunEnabled(AntarchyToolsConfig.gravityGunEnabled()); AntarchySettings.setGravityGunBlocksEnabled(AntarchyToolsConfig.gravityGunBlocksEnabled()); AntarchySettings.setGravityGunEntitiesEnabled(AntarchyToolsConfig.gravityGunEntitiesEnabled()); @@ -444,10 +609,23 @@ public final class AntarchyConfigModuleForge { AntarchySettings.setGravityGunBlastStrength(AntarchyToolsConfig.gravityGunBlastStrength()); AntarchySettings.setGravityGunCooldownSeconds(AntarchyToolsConfig.gravityGunCooldownSeconds()); AntarchySettings.setGravityGunMaxHoldDistance(AntarchyToolsConfig.gravityGunMaxHoldDistance()); + AntarchySettings.setEyeOfTheStormEnabled(AntarchyToolsConfig.eyeOfTheStormEnabled()); + AntarchySettings.setEyeOfTheStormUpdraftCooldownTicks(AntarchyToolsConfig.eyeOfTheStormUpdraftCooldownTicks()); + AntarchySettings.setEyeOfTheStormUpdraftLaunchStrength(AntarchyToolsConfig.eyeOfTheStormUpdraftLaunchStrength()); + AntarchySettings.setEyeOfTheStormUpdraftHeight(AntarchyToolsConfig.eyeOfTheStormUpdraftHeight()); + AntarchySettings.setEyeOfTheStormUpdraftRadius(AntarchyToolsConfig.eyeOfTheStormUpdraftRadius()); + AntarchySettings.setEyeOfTheStormUpdraftDurationTicks(AntarchyToolsConfig.eyeOfTheStormUpdraftDurationTicks()); + AntarchySettings.setEyeOfTheStormSurgeCooldownTicks(AntarchyToolsConfig.eyeOfTheStormSurgeCooldownTicks()); + AntarchySettings.setEyeOfTheStormSurgeRange(AntarchyToolsConfig.eyeOfTheStormSurgeRange()); + AntarchySettings.setEyeOfTheStormSurgeDurationTicks(AntarchyToolsConfig.eyeOfTheStormSurgeDurationTicks()); + AntarchySettings.setEyeOfTheStormSurgeRadius(AntarchyToolsConfig.eyeOfTheStormSurgeRadius()); + AntarchySettings.setEyeOfTheStormSurgeHeight(AntarchyToolsConfig.eyeOfTheStormSurgeHeight()); + AntarchySettings.setEyeOfTheStormSurgePullStrength(AntarchyToolsConfig.eyeOfTheStormSurgePullStrength()); + AntarchySettings.setEyeOfTheStormSurgeReturnStrength(AntarchyToolsConfig.eyeOfTheStormSurgeReturnStrength()); + AntarchySettings.setEyeOfTheStormSurgeDamage(AntarchyToolsConfig.eyeOfTheStormSurgeDamage()); AntarchySettings.setCritterCageMaxCapturableWidth(AntarchyToolsConfig.critterCageMaxCapturableWidth()); AntarchySettings.setCritterCageMaxCapturableHeight(AntarchyToolsConfig.critterCageMaxCapturableHeight()); - AntarchySettings.setDuctTapeRepairPercentPerUse(AntarchyToolsConfig.ductTapeRepairPercentPerUse()); AntarchySettings.setPotentNyxiteInvertedDurationSeconds(AntarchyToolsConfig.potentNyxiteInvertedDurationSeconds()); AntarchySettings.setCorneaEarNightVisionSeconds(AntarchyToolsConfig.corneaEarNightVisionSeconds()); @@ -474,22 +652,30 @@ public final class AntarchyConfigModuleForge { AntarchySettings.setDiamondMinecartCoastDeceleration(AntarchyMiscConfig.diamondMinecartCoastDeceleration()); AntarchySettings.setDiamondMinecartMobDamageEnabled(AntarchyMiscConfig.diamondMinecartMobDamageEnabled()); AntarchySettings.setDiamondMinecartMaxMobDamage(AntarchyMiscConfig.diamondMinecartMaxMobDamage()); + AntarchySettings.setHoverboardMaxSpeed(AntarchyMiscConfig.hoverboardMaxSpeed()); + AntarchySettings.setHoverboardAcceleration(AntarchyMiscConfig.hoverboardAcceleration()); AntarchySettings.setPermanentPortalsEnabled(AntarchyMiscConfig.permanentPortalsEnabled()); AntarchySettings.setPermanentPortalsFlintAndSteelEnabled(AntarchyMiscConfig.permanentPortalsFlintAndSteelEnabled()); AntarchySettings.setElythiaPortalEnabled(AntarchyMiscConfig.elythiaPortalEnabled()); AntarchySettings.setThoraxisPortalEnabled(AntarchyMiscConfig.thoraxisPortalEnabled()); AntarchySettings.setCavarynPortalEnabled(AntarchyMiscConfig.cavarynPortalEnabled()); - - - // Misc + AntarchySettings.setPortalGunCanFireThroughGlass(AntarchyMiscConfig.portalGunCanFireThroughGlass()); + AntarchySettings.setPortalGunCanFireThroughLiquid(AntarchyMiscConfig.portalGunCanFireThroughLiquid()); + AntarchySettings.setPortalGunCanPortalsResizeWhenCreated(AntarchyMiscConfig.portalGunCanPortalsResizeWhenCreated()); + AntarchySettings.setPortalGunCanPortalProjectilesChunkload(AntarchyMiscConfig.portalGunCanPortalProjectilesChunkload()); + AntarchySettings.setPortalGunSeeThroughPortals(AntarchyMiscConfig.portalGunSeeThroughPortals()); + AntarchySettings.setPortalGunFancyPortals(AntarchyMiscConfig.portalGunFancyPortals()); + AntarchySettings.setPortalGunMaxShootDistance(AntarchyMiscConfig.portalGunMaxShootDistance()); + AntarchySettings.setPortalGunMinFloorExitSpeed(AntarchyMiscConfig.portalGunMinFloorExitSpeed()); + AntarchySettings.setPortalGunMaxLiveViews(AntarchyMiscConfig.portalGunMaxLiveViews()); + AntarchySettings.setPortalGunMaxExitSpeed(AntarchyMiscConfig.portalGunMaxExitSpeed()); + AntarchySettings.setPortalGunMoonPullsBlocks(AntarchyMiscConfig.portalGunMoonPullsBlocks()); + AntarchySettings.setPortalGunMoonPortalSeconds(AntarchyMiscConfig.portalGunMoonPortalSeconds()); + AntarchySettings.setPortalGunMoonBlockCap(AntarchyMiscConfig.portalGunMoonBlockCap()); AntarchySettings.setElythiaFireflyParticlesEnabled(AntarchyMiscConfig.elythiaFireflyParticlesEnabled()); - AntarchySettings.setDreamSandEnabled(AntarchyMiscConfig.dreamSandEnabled()); - AntarchySettings.setDreamSandJumpVelocityMultiplier(AntarchyMiscConfig.dreamSandJumpVelocityMultiplier()); - AntarchySettings.setDreamSandGravityMultiplier(AntarchyMiscConfig.dreamSandGravityMultiplier()); AntarchySettings.setDreamSandFallingBlockGravityMultiplier(AntarchyMiscConfig.dreamSandFallingBlockGravityMultiplier()); - AntarchySettings.setDreamSandEffectDurationSeconds(AntarchyMiscConfig.dreamSandEffectDurationSeconds()); AntarchySettings.setIchorWitherEnabled(AntarchyMiscConfig.ichorWitherEnabled()); diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyForge.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyForge.java index c16b899a..9a115b91 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyForge.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyForge.java @@ -1,25 +1,28 @@ package com.craisinlord.antarchy.forge; +import com.craisinlord.anthology.effect.AnthologyEffects; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.compat.infinity.InfinityCompat; import com.craisinlord.antarchy.compat.infinity.InfinityCompatVersion; import com.craisinlord.antarchy.content.AntarchyGameRules; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchySoundEvents; -import com.craisinlord.antarchy.content.enchantment.AntarchyEnchantments; +import com.craisinlord.antarchy.content.advancement.AntarchyAdvancementTriggers; import com.craisinlord.antarchy.content.item.BloodCrystalKatanaItem; import com.craisinlord.antarchy.content.item.ScorpionWhipTetherSync; import com.craisinlord.antarchy.content.network.BloodCrystalKatanaTrailPayload; +import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageSync; import com.craisinlord.antarchy.content.portal.PermanentPortalType; import com.craisinlord.antarchy.forge.registry.*; -import com.craisinlord.antarchy.forge.network.AntarchyGravityNetworking; +import com.craisinlord.antarchy.content.enchantment.AntarchyEnchantments; +import com.craisinlord.antarchy.forge.network.AntarchyForgeNetworkCore; +import net.minecraftforge.common.ForgeMod; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.fml.ModList; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; - @Mod(Antarchy.MODID) public class AntarchyForge { public static IEventBus modEventBusTempHolder = null; @@ -27,24 +30,29 @@ public class AntarchyForge { public AntarchyForge() { IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); modEventBusTempHolder = modEventBus; + AntarchyAdvancementTriggers.register(); bootstrapGameRules(); AntarchyConfigModuleForge.init(); AntarchySoundEvents.bind( AntarchyForgeSounds.SQUIDZOOKA_FIRE, - AntarchyForgeSounds.SHRINK_RAY_SOUND, - AntarchyForgeSounds.GROWTH_RAY_SOUND, - AntarchyForgeSounds.SIZE_RAY_CHARGE, + AntarchyForgeSounds.SHRINK_RAY_CHARGE, + AntarchyForgeSounds.SHRINK_RAY_LOOP, + AntarchyForgeSounds.GROWTH_RAY_CHARGE, + AntarchyForgeSounds.GROWTH_RAY_LOOP, + AntarchyForgeSounds.SIZE_RAY_WEAKSHOT, + AntarchyForgeSounds.SIZE_RAY_MEDIUMSHOT, + AntarchyForgeSounds.SIZE_RAY_CRITSHOT, AntarchyForgeSounds.ANT_AMBIENT, AntarchyForgeSounds.ANT_IDLE, AntarchyForgeSounds.ANT_HURT, AntarchyForgeSounds.ANT_BITE, AntarchyForgeSounds.ANT_GATHER, AntarchyForgeSounds.ANT_NEST, - AntarchyForgeSounds.CLOUD_SHARK_BITE, - AntarchyForgeSounds.CLOUD_SHARK_IDLE, - AntarchyForgeSounds.CLOUD_SHARK_HURT, - AntarchyForgeSounds.CLOUD_SHARK_DEATH, - AntarchyForgeSounds.CLOUD_SHARK_FLY, + AntarchyForgeSounds.STRATOSHARK_BITE, + AntarchyForgeSounds.STRATOSHARK_IDLE, + AntarchyForgeSounds.STRATOSHARK_HURT, + AntarchyForgeSounds.STRATOSHARK_DEATH, + AntarchyForgeSounds.STRATOSHARK_FLY, AntarchyForgeSounds.CATERPILLAR_IDLE, AntarchyForgeSounds.CATERPILLAR_HURT, AntarchyForgeSounds.CATERPILLAR_CRAWL, @@ -52,6 +60,7 @@ public class AntarchyForge { AntarchyForgeSounds.BRUTALFLY_IDLE, AntarchyForgeSounds.BRUTALFLY_DEATH, AntarchyForgeSounds.ELYTHIA_FIREFLY_AMBIENT, + AntarchyForgeSounds.ELYTHIA_OURANWOOD_FOREST_AMBIENT, AntarchyForgeSounds.MISSILE_SQUID_AMBIENT, AntarchyForgeSounds.MISSILE_SQUID_HURT, AntarchyForgeSounds.MISSILE_SQUID_DEATH, @@ -103,16 +112,20 @@ public class AntarchyForge { AntarchyForgeSounds.NIGHTMARE_DEATH, AntarchyForgeSounds.NIGHTMARE_BITE, AntarchyForgeSounds.NIGHTMARE_FLAP, - AntarchyForgeSounds.TRIFFID_ATTACK, - AntarchyForgeSounds.TRIFFID_GRAB, - AntarchyForgeSounds.TRIFFID_HURT, - AntarchyForgeSounds.TRIFFID_DEATH, - AntarchyForgeSounds.TRIFFID_HISS, - AntarchyForgeSounds.TRIFFID_GROWL, + AntarchyForgeSounds.FLYTRAP_ATTACK, + AntarchyForgeSounds.FLYTRAP_GRAB, + AntarchyForgeSounds.FLYTRAP_HURT, + AntarchyForgeSounds.FLYTRAP_DEATH, + AntarchyForgeSounds.FLYTRAP_HISS, + AntarchyForgeSounds.FLYTRAP_GROWL, AntarchyForgeSounds.MANTIS_AMBIENT, AntarchyForgeSounds.MANTIS_HURT, AntarchyForgeSounds.MANTIS_ATTACK, AntarchyForgeSounds.MANTIS_FLY_LOOP, + AntarchyForgeSounds.MANTICORE_IDLE, + AntarchyForgeSounds.MANTICORE_WALK, + AntarchyForgeSounds.MANTICORE_FLY, + AntarchyForgeSounds.MANTICORE_BITE, AntarchyForgeSounds.GRAVITY_GUN_PICKUP, AntarchyForgeSounds.GRAVITY_GUN_DROP, AntarchyForgeSounds.GRAVITY_GUN_HOLD_LOOP, @@ -157,13 +170,13 @@ public class AntarchyForge { AntarchyForgeSounds.STINK_BUG_IDLE, AntarchyForgeSounds.CAVARYN_HEARTBEAT, AntarchyForgeSounds.ROLLY_POLLY_IDLE, - AntarchyForgeSounds.CREEPING_HORROR_GROWL, - AntarchyForgeSounds.CREEPING_HORROR_HURT, - AntarchyForgeSounds.CREEPING_HORROR_BITE, - AntarchyForgeSounds.LURKING_TERROR_SNARL, - AntarchyForgeSounds.LURKING_TERROR_HURT, - AntarchyForgeSounds.LURKING_TERROR_BITE, - AntarchyForgeSounds.LURKING_TERROR_FLY_LOOP, + AntarchyForgeSounds.CRAWLING_BLIGHT_GROWL, + AntarchyForgeSounds.CRAWLING_BLIGHT_HURT, + AntarchyForgeSounds.CRAWLING_BLIGHT_BITE, + AntarchyForgeSounds.SKULKING_FRIGHT_SNARL, + AntarchyForgeSounds.SKULKING_FRIGHT_HURT, + AntarchyForgeSounds.SKULKING_FRIGHT_BITE, + AntarchyForgeSounds.SKULKING_FRIGHT_FLY_LOOP, AntarchyForgeSounds.DUCT_TAPE_USE, AntarchyForgeSounds.HERCULES_BEETLE_IDLE, AntarchyForgeSounds.HERCULES_BEETLE_HURT, @@ -171,10 +184,10 @@ public class AntarchyForge { AntarchyForgeSounds.HERCULES_BEETLE_CRY, AntarchyForgeSounds.HERCULES_BEETLE_CHARGE_START, AntarchyForgeSounds.HERCULES_BEETLE_KNOCKED_DOWN, - AntarchyForgeSounds.JUMPY_BUG_IDLE, + AntarchyForgeSounds.SPRINGBUG_IDLE, AntarchyForgeSounds.SPIT_BUG_IDLE, - AntarchyForgeSounds.JUMPY_BUG_HURT, - AntarchyForgeSounds.JUMPY_BUG_JUMP, + AntarchyForgeSounds.SPRINGBUG_HURT, + AntarchyForgeSounds.SPRINGBUG_JUMP, AntarchyForgeSounds.SPIT_BUG_HURT, AntarchyForgeSounds.SPIT_BUG_SPIT, AntarchyForgeSounds.BRUTALFLY_SPIT, @@ -188,33 +201,75 @@ public class AntarchyForge { AntarchyForgeSounds.JERRY_ADULT_IDLE, AntarchyForgeSounds.JERRY_ADULT_HURT, AntarchyForgeSounds.JERRY_ADULT_DEATH, - AntarchyForgeSounds.JERRY_ADULT_ATTACK + AntarchyForgeSounds.JERRY_ADULT_ATTACK, + AntarchyForgeSounds.WORM_HOOK_FLYING, + AntarchyForgeSounds.BLOOD_CRYSTAL_KATANA_DASH, + AntarchyForgeSounds.BLOOD_CRYSTAL_ARMOR_EQUIP, + AntarchyForgeSounds.BLOODGLASS_WARD_HEART_BREAK, + AntarchyForgeSounds.BLOODGLASS_WARD_HEART_REGEN, + AntarchyForgeSounds.KING_IDLE, + AntarchyForgeSounds.KING_HURT, + AntarchyForgeSounds.KING_DEATH, + AntarchyForgeSounds.KING_BITE, + AntarchyForgeSounds.QUEEN_IDLE, + AntarchyForgeSounds.QUEEN_HURT, + AntarchyForgeSounds.QUEEN_DEATH, + AntarchyForgeSounds.QUEEN_BITE, + AntarchyForgeSounds.QUEEN_ROAR, + AntarchyForgeSounds.KING_BEAM_SHOOT, + AntarchyForgeSounds.KING_FIREBALL_SHOOT, + AntarchyForgeSounds.KING_ICE_SPIKES, + AntarchyForgeSounds.KING_DECREE_CAST, + AntarchyForgeSounds.QUEEN_BEAM_SHOOT, + AntarchyForgeSounds.QUEEN_BEAM_START, + AntarchyForgeSounds.QUEEN_BEAM_LOOP, + AntarchyForgeSounds.QUEEN_BEAM_END, + AntarchyForgeSounds.KING_STOMP, + AntarchyForgeSounds.KING_ROAR, + AntarchyForgeSounds.KING_WING_FLAP, + AntarchyForgeSounds.KING_FLY_LOOP, + AntarchyForgeSounds.QUEEN_FLY_LOOP, + AntarchyForgeSounds.PRINCE_IDLE, + AntarchyForgeSounds.PRINCE_BITE, + AntarchyForgeSounds.PRINCE_SHOOT, + AntarchyForgeSounds.PRINCE_FLY, + AntarchyForgeSounds.PRINCE_STEP, + AntarchyForgeSounds.PRINCESS_IDLE, + AntarchyForgeSounds.PRINCESS_BITE, + AntarchyForgeSounds.PRINCESS_SHOOT, + AntarchyForgeSounds.PRINCESS_FLY, + AntarchyForgeSounds.PRINCESS_STEP, + AntarchyForgeSounds.KING_DECREE, + AntarchyForgeSounds.KING_SUCCESS, + AntarchyForgeSounds.KING_JUDGEMENT ); + AntarchySoundEvents.bindDimensionalTearSounds( + AntarchyForgeSounds.DIMENSIONAL_TEAR_OPEN, + AntarchyForgeSounds.DIMENSIONAL_TEAR_IDLE, + AntarchyForgeSounds.DIMENSIONAL_TEAR_CREATURE_LEAVES, + AntarchyForgeSounds.DIMENSIONAL_TEAR_CLOSE + ); + AntarchySoundEvents.bindHoverboardSounds(AntarchyForgeSounds.HOVERBOARD_MOUNT, AntarchyForgeSounds.HOVERBOARD_DISMOUNT, AntarchyForgeSounds.HOVERBOARD_IDLE); bindCommonObjects(); - ScorpionWhipTetherSync.setSink((player, targetId) -> com.craisinlord.antarchy.forge.network.AntarchyForgeNetworkCore.sendToTrackingEntity( + ScorpionWhipTetherSync.setSink((player, targetId) -> AntarchyForgeNetworkCore.sendToTrackingEntity( player, new com.craisinlord.antarchy.content.network.ScorpionWhipTetherPayload(player.getId(), targetId) )); - BloodCrystalKatanaItem.setTrailCallback((player, durationTicks) -> com.craisinlord.antarchy.forge.network.AntarchyForgeNetworkCore.sendToTrackingEntity( + com.craisinlord.antarchy.content.item.WormHookTetherSync.setSink((player, hookId) -> AntarchyForgeNetworkCore.sendToTrackingEntity( + player, + new com.craisinlord.antarchy.content.network.WormHookTetherPayload(player.getId(), hookId) + )); + AntarchyObjects.setWormHookProjectile(() -> AntarchyForgeEntites.WORM_HOOK_PROJECTILE.get()); + AntarchyObjects.setWormHook(() -> AntarchyForgeItems.WORM_HOOK.get()); + BloodCrystalKatanaItem.setTrailCallback((player, durationTicks) -> AntarchyForgeNetworkCore.sendToTrackingEntity( player, new BloodCrystalKatanaTrailPayload(player.getId(), durationTicks) )); - com.craisinlord.antarchy.content.gravity.AntarchyGravityApi.setSyncDispatcher(AntarchyGravityNetworking::syncEntity); - com.craisinlord.antarchy.content.time.TimeDilationApi.setSyncDispatcher( - com.craisinlord.antarchy.forge.network.AntarchyTimeDilationNetworking::syncRate); - com.craisinlord.antarchy.content.time.TimeDilationApi.setFieldSyncDispatcher( - com.craisinlord.antarchy.forge.network.AntarchyTimeDilationNetworking::syncFields); - com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageSync.setSendToPlayer( - com.craisinlord.antarchy.forge.network.AntarchyForgeNetworkCore::sendToPlayer); - com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageSync.setSyncSelfAndTracking(player -> - com.craisinlord.antarchy.forge.network.AntarchyForgeNetworkCore.sendToTrackingEntity( - player, - com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageSync.payload(player) - )); - com.craisinlord.antarchy.content.effect.AntarchySizeScaling.register( - com.craisinlord.antarchy.forge.registry.AntarchyForgeMisc.SHRINKING_EFFECT, - com.craisinlord.antarchy.forge.registry.AntarchyForgeMisc.GROWTH_EFFECT - ); + TigerEyeCamouflageSync.setSendToPlayer(AntarchyForgeNetworkCore::sendToPlayer); + TigerEyeCamouflageSync.setSyncSelfAndTracking(player -> AntarchyForgeNetworkCore.sendToTrackingEntity( + player, + TigerEyeCamouflageSync.payload(player) + )); if (isSupportedInfinityLoaded()) { InfinityCompat.bind(new ForgeInfinityCompat()); } @@ -229,6 +284,10 @@ public class AntarchyForge { AntarchyForgeCreativeModeTabs.register(modEventBus); AntarchyForgeEntityAttributes.register(modEventBus); AntarchyForgePayloadHandlers.register(); + com.craisinlord.antarchy.content.network.AntarchyGameNetworking.setSender(payload -> + com.craisinlord.antarchy.forge.network.AntarchyForgeNetworkCore.sendToServer(payload)); + com.craisinlord.antarchy.content.network.AntarchyGameNetworkHandler.setResultSender((player, payload) -> + com.craisinlord.antarchy.forge.network.AntarchyForgeNetworkCore.sendToPlayer(player, payload)); Antarchy.init(); } @@ -242,6 +301,8 @@ public class AntarchyForge { private static void bindCommonObjects() { com.craisinlord.antarchy.content.entity.UpwardFallingBlockEntity.TYPE = AntarchyForgeEntites.UPWARD_FALLING_BLOCK; + AntarchyObjects.setLucidAnchor(() -> AntarchyForgeBlocks.LUCID_ANCHOR.get()); + AntarchyObjects.setLucidAnchorBlockEntity(() -> AntarchyForgeBlocks.LUCID_ANCHOR_BLOCK_ENTITY.get()); PermanentPortalType.bindBlocks( () -> AntarchyForgeBlocks.MOSSY_OURANWOOD_WOOD.get(), () -> AntarchyForgeBlocks.ELYTHIA_PORTAL.get(), @@ -264,14 +325,14 @@ public class AntarchyForge { AntarchyForgeEntites.CATERPILLAR, AntarchyForgeEntites.BUTTERFLY, AntarchyForgeEntites.REVERIE, - AntarchyForgeEntites.TRIFFID, + AntarchyForgeEntites.FLYTRAP, AntarchyForgeEntites.BRUTALFLY, AntarchyForgeEntites.BRUTALFLY_ORB, AntarchyForgeEntites.HUSH_PROJECTILE, AntarchyForgeEntites.TORETERROR, AntarchyForgeEntites.WATER_BOMB, - AntarchyForgeEntites.CREEPING_HORROR, - AntarchyForgeEntites.LURKING_TERROR, + AntarchyForgeEntites.CRAWLING_BLIGHT, + AntarchyForgeEntites.SKULKING_FRIGHT, AntarchyForgeEntites.STINK_BUG, AntarchyForgeEntites.CHEEP, AntarchyForgeEntites.DORRIE, @@ -300,7 +361,7 @@ public class AntarchyForge { () -> AntarchyForgeBlocks.SHELLSTONE_BRICK_SLAB.get(), () -> AntarchyForgeBlocks.SHELLSTONE_BRICK_WALL.get(), () -> AntarchyForgeBlocks.CLOUD_BLOCK.get(), - () -> AntarchyForgeBlocks.TRIFFID_GOO_BLOCK.get(), + () -> AntarchyForgeBlocks.FLYTRAP_GOO_BLOCK.get(), () -> AntarchyForgeBlocks.PALE_NYXITE.get(), () -> AntarchyForgeBlocks.NYXITE_SPIKE.get(), () -> AntarchyForgeBlocks.CHITIN_BLOCK.get(), @@ -318,10 +379,10 @@ public class AntarchyForge { () -> AntarchyForgeItems.MOGGLES.get(), () -> AntarchyForgeItems.REVERIE_BOTTLE.get(), () -> AntarchyForgeItems.STINK_BUG.get(), - () -> AntarchyForgeMisc.mobEffectHolder(AntarchyForgeMisc.DREAD), - () -> AntarchyForgeMisc.mobEffectHolder(AntarchyForgeMisc.PARALYZED), - () -> AntarchyForgeMisc.mobEffectHolder(AntarchyForgeMisc.INVERTED), - () -> AntarchyForgeMisc.mobEffectHolder(AntarchyForgeMisc.STINKY), + () -> AntarchyForgeMisc.DREAD.get(), + () -> AntarchyForgeMisc.PARALYZED.get(), + AnthologyEffects::inverted, + () -> AntarchyForgeMisc.STINKY.get(), () -> AntarchyForgeBlocks.OURANWOOD_ACORN_BLOCK.get(), () -> AntarchyForgeBlocks.MOSSY_OURANWOOD_LOG.get(), () -> AntarchyForgeBlocks.MOSSY_OURANWOOD_WOOD.get(), @@ -332,8 +393,8 @@ public class AntarchyForge { () -> AntarchyForgeBlocks.ORANGE_MILKWEED.get(), () -> AntarchyForgeBlocks.PINK_MILKWEED.get(), () -> AntarchyForgeBlocks.BED_BUG_EGG.get(), - () -> AntarchyForgeBlocks.CREEPING_HORROR_EGG.get(), - () -> AntarchyForgeBlocks.LURKING_TERROR_EGG.get(), + () -> AntarchyForgeBlocks.CRAWLING_BLIGHT_EGG.get(), + () -> AntarchyForgeBlocks.SKULKING_FRIGHT_EGG.get(), () -> AntarchyForgeBlocks.WASP_NEST.get(), () -> AntarchyForgeBlocks.HUSHWEED.get(), () -> AntarchyForgeBlocks.OURANWOOD_SQUIRREL_NEST.get(), @@ -348,30 +409,52 @@ public class AntarchyForge { () -> AntarchyForgeMisc.STINKY_GAS.get(), () -> AntarchyForgeMisc.STINKY_FLY.get(), () -> AntarchyForgeMisc.PEACH_LEAVES_PARTICLE.get(), - () -> AntarchyForgeMisc.attributeHolder(AntarchyForgeMisc.SCALE), () -> AntarchyForgeMisc.attributeHolder(AntarchyForgeMisc.DOUBLE_DAMAGE_CHANCE), () -> AntarchyForgeMisc.attributeHolder(AntarchyForgeMisc.BLOODGLASS_MAX_HEARTS), - () -> AntarchyForgeMisc.mobEffectHolder(AntarchyForgeMisc.BLOODGLASS_WARD) + () -> AntarchyForgeMisc.BLOODGLASS_WARD.get() ); + AntarchyObjects.setEntityReach(() -> ForgeMod.ENTITY_REACH.get()); + AntarchyEnchantments.bind(() -> AntarchyForgeMisc.FEATHER_RISING.get(), () -> AntarchyForgeMisc.CHRONOSPHERE.get()); + com.craisinlord.antarchy.content.effect.AntarchySizeScaling.register(AntarchyForgeMisc.SHRINKING_EFFECT, AntarchyForgeMisc.GROWTH_EFFECT); AntarchyObjects.setOctopusBomb(AntarchyForgeEntites.OCTOPUS_BOMB); AntarchyObjects.setTentacle(AntarchyForgeEntites.TENTACLE); + AntarchyObjects.setNightmare(AntarchyForgeEntites.NIGHTMARE); AntarchyObjects.setNightmarePortal(AntarchyForgeEntites.NIGHTMARE_PORTAL); + AntarchyObjects.setDimensionalTear(AntarchyForgeEntites.DIMENSIONAL_TEAR); AntarchyObjects.setNightmareBite(AntarchyForgeEntites.NIGHTMARE_BITE); + AntarchyObjects.setLucid(AntarchyForgeEntites.LUCID); + AntarchyObjects.setVortex(AntarchyForgeEntites.VORTEX); + AntarchyObjects.setWindVortex(() -> AntarchyForgeEntites.WIND_VORTEX.get()); + AntarchyObjects.setRoyalBlackHole(() -> AntarchyForgeEntites.ROYAL_BLACK_HOLE.get()); + AntarchyObjects.setRoyalAssailantBlackHole(() -> AntarchyForgeEntites.ROYAL_ASSAILANT_BLACK_HOLE.get()); + AntarchyObjects.setVortexChargeProjectile(() -> AntarchyForgeEntites.VORTEX_CHARGE_PROJECTILE.get()); + AntarchyObjects.setPrince(() -> AntarchyForgeEntites.PRINCE.get()); + AntarchyObjects.setPrincess(() -> AntarchyForgeEntites.PRINCESS.get()); + AntarchyObjects.setKing(() -> AntarchyForgeEntites.KING.get()); + AntarchyObjects.setQueen(() -> AntarchyForgeEntites.QUEEN.get()); + AntarchyObjects.setManticore(() -> AntarchyForgeEntites.MANTICORE.get()); + AntarchyObjects.setRoyalBolt(() -> AntarchyForgeEntites.ROYAL_BOLT.get()); + AntarchyObjects.setRoyalElementalProjectile(() -> AntarchyForgeEntites.ROYAL_ELEMENTAL_PROJECTILE.get()); + AntarchyObjects.setRoyalIceSpike(() -> AntarchyForgeEntites.ROYAL_ICE_SPIKE.get()); + AntarchyObjects.setPrinceEgg(() -> AntarchyForgeBlocks.PRINCE_EGG.get()); + AntarchyObjects.setPrincessEgg(() -> AntarchyForgeBlocks.PRINCESS_EGG.get()); + AntarchyObjects.setRoyalEggBlockEntity(() -> AntarchyForgeBlocks.ROYAL_EGG_BLOCK_ENTITY.get()); + AntarchyObjects.setVortexLens(() -> AntarchyForgeBlocks.VORTEX_LENS.get()); + AntarchyObjects.setVortexLensBlockEntity(() -> AntarchyForgeBlocks.VORTEX_LENS_BLOCK_ENTITY.get()); + AntarchyObjects.setDimensionalTearMarker(() -> AntarchyForgeBlocks.DIMENSIONAL_TEAR_MARKER.get()); + AntarchyObjects.setDimensionalTearMarkerBlockEntity(() -> AntarchyForgeBlocks.DIMENSIONAL_TEAR_MARKER_BLOCK_ENTITY.get()); AntarchyObjects.setKrakensGraspTrident(AntarchyForgeEntites.KRAKENS_GRASP_TRIDENT); AntarchyObjects.setLotus(() -> AntarchyForgeBlocks.LOTUS.get()); AntarchyObjects.setKrakenTentacle(() -> AntarchyForgeItems.KRAKEN_TENTACLE.get()); AntarchyObjects.setKrakensGrasp(() -> AntarchyForgeItems.KRAKENS_GRASP.get()); AntarchyObjects.setOuranwoodDeer(AntarchyForgeEntites.OURANWOOD_DEER); - AntarchyObjects.setDimensionalTear(AntarchyForgeEntites.DIMENSIONAL_TEAR); - AntarchyObjects.setGlimmer(AntarchyForgeEntites.GLIMMER); AntarchyObjects.setRollyPolly(AntarchyForgeEntites.ROLLY_POLLY); + AntarchyObjects.setGlimmer(AntarchyForgeEntites.GLIMMER); AntarchyObjects.setSpiritApple(() -> AntarchyForgeItems.SPIRIT_APPLE.get()); - AntarchyObjects.setGlimmeringEffect(() -> AntarchyForgeMisc.mobEffectHolder(AntarchyForgeMisc.GLIMMERING)); - AntarchyObjects.setTimeDilationField(() -> AntarchyForgeEntites.TIME_DILATION_FIELD.get()); - AntarchyEnchantments.bind(() -> AntarchyForgeMisc.FEATHER_RISING.get(), () -> AntarchyForgeMisc.CHRONOSPHERE.get()); - AntarchyObjects.setRoyalAssailantBlackHole(() -> AntarchyForgeEntites.ROYAL_ASSAILANT_BLACK_HOLE.get()); - AntarchyObjects.setDilatedEffect(() -> AntarchyForgeMisc.mobEffectHolder(AntarchyForgeMisc.DILATED)); - AntarchyObjects.setContractedEffect(() -> AntarchyForgeMisc.mobEffectHolder(AntarchyForgeMisc.CONTRACTED)); + AntarchyObjects.setGlimmeringEffect(() -> AntarchyForgeMisc.GLIMMERING.get()); + AntarchyObjects.setRoyalVitalityPenaltyEffect(() -> AntarchyForgeMisc.ROYAL_VITALITY_PENALTY.get()); + AntarchyObjects.setBleedingEffect(() -> AntarchyForgeMisc.BLEEDING.get()); + AntarchyObjects.setBloodMoonEffect(() -> AntarchyForgeMisc.BLOOD_MOON.get()); AntarchyObjects.setElka(AntarchyForgeEntites.ELKA); AntarchyObjects.setPeach(() -> AntarchyForgeItems.PEACH.get()); AntarchyObjects.setCorn(() -> AntarchyForgeItems.CORN.get()); @@ -386,17 +469,19 @@ public class AntarchyForge { AntarchyObjects.setLumenBucket(() -> AntarchyForgeItems.LUMEN_BUCKET.get()); AntarchyObjects.setLumenBlock(() -> AntarchyForgeBlocks.LUMEN_BLOCK.get()); AntarchyObjects.setLumenFroglight(() -> AntarchyForgeBlocks.LUMEN_FROGLIGHT.get()); + AntarchyObjects.setGlimmeringReed(() -> AntarchyForgeBlocks.GLIMMERING_REED.get()); AntarchyObjects.setPeachLeavesParticle(() -> AntarchyForgeMisc.PEACH_LEAVES_PARTICLE.get()); + AntarchyObjects.setBugSprayParticle(() -> AntarchyForgeMisc.BUG_SPRAY_PARTICLE.get()); AntarchyObjects.setLotusPollen(() -> AntarchyForgeMisc.LOTUS_POLLEN.get()); AntarchyObjects.setNightmareFireFlame(() -> AntarchyForgeMisc.NIGHTMARE_FIRE_FLAME.get()); AntarchyObjects.setLucidBoltImpactSmall(() -> AntarchyForgeMisc.LUCID_BOLT_IMPACT_SMALL.get()); AntarchyObjects.setLucidBoltImpactLarge(() -> AntarchyForgeMisc.LUCID_BOLT_IMPACT_LARGE.get()); AntarchyObjects.setDorrieInventoryMenu(AntarchyForgeMisc.DORRIE_INVENTORY_MENU); + AntarchyObjects.setRoyalJudgmentMenu(AntarchyForgeMisc.ROYAL_JUDGMENT_MENU); + AntarchyObjects.setGiantFryingPanMenu(AntarchyForgeMisc.GIANT_FRYING_PAN_MENU); AntarchyObjects.setCritterCage(() -> AntarchyForgeItems.CRITTER_CAGE.get()); AntarchyObjects.setCritterCageBlock(() -> AntarchyForgeBlocks.CRITTER_CAGE_BLOCK.get()); AntarchyObjects.setCritterCageBlockEntity(() -> AntarchyForgeBlocks.CRITTER_CAGE_BLOCK_ENTITY.get()); - AntarchyObjects.setLucidAnchor(() -> AntarchyForgeBlocks.LUCID_ANCHOR.get()); - AntarchyObjects.setLucidAnchorBlockEntity(() -> AntarchyForgeBlocks.LUCID_ANCHOR_BLOCK_ENTITY.get()); AntarchyObjects.setCritterCageProjectile(() -> AntarchyForgeEntites.CRITTER_CAGE_PROJECTILE.get()); } diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyForgeCommandEvents.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyForgeCommandEvents.java new file mode 100644 index 00000000..67c371b5 --- /dev/null +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyForgeCommandEvents.java @@ -0,0 +1,33 @@ +package com.craisinlord.antarchy.forge; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.command.CavarynCommand; +import com.craisinlord.antarchy.content.command.CaterpillarCommand; +import com.craisinlord.antarchy.content.command.DimensionalTearCommand; +import com.craisinlord.antarchy.content.command.QueenLocateCommand; +import com.craisinlord.antarchy.content.command.RoyalCommand; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.event.RegisterCommandsEvent; +import net.minecraftforge.event.server.ServerStoppingEvent; + +@Mod.EventBusSubscriber(modid = Antarchy.MODID) +public final class AntarchyForgeCommandEvents { + private AntarchyForgeCommandEvents() { + } + + @SubscribeEvent + public static void onRegisterCommands(RegisterCommandsEvent event) { + CavarynCommand.register(event.getDispatcher()); + CaterpillarCommand.register(event.getDispatcher()); + DimensionalTearCommand.register(event.getDispatcher()); + QueenLocateCommand.register(event.getDispatcher()); + RoyalCommand.register(event.getDispatcher()); + com.craisinlord.antarchy.content.command.PortalGunCommand.register(event.getDispatcher()); + } + + @SubscribeEvent + public static void onServerStopping(ServerStoppingEvent event) { + com.craisinlord.antarchy.content.portalgun.PortalGunProjectileEntity.releaseAllProjectileTickets(); + } +} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyForgeEvents.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyForgeEvents.java deleted file mode 100644 index 38ff369c..00000000 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyForgeEvents.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.craisinlord.antarchy.forge; - -import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.command.CavarynCommand; -import com.craisinlord.antarchy.content.command.CaterpillarCommand; -import com.craisinlord.antarchy.content.command.GravityCommand; -import com.craisinlord.antarchy.content.command.QueenLocateCommand; -import com.craisinlord.antarchy.content.time.TimeDilationCommand; -import net.minecraftforge.event.RegisterCommandsEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; - -@Mod.EventBusSubscriber(modid = Antarchy.MODID) -final class AntarchyForgeCommandEvents { - private AntarchyForgeCommandEvents() { - } - - @SubscribeEvent - public static void onRegisterCommands(RegisterCommandsEvent event) { - CavarynCommand.register(event.getDispatcher()); - GravityCommand.register(event.getDispatcher()); - QueenLocateCommand.register(event.getDispatcher()); - CaterpillarCommand.register(event.getDispatcher()); - TimeDilationCommand.register(event.getDispatcher()); - } -} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyForgeFluidTypes.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyForgeFluidTypes.java index f9f20f63..764b0090 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyForgeFluidTypes.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyForgeFluidTypes.java @@ -26,14 +26,16 @@ import org.joml.Vector3f; import java.util.function.Consumer; public final class AntarchyForgeFluidTypes { - private static final ResourceLocation WATER_STILL = ResourceLocation.withDefaultNamespace("block/water_still"); - private static final ResourceLocation WATER_FLOW = ResourceLocation.withDefaultNamespace("block/water_flow"); - private static final ResourceLocation WATER_OVERLAY = ResourceLocation.withDefaultNamespace("block/water_overlay"); - private static final ResourceLocation UNDERWATER_OVERLAY = ResourceLocation.withDefaultNamespace("textures/misc/underwater.png"); + private static final ResourceLocation WATER_STILL = new ResourceLocation("block/water_still"); + private static final ResourceLocation WATER_FLOW = new ResourceLocation("block/water_flow"); + private static final ResourceLocation WATER_OVERLAY = new ResourceLocation("block/water_overlay"); + private static final ResourceLocation UNDERWATER_OVERLAY = new ResourceLocation("textures/misc/underwater.png"); private static final ResourceLocation ANTIWATER_STILL = new ResourceLocation(Antarchy.MODID, "block/antiwater_still"); private static final ResourceLocation ANTIWATER_FLOW = new ResourceLocation(Antarchy.MODID, "block/antiwater_flow"); private static final ResourceLocation BILE_STILL = new ResourceLocation(Antarchy.MODID, "block/bile/bile_still"); private static final ResourceLocation BILE_FLOW = new ResourceLocation(Antarchy.MODID, "block/bile/bile_flowing"); + private static final ResourceLocation ICHOR_STILL = new ResourceLocation(Antarchy.MODID, "block/ichor/ichor_still"); + private static final ResourceLocation ICHOR_FLOW = new ResourceLocation(Antarchy.MODID, "block/ichor/ichor_flowing"); private static final DeferredRegister FLUID_TYPES = DeferredRegister.create(ForgeRegistries.Keys.FLUID_TYPES, Antarchy.MODID); @@ -167,12 +169,12 @@ public final class AntarchyForgeFluidTypes { consumer.accept(new IClientFluidTypeExtensions() { @Override public ResourceLocation getStillTexture() { - return ANTIWATER_STILL; + return ICHOR_STILL; } @Override public ResourceLocation getFlowingTexture() { - return ANTIWATER_FLOW; + return ICHOR_FLOW; } @Override @@ -187,12 +189,12 @@ public final class AntarchyForgeFluidTypes { @Override public int getTintColor() { - return 0xFF2A0306; + return 0xFFFFFFFF; } @Override public int getTintColor(FluidState state, BlockAndTintGetter getter, BlockPos pos) { - return 0xFF2A0306; + return 0xFFFFFFFF; } @Override diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyMiscConfig.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyMiscConfig.java index 32f9923a..95463181 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyMiscConfig.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyMiscConfig.java @@ -5,35 +5,37 @@ import net.minecraftforge.common.ForgeConfigSpec; public final class AntarchyMiscConfig { public static final ForgeConfigSpec SPEC; - // Elythia private static final ForgeConfigSpec.BooleanValue ELYTHIA_FIREFLY_PARTICLES_ENABLED; - // Dream Sand - private static final ForgeConfigSpec.BooleanValue DREAM_SAND_ENABLED; - private static final ForgeConfigSpec.DoubleValue DREAM_SAND_JUMP_VELOCITY_MULTIPLIER; - private static final ForgeConfigSpec.DoubleValue DREAM_SAND_GRAVITY_MULTIPLIER; - private static final ForgeConfigSpec.DoubleValue DREAM_SAND_EFFECT_DURATION_SECONDS; private static final ForgeConfigSpec.DoubleValue DREAM_SAND_FALLING_BLOCK_GRAVITY_MULTIPLIER; - // Ichor private static final ForgeConfigSpec.BooleanValue ICHOR_WITHER_ENABLED; - // Hushweed private static final ForgeConfigSpec.DoubleValue HUSHWEED_SPORE_LIFETIME_SECONDS; - // Infinite Dimensions private static final ForgeConfigSpec.BooleanValue DISABLE_INFINITY_BOOK_PORTAL_CREATION; private static final ForgeConfigSpec.BooleanValue RAINBOW_ANTS_LEAD_TO_INFINITY_DIMENSIONS; private static final ForgeConfigSpec.DoubleValue RAINBOW_ANT_INFINITY_EASTER_EGG_CHANCE; - // Permanent portals private static final ForgeConfigSpec.BooleanValue PERMANENT_PORTALS_ENABLED; private static final ForgeConfigSpec.BooleanValue PERMANENT_PORTALS_FLINT_AND_STEEL_ENABLED; private static final ForgeConfigSpec.BooleanValue ELYTHIA_PORTAL_ENABLED; private static final ForgeConfigSpec.BooleanValue THORAXIS_PORTAL_ENABLED; private static final ForgeConfigSpec.BooleanValue CAVARYN_PORTAL_ENABLED; + private static final ForgeConfigSpec.BooleanValue PORTAL_GUN_CAN_FIRE_THROUGH_GLASS; + private static final ForgeConfigSpec.BooleanValue PORTAL_GUN_CAN_FIRE_THROUGH_LIQUID; + private static final ForgeConfigSpec.BooleanValue PORTAL_GUN_CAN_PORTALS_RESIZE_WHEN_CREATED; + private static final ForgeConfigSpec.BooleanValue PORTAL_GUN_CAN_PORTAL_PROJECTILES_CHUNKLOAD; + private static final ForgeConfigSpec.BooleanValue PORTAL_GUN_SEE_THROUGH_PORTALS; + private static final ForgeConfigSpec.BooleanValue PORTAL_GUN_FANCY_PORTALS; + private static final ForgeConfigSpec.IntValue PORTAL_GUN_MAX_SHOOT_DISTANCE; + private static final ForgeConfigSpec.DoubleValue PORTAL_GUN_MIN_FLOOR_EXIT_SPEED; + private static final ForgeConfigSpec.IntValue PORTAL_GUN_MAX_LIVE_VIEWS; + private static final ForgeConfigSpec.DoubleValue PORTAL_GUN_MAX_EXIT_SPEED; + private static final ForgeConfigSpec.BooleanValue PORTAL_GUN_MOON_PULLS_BLOCKS; + private static final ForgeConfigSpec.IntValue PORTAL_GUN_MOON_PORTAL_SECONDS; + private static final ForgeConfigSpec.IntValue PORTAL_GUN_MOON_BLOCK_CAP; - // Diamond Minecart private static final ForgeConfigSpec.BooleanValue DIAMOND_MINECART_ENABLED; private static final ForgeConfigSpec.BooleanValue DIAMOND_MINECART_PLACES_RAILS; private static final ForgeConfigSpec.DoubleValue DIAMOND_MINECART_CRUISE_SPEED; @@ -44,7 +46,9 @@ public final class AntarchyMiscConfig { private static final ForgeConfigSpec.BooleanValue DIAMOND_MINECART_MOB_DAMAGE_ENABLED; private static final ForgeConfigSpec.DoubleValue DIAMOND_MINECART_MAX_MOB_DAMAGE; - // World / misc toggles + private static final ForgeConfigSpec.DoubleValue HOVERBOARD_MAX_SPEED; + private static final ForgeConfigSpec.DoubleValue HOVERBOARD_ACCELERATION; + private static final ForgeConfigSpec.BooleanValue DUPLICATOR_TREE_ENABLED; private static final ForgeConfigSpec.BooleanValue GLOW_VINES_UNDER_LEAVES; private static final ForgeConfigSpec.BooleanValue SWING_THROUGH_GRASS_ENABLED; @@ -55,47 +59,28 @@ public final class AntarchyMiscConfig { static { ForgeConfigSpec.Builder b = new ForgeConfigSpec.Builder(); - - // Elythia - b.push("elythia"); ELYTHIA_FIREFLY_PARTICLES_ENABLED = b .comment("Whether firefly ambient particles appear at night in the Elythia dimension.") .define("fireflyParticlesEnabled", true); b.pop(); - - // Dream Sand - b.push("dreamSand"); - DREAM_SAND_ENABLED = b.comment("If true, jumping from dream sand applies temporary low gravity until solid ground is touched.").define("enabled", true); - DREAM_SAND_JUMP_VELOCITY_MULTIPLIER = b.comment("Multiplier applied to upward jump velocity when leaving dream sand.") .defineInRange("jumpVelocityMultiplier", 1.3D, 0.0D, 16.0D); - DREAM_SAND_GRAVITY_MULTIPLIER = b.comment("Multiplier applied to downward velocity while low gravity is active.") .defineInRange("gravityMultiplier", 0.45D, 0.0D, 1.0D); - DREAM_SAND_EFFECT_DURATION_SECONDS = b.comment("Seconds the low-gravity effect remains active after leaving dream sand.") .defineInRange("effectDurationSeconds", 7.0D, 0.0D, 60.0D); - DREAM_SAND_FALLING_BLOCK_GRAVITY_MULTIPLIER = b.comment("Multiplier applied to dream sand's own falling-block gravity (how slowly it falls as a block, distinct from the player low-gravity effect).").defineInRange("fallingBlockGravityMultiplier", 0.4D, 0.0D, 16.0D); + DREAM_SAND_FALLING_BLOCK_GRAVITY_MULTIPLIER = b.comment("Multiplier applied to dream sand's falling-block gravity, i.e. how slowly it falls as a block.").defineInRange("fallingBlockGravityMultiplier", 0.4D, 0.0D, 16.0D); b.pop(); - - // Ichor - b.push("ichor"); ICHOR_WITHER_ENABLED = b .comment("If true, players submerged in ichor receive a Wither effect.") .define("witherEnabled", true); b.pop(); - - // Hushweed - b.push("hushweed"); HUSHWEED_SPORE_LIFETIME_SECONDS = b .comment("How long (in seconds) a Hushweed spore projectile stays alive before disappearing.") .defineInRange("sporeLifetimeSeconds", 5.0D, 0.1D, 120.0D); b.pop(); - - // Infinity Dimensions - b.push("infinityDimensions"); DISABLE_INFINITY_BOOK_PORTAL_CREATION = b .comment("If true, book and quills cannot be thrown into nether portals to create random dimensions.") @@ -114,9 +99,6 @@ public final class AntarchyMiscConfig { .defineInRange("rainbowAntInfinityEasterEggChance", 0.01D, 0.0D, 1.0D); b.pop(); - - // Permanent Portals - b.push("permanentPortals"); PERMANENT_PORTALS_ENABLED = b.comment("Master toggle for sacrifice-activated permanent portals.").define("permanentPortalsEnabled", true); PERMANENT_PORTALS_FLINT_AND_STEEL_ENABLED = b.comment("Whether flint and steel can ignite permanent portal frames.").define("permanentPortalsFlintAndSteelEnabled", false); @@ -125,8 +107,21 @@ public final class AntarchyMiscConfig { CAVARYN_PORTAL_ENABLED = b.comment("Whether Myrmite portals to Cavaryn can activate and function.").define("cavarynPortalEnabled", true); b.pop(); - - // Diamond Minecart + b.push("portalGun"); + PORTAL_GUN_CAN_FIRE_THROUGH_GLASS = b.define("canFireThroughGlass", false); + PORTAL_GUN_CAN_FIRE_THROUGH_LIQUID = b.define("canFireThroughLiquid", false); + PORTAL_GUN_CAN_PORTALS_RESIZE_WHEN_CREATED = b.define("canPortalsResizeWhenCreated", true); + PORTAL_GUN_CAN_PORTAL_PROJECTILES_CHUNKLOAD = b.define("canPortalProjectilesChunkload", true); + PORTAL_GUN_SEE_THROUGH_PORTALS = b.define("seeThroughPortals", true); + PORTAL_GUN_FANCY_PORTALS = b.define("fancyPortals", true); + PORTAL_GUN_MAX_SHOOT_DISTANCE = b.defineInRange("maxShootDistance", 10000, 1, Integer.MAX_VALUE); + PORTAL_GUN_MAX_LIVE_VIEWS = b.comment("How many portals can show a live see-through view at once. Each one re-renders the world, so higher values cost frame rate. 0 shows only the animated surface.").defineInRange("maxLiveViews", 8, 0, 32); + PORTAL_GUN_MIN_FLOOR_EXIT_SPEED = b.comment("Minimum speed in blocks/tick when leaving an upward-facing portal, so the traveller clears it. 0 disables.").defineInRange("minFloorExitSpeed", 0.6D, 0.0D, 4.0D); + PORTAL_GUN_MAX_EXIT_SPEED = b.comment("Maximum speed in blocks/tick when leaving a portal. 0 keeps momentum uncapped.").defineInRange("maxExitSpeed", 0.0D, 0.0D, 100.0D); + PORTAL_GUN_MOON_PULLS_BLOCKS = b.comment("Whether a portal opened by shooting the moon rips blocks loose and pulls them into space.").define("moonPullsBlocks", true); + PORTAL_GUN_MOON_PORTAL_SECONDS = b.comment("How long a moon portal stays open, in seconds.").defineInRange("moonPortalSeconds", 10, 1, 120); + PORTAL_GUN_MOON_BLOCK_CAP = b.comment("Maximum number of blocks a single moon portal can pull in.").defineInRange("moonBlockCap", 500, 0, 2000); + b.pop(); b.push("diamondMinecart"); DIAMOND_MINECART_ENABLED = b.comment("Master toggle for the diamond minecart's custom propulsion and rail-laying behavior.") .define("enabled", true); @@ -140,8 +135,10 @@ public final class AntarchyMiscConfig { DIAMOND_MINECART_MAX_MOB_DAMAGE = b.comment("Maximum collision damage dealt at full speed if mob damage is enabled.") .defineInRange("maxMobDamage", 4.0D, 0.0D, 200.0D); b.pop(); - - // World / visual toggles + b.push("hoverboard"); + HOVERBOARD_MAX_SPEED = b.comment("Maximum hoverboard speed in blocks/tick while moving forward.").defineInRange("maxSpeed", 6.0D, 0.05D, 12.0D); + HOVERBOARD_ACCELERATION = b.comment("Hoverboard speed gained per tick while moving forward. Lower values take longer to reach top speed.").defineInRange("acceleration", 0.05D, 0.001D, 1.0D); + b.pop(); b.push("world"); DUPLICATOR_TREE_ENABLED = b.comment("If false, duplicator trees do not generate and duplicator saplings produce nothing.").define("duplicatorTreeEnabled", true); @@ -159,10 +156,6 @@ public final class AntarchyMiscConfig { static boolean elythiaFireflyParticlesEnabled() { return ELYTHIA_FIREFLY_PARTICLES_ENABLED.get(); } - static boolean dreamSandEnabled() { return DREAM_SAND_ENABLED.get(); } - static double dreamSandJumpVelocityMultiplier() { return DREAM_SAND_JUMP_VELOCITY_MULTIPLIER.get(); } - static double dreamSandGravityMultiplier() { return DREAM_SAND_GRAVITY_MULTIPLIER.get(); } - static double dreamSandEffectDurationSeconds() { return DREAM_SAND_EFFECT_DURATION_SECONDS.get(); } static double dreamSandFallingBlockGravityMultiplier() { return DREAM_SAND_FALLING_BLOCK_GRAVITY_MULTIPLIER.get(); } static boolean ichorWitherEnabled() { return ICHOR_WITHER_ENABLED.get(); } @@ -184,6 +177,19 @@ public final class AntarchyMiscConfig { public static boolean elythiaPortalEnabled() { return ELYTHIA_PORTAL_ENABLED.get(); } public static boolean thoraxisPortalEnabled() { return THORAXIS_PORTAL_ENABLED.get(); } public static boolean cavarynPortalEnabled() { return CAVARYN_PORTAL_ENABLED.get(); } + public static boolean portalGunCanFireThroughGlass() { return PORTAL_GUN_CAN_FIRE_THROUGH_GLASS.get(); } + public static boolean portalGunCanFireThroughLiquid() { return PORTAL_GUN_CAN_FIRE_THROUGH_LIQUID.get(); } + public static boolean portalGunCanPortalsResizeWhenCreated() { return PORTAL_GUN_CAN_PORTALS_RESIZE_WHEN_CREATED.get(); } + public static boolean portalGunCanPortalProjectilesChunkload() { return PORTAL_GUN_CAN_PORTAL_PROJECTILES_CHUNKLOAD.get(); } + public static boolean portalGunSeeThroughPortals() { return PORTAL_GUN_SEE_THROUGH_PORTALS.get(); } + public static boolean portalGunFancyPortals() { return PORTAL_GUN_FANCY_PORTALS.get(); } + public static int portalGunMaxShootDistance() { return PORTAL_GUN_MAX_SHOOT_DISTANCE.get(); } + public static double portalGunMinFloorExitSpeed() { return PORTAL_GUN_MIN_FLOOR_EXIT_SPEED.get(); } + public static int portalGunMaxLiveViews() { return PORTAL_GUN_MAX_LIVE_VIEWS.get(); } + public static double portalGunMaxExitSpeed() { return PORTAL_GUN_MAX_EXIT_SPEED.get(); } + public static boolean portalGunMoonPullsBlocks() { return PORTAL_GUN_MOON_PULLS_BLOCKS.get(); } + public static int portalGunMoonPortalSeconds() { return PORTAL_GUN_MOON_PORTAL_SECONDS.get(); } + public static int portalGunMoonBlockCap() { return PORTAL_GUN_MOON_BLOCK_CAP.get(); } static boolean diamondMinecartEnabled() { return DIAMOND_MINECART_ENABLED.get(); } static boolean diamondMinecartPlacesRails() { return DIAMOND_MINECART_PLACES_RAILS.get(); } @@ -194,4 +200,6 @@ public final class AntarchyMiscConfig { static double diamondMinecartCoastDeceleration() { return DIAMOND_MINECART_COAST_DECELERATION.get(); } static boolean diamondMinecartMobDamageEnabled() { return DIAMOND_MINECART_MOB_DAMAGE_ENABLED.get(); } static double diamondMinecartMaxMobDamage() { return DIAMOND_MINECART_MAX_MOB_DAMAGE.get(); } + static double hoverboardMaxSpeed() { return HOVERBOARD_MAX_SPEED.get(); } + static double hoverboardAcceleration() { return HOVERBOARD_ACCELERATION.get(); } } diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyMobsConfig.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyMobsConfig.java index f7eb04eb..b993f2e9 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyMobsConfig.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyMobsConfig.java @@ -5,9 +5,6 @@ import net.minecraftforge.common.ForgeConfigSpec; public final class AntarchyMobsConfig { public static final ForgeConfigSpec SPEC; - - // Ants - private static final ForgeConfigSpec.BooleanValue ANTS_STEAL_FROM_CHESTS; private static final ForgeConfigSpec.BooleanValue BROWN_ANT_REQUIRES_REAGENT; @@ -38,44 +35,27 @@ public final class AntarchyMobsConfig { private static final ForgeConfigSpec.DoubleValue TERMITE_ATTACK_DAMAGE; private static final ForgeConfigSpec.ConfigValue TERMITE_DESTINATION_DIMENSION; - - - // Easter Bunny - private static final ForgeConfigSpec.BooleanValue EASTER_BUNNY_ENABLED; private static final ForgeConfigSpec.IntValue EASTER_BUNNY_NATURAL_SPAWN_CHANCE_PERCENT; - - // Wasp - private static final ForgeConfigSpec.DoubleValue WASP_HEALTH; private static final ForgeConfigSpec.DoubleValue WASP_ATTACK_DAMAGE; private static final ForgeConfigSpec.DoubleValue WASP_MOVEMENT_SPEED; - - // Bomber - private static final ForgeConfigSpec.DoubleValue BOMBER_HEALTH; private static final ForgeConfigSpec.DoubleValue BOMBER_ATTACK_DAMAGE; private static final ForgeConfigSpec.DoubleValue BOMBER_EXPLOSION_DAMAGE; private static final ForgeConfigSpec.DoubleValue BOMBER_EXPLOSION_RADIUS; - - // Jumpy Bug - - private static final ForgeConfigSpec.DoubleValue JUMPY_BUG_HEALTH; - private static final ForgeConfigSpec.DoubleValue JUMPY_BUG_POUNCE_DAMAGE; - private static final ForgeConfigSpec.DoubleValue JUMPY_BUG_LATCH_DAMAGE; - private static final ForgeConfigSpec.DoubleValue JUMPY_BUG_CAMOUFLAGE_ALPHA; - - - // Emperor Scorpion + private static final ForgeConfigSpec.DoubleValue SPRINGBUG_HEALTH; + private static final ForgeConfigSpec.DoubleValue SPRINGBUG_POUNCE_DAMAGE; + private static final ForgeConfigSpec.DoubleValue SPRINGBUG_CAMOUFLAGE_ALPHA; private static final ForgeConfigSpec.DoubleValue EMPEROR_SCORPION_HEALTH; private static final ForgeConfigSpec.DoubleValue EMPEROR_SCORPION_ATTACK_DAMAGE; + private static final ForgeConfigSpec.DoubleValue EMPEROR_SCORPION_MOVEMENT_SPEED; private static final ForgeConfigSpec.DoubleValue EMPEROR_SCORPION_ARMOR; private static final ForgeConfigSpec.DoubleValue EMPEROR_SCORPION_KNOCKBACK_RESISTANCE; - private static final ForgeConfigSpec.DoubleValue EMPEROR_SCORPION_MOVEMENT_SPEED; private static final ForgeConfigSpec.DoubleValue EMPEROR_SCORPION_FOLLOW_RANGE; private static final ForgeConfigSpec.IntValue EMPEROR_SCORPION_XP_REWARD; private static final ForgeConfigSpec.IntValue EMPEROR_SCORPION_CLAW_ANIM_TICKS; @@ -86,32 +66,84 @@ public final class AntarchyMobsConfig { private static final ForgeConfigSpec.IntValue EMPEROR_SCORPION_STING_COOLDOWN_TICKS; private static final ForgeConfigSpec.IntValue EMPEROR_SCORPION_POISON_TICKS; private static final ForgeConfigSpec.IntValue EMPEROR_SCORPION_WEAKNESS_TICKS; - private static final ForgeConfigSpec.IntValue EMPEROR_SCORPION_HARDEN_COOLDOWN_TICKS; private static final ForgeConfigSpec.IntValue EMPEROR_SCORPION_SUMMON_INTERVAL_TICKS; private static final ForgeConfigSpec.IntValue EMPEROR_SCORPION_MAX_SUMMONED_SCORPIONS; private static final ForgeConfigSpec.IntValue EMPEROR_SCORPION_MAX_NEARBY_SCORPIONS; + private static final ForgeConfigSpec.IntValue EMPEROR_SCORPION_HARDEN_COOLDOWN_TICKS; private static final ForgeConfigSpec.DoubleValue EMPEROR_SCORPION_DAMAGE_RANGE; private static final ForgeConfigSpec.IntValue EMPEROR_SCORPION_MIN_DESPAWN_TICKS; - - // Kraken + private static final ForgeConfigSpec.DoubleValue SCORPION_HEALTH; + private static final ForgeConfigSpec.DoubleValue SCORPION_ATTACK_DAMAGE; + private static final ForgeConfigSpec.DoubleValue SCORPION_MOVEMENT_SPEED; + private static final ForgeConfigSpec.DoubleValue SCORPION_ARMOR; + private static final ForgeConfigSpec.DoubleValue SCORPION_KNOCKBACK_RESISTANCE; private static final ForgeConfigSpec.DoubleValue KRAKEN_HEALTH; private static final ForgeConfigSpec.DoubleValue KRAKEN_ATTACK_DAMAGE; + private static final ForgeConfigSpec.BooleanValue KRAKEN_SQUID_SPAWN_ENABLED; + private static final ForgeConfigSpec.BooleanValue KRAKEN_MASS_SPAWN_ENABLED; + private static final ForgeConfigSpec.BooleanValue KRAKEN_REQUIRE_BAD_OMEN_TO_SUMMON; + private static final ForgeConfigSpec.DoubleValue KRAKEN_FOLLOW_RANGE; + private static final ForgeConfigSpec.DoubleValue KRAKEN_DAMAGE_RANGE; private static final ForgeConfigSpec.DoubleValue KRAKEN_ARMOR; private static final ForgeConfigSpec.DoubleValue KRAKEN_KNOCKBACK_RESISTANCE; private static final ForgeConfigSpec.DoubleValue KRAKEN_MOVEMENT_SPEED; private static final ForgeConfigSpec.DoubleValue KRAKEN_FLYING_SPEED; private static final ForgeConfigSpec.DoubleValue KRAKEN_BOSS_BAR_RANGE; private static final ForgeConfigSpec.DoubleValue KRAKEN_LIGHTNING_DAMAGE_PHASE_ONE; - private static final ForgeConfigSpec.BooleanValue KRAKEN_SQUID_SPAWN_ENABLED; - private static final ForgeConfigSpec.BooleanValue KRAKEN_MASS_SPAWN_ENABLED; - private static final ForgeConfigSpec.BooleanValue KRAKEN_REQUIRE_BAD_OMEN_TO_SUMMON; - private static final ForgeConfigSpec.DoubleValue KRAKEN_FOLLOW_RANGE; - private static final ForgeConfigSpec.DoubleValue KRAKEN_DAMAGE_RANGE; + private static final ForgeConfigSpec.DoubleValue KING_HEALTH; + private static final ForgeConfigSpec.DoubleValue QUEEN_HEALTH; + private static final ForgeConfigSpec.DoubleValue KING_ATTACK_DAMAGE; + private static final ForgeConfigSpec.DoubleValue QUEEN_ATTACK_DAMAGE; + private static final ForgeConfigSpec.DoubleValue ROYAL_BOSS_ARMOR; + private static final ForgeConfigSpec.DoubleValue KING_ARMOR; + private static final ForgeConfigSpec.DoubleValue ROYAL_BOSS_FOLLOW_RANGE; + private static final ForgeConfigSpec.DoubleValue ROYAL_BOSS_MOVEMENT_SPEED; + private static final ForgeConfigSpec.DoubleValue ROYAL_BOSS_KNOCKBACK_RESISTANCE; + private static final ForgeConfigSpec.DoubleValue ROYAL_BOSS_STEP_HEIGHT; + private static final ForgeConfigSpec.DoubleValue ROYAL_BOSS_MAX_SINGLE_HIT_DAMAGE; + private static final ForgeConfigSpec.DoubleValue ROYAL_BOSS_BITE_REACH; + private static final ForgeConfigSpec.DoubleValue ROYAL_BOSS_BITE_DAMAGE_MULTIPLIER; + private static final ForgeConfigSpec.IntValue ROYAL_BOSS_BITE_COOLDOWN_TICKS; + private static final ForgeConfigSpec.BooleanValue ROYAL_BOSS_MULTIPLAYER_SCALING_ENABLED; + private static final ForgeConfigSpec.IntValue ROYAL_BOSS_SCALING_MAX_PLAYERS; + private static final ForgeConfigSpec.DoubleValue ROYAL_BOSS_HEALTH_PER_ADDITIONAL_PLAYER, ROYAL_BOSS_DAMAGE_PER_ADDITIONAL_PLAYER; + private static final ForgeConfigSpec.DoubleValue ROYAL_BOUNDARY_RADIUS, ROYAL_BOUNDARY_WARNING_RADIUS; + private static final ForgeConfigSpec.IntValue ROYAL_BOUNDARY_GRACE_TICKS; + private static final ForgeConfigSpec.DoubleValue QUEEN_BEAM_DAMAGE, QUEEN_BEAM_RANGE, QUEEN_BEAM_MINIMUM_RANGE, QUEEN_BEAM_TRACKING, QUEEN_BEAM_TERRAIN_RADIUS; + private static final ForgeConfigSpec.IntValue QUEEN_BEAM_DURATION_TICKS, QUEEN_BEAM_WINDUP_TICKS, QUEEN_BEAM_TRAVEL_TICKS, QUEEN_BEAM_COOLDOWN_TICKS, QUEEN_BEAM_TERRAIN_CAP, + QUEEN_BEAM_PHASE_ONE_CAP, QUEEN_BEAM_PHASE_TWO_CAP, QUEEN_BEAM_PHASE_THREE_CAP; + private static final ForgeConfigSpec.DoubleValue QUEEN_BEAM_PHASE_THREE_MAX_VOLLEY_CHANCE; + private static final ForgeConfigSpec.DoubleValue KING_BEAM_DAMAGE, KING_BEAM_RANGE, KING_BEAM_MINIMUM_RANGE, KING_BEAM_TRACKING, KING_BEAM_TERRAIN_RADIUS; + private static final ForgeConfigSpec.IntValue KING_BEAM_DURATION_TICKS, KING_BEAM_WINDUP_TICKS, KING_BEAM_TRAVEL_TICKS, KING_BEAM_COOLDOWN_TICKS, KING_BEAM_TERRAIN_CAP; + private static final ForgeConfigSpec.IntValue ROYAL_DECREE_COOLDOWN_TICKS; + private static final ForgeConfigSpec.DoubleValue KING_ROYAL_MUSTER_RADIUS; + private static final ForgeConfigSpec.IntValue KING_ROYAL_MUSTER_COOLDOWN_TICKS, KING_ROYAL_MUSTER_WINDUP_TICKS, + KING_ROYAL_MUSTER_DURATION_TICKS, KING_ROYAL_MUSTER_CAP; + private static final ForgeConfigSpec.DoubleValue QUEEN_BLACK_HOLE_RADIUS, QUEEN_BLACK_HOLE_PULL_STRENGTH; + private static final ForgeConfigSpec.IntValue QUEEN_BLACK_HOLE_ACTIVE_TICKS, QUEEN_BLACK_HOLE_BLOCK_SUCTION_CAP; + private static final ForgeConfigSpec.DoubleValue ROYAL_BOSS_SOUND_VOLUME; + private static final ForgeConfigSpec.DoubleValue KING_FIREBALL_DAMAGE, KING_FIREBALL_RADIUS, KING_ICEBALL_DAMAGE, KING_ICEBALL_RADIUS, KING_ICE_SPIKE_DAMAGE; + private static final ForgeConfigSpec.IntValue KING_FIREBALL_COOLDOWN_TICKS, KING_ICEBALL_COOLDOWN_TICKS, KING_ICE_SPIKE_COOLDOWN_TICKS, KING_ELEMENTAL_TERRAIN_CAP; - // Brutalfly + private static final ForgeConfigSpec.IntValue ROYAL_EGG_HATCH_CHANCE; + private static final ForgeConfigSpec.DoubleValue ROYAL_BOLT_DAMAGE; + private static final ForgeConfigSpec.DoubleValue PRINCE_HEALTH; + private static final ForgeConfigSpec.DoubleValue PRINCE_ATTACK_DAMAGE; + private static final ForgeConfigSpec.DoubleValue PRINCE_MOVEMENT_SPEED; + private static final ForgeConfigSpec.DoubleValue PRINCE_FLYING_SPEED; + private static final ForgeConfigSpec.DoubleValue PRINCE_ARMOR; + private static final ForgeConfigSpec.DoubleValue PRINCE_KNOCKBACK_RESISTANCE; + private static final ForgeConfigSpec.DoubleValue PRINCE_FOLLOW_RANGE; + private static final ForgeConfigSpec.DoubleValue PRINCESS_HEALTH; + private static final ForgeConfigSpec.DoubleValue PRINCESS_ATTACK_DAMAGE; + private static final ForgeConfigSpec.DoubleValue PRINCESS_MOVEMENT_SPEED; + private static final ForgeConfigSpec.DoubleValue PRINCESS_FLYING_SPEED; + private static final ForgeConfigSpec.DoubleValue PRINCESS_ARMOR; + private static final ForgeConfigSpec.DoubleValue PRINCESS_KNOCKBACK_RESISTANCE; + private static final ForgeConfigSpec.DoubleValue PRINCESS_FOLLOW_RANGE; private static final ForgeConfigSpec.DoubleValue BRUTALFLY_HEALTH; private static final ForgeConfigSpec.DoubleValue BRUTALFLY_SWIPE_DAMAGE; @@ -119,12 +151,9 @@ public final class AntarchyMobsConfig { private static final ForgeConfigSpec.DoubleValue BRUTALFLY_DAMAGE_RANGE; private static final ForgeConfigSpec.DoubleValue BRUTALFLY_ARMOR; private static final ForgeConfigSpec.DoubleValue BRUTALFLY_ARMOR_TOUGHNESS; + private static final ForgeConfigSpec.DoubleValue BRUTALFLY_KNOCKBACK_RESISTANCE; private static final ForgeConfigSpec.DoubleValue BRUTALFLY_MOVEMENT_SPEED; private static final ForgeConfigSpec.DoubleValue BRUTALFLY_FLYING_SPEED; - private static final ForgeConfigSpec.DoubleValue BRUTALFLY_KNOCKBACK_RESISTANCE; - - - // Mantis private static final ForgeConfigSpec.DoubleValue MANTIS_HEALTH; private static final ForgeConfigSpec.DoubleValue MANTIS_ATTACK_DAMAGE; @@ -132,9 +161,6 @@ public final class AntarchyMobsConfig { private static final ForgeConfigSpec.DoubleValue MANTIS_FLYING_SPEED; private static final ForgeConfigSpec.BooleanValue MANTIS_IGNORE_LIGHT_LEVEL; - - // Alpha Mantis - private static final ForgeConfigSpec.DoubleValue ALPHA_MANTIS_HEALTH; private static final ForgeConfigSpec.DoubleValue ALPHA_MANTIS_ATTACK_DAMAGE; private static final ForgeConfigSpec.DoubleValue ALPHA_MANTIS_MOVEMENT_SPEED; @@ -143,9 +169,6 @@ public final class AntarchyMobsConfig { private static final ForgeConfigSpec.IntValue ALPHA_MANTIS_MAX_MINIONS; private static final ForgeConfigSpec.DoubleValue ALPHA_MANTIS_DAMAGE_RANGE; - - // Rolly Polly - private static final ForgeConfigSpec.DoubleValue ROLLY_POLLY_HEALTH; private static final ForgeConfigSpec.DoubleValue ROLLY_POLLY_MOVEMENT_SPEED; private static final ForgeConfigSpec.DoubleValue ROLLY_POLLY_ROLL_SPEED_MULTIPLIER; @@ -155,26 +178,52 @@ public final class AntarchyMobsConfig { private static final ForgeConfigSpec.DoubleValue ROLLY_POLLY_ARMOR; private static final ForgeConfigSpec.DoubleValue ROLLY_POLLY_ROLLED_ARMOR_BONUS; + private static final ForgeConfigSpec.DoubleValue FLYTRAP_HEALTH; + private static final ForgeConfigSpec.DoubleValue FLYTRAP_ATTACK_DAMAGE; + private static final ForgeConfigSpec.DoubleValue FLYTRAP_GRAB_DAMAGE; + private static final ForgeConfigSpec.IntValue FLYTRAP_SWEEP_HIT_COOLDOWN_TICKS; - // Triffid - - private static final ForgeConfigSpec.DoubleValue TRIFFID_HEALTH; - private static final ForgeConfigSpec.DoubleValue TRIFFID_ATTACK_DAMAGE; - private static final ForgeConfigSpec.DoubleValue TRIFFID_GRAB_DAMAGE; - - - // Caterpillar - + private static final ForgeConfigSpec.DoubleValue CATERPILLAR_HEALTH; + private static final ForgeConfigSpec.DoubleValue CATERPILLAR_MOVEMENT_SPEED; private static final ForgeConfigSpec.DoubleValue CATERPILLAR_PUPATION_TIME_SECONDS; + private static final ForgeConfigSpec.DoubleValue FLYING_SQUIRREL_HEALTH; + private static final ForgeConfigSpec.DoubleValue FLYING_SQUIRREL_MOVEMENT_SPEED; + private static final ForgeConfigSpec.DoubleValue BUTTERFLY_HEALTH; + private static final ForgeConfigSpec.DoubleValue BUTTERFLY_MOVEMENT_SPEED; + private static final ForgeConfigSpec.DoubleValue BUTTERFLY_FLYING_SPEED; + private static final ForgeConfigSpec.DoubleValue BED_BUG_HEALTH; + private static final ForgeConfigSpec.DoubleValue BED_BUG_ATTACK_DAMAGE; + private static final ForgeConfigSpec.DoubleValue BED_BUG_MOVEMENT_SPEED; + private static final ForgeConfigSpec.DoubleValue BED_BUG_ARMOR; - // Ant Dance + private static final ForgeConfigSpec.DoubleValue STRATOSHARK_HEALTH; + private static final ForgeConfigSpec.DoubleValue STRATOSHARK_ATTACK_DAMAGE; + private static final ForgeConfigSpec.DoubleValue STRATOSHARK_MOVEMENT_SPEED; + private static final ForgeConfigSpec.DoubleValue STRATOSHARK_FLYING_SPEED; + private static final ForgeConfigSpec.DoubleValue STRATOSHARK_KNOCKBACK_RESISTANCE; + private static final ForgeConfigSpec.DoubleValue MISSILE_SQUID_HEALTH; + private static final ForgeConfigSpec.DoubleValue MISSILE_SQUID_ATTACK_DAMAGE; + private static final ForgeConfigSpec.DoubleValue MISSILE_SQUID_MOVEMENT_SPEED; + private static final ForgeConfigSpec.DoubleValue MISSILE_SQUID_FLYING_SPEED; + private static final ForgeConfigSpec.DoubleValue MISSILE_SQUID_KNOCKBACK_RESISTANCE; + private static final ForgeConfigSpec.DoubleValue MOLEWORM_HEALTH; + private static final ForgeConfigSpec.DoubleValue MOLEWORM_ATTACK_DAMAGE; + private static final ForgeConfigSpec.DoubleValue MOLEWORM_MOVEMENT_SPEED; + private static final ForgeConfigSpec.DoubleValue MOLEVORE_HEALTH; + private static final ForgeConfigSpec.DoubleValue MOLEVORE_ATTACK_DAMAGE; + private static final ForgeConfigSpec.IntValue MOLEVORE_SPIN_TICKS; + private static final ForgeConfigSpec.IntValue MOLEVORE_COOLDOWN_TICKS; + private static final ForgeConfigSpec.DoubleValue MOLEVORE_CHARGE_SPEED; + private static final ForgeConfigSpec.DoubleValue MOLEVORE_BREAK_RANGE; + private static final ForgeConfigSpec.DoubleValue MOLEVORE_BREAK_VERTICAL_RANGE; + private static final ForgeConfigSpec.DoubleValue MOLEVORE_BREAK_HALF_WIDTH; + + private static final ForgeConfigSpec.DoubleValue OCTOPUS_BOMB_HEALTH; + private static final ForgeConfigSpec.DoubleValue OCTOPUS_BOMB_ATTACK_DAMAGE; private static final ForgeConfigSpec.DoubleValue ANT_DANCE_RADIUS; - - // Reverie - private static final ForgeConfigSpec.DoubleValue REVERIE_HEALTH; private static final ForgeConfigSpec.DoubleValue REVERIE_INTEREST_RADIUS; private static final ForgeConfigSpec.DoubleValue REVERIE_ABANDON_PLAYER_DISTANCE; @@ -188,17 +237,17 @@ public final class AntarchyMobsConfig { private static final ForgeConfigSpec.DoubleValue REVERIE_WARNING_THREAT_VERTICAL_RANGE; private static final ForgeConfigSpec.IntValue REVERIE_DUPLICATION_COOLDOWN_TICKS; - - // Nightmare - private static final ForgeConfigSpec.DoubleValue NIGHTMARE_HEALTH; private static final ForgeConfigSpec.DoubleValue NIGHTMARE_ATTACK_DAMAGE; private static final ForgeConfigSpec.DoubleValue NIGHTMARE_MOVEMENT_SPEED; private static final ForgeConfigSpec.IntValue NIGHTMARE_WEAKNESS_TICKS; private static final ForgeConfigSpec.IntValue NIGHTMARE_DREAD_TICKS; - - - // Basilisk + private static final ForgeConfigSpec.IntValue DIMENSIONAL_TEAR_LIFETIME_TICKS; + private static final ForgeConfigSpec.IntValue DIMENSIONAL_TEAR_INVERTED_DURATION_TICKS; + private static final ForgeConfigSpec.IntValue DIMENSIONAL_TEAR_EMERGENCE_MIN_INTERVAL_TICKS; + private static final ForgeConfigSpec.IntValue DIMENSIONAL_TEAR_EMERGENCE_MAX_INTERVAL_TICKS; + private static final ForgeConfigSpec.DoubleValue DIMENSIONAL_TEAR_LUCID_EVENT_CHANCE; + private static final ForgeConfigSpec.BooleanValue DIMENSIONAL_TEARS_SPAWN_NATURALLY; private static final ForgeConfigSpec.BooleanValue BASILISK_PETRIFYING_GAZE_ENABLED; private static final ForgeConfigSpec.IntValue BASILISK_SPAWN_MAX_LIGHT_LEVEL; @@ -222,9 +271,6 @@ public final class AntarchyMobsConfig { private static final ForgeConfigSpec.DoubleValue BASILISK_PREY_PETRIFY_RANGE; private static final ForgeConfigSpec.IntValue BASILISK_PREY_PETRIFY_TICKS; - - // Toreterror - private static final ForgeConfigSpec.DoubleValue TORETERROR_HEALTH; private static final ForgeConfigSpec.DoubleValue TORETERROR_DAMAGE_RANGE; private static final ForgeConfigSpec.DoubleValue TORETERROR_JUMP_ATTACK_DAMAGE; @@ -232,26 +278,23 @@ public final class AntarchyMobsConfig { private static final ForgeConfigSpec.DoubleValue TORETERROR_SPIN_DAMAGE; private static final ForgeConfigSpec.DoubleValue TORETERROR_SPIN_KNOCKBACK; private static final ForgeConfigSpec.DoubleValue TORETERROR_PROJECTILE_DAMAGE_MULTIPLIER; - private static final ForgeConfigSpec.DoubleValue TORETERROR_RANGED_WATER_BOMB_CHANCE; - private static final ForgeConfigSpec.DoubleValue WATER_CANNON_COOLDOWN_SECONDS; private static final ForgeConfigSpec.DoubleValue WATER_BOMB_DAMAGE; private static final ForgeConfigSpec.IntValue WATER_BOMB_LIFETIME_TICKS; private static final ForgeConfigSpec.DoubleValue WATER_BOMB_GRAVITY; private static final ForgeConfigSpec.DoubleValue WATER_BOMB_KNOCKBACK; + private static final ForgeConfigSpec.DoubleValue CRAWLING_BLIGHT_HEALTH; + private static final ForgeConfigSpec.DoubleValue CRAWLING_BLIGHT_ATTACK_DAMAGE; - // Creeping Horror - - private static final ForgeConfigSpec.DoubleValue CREEPING_HORROR_HEALTH; - private static final ForgeConfigSpec.DoubleValue CREEPING_HORROR_ATTACK_DAMAGE; - - - // Lurking Terror - - private static final ForgeConfigSpec.DoubleValue LURKING_TERROR_HEALTH; - private static final ForgeConfigSpec.DoubleValue LURKING_TERROR_ATTACK_DAMAGE; - - // Jerry + private static final ForgeConfigSpec.DoubleValue SKULKING_FRIGHT_HEALTH; + private static final ForgeConfigSpec.DoubleValue SKULKING_FRIGHT_ATTACK_DAMAGE; + private static final ForgeConfigSpec.DoubleValue MANTICORE_HEALTH; + private static final ForgeConfigSpec.DoubleValue MANTICORE_ATTACK_DAMAGE; + private static final ForgeConfigSpec.IntValue MANTICORE_STING_POISON_TICKS; + private static final ForgeConfigSpec.IntValue QUEEN_MANTICORE_CAP; + private static final ForgeConfigSpec.IntValue QUEEN_MANTICORE_SUMMON_COOLDOWN_TICKS; + private static final ForgeConfigSpec.IntValue QUEEN_MANTICORE_SUMMON_COUNT; + private static final ForgeConfigSpec.DoubleValue QUEEN_MANTICORE_SUMMON_RANGE; private static final ForgeConfigSpec.DoubleValue JERRY_INFANT_HEALTH; private static final ForgeConfigSpec.DoubleValue JERRY_INFANT_ATTACK_DAMAGE; @@ -262,38 +305,20 @@ public final class AntarchyMobsConfig { private static final ForgeConfigSpec.DoubleValue JERRY_GAMMA_HEALTH; private static final ForgeConfigSpec.DoubleValue JERRY_GAMMA_ATTACK_DAMAGE; - - // Cheep - private static final ForgeConfigSpec.DoubleValue CHEEP_HEALTH; private static final ForgeConfigSpec.DoubleValue CHEEP_ATTACK_DAMAGE; - - // Dorrie - private static final ForgeConfigSpec.DoubleValue DORRIE_HEALTH; - - // Ouranwood Deer - private static final ForgeConfigSpec.DoubleValue OURANWOOD_DEER_HEALTH; - - // Glimmer - private static final ForgeConfigSpec.DoubleValue GLIMMER_HEALTH; - - // Hercules Beetle - private static final ForgeConfigSpec.DoubleValue HERCULES_BEETLE_HEALTH; private static final ForgeConfigSpec.DoubleValue HERCULES_BEETLE_ATTACK_DAMAGE; private static final ForgeConfigSpec.DoubleValue HERCULES_BEETLE_CHARGE_DAMAGE; private static final ForgeConfigSpec.DoubleValue HERCULES_BEETLE_DAMAGE_RANGE; - - // Lucid - private static final ForgeConfigSpec.DoubleValue LUCID_ATTACK_RANGE; private static final ForgeConfigSpec.DoubleValue LUCID_PEARL_INVERTED_DURATION_SECONDS; private static final ForgeConfigSpec.DoubleValue LUCID_HEALTH; @@ -302,86 +327,21 @@ public final class AntarchyMobsConfig { private static final ForgeConfigSpec.DoubleValue LUCID_FLYING_SPEED; private static final ForgeConfigSpec.DoubleValue LUCID_KNOCKBACK_RESISTANCE; - - // Missile Squid - - private static final ForgeConfigSpec.DoubleValue MISSILE_SQUID_HEALTH; - private static final ForgeConfigSpec.DoubleValue MISSILE_SQUID_ATTACK_DAMAGE; - private static final ForgeConfigSpec.DoubleValue MISSILE_SQUID_MOVEMENT_SPEED; - private static final ForgeConfigSpec.DoubleValue MISSILE_SQUID_FLYING_SPEED; - private static final ForgeConfigSpec.DoubleValue MISSILE_SQUID_KNOCKBACK_RESISTANCE; - - - // Octopus Bomb - - private static final ForgeConfigSpec.DoubleValue OCTOPUS_BOMB_HEALTH; - private static final ForgeConfigSpec.DoubleValue OCTOPUS_BOMB_ATTACK_DAMAGE; - - - // Bed Bug - - private static final ForgeConfigSpec.DoubleValue BED_BUG_HEALTH; - private static final ForgeConfigSpec.DoubleValue BED_BUG_ATTACK_DAMAGE; - private static final ForgeConfigSpec.DoubleValue BED_BUG_MOVEMENT_SPEED; - private static final ForgeConfigSpec.DoubleValue BED_BUG_ARMOR; - - - // Cloud Shark - - private static final ForgeConfigSpec.DoubleValue CLOUD_SHARK_HEALTH; - private static final ForgeConfigSpec.DoubleValue CLOUD_SHARK_ATTACK_DAMAGE; - private static final ForgeConfigSpec.DoubleValue CLOUD_SHARK_MOVEMENT_SPEED; - private static final ForgeConfigSpec.DoubleValue CLOUD_SHARK_FLYING_SPEED; - private static final ForgeConfigSpec.DoubleValue CLOUD_SHARK_KNOCKBACK_RESISTANCE; - - - // Flying Squirrel - - private static final ForgeConfigSpec.DoubleValue FLYING_SQUIRREL_HEALTH; - private static final ForgeConfigSpec.DoubleValue FLYING_SQUIRREL_MOVEMENT_SPEED; - - - // Molevore - - private static final ForgeConfigSpec.DoubleValue MOLEVORE_HEALTH; - private static final ForgeConfigSpec.DoubleValue MOLEVORE_ATTACK_DAMAGE; - private static final ForgeConfigSpec.DoubleValue MOLEVORE_MOVEMENT_SPEED; - private static final ForgeConfigSpec.DoubleValue MOLEVORE_ARMOR; - private static final ForgeConfigSpec.DoubleValue MOLEVORE_KNOCKBACK_RESISTANCE; - private static final ForgeConfigSpec.DoubleValue MOLEVORE_FOLLOW_RANGE; - private static final ForgeConfigSpec.IntValue MOLEVORE_XP_REWARD; - private static final ForgeConfigSpec.IntValue MOLEVORE_SPIN_TICKS; - private static final ForgeConfigSpec.IntValue MOLEVORE_COOLDOWN_TICKS; - private static final ForgeConfigSpec.DoubleValue MOLEVORE_CHARGE_SPEED; - private static final ForgeConfigSpec.DoubleValue MOLEVORE_BREAK_RANGE; - private static final ForgeConfigSpec.DoubleValue MOLEVORE_BREAK_VERTICAL_RANGE; - private static final ForgeConfigSpec.DoubleValue MOLEVORE_BREAK_HALF_WIDTH; - - - // Moleworm - - private static final ForgeConfigSpec.DoubleValue MOLEWORM_HEALTH; - private static final ForgeConfigSpec.DoubleValue MOLEWORM_ATTACK_DAMAGE; - private static final ForgeConfigSpec.DoubleValue MOLEWORM_MOVEMENT_SPEED; - - - // Scorpion - - private static final ForgeConfigSpec.DoubleValue SCORPION_HEALTH; - private static final ForgeConfigSpec.DoubleValue SCORPION_ATTACK_DAMAGE; - private static final ForgeConfigSpec.DoubleValue SCORPION_MOVEMENT_SPEED; - private static final ForgeConfigSpec.DoubleValue SCORPION_ARMOR; - private static final ForgeConfigSpec.DoubleValue SCORPION_KNOCKBACK_RESISTANCE; - - - // Butterfly - - private static final ForgeConfigSpec.DoubleValue BUTTERFLY_HEALTH; - private static final ForgeConfigSpec.DoubleValue BUTTERFLY_MOVEMENT_SPEED; - private static final ForgeConfigSpec.DoubleValue BUTTERFLY_FLYING_SPEED; - - - // Dread effect + private static final ForgeConfigSpec.DoubleValue VORTEX_HEALTH; + private static final ForgeConfigSpec.DoubleValue VORTEX_ATTACK_DAMAGE; + private static final ForgeConfigSpec.DoubleValue VORTEX_MOVEMENT_SPEED; + private static final ForgeConfigSpec.DoubleValue VORTEX_FLYING_SPEED; + private static final ForgeConfigSpec.IntValue VORTEX_MAX_ACTIVE_VORTEXES; + private static final ForgeConfigSpec.IntValue WIND_VORTEX_DURATION_TICKS; + private static final ForgeConfigSpec.DoubleValue WIND_VORTEX_PULL_STRENGTH; + private static final ForgeConfigSpec.DoubleValue WIND_VORTEX_LAUNCH_STRENGTH; + private static final ForgeConfigSpec.DoubleValue VORTEX_LENS_MIN_RADIUS; + private static final ForgeConfigSpec.DoubleValue VORTEX_LENS_MAX_RADIUS; + private static final ForgeConfigSpec.DoubleValue VORTEX_LENS_MIN_HEIGHT; + private static final ForgeConfigSpec.DoubleValue VORTEX_LENS_MAX_HEIGHT; + private static final ForgeConfigSpec.DoubleValue VORTEX_LENS_PULL_STRENGTH; + private static final ForgeConfigSpec.DoubleValue VORTEX_LENS_PUSH_STRENGTH; + private static final ForgeConfigSpec.DoubleValue VORTEX_LENS_LAUNCH_STRENGTH; private static final ForgeConfigSpec.BooleanValue DREAD_HALLUCINATION_SOUNDS_ENABLED; private static final ForgeConfigSpec.DoubleValue DREAD_HALLUCINATION_SOUND_MIN_INTERVAL; @@ -393,9 +353,6 @@ public final class AntarchyMobsConfig { static { ForgeConfigSpec.Builder b = new ForgeConfigSpec.Builder(); - - // Ants (shared) - ANTS_STEAL_FROM_CHESTS = b .comment("Whether ants will steal edible items from nearby chest inventories.") .define("antsStealFromChests", true); @@ -476,9 +433,6 @@ public final class AntarchyMobsConfig { .define("destinationDimension", "antarchy:cavaryn", AntarchyMobsConfig::isValidDimensionId); b.pop(); - - // Easter Bunny - b.push("easterBunny"); EASTER_BUNNY_ENABLED = b .comment( @@ -494,18 +448,12 @@ public final class AntarchyMobsConfig { .defineInRange("naturalSpawnChancePercent", 1, 0, 100); b.pop(); - - // Wasp - b.push("wasp"); WASP_HEALTH = b.comment("Base max health.") .defineInRange("health", 16.0D, 1.0D, 32768.0D); WASP_ATTACK_DAMAGE = b.comment("Base attack damage.") .defineInRange("attackDamage", 4.0D, 0.0D, 1024.0D); WASP_MOVEMENT_SPEED = b.comment("Base wasp speed used for both flying and movement. Vanilla bee default is 0.3, so 0.39 is 30% faster.").defineInRange("movementSpeed", 0.39D, 0.0D, 10.0D); b.pop(); - - // Bomber - b.push("bomber"); BOMBER_HEALTH = b.comment("Base max health.") .defineInRange("health", 10.0D, 1.0D, 32768.0D); BOMBER_ATTACK_DAMAGE = b.comment("Direct damage dealt on contact before detonation.") .defineInRange("attackDamage", 4.0D, 0.0D, 1024.0D); @@ -513,84 +461,163 @@ public final class AntarchyMobsConfig { BOMBER_EXPLOSION_RADIUS = b.comment("Explosion radius when a bomber detonates. TNT uses 4.0.").defineInRange("explosionRadius", 4.0D, 0.0D, 128.0D); b.pop(); - - // Jumpy Bug - - b.push("jumpyBug"); - JUMPY_BUG_HEALTH = b.comment("Base max health.").defineInRange("health", 100.0D, 1.0D, 32768.0D); - JUMPY_BUG_POUNCE_DAMAGE = b.comment("Damage dealt on a successful pounce latch.").defineInRange("pounceDamage", 2.0D, 0.0D, 1024.0D); - JUMPY_BUG_LATCH_DAMAGE = b.comment("Damage dealt while latched onto a target.").defineInRange("latchDamage", 2.0D, 0.0D, 1024.0D); - JUMPY_BUG_CAMOUFLAGE_ALPHA = b.comment("Renderer alpha while camouflaged.").defineInRange("camouflageAlpha", 0.18D, 0.01D, 1.0D); + b.push("springbug"); + SPRINGBUG_HEALTH = b.comment("Base max health.").defineInRange("health", 100.0D, 1.0D, 32768.0D); + SPRINGBUG_POUNCE_DAMAGE = b.comment("Damage dealt on a successful pounce latch.").defineInRange("pounceDamage", 2.0D, 0.0D, 1024.0D); + SPRINGBUG_CAMOUFLAGE_ALPHA = b.comment("Renderer alpha while camouflaged.").defineInRange("camouflageAlpha", 0.18D, 0.01D, 1.0D); b.pop(); - - // Emperor Scorpion - b.push("emperorScorpion"); - EMPEROR_SCORPION_HEALTH = b.comment("Base max health.") .defineInRange("health", 300.0D, 1.0D, 32768.0D); - EMPEROR_SCORPION_ATTACK_DAMAGE = b.comment("Base attack damage.") .defineInRange("attackDamage", 28.0D, 0.0D, 1024.0D); - EMPEROR_SCORPION_ARMOR = b.comment("Base armor value.") .defineInRange("armor", 22.0D, 0.0D, 1024.0D); - EMPEROR_SCORPION_KNOCKBACK_RESISTANCE = b.comment("Base knockback resistance.") .defineInRange("knockbackResistance", 0.8D, 0.0D, 1.0D); - EMPEROR_SCORPION_MOVEMENT_SPEED = b.comment("Base movement speed.") .defineInRange("movementSpeed", 0.384D, 0.0D, 10.0D); - EMPEROR_SCORPION_FOLLOW_RANGE = b.comment("Base follow range.") .defineInRange("followRange", 80.0D, 1.0D, 256.0D); - EMPEROR_SCORPION_XP_REWARD = b.comment("Base experience reward.") .defineInRange("xpReward", 25, 0, 100000); - EMPEROR_SCORPION_CLAW_ANIM_TICKS = b.comment("Ticks for the claw attack animation window.") .defineInRange("clawAnimTicks", 23, 1, 400); - EMPEROR_SCORPION_CLAW_HIT_TICK = b.comment("Tick during the claw animation when damage is applied.").defineInRange("clawHitTick", 12, 0, 400); - EMPEROR_SCORPION_CLAW_COOLDOWN_TICKS = b.comment("Cooldown between claw attacks.") .defineInRange("clawCooldownTicks", 28, 0, 20000); - EMPEROR_SCORPION_STING_ANIM_TICKS = b.comment("Ticks for the sting attack animation window.") .defineInRange("stingAnimTicks", 25, 1, 400); - EMPEROR_SCORPION_STING_HIT_TICK = b.comment("Tick during the sting animation when damage is applied.").defineInRange("stingHitTick", 13, 0, 400); - EMPEROR_SCORPION_STING_COOLDOWN_TICKS = b.comment("Cooldown between sting attacks.") .defineInRange("stingCooldownTicks", 60, 0, 20000); - EMPEROR_SCORPION_POISON_TICKS = b.comment("Poison duration applied by the sting attack.") .defineInRange("poisonTicks", 300, 0, 20000); - EMPEROR_SCORPION_WEAKNESS_TICKS = b.comment("Weakness duration applied by the sting attack.") .defineInRange("weaknessTicks", 120, 0, 20000); - EMPEROR_SCORPION_SUMMON_INTERVAL_TICKS = b.comment("Ticks between minion scorpion summons while in combat.").defineInRange("summonIntervalTicks", 140, 20, 72000); - EMPEROR_SCORPION_MAX_SUMMONED_SCORPIONS = b.comment("Maximum scorpions summoned by the Emperor Scorpion at once.").defineInRange("maxSummonedScorpions", 4, 0, 32); - EMPEROR_SCORPION_MAX_NEARBY_SCORPIONS = b.comment("Maximum nearby scorpions allowed before summoning stops.").defineInRange("maxNearbyScorpions", 3, 0, 32); - EMPEROR_SCORPION_HARDEN_COOLDOWN_TICKS = b.comment("Cooldown before the Emperor Scorpion can harden its shell again.").defineInRange("hardenCooldownTicks", 2400, 0, 72000); + EMPEROR_SCORPION_HEALTH = b.comment("Base max health.").defineInRange("health", 300.0D, 1.0D, 32768.0D); + EMPEROR_SCORPION_ATTACK_DAMAGE = b.comment("Base attack damage.").defineInRange("attackDamage", 28.0D, 0.0D, 1024.0D); + EMPEROR_SCORPION_MOVEMENT_SPEED = b.comment("Base movement speed.").defineInRange("movementSpeed", 0.384D, 0.0D, 10.0D); + EMPEROR_SCORPION_ARMOR = b.comment("Base armor value.").defineInRange("armor", 22.0D, 0.0D, 1024.0D); + EMPEROR_SCORPION_KNOCKBACK_RESISTANCE = b.comment("Base knockback resistance.").defineInRange("knockbackResistance", 0.8D, 0.0D, 1.0D); + EMPEROR_SCORPION_FOLLOW_RANGE = b.comment("Base follow range.").defineInRange("followRange", 80.0D, 1.0D, 256.0D); + EMPEROR_SCORPION_XP_REWARD = b.comment("Base experience reward.").defineInRange("xpReward", 25, 0, 100000); + EMPEROR_SCORPION_CLAW_ANIM_TICKS = b.comment("Ticks for the claw attack animation window.").defineInRange("clawAnimTicks", 23, 1, 400); + EMPEROR_SCORPION_CLAW_HIT_TICK = b.comment("Tick during the claw animation when damage is applied.").defineInRange("clawHitTick", 12, 0, 400); + EMPEROR_SCORPION_CLAW_COOLDOWN_TICKS = b.comment("Ticks between claw attacks.").defineInRange("clawCooldownTicks", 28, 0, 2000); + EMPEROR_SCORPION_STING_ANIM_TICKS = b.comment("Ticks for the sting attack animation window.").defineInRange("stingAnimTicks", 25, 1, 400); + EMPEROR_SCORPION_STING_HIT_TICK = b.comment("Tick during the sting animation when damage is applied.").defineInRange("stingHitTick", 13, 0, 400); + EMPEROR_SCORPION_STING_COOLDOWN_TICKS = b.comment("Ticks between sting attacks.").defineInRange("stingCooldownTicks", 60, 0, 2000); + EMPEROR_SCORPION_POISON_TICKS = b.comment("Ticks the Poison effect from a sting lasts.").defineInRange("poisonTicks", 300, 0, 20000); + EMPEROR_SCORPION_WEAKNESS_TICKS = b.comment("Ticks the Weakness effect from a sting lasts.").defineInRange("weaknessTicks", 120, 0, 20000); + EMPEROR_SCORPION_SUMMON_INTERVAL_TICKS = b.comment("Ticks between minion scorpion summons while hardened.").defineInRange("summonIntervalTicks", 140, 20, 72000); + EMPEROR_SCORPION_MAX_SUMMONED_SCORPIONS = b.comment("Maximum scorpions summoned per hardening cast.").defineInRange("maxSummonedScorpions", 4, 0, 32); + EMPEROR_SCORPION_MAX_NEARBY_SCORPIONS = b.comment("Maximum owned scorpion minions allowed near this scorpion at once.").defineInRange("maxNearbyScorpions", 4, 0, 32); + EMPEROR_SCORPION_HARDEN_COOLDOWN_TICKS = b.comment("Cooldown in ticks before the Emperor Scorpion can harden and summon again.").defineInRange("hardenCooldownTicks", 2400, 0, 200000); EMPEROR_SCORPION_DAMAGE_RANGE = b .comment("Range in blocks a player must be within for the Emperor Scorpion to be able to take damage. Prevents cheesing it from outside its aggro range.") - .defineInRange("damageRange", 80.0D, 1.0D, 256.0D); + .defineInRange("damageRange", 25.0D, 1.0D, 256.0D); EMPEROR_SCORPION_MIN_DESPAWN_TICKS = b .comment("Minimum ticks after spawning before the Emperor Scorpion can despawn from being far away. It also never despawns once it has taken damage. 6000 ticks = 5 minutes.") .defineInRange("minDespawnTicks", 6000, 0, 1000000); b.pop(); - - // Kraken + b.push("scorpion"); + SCORPION_HEALTH = b.defineInRange("health", 30.0D, 0.1D, 32768.0D); + SCORPION_ATTACK_DAMAGE = b.defineInRange("attackDamage", 5.0D, 0.0D, 1024.0D); + SCORPION_MOVEMENT_SPEED = b.defineInRange("movementSpeed", 0.29D, 0.0D, 10.0D); + SCORPION_ARMOR = b.defineInRange("armor", 2.0D, 0.0D, 1024.0D); + SCORPION_KNOCKBACK_RESISTANCE = b.defineInRange("knockbackResistance", 0.2D, 0.0D, 1.0D); + b.pop(); b.push("kraken"); KRAKEN_HEALTH = b.comment("Base max health.") .defineInRange("health", 1500.0D, 1.0D, 32768.0D); KRAKEN_ATTACK_DAMAGE = b.comment("Base attack damage.") .defineInRange("attackDamage", 45.0D, 0.0D, 1024.0D); - KRAKEN_ARMOR = b.comment("Base armor value.") .defineInRange("armor", 8.0D, 0.0D, 1024.0D); - KRAKEN_KNOCKBACK_RESISTANCE = b.comment("Base knockback resistance.") .defineInRange("knockbackResistance", 0.8D, 0.0D, 1.0D); - KRAKEN_MOVEMENT_SPEED = b.comment("Base movement speed.") .defineInRange("movementSpeed", 0.24D, 0.0D, 10.0D); - KRAKEN_FLYING_SPEED = b.comment("Base flying speed.") .defineInRange("flyingSpeed", 0.24D, 0.0D, 10.0D); - KRAKEN_BOSS_BAR_RANGE = b.comment("Range in blocks players see the Kraken's boss bar.") .defineInRange("bossBarRange", 40.0D, 1.0D, 256.0D); - KRAKEN_LIGHTNING_DAMAGE_PHASE_ONE = b.comment("Lightning strike damage dealt during phase one.") .defineInRange("lightningDamagePhaseOne", 6.0D, 0.0D, 1024.0D); KRAKEN_SQUID_SPAWN_ENABLED = b.comment("If true, a player killing a Missile Squid has a 1/100 chance to spawn a single Kraken nearby.") .define("squidSpawnEnabled", true); KRAKEN_MASS_SPAWN_ENABLED = b.comment("If true, a player killing a Missile Squid has a 1/500 chance to spawn 10 Krakens. Independent from the single spawn.").define("massSpawnEnabled", true); KRAKEN_REQUIRE_BAD_OMEN_TO_SUMMON = b.comment("If true, the killer must have Bad Omen to summon a single Kraken; chance scales with Bad Omen level. Mass spawn is unaffected by level but still requires Bad Omen when this is on.").define("requireBadOmenToSummon", true); KRAKEN_FOLLOW_RANGE = b.comment("How far the Kraken can see/target players.").defineInRange("followRange", 96.0D, 1.0D, 256.0D); - KRAKEN_DAMAGE_RANGE = b.comment("Range in blocks a player must be within for the Kraken to be able to take damage. Prevents cheesing it from outside its aggro range.").defineInRange("damageRange", 96.0D, 1.0D, 256.0D); + KRAKEN_DAMAGE_RANGE = b.comment("Range in blocks a player must be within for the Kraken to be able to take damage. Prevents cheesing it from outside its aggro range.").defineInRange("damageRange", 35.0D, 1.0D, 256.0D); + KRAKEN_ARMOR = b.comment("Base armor value.").defineInRange("armor", 8.0D, 0.0D, 1024.0D); + KRAKEN_KNOCKBACK_RESISTANCE = b.comment("Base knockback resistance.").defineInRange("knockbackResistance", 0.8D, 0.0D, 1.0D); + KRAKEN_MOVEMENT_SPEED = b.comment("Base movement speed.").defineInRange("movementSpeed", 0.24D, 0.0D, 10.0D); + KRAKEN_FLYING_SPEED = b.comment("Base flying speed.").defineInRange("flyingSpeed", 0.24D, 0.0D, 10.0D); + KRAKEN_BOSS_BAR_RANGE = b.comment("Range in blocks within which the Kraken's boss bar is shown to players.").defineInRange("bossBarRange", 40.0D, 1.0D, 256.0D); + KRAKEN_LIGHTNING_DAMAGE_PHASE_ONE = b.comment("Lightning strike damage during phase one.").defineInRange("lightningDamagePhaseOne", 6.0D, 0.0D, 1024.0D); b.pop(); + b.push("royalBosses"); + KING_HEALTH = b.comment("Base max health for the King.").defineInRange("kingHealth", 3400.0D, 1.0D, 32768.0D); + QUEEN_HEALTH = b.comment("Base max health for the Queen.").defineInRange("queenHealth", 4300.0D, 1.0D, 32768.0D); + KING_ATTACK_DAMAGE = b.comment("Base attack damage for the King.").defineInRange("kingAttackDamage", 50.0D, 0.0D, 1024.0D); + QUEEN_ATTACK_DAMAGE = b.comment("Base attack damage for the Queen.").defineInRange("queenAttackDamage", 45.0D, 0.0D, 1024.0D); + ROYAL_BOSS_ARMOR = b.comment("Base armor value shared by King and Queen.").defineInRange("armor", 20.0D, 0.0D, 1024.0D); + KING_ARMOR = b.defineInRange("kingArmor", 30.0D, 0.0D, 1024.0D); + ROYAL_BOSS_FOLLOW_RANGE = b.comment("Target acquisition range shared by King and Queen.").defineInRange("followRange", 128.0D, 1.0D, 256.0D); + ROYAL_BOSS_MOVEMENT_SPEED = b.comment("Base grounded movement speed shared by King and Queen.").defineInRange("movementSpeed", 0.22D, 0.0D, 10.0D); + ROYAL_BOSS_KNOCKBACK_RESISTANCE = b.comment("Base knockback resistance shared by King and Queen.").defineInRange("knockbackResistance", 1.0D, 0.0D, 1.0D); + ROYAL_BOSS_STEP_HEIGHT = b.comment("Base step height shared by King and Queen.").defineInRange("stepHeight", 3.0D, 0.0D, 32.0D); + ROYAL_BOSS_MAX_SINGLE_HIT_DAMAGE = b.comment("Maximum damage a single hit can deal to a Royal boss before later anti-burst systems are added.").defineInRange("maxSingleHitDamage", 250.0D, 1.0D, 32768.0D); + ROYAL_BOSS_BITE_REACH = b.comment("Radius around each head anchor that a King or Queen bite can hit.").defineInRange("biteReach", 12.0D, 1.0D, 64.0D); + ROYAL_BOSS_BITE_DAMAGE_MULTIPLIER = b.comment("Multiplier applied to base attack damage for King and Queen head bites.").defineInRange("biteDamageMultiplier", 1.6D, 0.0D, 32.0D); + ROYAL_BOSS_BITE_COOLDOWN_TICKS = b.comment("Base cooldown in ticks between bites for a single King or Queen head (scaled down at later phases).").defineInRange("biteCooldownTicks", 45, 1, 1200); + ROYAL_BOSS_MULTIPLAYER_SCALING_ENABLED = b.define("multiplayerScalingEnabled", true); + ROYAL_BOSS_SCALING_MAX_PLAYERS = b.defineInRange("scalingMaxPlayers", 4, 1, 32); + ROYAL_BOSS_HEALTH_PER_ADDITIONAL_PLAYER = b.defineInRange("healthPerAdditionalPlayer", 0.35D, 0.0D, 4.0D); + ROYAL_BOSS_DAMAGE_PER_ADDITIONAL_PLAYER = b.defineInRange("damagePerAdditionalPlayer", 0.10D, 0.0D, 2.0D); + ROYAL_BOUNDARY_RADIUS = b.defineInRange("royalBoundaryRadius", 192.0D, 32.0D, 1024.0D); + ROYAL_BOUNDARY_WARNING_RADIUS = b.defineInRange("royalBoundaryWarningRadius", 160.0D, 16.0D, 1024.0D); + ROYAL_BOUNDARY_GRACE_TICKS = b.defineInRange("royalBoundaryGraceTicks", 60, 0, 2400); + QUEEN_BEAM_DAMAGE = b.defineInRange("queenBeamDamage", 45.0D, 0.0D, 1024.0D); + QUEEN_BEAM_RANGE = b.defineInRange("queenBeamRange", 100.0D, 1.0D, 256.0D); + QUEEN_BEAM_MINIMUM_RANGE = b.comment("Minimum distance from the Queen before she may begin or maintain a beam.").defineInRange("queenBeamMinimumRange", 22.0D, 0.0D, 256.0D); + QUEEN_BEAM_DURATION_TICKS = b.defineInRange("queenBeamDurationTicks", 30, 1, 1200); + QUEEN_BEAM_WINDUP_TICKS = b.comment("Charge time before the Queen beam actually fires.").defineInRange("queenBeamWindupTicks", 20, 0, 1200); + QUEEN_BEAM_TRAVEL_TICKS = b.comment("Time for the Queen beam to extend from its head to its committed range.").defineInRange("queenBeamTravelTicks", 12, 1, 1200); + QUEEN_BEAM_COOLDOWN_TICKS = b.defineInRange("queenBeamCooldownTicks", 90, 1, 2400); + QUEEN_BEAM_TRACKING = b.defineInRange("queenBeamTracking", 0.1D, 0.0D, 1.0D); + QUEEN_BEAM_TERRAIN_RADIUS = b.defineInRange("queenBeamTerrainRadius", 5.0D, 0.0D, 32.0D); + QUEEN_BEAM_TERRAIN_CAP = b.defineInRange("queenBeamTerrainCap", 192, 0, 4096); + QUEEN_BEAM_PHASE_ONE_CAP = b.comment("Maximum simultaneous Queen beams in phase one.").defineInRange("queenBeamPhaseOneCap", 1, 1, 3); + QUEEN_BEAM_PHASE_TWO_CAP = b.comment("Maximum simultaneous Queen beams in phase two.").defineInRange("queenBeamPhaseTwoCap", 2, 1, 3); + QUEEN_BEAM_PHASE_THREE_CAP = b.comment("Maximum simultaneous Queen beams when phase three rolls a full volley.").defineInRange("queenBeamPhaseThreeCap", 3, 1, 3); + QUEEN_BEAM_PHASE_THREE_MAX_VOLLEY_CHANCE = b.comment("Chance that a new phase-three Queen beam volley may use its full configured cap; otherwise it is limited to two beams.").defineInRange("queenBeamPhaseThreeMaxVolleyChance", 0.2D, 0.0D, 1.0D); + KING_BEAM_DAMAGE = b.defineInRange("kingBeamDamage", 50.0D, 0.0D, 1024.0D); + KING_BEAM_RANGE = b.defineInRange("kingBeamRange", 100.0D, 1.0D, 256.0D); + KING_BEAM_MINIMUM_RANGE = b.comment("Minimum distance from the King before he may begin or maintain a beam.").defineInRange("kingBeamMinimumRange", 32.0D, 0.0D, 256.0D); + KING_BEAM_DURATION_TICKS = b.defineInRange("kingBeamDurationTicks", 30, 1, 1200); + KING_BEAM_WINDUP_TICKS = b.comment("Charge time before the King beam actually fires.").defineInRange("kingBeamWindupTicks", 20, 0, 1200); + KING_BEAM_TRAVEL_TICKS = b.comment("Time for the King beam to extend from its head to its committed range.").defineInRange("kingBeamTravelTicks", 12, 1, 1200); + KING_BEAM_COOLDOWN_TICKS = b.defineInRange("kingBeamCooldownTicks", 90, 1, 2400); + KING_BEAM_TRACKING = b.defineInRange("kingBeamTracking", 0.1D, 0.0D, 1.0D); + KING_BEAM_TERRAIN_RADIUS = b.defineInRange("kingBeamTerrainRadius", 5.0D, 0.0D, 32.0D); + KING_BEAM_TERRAIN_CAP = b.defineInRange("kingBeamTerrainCap", 192, 0, 4096); + ROYAL_DECREE_COOLDOWN_TICKS = b.comment("Cooldown in ticks between the end of one King decree and the next.").defineInRange("royalDecreeCooldownTicks", 700, 1, 72000); + KING_ROYAL_MUSTER_COOLDOWN_TICKS = b.comment("Cooldown in ticks between King's command pulses.").defineInRange("kingRoyalMusterCooldownTicks", 500, 1, 72000); + KING_ROYAL_MUSTER_WINDUP_TICKS = b.comment("Warning time before the King commands nearby hostile mobs.").defineInRange("kingRoyalMusterWindupTicks", 30, 0, 1200); + KING_ROYAL_MUSTER_DURATION_TICKS = b.comment("Duration of Commanded applied by the King's muster.").defineInRange("kingRoyalMusterDurationTicks", 600, 1, 72000); + KING_ROYAL_MUSTER_RADIUS = b.comment("Radius of the King's command aura.").defineInRange("kingRoyalMusterRadius", 32.0D, 1.0D, 128.0D); + KING_ROYAL_MUSTER_CAP = b.comment("Maximum hostile mobs affected by one command pulse.").defineInRange("kingRoyalMusterCap", 12, 1, 128); + QUEEN_BLACK_HOLE_RADIUS = b.defineInRange("queenBlackHoleRadius", 14.0D, 1.0D, 64.0D); + QUEEN_BLACK_HOLE_ACTIVE_TICKS = b.comment("Active duration for Royal Assailant axe black holes. Queen black holes always follow their 20.125-second animation.").defineInRange("queenBlackHoleActiveTicks", 120, 20, 1200); + QUEEN_BLACK_HOLE_PULL_STRENGTH = b.defineInRange("queenBlackHolePullStrength", 0.16D, 0.0D, 2.0D); + QUEEN_BLACK_HOLE_BLOCK_SUCTION_CAP = b.comment("Maximum terrain blocks a single Queen black hole may pull into itself.").defineInRange("queenBlackHoleBlockSuctionCap", 160, 0, 4096); + KING_FIREBALL_DAMAGE = b.defineInRange("kingFireballDamage", 48.0D, 0.0D, 1024.0D); + KING_FIREBALL_RADIUS = b.defineInRange("kingFireballRadius", 4.5D, 0.5D, 32.0D); + KING_FIREBALL_COOLDOWN_TICKS = b.defineInRange("kingFireballCooldownTicks", 150, 1, 2400); + KING_ICEBALL_DAMAGE = b.defineInRange("kingIceballDamage", 18.0D, 0.0D, 1024.0D); + KING_ICEBALL_RADIUS = b.defineInRange("kingIceballRadius", 5.0D, 0.5D, 32.0D); + KING_ICEBALL_COOLDOWN_TICKS = b.defineInRange("kingIceballCooldownTicks", 190, 1, 2400); + KING_ICE_SPIKE_DAMAGE = b.defineInRange("kingIceSpikeDamage", 24.0D, 0.0D, 1024.0D); + KING_ICE_SPIKE_COOLDOWN_TICKS = b.defineInRange("kingIceSpikeCooldownTicks", 240, 1, 2400); + KING_ELEMENTAL_TERRAIN_CAP = b.defineInRange("kingElementalTerrainCap", 256, 0, 4096); + ROYAL_BOSS_SOUND_VOLUME = b.comment("Volume multiplier for large King and Queen presence, movement, and attack sounds.").defineInRange("royalBossSoundVolume", 4.5D, 0.5D, 16.0D); + b.pop(); - // Brutalfly + b.push("royalMounts"); + ROYAL_EGG_HATCH_CHANCE = b.comment("Chance denominator for a royal egg advancing one hatch stage on a random tick.").defineInRange("eggHatchChance", 3, 1, 100000); + ROYAL_BOLT_DAMAGE = b.comment("Direct damage dealt by a Prince or Princess royal bolt.").defineInRange("boltDamage", 6.0D, 0.0D, 1024.0D); + PRINCE_HEALTH = b.comment("Prince base max health.").defineInRange("princeHealth", 360.0D, 1.0D, 32768.0D); + PRINCE_ATTACK_DAMAGE = b.comment("Prince bite damage.").defineInRange("princeAttackDamage", 14.0D, 0.0D, 1024.0D); + PRINCE_MOVEMENT_SPEED = b.comment("Prince grounded movement speed.").defineInRange("princeMovementSpeed", 0.28D, 0.0D, 10.0D); + PRINCE_FLYING_SPEED = b.comment("Prince flying movement speed.").defineInRange("princeFlyingSpeed", 0.9D, 0.0D, 10.0D); + PRINCE_ARMOR = b.comment("Prince armor value.").defineInRange("princeArmor", 10.0D, 0.0D, 1024.0D); + PRINCE_KNOCKBACK_RESISTANCE = b.comment("Prince knockback resistance.").defineInRange("princeKnockbackResistance", 0.6D, 0.0D, 1.0D); + PRINCE_FOLLOW_RANGE = b.comment("Prince owner and target range.").defineInRange("princeFollowRange", 48.0D, 1.0D, 256.0D); + PRINCESS_HEALTH = b.comment("Princess base max health.").defineInRange("princessHealth", 330.0D, 1.0D, 32768.0D); + PRINCESS_ATTACK_DAMAGE = b.comment("Princess bite damage.").defineInRange("princessAttackDamage", 10.0D, 0.0D, 1024.0D); + PRINCESS_MOVEMENT_SPEED = b.comment("Princess grounded movement speed.").defineInRange("princessMovementSpeed", 0.28D, 0.0D, 10.0D); + PRINCESS_FLYING_SPEED = b.comment("Princess flying movement speed.").defineInRange("princessFlyingSpeed", 0.95D, 0.0D, 10.0D); + PRINCESS_ARMOR = b.comment("Princess armor value.").defineInRange("princessArmor", 8.0D, 0.0D, 1024.0D); + PRINCESS_KNOCKBACK_RESISTANCE = b.comment("Princess knockback resistance.").defineInRange("princessKnockbackResistance", 0.5D, 0.0D, 1.0D); + PRINCESS_FOLLOW_RANGE = b.comment("Princess owner and target range.").defineInRange("princessFollowRange", 48.0D, 1.0D, 256.0D); + b.pop(); b.push("brutalfly"); BRUTALFLY_HEALTH = b.comment("Base max health.") .defineInRange("health", 200.0D, 1.0D, 32768.0D); BRUTALFLY_SWIPE_DAMAGE = b.comment("Damage dealt by a claw swipe.") .defineInRange("swipeDamage", 15.0D, 0.0D, 1024.0D); BRUTALFLY_SPIT_DAMAGE = b.comment("Direct hit damage from a spit orb before lingering effect.").defineInRange("spitDamage", 5.0D, 0.0D, 1024.0D); - BRUTALFLY_DAMAGE_RANGE = b.comment("Range in blocks a player must be within for the Brutalfly to be able to take damage. Prevents cheesing it from outside its aggro range.").defineInRange("damageRange", 48.0D, 1.0D, 256.0D); + BRUTALFLY_DAMAGE_RANGE = b.comment("Range in blocks a player must be within for the Brutalfly to be able to take damage. Prevents cheesing it from outside its aggro range.").defineInRange("damageRange", 25.0D, 1.0D, 256.0D); BRUTALFLY_ARMOR = b.comment("Base armor value.").defineInRange("armor", 10.0D, 0.0D, 1024.0D); BRUTALFLY_ARMOR_TOUGHNESS = b.comment("Base armor toughness.").defineInRange("armorToughness", 4.0D, 0.0D, 100.0D); + BRUTALFLY_KNOCKBACK_RESISTANCE = b.comment("Base knockback resistance.").defineInRange("knockbackResistance", 0.7D, 0.0D, 1.0D); BRUTALFLY_MOVEMENT_SPEED = b.comment("Base movement speed.").defineInRange("movementSpeed", 0.34D, 0.0D, 10.0D); BRUTALFLY_FLYING_SPEED = b.comment("Base flying speed.").defineInRange("flyingSpeed", 0.55D, 0.0D, 10.0D); - BRUTALFLY_KNOCKBACK_RESISTANCE = b.comment("Base knockback resistance.").defineInRange("knockbackResistance", 0.7D, 0.0D, 1.0D); b.pop(); - - // Mantis - b.push("mantis"); MANTIS_HEALTH = b.comment("Base max health.") .defineInRange("health", 50.0D, 1.0D, 32768.0D); MANTIS_ATTACK_DAMAGE = b.comment("Base attack damage.") .defineInRange("attackDamage", 9.0D, 0.0D, 1024.0D); @@ -599,9 +626,6 @@ public final class AntarchyMobsConfig { MANTIS_IGNORE_LIGHT_LEVEL = b.comment("If false, mantises only spawn naturally in darkness (standard monster rules). If true, light level is ignored.").define("ignoreLightLevel", false); b.pop(); - - // Alpha Mantis - b.push("alphaMantis"); ALPHA_MANTIS_HEALTH = b.comment("Base max health.") .defineInRange("health", 250.0D, 1.0D, 32768.0D); ALPHA_MANTIS_ATTACK_DAMAGE = b.comment("Base attack damage.") .defineInRange("attackDamage", 18.0D, 0.0D, 1024.0D); @@ -609,12 +633,9 @@ public final class AntarchyMobsConfig { ALPHA_MANTIS_FLYING_SPEED = b.comment("Base flying speed.") .defineInRange("flyingSpeed", 0.77D, 0.0D, 10.0D); ALPHA_MANTIS_SUMMON_INTERVAL_TICKS = b.comment("Ticks between mantis minion summons while in combat.") .defineInRange("summonIntervalTicks", 300, 20, 72000); ALPHA_MANTIS_MAX_MINIONS = b.comment("Maximum summoned mantises alive near the alpha at once.") .defineInRange("maxMinions", 4, 0, 32); - ALPHA_MANTIS_DAMAGE_RANGE = b.comment("Range in blocks a player must be within for the Alpha Mantis to be able to take damage. Prevents cheesing it from outside its aggro range.").defineInRange("damageRange", 48.0D, 1.0D, 256.0D); + ALPHA_MANTIS_DAMAGE_RANGE = b.comment("Range in blocks a player must be within for the Alpha Mantis to be able to take damage. Prevents cheesing it from outside its aggro range.").defineInRange("damageRange", 25.0D, 1.0D, 256.0D); b.pop(); - - // Rolly Polly - b.push("rollyPolly"); ROLLY_POLLY_HEALTH = b.comment("Base max health.") .defineInRange("health", 25.0D, 1.0D, 32768.0D); ROLLY_POLLY_MOVEMENT_SPEED = b.comment("Base movement speed.") .defineInRange("movementSpeed", 0.3D, 0.0D, 10.0D); @@ -626,26 +647,78 @@ public final class AntarchyMobsConfig { ROLLY_POLLY_ROLLED_ARMOR_BONUS = b.comment("Additional armor gained while rolled up.") .defineInRange("rolledArmorBonus", 16.0D, 0.0D, 100.0D); b.pop(); - - // Triffid - - b.push("triffid"); - TRIFFID_HEALTH = b.comment("Base max health.") .defineInRange("health", 80.0D, 1.0D, 32768.0D); - TRIFFID_ATTACK_DAMAGE = b.comment("Damage dealt by the sweep attack.") .defineInRange("attackDamage", 10.0D, 0.0D, 1024.0D); - TRIFFID_GRAB_DAMAGE = b.comment("Damage dealt by the grab attack.") .defineInRange("grabDamage", 15.0D, 0.0D, 1024.0D); + b.push("flytrap"); + FLYTRAP_HEALTH = b.comment("Base max health.") .defineInRange("health", 80.0D, 1.0D, 32768.0D); + FLYTRAP_ATTACK_DAMAGE = b.comment("Damage dealt by the sweep attack.") .defineInRange("attackDamage", 10.0D, 0.0D, 1024.0D); + FLYTRAP_GRAB_DAMAGE = b.comment("Damage dealt by the grab attack.") .defineInRange("grabDamage", 15.0D, 0.0D, 1024.0D); + FLYTRAP_SWEEP_HIT_COOLDOWN_TICKS = b + .comment("Ticks a given entity is immune to repeat sweep-attack damage attempts after being hit once, so shields/armor absorbing a hit can't be shredded by every tick of the sweep's active window.") + .defineInRange("sweepHitCooldownTicks", 10, 0, 200); b.pop(); - - // Caterpillar - b.push("caterpillar"); + CATERPILLAR_HEALTH = b.defineInRange("health", 6.0D, 0.1D, 32768.0D); + CATERPILLAR_MOVEMENT_SPEED = b.defineInRange("movementSpeed", 0.24D, 0.0D, 10.0D); CATERPILLAR_PUPATION_TIME_SECONDS = b .comment("Time in seconds before a caterpillar emerges from its chrysalis.") .defineInRange("pupationTimeSeconds", 600.0D, 1.0D, 3600.0D); b.pop(); + b.push("flyingSquirrel"); + FLYING_SQUIRREL_HEALTH = b.defineInRange("health", 10.0D, 0.1D, 32768.0D); + FLYING_SQUIRREL_MOVEMENT_SPEED = b.defineInRange("movementSpeed", 0.35D, 0.0D, 10.0D); + b.pop(); - // Ant Dance + b.push("butterfly"); + BUTTERFLY_HEALTH = b.defineInRange("health", 6.0D, 0.1D, 32768.0D); + BUTTERFLY_MOVEMENT_SPEED = b.defineInRange("movementSpeed", 0.3D, 0.0D, 10.0D); + BUTTERFLY_FLYING_SPEED = b.defineInRange("flyingSpeed", 0.55D, 0.0D, 10.0D); + b.pop(); + + b.push("bedBug"); + BED_BUG_HEALTH = b.defineInRange("health", 18.0D, 0.1D, 32768.0D); + BED_BUG_ATTACK_DAMAGE = b.defineInRange("attackDamage", 4.0D, 0.0D, 1024.0D); + BED_BUG_MOVEMENT_SPEED = b.defineInRange("movementSpeed", 0.24D, 0.0D, 10.0D); + BED_BUG_ARMOR = b.defineInRange("armor", 2.0D, 0.0D, 1024.0D); + b.pop(); + + b.push("stratoshark"); + STRATOSHARK_HEALTH = b.defineInRange("health", 40.0D, 0.1D, 32768.0D); + STRATOSHARK_ATTACK_DAMAGE = b.defineInRange("attackDamage", 5.0D, 0.0D, 1024.0D); + STRATOSHARK_MOVEMENT_SPEED = b.defineInRange("movementSpeed", 0.34D, 0.0D, 10.0D); + STRATOSHARK_FLYING_SPEED = b.defineInRange("flyingSpeed", 0.5D, 0.0D, 10.0D); + STRATOSHARK_KNOCKBACK_RESISTANCE = b.defineInRange("knockbackResistance", 0.2D, 0.0D, 1.0D); + b.pop(); + + b.push("missileSquid"); + MISSILE_SQUID_HEALTH = b.defineInRange("health", 60.0D, 0.1D, 32768.0D); + MISSILE_SQUID_ATTACK_DAMAGE = b.defineInRange("attackDamage", 9.0D, 0.0D, 1024.0D); + MISSILE_SQUID_MOVEMENT_SPEED = b.defineInRange("movementSpeed", 0.84D, 0.0D, 10.0D); + MISSILE_SQUID_FLYING_SPEED = b.defineInRange("flyingSpeed", 0.84D, 0.0D, 10.0D); + MISSILE_SQUID_KNOCKBACK_RESISTANCE = b.defineInRange("knockbackResistance", 0.15D, 0.0D, 1.0D); + b.pop(); + + b.push("moleworm"); + MOLEWORM_HEALTH = b.defineInRange("health", 8.0D, 0.1D, 32768.0D); + MOLEWORM_ATTACK_DAMAGE = b.defineInRange("attackDamage", 1.0D, 0.0D, 1024.0D); + MOLEWORM_MOVEMENT_SPEED = b.defineInRange("movementSpeed", 0.25D, 0.0D, 10.0D); + b.pop(); + + b.push("molevore"); + MOLEVORE_HEALTH = b.defineInRange("health", 140.0D, 0.1D, 32768.0D); + MOLEVORE_ATTACK_DAMAGE = b.defineInRange("attackDamage", 10.0D, 0.0D, 1024.0D); + MOLEVORE_SPIN_TICKS = b.defineInRange("spinTicks", 12, 0, 400); + MOLEVORE_COOLDOWN_TICKS = b.defineInRange("cooldownTicks", 60, 0, 20000); + MOLEVORE_CHARGE_SPEED = b.defineInRange("chargeSpeed", 1.15D, 0.0D, 10.0D); + MOLEVORE_BREAK_RANGE = b.defineInRange("breakRange", 1.8D, 0.0D, 32.0D); + MOLEVORE_BREAK_VERTICAL_RANGE = b.defineInRange("breakVerticalRange", 2.2D, 0.0D, 32.0D); + MOLEVORE_BREAK_HALF_WIDTH = b.defineInRange("breakHalfWidth", 1.1D, 0.0D, 32.0D); + b.pop(); + + b.push("octopusBomb"); + OCTOPUS_BOMB_HEALTH = b.defineInRange("health", 100.0D, 0.1D, 32768.0D); + OCTOPUS_BOMB_ATTACK_DAMAGE = b.defineInRange("attackDamage", 16.0D, 0.0D, 1024.0D); + b.pop(); b.push("antDance"); ANT_DANCE_RADIUS = b @@ -653,9 +726,6 @@ public final class AntarchyMobsConfig { .defineInRange("radius", 5.0D, 1.0D, 32.0D); b.pop(); - - // Reverie - b.push("reverie"); REVERIE_HEALTH = b.comment("Base max health.") .defineInRange("health", 20.0D, 1.0D, 1024.0D); REVERIE_INTEREST_RADIUS = b.comment("How far the Reverie notices and starts following a player.") .defineInRange("interestRadius", 16.0D, 1.0D, 64.0D); @@ -671,18 +741,22 @@ public final class AntarchyMobsConfig { REVERIE_DUPLICATION_COOLDOWN_TICKS = b.comment("Cooldown in ticks before Blood Crystal can duplicate the Reverie again.") .defineInRange("duplicationCooldownTicks", 6000, 20, 24000); b.pop(); - // Nightmare - b.push("nightmare"); NIGHTMARE_HEALTH = b.comment("Base max health.").defineInRange("health", 180.0D, 1.0D, 32768.0D); NIGHTMARE_ATTACK_DAMAGE = b.comment("Base attack damage.").defineInRange("attackDamage", 16.0D, 0.0D, 1024.0D); NIGHTMARE_MOVEMENT_SPEED = b.comment("Base movement speed.").defineInRange("movementSpeed", 0.28D, 0.0D, 10.0D); - NIGHTMARE_WEAKNESS_TICKS = b.comment("Weakness duration applied on hit.").defineInRange("weaknessTicks", 100, 0, 20000); - NIGHTMARE_DREAD_TICKS = b.comment("Dread duration applied on hit.").defineInRange("dreadTicks", 160, 0, 20000); + NIGHTMARE_WEAKNESS_TICKS = b.comment("Ticks the Weakness effect from Big Bertha's Nightmare-mode hit lasts.").defineInRange("weaknessTicks", 100, 0, 20000); + NIGHTMARE_DREAD_TICKS = b.comment("Ticks the Dread effect from Big Bertha's Nightmare-mode hit lasts.").defineInRange("dreadTicks", 160, 0, 20000); b.pop(); - - // Basilisk + b.push("dimensionalTear"); + DIMENSIONAL_TEAR_LIFETIME_TICKS = b.comment("Ticks before naturally generated linked Dimensional Tears collapse.").defineInRange("lifetimeTicks", 24000, 1200, 240000); + DIMENSIONAL_TEAR_INVERTED_DURATION_TICKS = b.comment("Ticks of Inverted applied to living entities exiting a Dimensional Tear.").defineInRange("invertedDurationTicks", 2400, 0, 240000); + DIMENSIONAL_TEAR_EMERGENCE_MIN_INTERVAL_TICKS = b.comment("Minimum ticks between Nightmare/Lucid emergence events per tear.").defineInRange("emergenceMinIntervalTicks", 400, 20, 240000); + DIMENSIONAL_TEAR_EMERGENCE_MAX_INTERVAL_TICKS = b.comment("Maximum ticks between Nightmare/Lucid emergence events per tear.").defineInRange("emergenceMaxIntervalTicks", 1200, 20, 240000); + DIMENSIONAL_TEAR_LUCID_EVENT_CHANCE = b.comment("Chance that an emergence event spawns a Lucid instead of a Nightmare.").defineInRange("lucidEventChance", 0.65D, 0.0D, 1.0D); + DIMENSIONAL_TEARS_SPAWN_NATURALLY = b.define("spawnNaturally", true); + b.pop(); b.push("basilisk"); BASILISK_PETRIFYING_GAZE_ENABLED = b @@ -712,9 +786,6 @@ public final class AntarchyMobsConfig { BASILISK_PREY_PETRIFY_TICKS = b.comment("Ticks the prey petrify effect lasts.").defineInRange("preyPetrifyTicks", 200, 0, 20000); b.pop(); - - // Lucid - b.push("lucid"); LUCID_ATTACK_RANGE = b .comment("Attack range in blocks. The Lucid fires its gravity blast when a target enters this radius.") @@ -729,105 +800,24 @@ public final class AntarchyMobsConfig { LUCID_KNOCKBACK_RESISTANCE = b.comment("Base knockback resistance.").defineInRange("knockbackResistance", 0.5D, 0.0D, 1.0D); b.pop(); - - // Missile Squid - - b.push("missileSquid"); - MISSILE_SQUID_HEALTH = b.comment("Base max health.").defineInRange("health", 50.0D, 1.0D, 32768.0D); - MISSILE_SQUID_ATTACK_DAMAGE = b.comment("Base attack damage.").defineInRange("attackDamage", 6.0D, 0.0D, 1024.0D); - MISSILE_SQUID_MOVEMENT_SPEED = b.comment("Base movement speed.").defineInRange("movementSpeed", 0.84D, 0.0D, 10.0D); - MISSILE_SQUID_FLYING_SPEED = b.comment("Base flying speed.").defineInRange("flyingSpeed", 0.84D, 0.0D, 10.0D); - MISSILE_SQUID_KNOCKBACK_RESISTANCE = b.comment("Base knockback resistance.").defineInRange("knockbackResistance", 0.15D, 0.0D, 1.0D); + b.push("vortex"); + VORTEX_HEALTH = b.comment("Base max health.").defineInRange("health", 70.0D, 1.0D, 32768.0D); + VORTEX_ATTACK_DAMAGE = b.comment("Base attack damage.").defineInRange("attackDamage", 4.0D, 0.0D, 1024.0D); + VORTEX_MOVEMENT_SPEED = b.comment("Base movement speed.").defineInRange("movementSpeed", 0.22D, 0.0D, 10.0D); + VORTEX_FLYING_SPEED = b.comment("Base flying speed.").defineInRange("flyingSpeed", 0.35D, 0.0D, 10.0D); + VORTEX_MAX_ACTIVE_VORTEXES = b.comment("Maximum damaging wind vortexes one Vortex mob can maintain at once.").defineInRange("maxActiveVortexes", 3, 0, 32); + WIND_VORTEX_DURATION_TICKS = b.comment("Lifetime in ticks for wind vortexes spawned by Vortex charges or Vortex mobs.").defineInRange("windVortexDurationTicks", 240, 1, 1200); + WIND_VORTEX_PULL_STRENGTH = b.comment("How strongly wind vortexes pull entities toward their spiral path.").defineInRange("windVortexPullStrength", 0.32D, 0.0D, 4.0D); + WIND_VORTEX_LAUNCH_STRENGTH = b.comment("Launch velocity multiplier applied when entities exit the top of a wind vortex.").defineInRange("windVortexLaunchStrength", 1.0D, 0.0D, 4.0D); + VORTEX_LENS_MIN_RADIUS = b.comment("Top radius at signal strength 1 for Vortex Lens wind vortexes.").defineInRange("vortexLensMinRadius", 1.5D, 0.1D, 64.0D); + VORTEX_LENS_MAX_RADIUS = b.comment("Top radius at signal strength 15 for Vortex Lens wind vortexes.").defineInRange("vortexLensMaxRadius", 10.0D, 0.1D, 128.0D); + VORTEX_LENS_MIN_HEIGHT = b.comment("Length at signal strength 1 for Vortex Lens wind vortexes.").defineInRange("vortexLensMinHeight", 3.0D, 0.5D, 128.0D); + VORTEX_LENS_MAX_HEIGHT = b.comment("Length at signal strength 15 for Vortex Lens wind vortexes.").defineInRange("vortexLensMaxHeight", 20.0D, 0.5D, 256.0D); + VORTEX_LENS_PULL_STRENGTH = b.comment("How strongly redstone-powered Vortex Lens vortexes pull entities inward toward the lens.").defineInRange("vortexLensPullStrength", 0.42D, 0.0D, 8.0D); + VORTEX_LENS_PUSH_STRENGTH = b.comment("How strongly bluestone-powered Vortex Lens vortexes push entities outward from the lens.").defineInRange("vortexLensPushStrength", 0.38D, 0.0D, 8.0D); + VORTEX_LENS_LAUNCH_STRENGTH = b.comment("Launch velocity multiplier applied at the end of bluestone-powered Vortex Lens vortexes.").defineInRange("vortexLensLaunchStrength", 1.15D, 0.0D, 8.0D); b.pop(); - - // Octopus Bomb - - b.push("octopusBomb"); - OCTOPUS_BOMB_HEALTH = b.comment("Base max health.").defineInRange("health", 100.0D, 1.0D, 32768.0D); - OCTOPUS_BOMB_ATTACK_DAMAGE = b.comment("Base attack damage.").defineInRange("attackDamage", 16.0D, 0.0D, 1024.0D); - b.pop(); - - - // Bed Bug - - b.push("bedBug"); - BED_BUG_HEALTH = b.comment("Base max health.").defineInRange("health", 18.0D, 1.0D, 32768.0D); - BED_BUG_ATTACK_DAMAGE = b.comment("Base attack damage.").defineInRange("attackDamage", 4.0D, 0.0D, 1024.0D); - BED_BUG_MOVEMENT_SPEED = b.comment("Base movement speed.").defineInRange("movementSpeed", 0.24D, 0.0D, 10.0D); - BED_BUG_ARMOR = b.comment("Base armor value.").defineInRange("armor", 2.0D, 0.0D, 1024.0D); - b.pop(); - - - // Cloud Shark - - b.push("cloudShark"); - CLOUD_SHARK_HEALTH = b.comment("Base max health.").defineInRange("health", 40.0D, 1.0D, 32768.0D); - CLOUD_SHARK_ATTACK_DAMAGE = b.comment("Base attack damage.").defineInRange("attackDamage", 5.0D, 0.0D, 1024.0D); - CLOUD_SHARK_MOVEMENT_SPEED = b.comment("Base movement speed.").defineInRange("movementSpeed", 0.34D, 0.0D, 10.0D); - CLOUD_SHARK_FLYING_SPEED = b.comment("Base flying speed.").defineInRange("flyingSpeed", 0.5D, 0.0D, 10.0D); - CLOUD_SHARK_KNOCKBACK_RESISTANCE = b.comment("Base knockback resistance.").defineInRange("knockbackResistance", 0.2D, 0.0D, 1.0D); - b.pop(); - - - // Flying Squirrel - - b.push("flyingSquirrel"); - FLYING_SQUIRREL_HEALTH = b.comment("Base max health.").defineInRange("health", 10.0D, 1.0D, 32768.0D); - FLYING_SQUIRREL_MOVEMENT_SPEED = b.comment("Base movement speed.").defineInRange("movementSpeed", 0.35D, 0.0D, 10.0D); - b.pop(); - - - // Molevore - - b.push("molevore"); - MOLEVORE_HEALTH = b.comment("Base max health.").defineInRange("health", 60.0D, 1.0D, 32768.0D); - MOLEVORE_ATTACK_DAMAGE = b.comment("Base attack damage.").defineInRange("attackDamage", 10.0D, 0.0D, 1024.0D); - MOLEVORE_MOVEMENT_SPEED = b.comment("Base movement speed.").defineInRange("movementSpeed", 0.27D, 0.0D, 10.0D); - MOLEVORE_ARMOR = b.comment("Base armor value.").defineInRange("armor", 6.0D, 0.0D, 1024.0D); - MOLEVORE_KNOCKBACK_RESISTANCE = b.comment("Base knockback resistance.").defineInRange("knockbackResistance", 0.65D, 0.0D, 1.0D); - MOLEVORE_FOLLOW_RANGE = b.comment("Base follow range.").defineInRange("followRange", 28.0D, 1.0D, 256.0D); - MOLEVORE_XP_REWARD = b.comment("Base experience reward.").defineInRange("xpReward", 20, 0, 100000); - MOLEVORE_SPIN_TICKS = b.comment("Ticks the Molevore spins before charging.").defineInRange("spinTicks", 12, 0, 400); - MOLEVORE_COOLDOWN_TICKS = b.comment("Cooldown between charge attacks.").defineInRange("cooldownTicks", 60, 0, 20000); - MOLEVORE_CHARGE_SPEED = b.comment("Speed multiplier while charging.").defineInRange("chargeSpeed", 1.15D, 0.0D, 20.0D); - MOLEVORE_BREAK_RANGE = b.comment("Forward range in blocks for breaking blocks while charging.").defineInRange("breakRange", 1.8D, 0.0D, 32.0D); - MOLEVORE_BREAK_VERTICAL_RANGE = b.comment("Vertical range in blocks for breaking blocks while charging.").defineInRange("breakVerticalRange", 2.2D, 0.0D, 32.0D); - MOLEVORE_BREAK_HALF_WIDTH = b.comment("Half-width in blocks for breaking blocks while charging.").defineInRange("breakHalfWidth", 1.1D, 0.0D, 16.0D); - b.pop(); - - - // Moleworm - - b.push("moleworm"); - MOLEWORM_HEALTH = b.comment("Base max health.").defineInRange("health", 8.0D, 1.0D, 32768.0D); - MOLEWORM_ATTACK_DAMAGE = b.comment("Base attack damage.").defineInRange("attackDamage", 1.0D, 0.0D, 1024.0D); - MOLEWORM_MOVEMENT_SPEED = b.comment("Base movement speed.").defineInRange("movementSpeed", 0.25D, 0.0D, 10.0D); - b.pop(); - - - // Scorpion - - b.push("scorpion"); - SCORPION_HEALTH = b.comment("Base max health.").defineInRange("health", 30.0D, 1.0D, 32768.0D); - SCORPION_ATTACK_DAMAGE = b.comment("Base attack damage.").defineInRange("attackDamage", 5.0D, 0.0D, 1024.0D); - SCORPION_MOVEMENT_SPEED = b.comment("Base movement speed.").defineInRange("movementSpeed", 0.29D, 0.0D, 10.0D); - SCORPION_ARMOR = b.comment("Base armor value.").defineInRange("armor", 2.0D, 0.0D, 1024.0D); - SCORPION_KNOCKBACK_RESISTANCE = b.comment("Base knockback resistance.").defineInRange("knockbackResistance", 0.2D, 0.0D, 1.0D); - b.pop(); - - - // Butterfly - - b.push("butterfly"); - BUTTERFLY_HEALTH = b.comment("Base max health.").defineInRange("health", 6.0D, 1.0D, 32768.0D); - BUTTERFLY_MOVEMENT_SPEED = b.comment("Base movement speed.").defineInRange("movementSpeed", 0.3D, 0.0D, 10.0D); - BUTTERFLY_FLYING_SPEED = b.comment("Base flying speed.").defineInRange("flyingSpeed", 0.55D, 0.0D, 10.0D); - b.pop(); - - - // Dread effect - b.push("dread"); b.push("hallucinationSounds"); @@ -842,16 +832,26 @@ public final class AntarchyMobsConfig { DREAD_HALLUCINATION_MOB_MAX_INTERVAL = b.comment("Maximum seconds between apparition spawns.").defineInRange("maxIntervalSeconds", 16.0D, 0.1D, 300.0D); b.pop(); - b.pop(); // dread - - b.push("creepingHorror"); - CREEPING_HORROR_HEALTH = b.comment("Base max health.").defineInRange("health", 15.0D, 1.0D, 32768.0D); - CREEPING_HORROR_ATTACK_DAMAGE = b.comment("Base attack damage.").defineInRange("attackDamage", 6.0D, 0.0D, 1024.0D); b.pop(); - b.push("lurkingTerror"); - LURKING_TERROR_HEALTH = b.comment("Base max health.").defineInRange("health", 15.0D, 1.0D, 32768.0D); - LURKING_TERROR_ATTACK_DAMAGE = b.comment("Base attack damage.").defineInRange("attackDamage", 6.0D, 0.0D, 1024.0D); + b.push("crawlingBlight"); + CRAWLING_BLIGHT_HEALTH = b.comment("Base max health.").defineInRange("health", 15.0D, 1.0D, 32768.0D); + CRAWLING_BLIGHT_ATTACK_DAMAGE = b.comment("Base attack damage.").defineInRange("attackDamage", 6.0D, 0.0D, 1024.0D); + b.pop(); + + b.push("skulkingFright"); + SKULKING_FRIGHT_HEALTH = b.comment("Base max health.").defineInRange("health", 15.0D, 1.0D, 32768.0D); + SKULKING_FRIGHT_ATTACK_DAMAGE = b.comment("Base attack damage.").defineInRange("attackDamage", 6.0D, 0.0D, 1024.0D); + b.pop(); + + b.push("manticore"); + MANTICORE_HEALTH = b.comment("Base max health.").defineInRange("health", 60.0D, 1.0D, 32768.0D); + MANTICORE_ATTACK_DAMAGE = b.comment("Base attack damage for bites and stings.").defineInRange("attackDamage", 11.0D, 0.0D, 1024.0D); + MANTICORE_STING_POISON_TICKS = b.comment("Poison duration in ticks applied by a Manticore sting.").defineInRange("stingPoisonTicks", 100, 0, 12000); + QUEEN_MANTICORE_CAP = b.comment("Maximum number of living Manticores a single Queen may keep summoned.").defineInRange("queenSummonCap", 6, 1, 200); + QUEEN_MANTICORE_SUMMON_COOLDOWN_TICKS = b.comment("Ticks between Queen Manticore summon attempts.").defineInRange("queenSummonCooldownTicks", 800, 20, 200000); + QUEEN_MANTICORE_SUMMON_COUNT = b.comment("Maximum Manticores created by one Queen summon attempt.").defineInRange("queenSummonCount", 2, 1, 32); + QUEEN_MANTICORE_SUMMON_RANGE = b.comment("Maximum horizontal distance from the Queen used for Manticore spawn positions.").defineInRange("queenSummonRange", 24.0D, 4.0D, 128.0D); b.pop(); b.push("jerry"); @@ -886,19 +886,17 @@ public final class AntarchyMobsConfig { HERCULES_BEETLE_HEALTH = b.comment("Base max health.").defineInRange("health", 500.0D, 1.0D, 32768.0D); HERCULES_BEETLE_ATTACK_DAMAGE = b.comment("Base melee damage for ground and flying attacks.").defineInRange("attackDamage", 30.0D, 0.0D, 1024.0D); HERCULES_BEETLE_CHARGE_DAMAGE = b.comment("AOE impact damage dealt when a charge collides.").defineInRange("chargeDamage", 40.0D, 0.0D, 1024.0D); - HERCULES_BEETLE_DAMAGE_RANGE = b.comment("Range in blocks a player must be within for the Hercules Beetle to be able to take damage. Prevents cheesing it from outside its aggro range.").defineInRange("damageRange", 48.0D, 1.0D, 256.0D); + HERCULES_BEETLE_DAMAGE_RANGE = b.comment("Range in blocks a player must be within for the Hercules Beetle to be able to take damage. Prevents cheesing it from outside its aggro range.").defineInRange("damageRange", 25.0D, 1.0D, 256.0D); b.pop(); b.push("toreterror"); TORETERROR_HEALTH = b.comment("Base max health.").defineInRange("health", 300.0D, 1.0D, 32768.0D); - TORETERROR_DAMAGE_RANGE = b.comment("Range in blocks a player must be within for the Toreterror to be able to take damage. Prevents cheesing it from outside its aggro range.").defineInRange("damageRange", 48.0D, 1.0D, 256.0D); + TORETERROR_DAMAGE_RANGE = b.comment("Range in blocks a player must be within for the Toreterror to be able to take damage. Prevents cheesing it from outside its aggro range.").defineInRange("damageRange", 25.0D, 1.0D, 256.0D); TORETERROR_JUMP_ATTACK_DAMAGE = b.comment("Damage dealt by the jump shockwave.").defineInRange("jumpAttackDamage", 14.0D, 0.0D, 1024.0D); TORETERROR_JUMP_ATTACK_KNOCKBACK = b.comment("Knockback strength of the jump shockwave.").defineInRange("jumpAttackKnockback", 2.5D, 0.0D, 10.0D); TORETERROR_SPIN_DAMAGE = b.comment("Damage per spin-attack tick.").defineInRange("spinDamage", 8.0D, 0.0D, 1024.0D); TORETERROR_SPIN_KNOCKBACK = b.comment("Knockback strength of the spin attack.").defineInRange("spinKnockback", 1.5D, 0.0D, 10.0D); TORETERROR_PROJECTILE_DAMAGE_MULTIPLIER = b.comment("Damage multiplier applied to projectile hits on the Toreterror (0.5 = half damage).").defineInRange("projectileDamageMultiplier", 0.5D, 0.0D, 1.0D); - TORETERROR_RANGED_WATER_BOMB_CHANCE = b.comment("Chance each ranged attack cycle launches a water bomb.").defineInRange("rangedWaterBombChance", 0.35D, 0.0D, 1.0D); - WATER_CANNON_COOLDOWN_SECONDS = b.comment("Cooldown between water cannon uses, in seconds.").defineInRange("waterCannonCooldownSeconds", 1.5D, 0.0D, 60.0D); WATER_BOMB_DAMAGE = b.comment("Damage dealt by a Water Bomb hit.").defineInRange("waterBombDamage", 6.0D, 0.0D, 1024.0D); WATER_BOMB_LIFETIME_TICKS = b.comment("Ticks before a Water Bomb despawns.").defineInRange("waterBombLifetimeTicks", 120, 1, 6000); WATER_BOMB_GRAVITY = b.comment("Gravity applied to Water Bombs (higher = steeper arc).").defineInRange("waterBombGravity", 0.12D, 0.0D, 2.0D); @@ -908,6 +906,41 @@ public final class AntarchyMobsConfig { SPEC = b.build(); } + static double caterpillarHealth() { return CATERPILLAR_HEALTH.get(); } + static double caterpillarMovementSpeed() { return CATERPILLAR_MOVEMENT_SPEED.get(); } + static double flyingSquirrelHealth() { return FLYING_SQUIRREL_HEALTH.get(); } + static double flyingSquirrelMovementSpeed() { return FLYING_SQUIRREL_MOVEMENT_SPEED.get(); } + static double butterflyHealth() { return BUTTERFLY_HEALTH.get(); } + static double butterflyMovementSpeed() { return BUTTERFLY_MOVEMENT_SPEED.get(); } + static double butterflyFlyingSpeed() { return BUTTERFLY_FLYING_SPEED.get(); } + static double bedBugHealth() { return BED_BUG_HEALTH.get(); } + static double bedBugAttackDamage() { return BED_BUG_ATTACK_DAMAGE.get(); } + static double bedBugMovementSpeed() { return BED_BUG_MOVEMENT_SPEED.get(); } + static double bedBugArmor() { return BED_BUG_ARMOR.get(); } + static double stratosharkHealth() { return STRATOSHARK_HEALTH.get(); } + static double stratosharkAttackDamage() { return STRATOSHARK_ATTACK_DAMAGE.get(); } + static double stratosharkMovementSpeed() { return STRATOSHARK_MOVEMENT_SPEED.get(); } + static double stratosharkFlyingSpeed() { return STRATOSHARK_FLYING_SPEED.get(); } + static double stratosharkKnockbackResistance() { return STRATOSHARK_KNOCKBACK_RESISTANCE.get(); } + static double missileSquidHealth() { return MISSILE_SQUID_HEALTH.get(); } + static double missileSquidAttackDamage() { return MISSILE_SQUID_ATTACK_DAMAGE.get(); } + static double missileSquidMovementSpeed() { return MISSILE_SQUID_MOVEMENT_SPEED.get(); } + static double missileSquidFlyingSpeed() { return MISSILE_SQUID_FLYING_SPEED.get(); } + static double missileSquidKnockbackResistance() { return MISSILE_SQUID_KNOCKBACK_RESISTANCE.get(); } + static double molewormHealth() { return MOLEWORM_HEALTH.get(); } + static double molewormAttackDamage() { return MOLEWORM_ATTACK_DAMAGE.get(); } + static double molewormMovementSpeed() { return MOLEWORM_MOVEMENT_SPEED.get(); } + static double molevoreHealth() { return MOLEVORE_HEALTH.get(); } + static double molevoreAttackDamage() { return MOLEVORE_ATTACK_DAMAGE.get(); } + static int molevoreSpinTicks() { return MOLEVORE_SPIN_TICKS.get(); } + static int molevoreCooldownTicks() { return MOLEVORE_COOLDOWN_TICKS.get(); } + static double molevoreChargeSpeed() { return MOLEVORE_CHARGE_SPEED.get(); } + static double molevoreBreakRange() { return MOLEVORE_BREAK_RANGE.get(); } + static double molevoreBreakVerticalRange() { return MOLEVORE_BREAK_VERTICAL_RANGE.get(); } + static double molevoreBreakHalfWidth() { return MOLEVORE_BREAK_HALF_WIDTH.get(); } + static double octopusBombHealth() { return OCTOPUS_BOMB_HEALTH.get(); } + static double octopusBombAttackDamage() { return OCTOPUS_BOMB_ATTACK_DAMAGE.get(); } + private AntarchyMobsConfig() {} private static boolean isValidDimensionId(Object value) { @@ -944,7 +977,6 @@ public final class AntarchyMobsConfig { static double termiteAttackDamage() { return TERMITE_ATTACK_DAMAGE.get(); } static String termiteDestinationDimension() { return TERMITE_DESTINATION_DIMENSION.get(); } - static boolean easterBunnyEnabled() { return EASTER_BUNNY_ENABLED.get(); } static int easterBunnyNaturalSpawnChancePercent() { return EASTER_BUNNY_NATURAL_SPAWN_CHANCE_PERCENT.get(); } @@ -957,46 +989,134 @@ public final class AntarchyMobsConfig { static double bomberExplosionDamage() { return BOMBER_EXPLOSION_DAMAGE.get(); } static double bomberExplosionRadius() { return BOMBER_EXPLOSION_RADIUS.get(); } - static double jumpyBugHealth() { return JUMPY_BUG_HEALTH.get(); } - static double jumpyBugPounceDamage() { return JUMPY_BUG_POUNCE_DAMAGE.get(); } - static double jumpyBugLatchDamage() { return JUMPY_BUG_LATCH_DAMAGE.get(); } - static double jumpyBugCamouflageAlpha() { return JUMPY_BUG_CAMOUFLAGE_ALPHA.get(); } + static double springbugHealth() { return SPRINGBUG_HEALTH.get(); } + static double springbugPounceDamage() { return SPRINGBUG_POUNCE_DAMAGE.get(); } + static double springbugCamouflageAlpha() { return SPRINGBUG_CAMOUFLAGE_ALPHA.get(); } static double emperorScorpionHealth() { return EMPEROR_SCORPION_HEALTH.get(); } - static double emperorScorpionAttackDamage() { return EMPEROR_SCORPION_ATTACK_DAMAGE.get(); } - static double emperorScorpionArmor() { return EMPEROR_SCORPION_ARMOR.get(); } - static double emperorScorpionKnockbackResistance() { return EMPEROR_SCORPION_KNOCKBACK_RESISTANCE.get(); } - static double emperorScorpionMovementSpeed() { return EMPEROR_SCORPION_MOVEMENT_SPEED.get(); } - static double emperorScorpionFollowRange() { return EMPEROR_SCORPION_FOLLOW_RANGE.get(); } - static int emperorScorpionXpReward() { return EMPEROR_SCORPION_XP_REWARD.get(); } - static int emperorScorpionClawAnimTicks() { return EMPEROR_SCORPION_CLAW_ANIM_TICKS.get(); } - static int emperorScorpionClawHitTick() { return EMPEROR_SCORPION_CLAW_HIT_TICK.get(); } - static int emperorScorpionClawCooldownTicks() { return EMPEROR_SCORPION_CLAW_COOLDOWN_TICKS.get(); } - static int emperorScorpionStingAnimTicks() { return EMPEROR_SCORPION_STING_ANIM_TICKS.get(); } - static int emperorScorpionStingHitTick() { return EMPEROR_SCORPION_STING_HIT_TICK.get(); } - static int emperorScorpionStingCooldownTicks() { return EMPEROR_SCORPION_STING_COOLDOWN_TICKS.get(); } - static int emperorScorpionPoisonTicks() { return EMPEROR_SCORPION_POISON_TICKS.get(); } - static int emperorScorpionWeaknessTicks() { return EMPEROR_SCORPION_WEAKNESS_TICKS.get(); } - static int emperorScorpionSummonIntervalTicks() { return EMPEROR_SCORPION_SUMMON_INTERVAL_TICKS.get(); } - static int emperorScorpionMaxSummonedScorpions() { return EMPEROR_SCORPION_MAX_SUMMONED_SCORPIONS.get(); } - static int emperorScorpionMaxNearbyScorpions() { return EMPEROR_SCORPION_MAX_NEARBY_SCORPIONS.get(); } - static int emperorScorpionHardenCooldownTicks() { return EMPEROR_SCORPION_HARDEN_COOLDOWN_TICKS.get(); } + static double emperorScorpionAttackDamage() { return EMPEROR_SCORPION_ATTACK_DAMAGE.get(); } + static double emperorScorpionMovementSpeed() { return EMPEROR_SCORPION_MOVEMENT_SPEED.get(); } + static double emperorScorpionArmor() { return EMPEROR_SCORPION_ARMOR.get(); } + static double emperorScorpionKnockbackResistance() { return EMPEROR_SCORPION_KNOCKBACK_RESISTANCE.get(); } + static double emperorScorpionFollowRange() { return EMPEROR_SCORPION_FOLLOW_RANGE.get(); } + static int emperorScorpionXpReward() { return EMPEROR_SCORPION_XP_REWARD.get(); } + static int emperorScorpionClawAnimTicks() { return EMPEROR_SCORPION_CLAW_ANIM_TICKS.get(); } + static int emperorScorpionClawHitTick() { return EMPEROR_SCORPION_CLAW_HIT_TICK.get(); } + static int emperorScorpionClawCooldownTicks() { return EMPEROR_SCORPION_CLAW_COOLDOWN_TICKS.get(); } + static int emperorScorpionStingAnimTicks() { return EMPEROR_SCORPION_STING_ANIM_TICKS.get(); } + static int emperorScorpionStingHitTick() { return EMPEROR_SCORPION_STING_HIT_TICK.get(); } + static int emperorScorpionStingCooldownTicks() { return EMPEROR_SCORPION_STING_COOLDOWN_TICKS.get(); } + static int emperorScorpionPoisonTicks() { return EMPEROR_SCORPION_POISON_TICKS.get(); } + static int emperorScorpionWeaknessTicks() { return EMPEROR_SCORPION_WEAKNESS_TICKS.get(); } + static int emperorScorpionSummonIntervalTicks() { return EMPEROR_SCORPION_SUMMON_INTERVAL_TICKS.get(); } + static int emperorScorpionMaxSummonedScorpions() { return EMPEROR_SCORPION_MAX_SUMMONED_SCORPIONS.get(); } + static int emperorScorpionMaxNearbyScorpions() { return EMPEROR_SCORPION_MAX_NEARBY_SCORPIONS.get(); } + static int emperorScorpionHardenCooldownTicks() { return EMPEROR_SCORPION_HARDEN_COOLDOWN_TICKS.get(); } static double emperorScorpionDamageRange() { return EMPEROR_SCORPION_DAMAGE_RANGE.get(); } static int emperorScorpionMinDespawnTicks() { return EMPEROR_SCORPION_MIN_DESPAWN_TICKS.get(); } + static double scorpionHealth() { return SCORPION_HEALTH.get(); } + static double scorpionAttackDamage() { return SCORPION_ATTACK_DAMAGE.get(); } + static double scorpionMovementSpeed() { return SCORPION_MOVEMENT_SPEED.get(); } + static double scorpionArmor() { return SCORPION_ARMOR.get(); } + static double scorpionKnockbackResistance() { return SCORPION_KNOCKBACK_RESISTANCE.get(); } + static double krakenHealth() { return KRAKEN_HEALTH.get(); } static double krakenAttackDamage() { return KRAKEN_ATTACK_DAMAGE.get(); } - static double krakenArmor() { return KRAKEN_ARMOR.get(); } - static double krakenKnockbackResistance() { return KRAKEN_KNOCKBACK_RESISTANCE.get(); } - static double krakenMovementSpeed() { return KRAKEN_MOVEMENT_SPEED.get(); } - static double krakenFlyingSpeed() { return KRAKEN_FLYING_SPEED.get(); } - static double krakenBossBarRange() { return KRAKEN_BOSS_BAR_RANGE.get(); } - static double krakenLightningDamagePhaseOne() { return KRAKEN_LIGHTNING_DAMAGE_PHASE_ONE.get(); } static boolean krakenSquidSpawnEnabled() { return KRAKEN_SQUID_SPAWN_ENABLED.get(); } static boolean krakenMassSpawnEnabled() { return KRAKEN_MASS_SPAWN_ENABLED.get(); } static boolean krakenRequireBadOmenToSummon() { return KRAKEN_REQUIRE_BAD_OMEN_TO_SUMMON.get(); } static double krakenFollowRange() { return KRAKEN_FOLLOW_RANGE.get(); } static double krakenDamageRange() { return KRAKEN_DAMAGE_RANGE.get(); } + static double krakenArmor() { return KRAKEN_ARMOR.get(); } + static double krakenKnockbackResistance() { return KRAKEN_KNOCKBACK_RESISTANCE.get(); } + static double krakenMovementSpeed() { return KRAKEN_MOVEMENT_SPEED.get(); } + static double krakenFlyingSpeed() { return KRAKEN_FLYING_SPEED.get(); } + static double krakenBossBarRange() { return KRAKEN_BOSS_BAR_RANGE.get(); } + static float krakenLightningDamagePhaseOne() { return KRAKEN_LIGHTNING_DAMAGE_PHASE_ONE.get().floatValue(); } + + static double kingHealth() { return KING_HEALTH.get(); } + static double queenHealth() { return QUEEN_HEALTH.get(); } + static double kingAttackDamage() { return KING_ATTACK_DAMAGE.get(); } + static double queenAttackDamage() { return QUEEN_ATTACK_DAMAGE.get(); } + static double royalBossArmor() { return ROYAL_BOSS_ARMOR.get(); } + static double kingArmor() { return KING_ARMOR.get(); } + static double royalBossFollowRange() { return ROYAL_BOSS_FOLLOW_RANGE.get(); } + static double royalBossMovementSpeed() { return ROYAL_BOSS_MOVEMENT_SPEED.get(); } + static double royalBossKnockbackResistance() { return ROYAL_BOSS_KNOCKBACK_RESISTANCE.get(); } + static double royalBossStepHeight() { return ROYAL_BOSS_STEP_HEIGHT.get(); } + static double royalBossMaxSingleHitDamage() { return ROYAL_BOSS_MAX_SINGLE_HIT_DAMAGE.get(); } + static double royalBossBiteReach() { return ROYAL_BOSS_BITE_REACH.get(); } + static double royalBossBiteDamageMultiplier() { return ROYAL_BOSS_BITE_DAMAGE_MULTIPLIER.get(); } + static int royalBossBiteCooldownTicks() { return ROYAL_BOSS_BITE_COOLDOWN_TICKS.get(); } + static boolean royalBossMultiplayerScalingEnabled() { return ROYAL_BOSS_MULTIPLAYER_SCALING_ENABLED.get(); } + static int royalBossScalingMaxPlayers() { return ROYAL_BOSS_SCALING_MAX_PLAYERS.get(); } + static double royalBossHealthPerAdditionalPlayer() { return ROYAL_BOSS_HEALTH_PER_ADDITIONAL_PLAYER.get(); } + static double royalBossDamagePerAdditionalPlayer() { return ROYAL_BOSS_DAMAGE_PER_ADDITIONAL_PLAYER.get(); } + static double royalBoundaryRadius() { return ROYAL_BOUNDARY_RADIUS.get(); } + static double royalBoundaryWarningRadius() { return ROYAL_BOUNDARY_WARNING_RADIUS.get(); } + static int royalBoundaryGraceTicks() { return ROYAL_BOUNDARY_GRACE_TICKS.get(); } + static double queenBeamDamage() { return QUEEN_BEAM_DAMAGE.get(); } + static double queenBeamRange() { return QUEEN_BEAM_RANGE.get(); } + static double queenBeamMinimumRange() { return QUEEN_BEAM_MINIMUM_RANGE.get(); } + static int queenBeamDurationTicks() { return QUEEN_BEAM_DURATION_TICKS.get(); } + static int queenBeamWindupTicks() { return QUEEN_BEAM_WINDUP_TICKS.get(); } + static int queenBeamTravelTicks() { return QUEEN_BEAM_TRAVEL_TICKS.get(); } + static int queenBeamCooldownTicks() { return QUEEN_BEAM_COOLDOWN_TICKS.get(); } + static double queenBeamTracking() { return QUEEN_BEAM_TRACKING.get(); } + static double queenBeamTerrainRadius() { return QUEEN_BEAM_TERRAIN_RADIUS.get(); } + static int queenBeamTerrainCap() { return QUEEN_BEAM_TERRAIN_CAP.get(); } + static int queenBeamPhaseOneCap() { return QUEEN_BEAM_PHASE_ONE_CAP.get(); } + static int queenBeamPhaseTwoCap() { return QUEEN_BEAM_PHASE_TWO_CAP.get(); } + static int queenBeamPhaseThreeCap() { return QUEEN_BEAM_PHASE_THREE_CAP.get(); } + static double queenBeamPhaseThreeMaxVolleyChance() { return QUEEN_BEAM_PHASE_THREE_MAX_VOLLEY_CHANCE.get(); } + static double kingBeamDamage() { return KING_BEAM_DAMAGE.get(); } + static double kingBeamRange() { return KING_BEAM_RANGE.get(); } + static double kingBeamMinimumRange() { return KING_BEAM_MINIMUM_RANGE.get(); } + static int kingBeamDurationTicks() { return KING_BEAM_DURATION_TICKS.get(); } + static int kingBeamWindupTicks() { return KING_BEAM_WINDUP_TICKS.get(); } + static int kingBeamTravelTicks() { return KING_BEAM_TRAVEL_TICKS.get(); } + static int kingBeamCooldownTicks() { return KING_BEAM_COOLDOWN_TICKS.get(); } + static double kingBeamTracking() { return KING_BEAM_TRACKING.get(); } + static double kingBeamTerrainRadius() { return KING_BEAM_TERRAIN_RADIUS.get(); } + static int kingBeamTerrainCap() { return KING_BEAM_TERRAIN_CAP.get(); } + static int royalDecreeCooldownTicks() { return ROYAL_DECREE_COOLDOWN_TICKS.get(); } + static int kingRoyalMusterCooldownTicks() { return KING_ROYAL_MUSTER_COOLDOWN_TICKS.get(); } + static int kingRoyalMusterWindupTicks() { return KING_ROYAL_MUSTER_WINDUP_TICKS.get(); } + static int kingRoyalMusterDurationTicks() { return KING_ROYAL_MUSTER_DURATION_TICKS.get(); } + static double kingRoyalMusterRadius() { return KING_ROYAL_MUSTER_RADIUS.get(); } + static int kingRoyalMusterCap() { return KING_ROYAL_MUSTER_CAP.get(); } + static double queenBlackHoleRadius() { return QUEEN_BLACK_HOLE_RADIUS.get(); } + static int queenBlackHoleActiveTicks() { return QUEEN_BLACK_HOLE_ACTIVE_TICKS.get(); } + static double queenBlackHolePullStrength() { return QUEEN_BLACK_HOLE_PULL_STRENGTH.get(); } + static int queenBlackHoleBlockSuctionCap() { return QUEEN_BLACK_HOLE_BLOCK_SUCTION_CAP.get(); } + static double kingFireballDamage() { return KING_FIREBALL_DAMAGE.get(); } + static double kingFireballRadius() { return KING_FIREBALL_RADIUS.get(); } + static int kingFireballCooldownTicks() { return KING_FIREBALL_COOLDOWN_TICKS.get(); } + static double kingIceballDamage() { return KING_ICEBALL_DAMAGE.get(); } + static double kingIceballRadius() { return KING_ICEBALL_RADIUS.get(); } + static int kingIceballCooldownTicks() { return KING_ICEBALL_COOLDOWN_TICKS.get(); } + static double kingIceSpikeDamage() { return KING_ICE_SPIKE_DAMAGE.get(); } + static int kingIceSpikeCooldownTicks() { return KING_ICE_SPIKE_COOLDOWN_TICKS.get(); } + static int kingElementalTerrainCap() { return KING_ELEMENTAL_TERRAIN_CAP.get(); } + static double royalBossSoundVolume() { return ROYAL_BOSS_SOUND_VOLUME.get(); } + + static int royalEggHatchChance() { return ROYAL_EGG_HATCH_CHANCE.get(); } + static double royalBoltDamage() { return ROYAL_BOLT_DAMAGE.get(); } + static double princeHealth() { return PRINCE_HEALTH.get(); } + static double princeAttackDamage() { return PRINCE_ATTACK_DAMAGE.get(); } + static double princeMovementSpeed() { return PRINCE_MOVEMENT_SPEED.get(); } + static double princeFlyingSpeed() { return PRINCE_FLYING_SPEED.get(); } + static double princeArmor() { return PRINCE_ARMOR.get(); } + static double princeKnockbackResistance() { return PRINCE_KNOCKBACK_RESISTANCE.get(); } + static double princeFollowRange() { return PRINCE_FOLLOW_RANGE.get(); } + static double princessHealth() { return PRINCESS_HEALTH.get(); } + static double princessAttackDamage() { return PRINCESS_ATTACK_DAMAGE.get(); } + static double princessMovementSpeed() { return PRINCESS_MOVEMENT_SPEED.get(); } + static double princessFlyingSpeed() { return PRINCESS_FLYING_SPEED.get(); } + static double princessArmor() { return PRINCESS_ARMOR.get(); } + static double princessKnockbackResistance() { return PRINCESS_KNOCKBACK_RESISTANCE.get(); } + static double princessFollowRange() { return PRINCESS_FOLLOW_RANGE.get(); } static double brutalflyHealth() { return BRUTALFLY_HEALTH.get(); } static double brutalflySwipeDamage() { return BRUTALFLY_SWIPE_DAMAGE.get(); } @@ -1004,9 +1124,9 @@ public final class AntarchyMobsConfig { static double brutalflyDamageRange() { return BRUTALFLY_DAMAGE_RANGE.get(); } static double brutalflyArmor() { return BRUTALFLY_ARMOR.get(); } static double brutalflyArmorToughness() { return BRUTALFLY_ARMOR_TOUGHNESS.get(); } + static double brutalflyKnockbackResistance() { return BRUTALFLY_KNOCKBACK_RESISTANCE.get(); } static double brutalflyMovementSpeed() { return BRUTALFLY_MOVEMENT_SPEED.get(); } static double brutalflyFlyingSpeed() { return BRUTALFLY_FLYING_SPEED.get(); } - static double brutalflyKnockbackResistance() { return BRUTALFLY_KNOCKBACK_RESISTANCE.get(); } static double mantisHealth() { return MANTIS_HEALTH.get(); } static double mantisAttackDamage() { return MANTIS_ATTACK_DAMAGE.get(); } @@ -1029,9 +1149,10 @@ public final class AntarchyMobsConfig { static double rollyPollyArmor() { return ROLLY_POLLY_ARMOR.get(); } static double rollyPollyRolledArmorBonus() { return ROLLY_POLLY_ROLLED_ARMOR_BONUS.get(); } - static double triffidHealth() { return TRIFFID_HEALTH.get(); } - static double triffidAttackDamage() { return TRIFFID_ATTACK_DAMAGE.get(); } - static double triffidGrabDamage() { return TRIFFID_GRAB_DAMAGE.get(); } + static double flytrapHealth() { return FLYTRAP_HEALTH.get(); } + static double flytrapAttackDamage() { return FLYTRAP_ATTACK_DAMAGE.get(); } + static double flytrapGrabDamage() { return FLYTRAP_GRAB_DAMAGE.get(); } + static int flytrapSweepHitCooldownTicks() { return FLYTRAP_SWEEP_HIT_COOLDOWN_TICKS.get(); } static double caterpillarPupationTimeSeconds() { return CATERPILLAR_PUPATION_TIME_SECONDS.get(); } static double antDanceRadius() { return ANT_DANCE_RADIUS.get(); } @@ -1051,6 +1172,12 @@ public final class AntarchyMobsConfig { static double nightmareHealth() { return NIGHTMARE_HEALTH.get(); } static double nightmareAttackDamage() { return NIGHTMARE_ATTACK_DAMAGE.get(); } + static int dimensionalTearLifetimeTicks() { return DIMENSIONAL_TEAR_LIFETIME_TICKS.get(); } + static int dimensionalTearInvertedDurationTicks(){ return DIMENSIONAL_TEAR_INVERTED_DURATION_TICKS.get(); } + static int dimensionalTearEmergenceMinIntervalTicks() { return DIMENSIONAL_TEAR_EMERGENCE_MIN_INTERVAL_TICKS.get(); } + static int dimensionalTearEmergenceMaxIntervalTicks() { return DIMENSIONAL_TEAR_EMERGENCE_MAX_INTERVAL_TICKS.get(); } + static float dimensionalTearLucidEventChance() { return DIMENSIONAL_TEAR_LUCID_EVENT_CHANCE.get().floatValue(); } + static boolean dimensionalTearsSpawnNaturally() { return DIMENSIONAL_TEARS_SPAWN_NATURALLY.get(); } static double nightmareMovementSpeed() { return NIGHTMARE_MOVEMENT_SPEED.get(); } static int nightmareWeaknessTicks() { return NIGHTMARE_WEAKNESS_TICKS.get(); } static int nightmareDreadTicks() { return NIGHTMARE_DREAD_TICKS.get(); } @@ -1084,57 +1211,21 @@ public final class AntarchyMobsConfig { static double lucidMovementSpeed() { return LUCID_MOVEMENT_SPEED.get(); } static double lucidFlyingSpeed() { return LUCID_FLYING_SPEED.get(); } static double lucidKnockbackResistance() { return LUCID_KNOCKBACK_RESISTANCE.get(); } - - static double missileSquidHealth() { return MISSILE_SQUID_HEALTH.get(); } - static double missileSquidAttackDamage() { return MISSILE_SQUID_ATTACK_DAMAGE.get(); } - static double missileSquidMovementSpeed() { return MISSILE_SQUID_MOVEMENT_SPEED.get(); } - static double missileSquidFlyingSpeed() { return MISSILE_SQUID_FLYING_SPEED.get(); } - static double missileSquidKnockbackResistance() { return MISSILE_SQUID_KNOCKBACK_RESISTANCE.get(); } - - static double octopusBombHealth() { return OCTOPUS_BOMB_HEALTH.get(); } - static double octopusBombAttackDamage() { return OCTOPUS_BOMB_ATTACK_DAMAGE.get(); } - - static double bedBugHealth() { return BED_BUG_HEALTH.get(); } - static double bedBugAttackDamage() { return BED_BUG_ATTACK_DAMAGE.get(); } - static double bedBugMovementSpeed() { return BED_BUG_MOVEMENT_SPEED.get(); } - static double bedBugArmor() { return BED_BUG_ARMOR.get(); } - - static double cloudSharkHealth() { return CLOUD_SHARK_HEALTH.get(); } - static double cloudSharkAttackDamage() { return CLOUD_SHARK_ATTACK_DAMAGE.get(); } - static double cloudSharkMovementSpeed() { return CLOUD_SHARK_MOVEMENT_SPEED.get(); } - static double cloudSharkFlyingSpeed() { return CLOUD_SHARK_FLYING_SPEED.get(); } - static double cloudSharkKnockbackResistance() { return CLOUD_SHARK_KNOCKBACK_RESISTANCE.get(); } - - static double flyingSquirrelHealth() { return FLYING_SQUIRREL_HEALTH.get(); } - static double flyingSquirrelMovementSpeed() { return FLYING_SQUIRREL_MOVEMENT_SPEED.get(); } - - static double molevoreHealth() { return MOLEVORE_HEALTH.get(); } - static double molevoreAttackDamage() { return MOLEVORE_ATTACK_DAMAGE.get(); } - static double molevoreMovementSpeed() { return MOLEVORE_MOVEMENT_SPEED.get(); } - static double molevoreArmor() { return MOLEVORE_ARMOR.get(); } - static double molevoreKnockbackResistance() { return MOLEVORE_KNOCKBACK_RESISTANCE.get(); } - static double molevoreFollowRange() { return MOLEVORE_FOLLOW_RANGE.get(); } - static int molevoreXpReward() { return MOLEVORE_XP_REWARD.get(); } - static int molevoreSpinTicks() { return MOLEVORE_SPIN_TICKS.get(); } - static int molevoreCooldownTicks() { return MOLEVORE_COOLDOWN_TICKS.get(); } - static double molevoreChargeSpeed() { return MOLEVORE_CHARGE_SPEED.get(); } - static double molevoreBreakRange() { return MOLEVORE_BREAK_RANGE.get(); } - static double molevoreBreakVerticalRange() { return MOLEVORE_BREAK_VERTICAL_RANGE.get(); } - static double molevoreBreakHalfWidth() { return MOLEVORE_BREAK_HALF_WIDTH.get(); } - - static double molewormHealth() { return MOLEWORM_HEALTH.get(); } - static double molewormAttackDamage() { return MOLEWORM_ATTACK_DAMAGE.get(); } - static double molewormMovementSpeed() { return MOLEWORM_MOVEMENT_SPEED.get(); } - - static double scorpionHealth() { return SCORPION_HEALTH.get(); } - static double scorpionAttackDamage() { return SCORPION_ATTACK_DAMAGE.get(); } - static double scorpionMovementSpeed() { return SCORPION_MOVEMENT_SPEED.get(); } - static double scorpionArmor() { return SCORPION_ARMOR.get(); } - static double scorpionKnockbackResistance() { return SCORPION_KNOCKBACK_RESISTANCE.get(); } - - static double butterflyHealth() { return BUTTERFLY_HEALTH.get(); } - static double butterflyMovementSpeed() { return BUTTERFLY_MOVEMENT_SPEED.get(); } - static double butterflyFlyingSpeed() { return BUTTERFLY_FLYING_SPEED.get(); } + static double vortexHealth() { return VORTEX_HEALTH.get(); } + static double vortexAttackDamage() { return VORTEX_ATTACK_DAMAGE.get(); } + static double vortexMovementSpeed() { return VORTEX_MOVEMENT_SPEED.get(); } + static double vortexFlyingSpeed() { return VORTEX_FLYING_SPEED.get(); } + static int vortexMaxActiveVortexes() { return VORTEX_MAX_ACTIVE_VORTEXES.get(); } + static int windVortexDurationTicks() { return WIND_VORTEX_DURATION_TICKS.get(); } + static double windVortexPullStrength() { return WIND_VORTEX_PULL_STRENGTH.get(); } + static double windVortexLaunchStrength() { return WIND_VORTEX_LAUNCH_STRENGTH.get(); } + static double vortexLensMinRadius() { return VORTEX_LENS_MIN_RADIUS.get(); } + static double vortexLensMaxRadius() { return VORTEX_LENS_MAX_RADIUS.get(); } + static double vortexLensMinHeight() { return VORTEX_LENS_MIN_HEIGHT.get(); } + static double vortexLensMaxHeight() { return VORTEX_LENS_MAX_HEIGHT.get(); } + static double vortexLensPullStrength() { return VORTEX_LENS_PULL_STRENGTH.get(); } + static double vortexLensPushStrength() { return VORTEX_LENS_PUSH_STRENGTH.get(); } + static double vortexLensLaunchStrength() { return VORTEX_LENS_LAUNCH_STRENGTH.get(); } static double toreterrorHealth() { return TORETERROR_HEALTH.get(); } static double toreterrorDamageRange() { return TORETERROR_DAMAGE_RANGE.get(); } @@ -1143,8 +1234,6 @@ public final class AntarchyMobsConfig { static double toreterrorSpinDamage() { return TORETERROR_SPIN_DAMAGE.get(); } static double toreterrorSpinKnockback() { return TORETERROR_SPIN_KNOCKBACK.get(); } static double toreterrorProjectileDamageMultiplier() { return TORETERROR_PROJECTILE_DAMAGE_MULTIPLIER.get(); } - static double toreterrorRangedWaterBombChance() { return TORETERROR_RANGED_WATER_BOMB_CHANCE.get(); } - static double waterCannonCooldownSeconds() { return WATER_CANNON_COOLDOWN_SECONDS.get(); } static double waterBombDamage() { return WATER_BOMB_DAMAGE.get(); } static int waterBombLifetimeTicks() { return WATER_BOMB_LIFETIME_TICKS.get(); } static double waterBombGravity() { return WATER_BOMB_GRAVITY.get(); } @@ -1157,10 +1246,17 @@ public final class AntarchyMobsConfig { static double dreadHallucinationMobMinInterval() { return DREAD_HALLUCINATION_MOB_MIN_INTERVAL.get(); } static double dreadHallucinationMobMaxInterval() { return DREAD_HALLUCINATION_MOB_MAX_INTERVAL.get(); } - static double creepingHorrorHealth() { return CREEPING_HORROR_HEALTH.get(); } - static double creepingHorrorAttackDamage() { return CREEPING_HORROR_ATTACK_DAMAGE.get(); } - static double lurkingTerrorHealth() { return LURKING_TERROR_HEALTH.get(); } - static double lurkingTerrorAttackDamage() { return LURKING_TERROR_ATTACK_DAMAGE.get(); } + static double crawlingBlightHealth() { return CRAWLING_BLIGHT_HEALTH.get(); } + static double crawlingBlightAttackDamage() { return CRAWLING_BLIGHT_ATTACK_DAMAGE.get(); } + static double skulkingFrightHealth() { return SKULKING_FRIGHT_HEALTH.get(); } + static double skulkingFrightAttackDamage() { return SKULKING_FRIGHT_ATTACK_DAMAGE.get(); } + static double manticoreHealth() { return MANTICORE_HEALTH.get(); } + static double manticoreAttackDamage() { return MANTICORE_ATTACK_DAMAGE.get(); } + static int manticoreStingPoisonTicks() { return MANTICORE_STING_POISON_TICKS.get(); } + static int queenManticoreCap() { return QUEEN_MANTICORE_CAP.get(); } + static int queenManticoreSummonCooldownTicks() { return QUEEN_MANTICORE_SUMMON_COOLDOWN_TICKS.get(); } + static int queenManticoreSummonCount() { return QUEEN_MANTICORE_SUMMON_COUNT.get(); } + static double queenManticoreSummonRange() { return QUEEN_MANTICORE_SUMMON_RANGE.get(); } static double jerryInfantHealth() { return JERRY_INFANT_HEALTH.get(); } static double jerryInfantAttackDamage() { return JERRY_INFANT_ATTACK_DAMAGE.get(); } static double jerryMatureHealth() { return JERRY_MATURE_HEALTH.get(); } diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyToolsConfig.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyToolsConfig.java index da9e84af..20f29b03 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyToolsConfig.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyToolsConfig.java @@ -5,17 +5,11 @@ import net.minecraftforge.common.ForgeConfigSpec; public final class AntarchyToolsConfig { public static final ForgeConfigSpec SPEC; - - // Basilisk Dagger - private static final ForgeConfigSpec.DoubleValue BASILISK_DAGGER_ATTACK_DAMAGE; private static final ForgeConfigSpec.DoubleValue BASILISK_DAGGER_ATTACK_SPEED; private static final ForgeConfigSpec.IntValue BASILISK_DAGGER_POISON_DURATION_TICKS; private static final ForgeConfigSpec.IntValue BASILISK_DAGGER_POISON_AMPLIFIER; - - // Ultimate Tools - private static final ForgeConfigSpec.DoubleValue ULTIMATE_SWORD_ATTACK_DAMAGE; private static final ForgeConfigSpec.DoubleValue ULTIMATE_SWORD_ATTACK_SPEED; private static final ForgeConfigSpec.DoubleValue ULTIMATE_PICKAXE_ATTACK_DAMAGE; @@ -29,24 +23,19 @@ public final class AntarchyToolsConfig { private static final ForgeConfigSpec.IntValue ULTIMATE_TOOL_ENCHANTABILITY; private static final ForgeConfigSpec.BooleanValue ULTIMATE_TOOLS_THREE_BY_THREE_ENABLED; - - // Ultimate Bow - private static final ForgeConfigSpec.DoubleValue ULTIMATE_BOW_ATTACK_DAMAGE; private static final ForgeConfigSpec.DoubleValue ULTIMATE_BOW_PLAYER_HEAL; private static final ForgeConfigSpec.DoubleValue ULTIMATE_BOW_DRAW_SPEED_MULTIPLIER; private static final ForgeConfigSpec.BooleanValue ULTIMATE_BOW_COMES_ENCHANTED_WITH_FLAME; private static final ForgeConfigSpec.IntValue ULTIMATE_BOW_ENCHANTABILITY; - - // Ultimate Crossbow - private static final ForgeConfigSpec.DoubleValue ULTIMATE_CROSSBOW_ATTACK_DAMAGE; private static final ForgeConfigSpec.DoubleValue ULTIMATE_CROSSBOW_CHARGE_SPEED_MULTIPLIER; private static final ForgeConfigSpec.IntValue ULTIMATE_CROSSBOW_ENCHANTABILITY; - - // Ultimate Armor + private static final ForgeConfigSpec.DoubleValue ULTIMATE_MACE_DAMAGE_MULTIPLIER; + private static final ForgeConfigSpec.DoubleValue ULTIMATE_MACE_ATTACK_SPEED; + private static final ForgeConfigSpec.IntValue ULTIMATE_MACE_ENCHANTABILITY; private static final ForgeConfigSpec.BooleanValue ULTIMATE_ARMOR_COMES_ENCHANTED; private static final ForgeConfigSpec.IntValue ULTIMATE_ARMOR_ENCHANTABILITY; @@ -60,15 +49,55 @@ public final class AntarchyToolsConfig { private static final ForgeConfigSpec.DoubleValue ULTIMATE_BOOTS_ARMOR_TOUGHNESS; private static final ForgeConfigSpec.DoubleValue ULTIMATE_ARMOR_KNOCKBACK_RESISTANCE; - - // Battle Axe + private static final ForgeConfigSpec.BooleanValue ROYAL_ARMOR_COMES_ENCHANTED; + private static final ForgeConfigSpec.IntValue ROYAL_ARMOR_PROTECTION_LEVEL; + private static final ForgeConfigSpec.IntValue ROYAL_ARMOR_ENCHANTABILITY; + private static final ForgeConfigSpec.IntValue ROYAL_ARMOR_DURABILITY_MULTIPLIER; + private static final ForgeConfigSpec.IntValue ROYAL_GUARDIAN_HELMET_ARMOR_VALUE; + private static final ForgeConfigSpec.IntValue ROYAL_GUARDIAN_CHESTPLATE_ARMOR_VALUE; + private static final ForgeConfigSpec.IntValue ROYAL_GUARDIAN_LEGGINGS_ARMOR_VALUE; + private static final ForgeConfigSpec.IntValue ROYAL_GUARDIAN_BOOTS_ARMOR_VALUE; + private static final ForgeConfigSpec.DoubleValue ROYAL_GUARDIAN_ARMOR_TOUGHNESS; + private static final ForgeConfigSpec.DoubleValue ROYAL_GUARDIAN_ARMOR_KNOCKBACK_RESISTANCE; + private static final ForgeConfigSpec.DoubleValue ROYAL_GUARDIAN_HELMET_JUDGMENT_BONUS, ROYAL_GUARDIAN_CHESTPLATE_JUDGMENT_BONUS, + ROYAL_GUARDIAN_LEGGINGS_JUDGMENT_BONUS, ROYAL_GUARDIAN_BOOTS_JUDGMENT_BONUS; + private static final ForgeConfigSpec.IntValue ROYAL_GUARDIAN_JUDGMENT_DURATION_TICKS; + private static final ForgeConfigSpec.IntValue ROYAL_ASSAILANT_HELMET_ARMOR_VALUE; + private static final ForgeConfigSpec.IntValue ROYAL_ASSAILANT_CHESTPLATE_ARMOR_VALUE; + private static final ForgeConfigSpec.IntValue ROYAL_ASSAILANT_LEGGINGS_ARMOR_VALUE; + private static final ForgeConfigSpec.IntValue ROYAL_ASSAILANT_BOOTS_ARMOR_VALUE; + private static final ForgeConfigSpec.DoubleValue ROYAL_ASSAILANT_ARMOR_TOUGHNESS; + private static final ForgeConfigSpec.DoubleValue ROYAL_ASSAILANT_ARMOR_KNOCKBACK_RESISTANCE; + private static final ForgeConfigSpec.DoubleValue ROYAL_ASSAILANT_HELMET_DOUBLE_DAMAGE_CHANCE; + private static final ForgeConfigSpec.DoubleValue ROYAL_ASSAILANT_CHESTPLATE_DOUBLE_DAMAGE_CHANCE; + private static final ForgeConfigSpec.DoubleValue ROYAL_ASSAILANT_LEGGINGS_DOUBLE_DAMAGE_CHANCE; + private static final ForgeConfigSpec.DoubleValue ROYAL_ASSAILANT_BOOTS_DOUBLE_DAMAGE_CHANCE; + private static final ForgeConfigSpec.DoubleValue ROYAL_GUARDIAN_SWORD_ATTACK_DAMAGE; + private static final ForgeConfigSpec.DoubleValue GIANT_FRYING_PAN_ATTACK_DAMAGE; + private static final ForgeConfigSpec.IntValue GIANT_FRYING_PAN_COOK_TIME_TICKS; + private static final ForgeConfigSpec.DoubleValue ROYAL_GUARDIAN_SWORD_ATTACK_SPEED; + private static final ForgeConfigSpec.IntValue ROYAL_GUARDIAN_SWORD_ELEMENTAL_COOLDOWN_TICKS, ROYAL_GUARDIAN_SWORD_STORM_MAX_JUMPS; + private static final ForgeConfigSpec.DoubleValue ROYAL_GUARDIAN_SWORD_FIRE_PRIMARY_DAMAGE, ROYAL_GUARDIAN_SWORD_FIRE_SPLASH_DAMAGE, + ROYAL_GUARDIAN_SWORD_FROST_SPIKE_DAMAGE, ROYAL_GUARDIAN_SWORD_STORM_PRIMARY_DAMAGE, + ROYAL_GUARDIAN_SWORD_STORM_JUMP_DAMAGE, ROYAL_GUARDIAN_SWORD_STORM_JUMP_RANGE; + private static final ForgeConfigSpec.DoubleValue ROYAL_ASSAILANT_BATTLE_AXE_ATTACK_DAMAGE; + private static final ForgeConfigSpec.DoubleValue ROYAL_ASSAILANT_BATTLE_AXE_ATTACK_SPEED; + private static final ForgeConfigSpec.DoubleValue ROYAL_WEAPON_ATTACK_REACH_BONUS; + private static final ForgeConfigSpec.DoubleValue ROYAL_WEAPON_ATTACK_KNOCKBACK_BONUS; + private static final ForgeConfigSpec.IntValue ROYAL_WEAPON_DURABILITY; + private static final ForgeConfigSpec.IntValue ROYAL_WEAPON_ENCHANTABILITY; + private static final ForgeConfigSpec.IntValue ROYAL_GUARDIAN_SHIELD_DURABILITY; + private static final ForgeConfigSpec.DoubleValue ROYAL_GUARDIAN_MUSTER_RANGE, ROYAL_GUARDIAN_MUSTER_DAMAGE_REDUCTION, + ROYAL_GUARDIAN_MUSTER_ATTACK_BONUS, ROYAL_GUARDIAN_MUSTER_SPEED_BONUS, ROYAL_GUARDIAN_MUSTER_PASSIVE_DAMAGE_FLOOR, + ROYAL_GUARDIAN_BOUNDARY_RADIUS; + private static final ForgeConfigSpec.IntValue ROYAL_GUARDIAN_MUSTER_DURATION_TICKS, ROYAL_GUARDIAN_MUSTER_COOLDOWN_TICKS, + ROYAL_GUARDIAN_MUSTER_MOB_CAP, ROYAL_GUARDIAN_BOUNDARY_DURATION_TICKS, ROYAL_GUARDIAN_BOUNDARY_COOLDOWN_TICKS, + ROYAL_GUARDIAN_BOUNDARY_STRENGTH_AMPLIFIER, ROYAL_GUARDIAN_BOUNDARY_ARREST_TICKS, + ROYAL_GUARDIAN_BOUNDARY_DROP_TICKS, ROYAL_GUARDIAN_BOUNDARY_PROJECTILE_CAP; private static final ForgeConfigSpec.DoubleValue BATTLE_AXE_ATTACK_DAMAGE; private static final ForgeConfigSpec.DoubleValue BATTLE_AXE_ATTACK_SPEED; - - // Big Bertha - private static final ForgeConfigSpec.DoubleValue BIG_BERTHA_ATTACK_DAMAGE; private static final ForgeConfigSpec.DoubleValue BIG_BERTHA_REACH_BONUS; private static final ForgeConfigSpec.DoubleValue BIG_BERTHA_ATTACK_SPEED; @@ -92,6 +121,7 @@ public final class AntarchyToolsConfig { private static final ForgeConfigSpec.DoubleValue BIG_BERTHA_NONE_MODE_DAMAGE_BONUS_PERCENT; private static final ForgeConfigSpec.DoubleValue BIG_BERTHA_NIGHTMARE_DAMAGE_BONUS_PERCENT; private static final ForgeConfigSpec.DoubleValue SCORPION_WHIP_BASE_DAMAGE; + private static final ForgeConfigSpec.DoubleValue SCORPION_WHIP_REACH_BONUS; private static final ForgeConfigSpec.IntValue SCORPION_WHIP_POISON_DURATION_TICKS; private static final ForgeConfigSpec.DoubleValue SCORPION_WHIP_TETHER_MAX_RANGE; private static final ForgeConfigSpec.DoubleValue SCORPION_WHIP_SNAP_BONUS_DAMAGE; @@ -101,9 +131,9 @@ public final class AntarchyToolsConfig { private static final ForgeConfigSpec.IntValue BLOOD_CRYSTAL_KATANA_ATTACK_DAMAGE; private static final ForgeConfigSpec.DoubleValue BLOOD_CRYSTAL_KATANA_LAUNCH_STRENGTH; private static final ForgeConfigSpec.IntValue BLOOD_CRYSTAL_KATANA_TRAIL_DURATION_TICKS; - - - // Nightmare Gear + private static final ForgeConfigSpec.DoubleValue BLOOD_CRYSTAL_KATANA_REACH_BONUS; + private static final ForgeConfigSpec.IntValue BLOOD_CRYSTAL_KATANA_INVULN_TICKS; + private static final ForgeConfigSpec.IntValue BLOOD_CRYSTAL_KATANA_DASH_COOLDOWN_TICKS; private static final ForgeConfigSpec.IntValue NIGHTMARE_HELMET_ARMOR_VALUE; private static final ForgeConfigSpec.IntValue NIGHTMARE_CHESTPLATE_ARMOR_VALUE; @@ -123,15 +153,9 @@ public final class AntarchyToolsConfig { private static final ForgeConfigSpec.DoubleValue NIGHTMARE_SWORD_ATTACK_SPEED; private static final ForgeConfigSpec.DoubleValue NIGHTMARE_SWORD_SCALING_FACTOR; - - // Fallen King's Crown - private static final ForgeConfigSpec.IntValue FALLEN_KING_CROWN_ARMOR_VALUE; private static final ForgeConfigSpec.DoubleValue FALLEN_KING_CROWN_ARMOR_TOUGHNESS; - - // Blood Crystal Armor - private static final ForgeConfigSpec.IntValue BLOOD_CRYSTAL_ARMOR_SHIELD_RECHARGE_TICKS; private static final ForgeConfigSpec.IntValue BLOOD_CRYSTAL_APPLE_SHIELD_COUNT; private static final ForgeConfigSpec.IntValue BLOOD_CRYSTAL_APPLE_DURATION_TICKS; @@ -147,9 +171,6 @@ public final class AntarchyToolsConfig { private static final ForgeConfigSpec.IntValue BLOOD_CRYSTAL_LEGGINGS_DURABILITY; private static final ForgeConfigSpec.IntValue BLOOD_CRYSTAL_BOOTS_DURABILITY; - - // Squidzooka - private static final ForgeConfigSpec.DoubleValue SQUIDZOOKA_COOLDOWN_SECONDS; private static final ForgeConfigSpec.DoubleValue SQUIDZOOKA_LAUNCH_VELOCITY; private static final ForgeConfigSpec.DoubleValue RPO_LAUNCHER_COOLDOWN_SECONDS; @@ -157,9 +178,6 @@ public final class AntarchyToolsConfig { private static final ForgeConfigSpec.DoubleValue RPO_LAUNCHER_EXPLOSION_DAMAGE; private static final ForgeConfigSpec.DoubleValue RPO_LAUNCHER_EXPLOSION_RADIUS; - - // Size Rays - private static final ForgeConfigSpec.BooleanValue SIZE_CHANGING_RAYS_ENABLED; private static final ForgeConfigSpec.DoubleValue SIZE_RAY_COOLDOWN_SECONDS; private static final ForgeConfigSpec.DoubleValue SIZE_RAY_MIN_SCALE; @@ -168,9 +186,6 @@ public final class AntarchyToolsConfig { private static final ForgeConfigSpec.DoubleValue SHRINKING_POTION_DELTA; private static final ForgeConfigSpec.DoubleValue GROWTH_POTION_DELTA; - - // Gravity Gun - private static final ForgeConfigSpec.BooleanValue GRAVITY_GUN_ENABLED; private static final ForgeConfigSpec.BooleanValue GRAVITY_GUN_BLOCKS_ENABLED; private static final ForgeConfigSpec.BooleanValue GRAVITY_GUN_ENTITIES_ENABLED; @@ -179,21 +194,26 @@ public final class AntarchyToolsConfig { private static final ForgeConfigSpec.DoubleValue GRAVITY_GUN_BLAST_STRENGTH; private static final ForgeConfigSpec.DoubleValue GRAVITY_GUN_COOLDOWN_SECONDS; private static final ForgeConfigSpec.DoubleValue GRAVITY_GUN_MAX_HOLD_DISTANCE; - - // Critter Cage + private static final ForgeConfigSpec.BooleanValue EYE_OF_THE_STORM_ENABLED; + private static final ForgeConfigSpec.IntValue EYE_OF_THE_STORM_UPDRAFT_COOLDOWN_TICKS; + private static final ForgeConfigSpec.DoubleValue EYE_OF_THE_STORM_UPDRAFT_LAUNCH_STRENGTH; + private static final ForgeConfigSpec.DoubleValue EYE_OF_THE_STORM_UPDRAFT_HEIGHT; + private static final ForgeConfigSpec.DoubleValue EYE_OF_THE_STORM_UPDRAFT_RADIUS; + private static final ForgeConfigSpec.IntValue EYE_OF_THE_STORM_UPDRAFT_DURATION_TICKS; + private static final ForgeConfigSpec.IntValue EYE_OF_THE_STORM_SURGE_COOLDOWN_TICKS; + private static final ForgeConfigSpec.DoubleValue EYE_OF_THE_STORM_SURGE_RANGE; + private static final ForgeConfigSpec.IntValue EYE_OF_THE_STORM_SURGE_DURATION_TICKS; + private static final ForgeConfigSpec.DoubleValue EYE_OF_THE_STORM_SURGE_RADIUS; + private static final ForgeConfigSpec.DoubleValue EYE_OF_THE_STORM_SURGE_HEIGHT; + private static final ForgeConfigSpec.DoubleValue EYE_OF_THE_STORM_SURGE_PULL_STRENGTH; + private static final ForgeConfigSpec.DoubleValue EYE_OF_THE_STORM_SURGE_RETURN_STRENGTH; + private static final ForgeConfigSpec.DoubleValue EYE_OF_THE_STORM_SURGE_DAMAGE; private static final ForgeConfigSpec.DoubleValue CRITTER_CAGE_MAX_CAPTURABLE_WIDTH; private static final ForgeConfigSpec.DoubleValue CRITTER_CAGE_MAX_CAPTURABLE_HEIGHT; - // Miner's Dream - - - - // Miscellaneous items / consumables - private static final ForgeConfigSpec.DoubleValue DUCT_TAPE_REPAIR_PERCENT_PER_USE; private static final ForgeConfigSpec.DoubleValue POTENT_NYXITE_INVERTED_DURATION_SECONDS; - private static final ForgeConfigSpec.BooleanValue INVERT_PROJECTILES_FROM_INVERTED_PLAYERS; private static final ForgeConfigSpec.IntValue CORNEA_EAR_NIGHT_VISION_SECONDS; private static final ForgeConfigSpec.BooleanValue AMERICAN_ENABLED; private static final ForgeConfigSpec.IntValue AMERICAN_BONUS_NUTRITION; @@ -201,16 +221,11 @@ public final class AntarchyToolsConfig { private static final ForgeConfigSpec.IntValue AMERICAN_REGENERATION_DURATION_TICKS; private static final ForgeConfigSpec.IntValue AMERICAN_REGENERATION_AMPLIFIER; - // Moggles private static final ForgeConfigSpec.DoubleValue MOGGLES_VISION_RADIUS; - static { ForgeConfigSpec.Builder b = new ForgeConfigSpec.Builder(); - - // Basilisk Dagger - b.push("basiliskDagger"); BASILISK_DAGGER_ATTACK_DAMAGE = b.comment("Attack damage.") .defineInRange("attackDamage", 6.0D, 0.0D, 1024.0D); BASILISK_DAGGER_ATTACK_SPEED = b.comment("Attack speed.") .defineInRange("attackSpeed", -1.8D, -10.0D, 10.0D); @@ -218,9 +233,6 @@ public final class AntarchyToolsConfig { BASILISK_DAGGER_POISON_AMPLIFIER = b.comment("Poison level applied on hit (0 = I).") .defineInRange("poisonAmplifier", 2, 0, 10); b.pop(); - - // Ultimate Tools - b.push("ultimateTools"); ULTIMATE_SWORD_ATTACK_DAMAGE = b.comment("Attack damage of the Ultimate Sword.") .defineInRange("swordAttackDamage", 30.0D, 0.0D, 1024.0D); ULTIMATE_SWORD_ATTACK_SPEED = b.comment("Attack speed of the Ultimate Sword.") .defineInRange("swordAttackSpeed", -2.4D, -10.0D, 10.0D); @@ -238,9 +250,6 @@ public final class AntarchyToolsConfig { .define("threeByThreeEnabled", true); b.pop(); - - // Ultimate Bow - b.push("ultimateBow"); ULTIMATE_BOW_ATTACK_DAMAGE = b.comment("Damage dealt to non-player targets.") .defineInRange("attackDamage", 18.0D, 0.0D, 1024.0D); ULTIMATE_BOW_PLAYER_HEAL = b.comment("Health restored to players hit by arrows from this bow.") .defineInRange("playerHeal", 8.0D, 0.0D, 1024.0D); @@ -249,9 +258,6 @@ public final class AntarchyToolsConfig { ULTIMATE_BOW_ENCHANTABILITY = b.comment("Enchantability of the Ultimate Bow.") .defineInRange("enchantability", 20, 0, 100); b.pop(); - - // Ultimate Crossbow - b.push("ultimateCrossbow"); ULTIMATE_CROSSBOW_ATTACK_DAMAGE = b.comment("Damage dealt by projectiles fired from the Ultimate Crossbow.").defineInRange("attackDamage", 8.0D, 0.0D, 1024.0D); ULTIMATE_CROSSBOW_CHARGE_SPEED_MULTIPLIER = b @@ -263,8 +269,11 @@ public final class AntarchyToolsConfig { ULTIMATE_CROSSBOW_ENCHANTABILITY = b.comment("Enchantability of the Ultimate Crossbow.").defineInRange("enchantability", 20, 0, 100); b.pop(); - - // Ultimate Armor + b.push("ultimateMace"); + ULTIMATE_MACE_DAMAGE_MULTIPLIER = b.comment("Multiplier on both base damage and smash bonus. 1.5 = 50% stronger than a normal mace.").defineInRange("damageMultiplier", 1.5D, 0.1D, 16.0D); + ULTIMATE_MACE_ATTACK_SPEED = b.comment("Attack speed of the Ultimate Mace.") .defineInRange("attackSpeed", -3.4D, -10.0D, 10.0D); + ULTIMATE_MACE_ENCHANTABILITY = b.comment("Enchantability of the Ultimate Mace.") .defineInRange("enchantability", 20, 0, 100); + b.pop(); b.push("ultimateArmor"); ULTIMATE_ARMOR_COMES_ENCHANTED = b.comment("If true, newly crafted Ultimate Armor has Protection, Fire Protection, Projectile Protection, and Blast Protection.").define("comesEnchanted", true); @@ -280,17 +289,73 @@ public final class AntarchyToolsConfig { ULTIMATE_ARMOR_KNOCKBACK_RESISTANCE = b.comment("Knockback resistance granted by each Ultimate Armor piece.") .defineInRange("knockbackResistance", 0.1D, 0.0D, 1.0D); b.pop(); - - // Battle Axe + b.push("royalGear"); + ROYAL_ARMOR_COMES_ENCHANTED = b.define("comesEnchanted", true); + ROYAL_ARMOR_PROTECTION_LEVEL = b.defineInRange("protectionLevel", 10, 0, 100); + ROYAL_ARMOR_ENCHANTABILITY = b.defineInRange("enchantability", 30, 0, 100); + ROYAL_ARMOR_DURABILITY_MULTIPLIER = b.defineInRange("durabilityMultiplier", 93, 0, 1000); + ROYAL_GUARDIAN_HELMET_ARMOR_VALUE = b.defineInRange("guardianHelmetArmor", 5, 0, 100); + ROYAL_GUARDIAN_CHESTPLATE_ARMOR_VALUE = b.defineInRange("guardianChestplateArmor", 10, 0, 100); + ROYAL_GUARDIAN_LEGGINGS_ARMOR_VALUE = b.defineInRange("guardianLeggingsArmor", 8, 0, 100); + ROYAL_GUARDIAN_BOOTS_ARMOR_VALUE = b.defineInRange("guardianBootsArmor", 5, 0, 100); + ROYAL_GUARDIAN_ARMOR_TOUGHNESS = b.defineInRange("guardianArmorToughness", 4.0D, 0.0D, 100.0D); + ROYAL_GUARDIAN_ARMOR_KNOCKBACK_RESISTANCE = b.defineInRange("guardianArmorKnockbackResistance", 0.15D, 0.0D, 1.0D); + ROYAL_GUARDIAN_HELMET_JUDGMENT_BONUS = b.defineInRange("guardianHelmetJudgmentBonus", 0.06D, 0.0D, 10.0D); + ROYAL_GUARDIAN_CHESTPLATE_JUDGMENT_BONUS = b.defineInRange("guardianChestplateJudgmentBonus", 0.08D, 0.0D, 10.0D); + ROYAL_GUARDIAN_LEGGINGS_JUDGMENT_BONUS = b.defineInRange("guardianLeggingsJudgmentBonus", 0.07D, 0.0D, 10.0D); + ROYAL_GUARDIAN_BOOTS_JUDGMENT_BONUS = b.defineInRange("guardianBootsJudgmentBonus", 0.05D, 0.0D, 10.0D); + ROYAL_GUARDIAN_JUDGMENT_DURATION_TICKS = b.defineInRange("guardianJudgmentDurationTicks", 160, 1, 72000); + ROYAL_ASSAILANT_HELMET_ARMOR_VALUE = b.defineInRange("assailantHelmetArmor", 5, 0, 100); + ROYAL_ASSAILANT_CHESTPLATE_ARMOR_VALUE = b.defineInRange("assailantChestplateArmor", 10, 0, 100); + ROYAL_ASSAILANT_LEGGINGS_ARMOR_VALUE = b.defineInRange("assailantLeggingsArmor", 8, 0, 100); + ROYAL_ASSAILANT_BOOTS_ARMOR_VALUE = b.defineInRange("assailantBootsArmor", 5, 0, 100); + ROYAL_ASSAILANT_ARMOR_TOUGHNESS = b.defineInRange("assailantArmorToughness", 3.0D, 0.0D, 100.0D); + ROYAL_ASSAILANT_ARMOR_KNOCKBACK_RESISTANCE = b.defineInRange("assailantArmorKnockbackResistance", 0.15D, 0.0D, 1.0D); + ROYAL_ASSAILANT_HELMET_DOUBLE_DAMAGE_CHANCE = b.defineInRange("assailantHelmetDoubleDamageChance", 0.06D, 0.0D, 1.0D); + ROYAL_ASSAILANT_CHESTPLATE_DOUBLE_DAMAGE_CHANCE = b.defineInRange("assailantChestplateDoubleDamageChance", 0.08D, 0.0D, 1.0D); + ROYAL_ASSAILANT_LEGGINGS_DOUBLE_DAMAGE_CHANCE = b.defineInRange("assailantLeggingsDoubleDamageChance", 0.07D, 0.0D, 1.0D); + ROYAL_ASSAILANT_BOOTS_DOUBLE_DAMAGE_CHANCE = b.defineInRange("assailantBootsDoubleDamageChance", 0.05D, 0.0D, 1.0D); + ROYAL_GUARDIAN_SWORD_ATTACK_DAMAGE = b.defineInRange("guardianSwordAttackDamage", 111.0D, 0.0D, 4096.0D); + GIANT_FRYING_PAN_ATTACK_DAMAGE = b.defineInRange("giantFryingPanAttackDamage", 50.0D, 0.0D, 4096.0D); + GIANT_FRYING_PAN_COOK_TIME_TICKS = b.defineInRange("giantFryingPanCookTimeTicks", 200, 1, 72000); + ROYAL_GUARDIAN_SWORD_ATTACK_SPEED = b.defineInRange("guardianSwordAttackSpeed", -2.5D, -10.0D, 10.0D); + ROYAL_GUARDIAN_SWORD_ELEMENTAL_COOLDOWN_TICKS = b.defineInRange("guardianSwordElementalCooldownTicks", 120, 0, 72000); + ROYAL_GUARDIAN_SWORD_FIRE_PRIMARY_DAMAGE = b.defineInRange("guardianSwordFirePrimaryDamage", 22.0D, 0.0D, 4096.0D); + ROYAL_GUARDIAN_SWORD_FIRE_SPLASH_DAMAGE = b.defineInRange("guardianSwordFireSplashDamage", 14.0D, 0.0D, 4096.0D); + ROYAL_GUARDIAN_SWORD_FROST_SPIKE_DAMAGE = b.defineInRange("guardianSwordFrostSpikeDamage", 9.0D, 0.0D, 4096.0D); + ROYAL_GUARDIAN_SWORD_STORM_PRIMARY_DAMAGE = b.defineInRange("guardianSwordStormPrimaryDamage", 16.0D, 0.0D, 4096.0D); + ROYAL_GUARDIAN_SWORD_STORM_JUMP_DAMAGE = b.defineInRange("guardianSwordStormJumpDamage", 14.0D, 0.0D, 4096.0D); + ROYAL_GUARDIAN_SWORD_STORM_MAX_JUMPS = b.defineInRange("guardianSwordStormMaxJumps", 4, 0, 64); + ROYAL_GUARDIAN_SWORD_STORM_JUMP_RANGE = b.defineInRange("guardianSwordStormJumpRange", 9.0D, 0.0D, 128.0D); + ROYAL_ASSAILANT_BATTLE_AXE_ATTACK_DAMAGE = b.defineInRange("assailantBattleAxeAttackDamage", 151.0D, 0.0D, 4096.0D); + ROYAL_ASSAILANT_BATTLE_AXE_ATTACK_SPEED = b.defineInRange("assailantBattleAxeAttackSpeed", -2.9D, -10.0D, 10.0D); + ROYAL_WEAPON_ATTACK_REACH_BONUS = b.defineInRange("weaponAttackReachBonus", 3.2D, 0.0D, 32.0D); + ROYAL_WEAPON_ATTACK_KNOCKBACK_BONUS = b.defineInRange("weaponAttackKnockbackBonus", 1.0D, 0.0D, 32.0D); + ROYAL_WEAPON_DURABILITY = b.defineInRange("weaponDurability", 4608, 1, 100000); + ROYAL_WEAPON_ENCHANTABILITY = b.defineInRange("weaponEnchantability", 30, 0, 100); + ROYAL_GUARDIAN_SHIELD_DURABILITY = b.defineInRange("guardianShieldDurability", 1008, 1, 100000); + ROYAL_GUARDIAN_MUSTER_RANGE = b.defineInRange("guardianMusterRange", 16.0D, 0.0D, 128.0D); + ROYAL_GUARDIAN_MUSTER_DURATION_TICKS = b.defineInRange("guardianMusterDurationTicks", 1200, 1, 72000); + ROYAL_GUARDIAN_MUSTER_COOLDOWN_TICKS = b.defineInRange("guardianMusterCooldownTicks", 500, 0, 72000); + ROYAL_GUARDIAN_MUSTER_MOB_CAP = b.defineInRange("guardianMusterMobCap", 3, 0, 64); + ROYAL_GUARDIAN_MUSTER_DAMAGE_REDUCTION = b.defineInRange("guardianMusterDamageReduction", 0.40D, 0.0D, 1.0D); + ROYAL_GUARDIAN_MUSTER_ATTACK_BONUS = b.defineInRange("guardianMusterAttackBonus", 0.50D, 0.0D, 10.0D); + ROYAL_GUARDIAN_MUSTER_SPEED_BONUS = b.defineInRange("guardianMusterSpeedBonus", 0.25D, 0.0D, 10.0D); + ROYAL_GUARDIAN_MUSTER_PASSIVE_DAMAGE_FLOOR = b.defineInRange("guardianMusterPassiveDamageFloor", 3.0D, 0.0D, 1024.0D); + ROYAL_GUARDIAN_BOUNDARY_RADIUS = b.defineInRange("guardianBoundaryRadius", 9.0D, 0.5D, 128.0D); + ROYAL_GUARDIAN_BOUNDARY_DURATION_TICKS = b.defineInRange("guardianBoundaryDurationTicks", 120, 1, 72000); + ROYAL_GUARDIAN_BOUNDARY_COOLDOWN_TICKS = b.defineInRange("guardianBoundaryCooldownTicks", 700, 0, 72000); + ROYAL_GUARDIAN_BOUNDARY_STRENGTH_AMPLIFIER = b.defineInRange("guardianBoundaryStrengthAmplifier", 1, 0, 255); + ROYAL_GUARDIAN_BOUNDARY_ARREST_TICKS = b.defineInRange("guardianBoundaryArrestTicks", 20, 0, 1200); + ROYAL_GUARDIAN_BOUNDARY_DROP_TICKS = b.defineInRange("guardianBoundaryDropTicks", 8, 0, 1200); + ROYAL_GUARDIAN_BOUNDARY_PROJECTILE_CAP = b.defineInRange("guardianBoundaryProjectileCap", 64, 0, 4096); + b.pop(); b.push("battleAxe"); BATTLE_AXE_ATTACK_DAMAGE = b.comment("Attack damage of the Battle Axe.").defineInRange("attackDamage", 46.0D, 0.0D, 4096.0D); BATTLE_AXE_ATTACK_SPEED = b.comment("Attack speed of the Battle Axe.") .defineInRange("attackSpeed", -3.1D, -10.0D, 10.0D); b.pop(); - - // Big Bertha - b.push("bigBertha"); BIG_BERTHA_ATTACK_DAMAGE = b.comment("Attack damage of Big Bertha.") .defineInRange("attackDamage", 55.0D, 0.0D, 4096.0D); BIG_BERTHA_REACH_BONUS = b.comment("Extra attack range in blocks while held in main hand.") .defineInRange("reachBonus", 3.0D, 0.0D, 32.0D); @@ -324,6 +389,7 @@ public final class AntarchyToolsConfig { b.push("scorpionWhip"); SCORPION_WHIP_BASE_DAMAGE = b.comment("Base lash damage of the Scorpion Stinger Whip.").defineInRange("baseDamage", 10.0D, 0.0D, 4096.0D); + SCORPION_WHIP_REACH_BONUS = b.comment("Extra entity interaction range in blocks while held in main hand.").defineInRange("reachBonus", 5.0D, 0.0D, 32.0D); SCORPION_WHIP_POISON_DURATION_TICKS = b.comment("Poison duration applied on lash.").defineInRange("poisonDurationTicks", 100, 0, 20000); SCORPION_WHIP_TETHER_MAX_RANGE = b.comment("Maximum tether distance before it breaks.").defineInRange("tetherMaxRange", 10.0D, 0.0D, 128.0D); SCORPION_WHIP_SNAP_BONUS_DAMAGE = b.comment("Bonus damage dealt when snapping the tether free.").defineInRange("snapBonusDamage", 6.0D, 0.0D, 4096.0D); @@ -336,11 +402,11 @@ public final class AntarchyToolsConfig { BLOOD_CRYSTAL_KATANA_ATTACK_DAMAGE = b.comment("Attack damage of the Blood Crystal Katana.").defineInRange("attackDamage", 7, 0, 1024); BLOOD_CRYSTAL_KATANA_LAUNCH_STRENGTH = b.comment("Forward launch strength applied to the wielder when the katana hits.").defineInRange("launchStrength", 1.1D, 0.0D, 8.0D); BLOOD_CRYSTAL_KATANA_TRAIL_DURATION_TICKS = b.comment("How long the crimson trail lingers after a katana hit, in ticks.").defineInRange("trailDurationTicks", 12, 0, 200); + BLOOD_CRYSTAL_KATANA_REACH_BONUS = b.comment("Extra entity interaction range in blocks while held in main hand. Lets a swing reach (and dash toward) a target you are looking at from farther away.").defineInRange("reachBonus", 4.0D, 0.0D, 32.0D); + BLOOD_CRYSTAL_KATANA_INVULN_TICKS = b.comment("Full-immunity window granted after a full-strength swing dash, in ticks (0 disables).").defineInRange("invulnTicks", 8, 0, 200); + BLOOD_CRYSTAL_KATANA_DASH_COOLDOWN_TICKS = b.comment("Minimum ticks between katana dashes.").defineInRange("dashCooldownTicks", 4, 0, 200); b.pop(); - - // Nightmare Gear - b.push("nightmareArmor"); NIGHTMARE_HELMET_ARMOR_VALUE = b.comment("Armor points of the Nightmare Helmet. (Netherite default: 3)") .defineInRange("helmetArmor", 3, 0, 100); NIGHTMARE_CHESTPLATE_ARMOR_VALUE = b.comment("Armor points of the Nightmare Chestplate. (Netherite default: 8)") .defineInRange("chestplateArmor", 8, 0, 100); @@ -351,10 +417,10 @@ public final class AntarchyToolsConfig { NIGHTMARE_LEGGINGS_ARMOR_TOUGHNESS = b.comment("Armor toughness of the Nightmare Leggings.") .defineInRange("leggingsToughness", 3.0D, 0.0D, 100.0D); NIGHTMARE_BOOTS_ARMOR_TOUGHNESS = b.comment("Armor toughness of the Nightmare Boots.") .defineInRange("bootsToughness", 3.0D, 0.0D, 100.0D); NIGHTMARE_ARMOR_KNOCKBACK_RESISTANCE = b.comment("Knockback resistance granted by each Nightmare Armor piece.") .defineInRange("knockbackResistance", 0.1D, 0.0D, 1.0D); - NIGHTMARE_HELMET_DOUBLE_DAMAGE_CHANCE = b.comment("Chance for the Nightmare Helmet to double incoming damage dealt back to attackers.").defineInRange("helmetDoubleDamageChance", 0.04D, 0.0D, 1.0D); - NIGHTMARE_CHESTPLATE_DOUBLE_DAMAGE_CHANCE = b.comment("Chance for the Nightmare Chestplate to double incoming damage dealt back to attackers.").defineInRange("chestplateDoubleDamageChance", 0.06D, 0.0D, 1.0D); - NIGHTMARE_LEGGINGS_DOUBLE_DAMAGE_CHANCE = b.comment("Chance for the Nightmare Leggings to double incoming damage dealt back to attackers.").defineInRange("leggingsDoubleDamageChance", 0.05D, 0.0D, 1.0D); - NIGHTMARE_BOOTS_DOUBLE_DAMAGE_CHANCE = b.comment("Chance for the Nightmare Boots to double incoming damage dealt back to attackers.").defineInRange("bootsDoubleDamageChance", 0.03D, 0.0D, 1.0D); + NIGHTMARE_HELMET_DOUBLE_DAMAGE_CHANCE = b.comment("Chance for the Nightmare Helmet to double an incoming hit's damage.") .defineInRange("helmetDoubleDamageChance", 0.04D, 0.0D, 1.0D); + NIGHTMARE_CHESTPLATE_DOUBLE_DAMAGE_CHANCE = b.comment("Chance for the Nightmare Chestplate to double an incoming hit's damage.") .defineInRange("chestplateDoubleDamageChance", 0.06D, 0.0D, 1.0D); + NIGHTMARE_LEGGINGS_DOUBLE_DAMAGE_CHANCE = b.comment("Chance for the Nightmare Leggings to double an incoming hit's damage.") .defineInRange("leggingsDoubleDamageChance", 0.05D, 0.0D, 1.0D); + NIGHTMARE_BOOTS_DOUBLE_DAMAGE_CHANCE = b.comment("Chance for the Nightmare Boots to double an incoming hit's damage.") .defineInRange("bootsDoubleDamageChance", 0.03D, 0.0D, 1.0D); PRIMORDIAL_ARMOR_KNOCKBACK_PER_PIECE = b.comment("Attack knockback added by each Primordial Armor piece.") .defineInRange("primordialArmorKnockbackPerPiece", 0.5D, 0.0D, 16.0D); b.pop(); @@ -379,9 +445,6 @@ public final class AntarchyToolsConfig { FALLEN_KING_CROWN_ARMOR_TOUGHNESS = b.comment("Armor toughness of the Fallen King's Crown. Default: 0.0 (gold helmet).").defineInRange("armorToughness", 0.0D, 0.0D, 100.0D); b.pop(); - - // Blood Crystal Armor - b.push("bloodCrystalArmor"); BLOOD_CRYSTAL_ARMOR_SHIELD_RECHARGE_TICKS = b.comment("Ticks (20/s) for each armor Bloodglass Shield to recharge after shattering. Default: 600 (30s).").defineInRange("armorShieldRechargeTicks", 600, 1, 72000); BLOOD_CRYSTAL_APPLE_SHIELD_COUNT = b.comment("Number of Bloodglass Shields granted by a Blood Crystal Apple (Bloodglass Ward level). Default: 2.").defineInRange("appleShieldCount", 2, 1, 8); @@ -393,15 +456,12 @@ public final class AntarchyToolsConfig { BLOOD_CRYSTAL_LEGGINGS_DEFENSE = b.comment("Armor defense value for Blood Crystal Leggings. Default: 5 (iron).").defineInRange("leggingsDefense", 5, 0, 30); BLOOD_CRYSTAL_BOOTS_DEFENSE = b.comment("Armor defense value for Blood Crystal Boots. Default: 2 (iron).").defineInRange("bootsDefense", 2, 0, 30); BLOOD_CRYSTAL_ARMOR_TOUGHNESS = b.comment("Armor toughness for all Blood Crystal armor pieces. Default: 0.0 (iron).").defineInRange("armorToughness", 0.0, 0.0, 20.0); - BLOOD_CRYSTAL_HELMET_DURABILITY = b.comment("Max durability of Blood Crystal Helmet. Default: 77 (gold).").defineInRange("helmetDurability", 77, 1, 2000); - BLOOD_CRYSTAL_CHESTPLATE_DURABILITY = b.comment("Max durability of Blood Crystal Chestplate. Default: 112 (gold).").defineInRange("chestplateDurability", 112, 1, 2000); - BLOOD_CRYSTAL_LEGGINGS_DURABILITY = b.comment("Max durability of Blood Crystal Leggings. Default: 105 (gold).").defineInRange("leggingsDurability", 105, 1, 2000); - BLOOD_CRYSTAL_BOOTS_DURABILITY = b.comment("Max durability of Blood Crystal Boots. Default: 91 (gold).").defineInRange("bootsDurability", 91, 1, 2000); + BLOOD_CRYSTAL_HELMET_DURABILITY = b.comment("Max durability of Blood Crystal Helmet. Default: 92.").defineInRange("helmetDurability", 92, 1, 2000); + BLOOD_CRYSTAL_CHESTPLATE_DURABILITY = b.comment("Max durability of Blood Crystal Chestplate. Default: 134.").defineInRange("chestplateDurability", 134, 1, 2000); + BLOOD_CRYSTAL_LEGGINGS_DURABILITY = b.comment("Max durability of Blood Crystal Leggings. Default: 126.").defineInRange("leggingsDurability", 126, 1, 2000); + BLOOD_CRYSTAL_BOOTS_DURABILITY = b.comment("Max durability of Blood Crystal Boots. Default: 109.").defineInRange("bootsDurability", 109, 1, 2000); b.pop(); - - // Squidzooka - b.push("squidzooka"); SQUIDZOOKA_COOLDOWN_SECONDS = b.comment("Cooldown in seconds after firing. Set to 0 to disable.").defineInRange("cooldownSeconds", 1.0D, 0.0D, 3600.0D); SQUIDZOOKA_LAUNCH_VELOCITY = b.comment("Initial launch velocity applied to the Missile Squid.") .defineInRange("launchVelocity", 2.1D, 0.1D, 20.0D); @@ -414,9 +474,6 @@ public final class AntarchyToolsConfig { RPO_LAUNCHER_EXPLOSION_RADIUS = b.comment("Radius in blocks of the ink explosion.") .defineInRange("explosionRadius", 4.0D, 0.5D, 32.0D); b.pop(); - - // Size Rays - b.push("sizeRays"); SIZE_CHANGING_RAYS_ENABLED = b .comment( @@ -432,21 +489,6 @@ public final class AntarchyToolsConfig { GROWTH_POTION_DELTA = b.comment("Scale delta per level of Growth Potion. Level II applies double this value.") .defineInRange("growthPotionDelta", 0.5D, 0.001D, 64.0D); b.pop(); - - // Gravity - - b.push("gravity"); - INVERT_PROJECTILES_FROM_INVERTED_PLAYERS = b - .comment( - "If true, projectiles fired by inverted players keep their inverted launch and gravity.", - "Affects bows, crossbows, throwables, and firework boosts." - ) - .define("invertProjectilesFromInvertedPlayers", false); - b.pop(); - - - // Gravity Gun - b.push("gravityGun"); GRAVITY_GUN_ENABLED = b.comment("Master toggle for the Gravity Gun.") .define("enabled", true); GRAVITY_GUN_BLOCKS_ENABLED = b.comment("If false, the Gravity Gun cannot grab blocks.") .define("blocksEnabled", true); @@ -458,18 +500,28 @@ public final class AntarchyToolsConfig { GRAVITY_GUN_MAX_HOLD_DISTANCE = b.comment("Maximum distance a held target can be pushed from the player, in blocks.") .defineInRange("maxHoldDistance", 10.0D, 1.5D, 64.0D); b.pop(); - - // Critter Cage + b.push("eyeOfTheStorm"); + EYE_OF_THE_STORM_ENABLED = b.define("enabled", true); + EYE_OF_THE_STORM_UPDRAFT_COOLDOWN_TICKS = b.defineInRange("updraftCooldownTicks", 40, 0, 20000); + EYE_OF_THE_STORM_UPDRAFT_LAUNCH_STRENGTH = b.defineInRange("updraftLaunchStrength", 1.15D, 0.0D, 16.0D); + EYE_OF_THE_STORM_UPDRAFT_HEIGHT = b.defineInRange("updraftHeight", 4.0D, 0.0D, 128.0D); + EYE_OF_THE_STORM_UPDRAFT_RADIUS = b.defineInRange("updraftRadius", 1.3D, 0.0D, 64.0D); + EYE_OF_THE_STORM_UPDRAFT_DURATION_TICKS = b.defineInRange("updraftDurationTicks", 32, 0, 20000); + EYE_OF_THE_STORM_SURGE_COOLDOWN_TICKS = b.defineInRange("surgeCooldownTicks", 70, 0, 20000); + EYE_OF_THE_STORM_SURGE_RANGE = b.defineInRange("surgeRange", 16.0D, 0.0D, 256.0D); + EYE_OF_THE_STORM_SURGE_DURATION_TICKS = b.defineInRange("surgeDurationTicks", 300, 0, 20000); + EYE_OF_THE_STORM_SURGE_RADIUS = b.defineInRange("surgeRadius", 4.0D, 0.0D, 128.0D); + EYE_OF_THE_STORM_SURGE_HEIGHT = b.defineInRange("surgeHeight", 6.0D, 0.0D, 128.0D); + EYE_OF_THE_STORM_SURGE_PULL_STRENGTH = b.defineInRange("surgePullStrength", 0.85D, 0.0D, 16.0D); + EYE_OF_THE_STORM_SURGE_RETURN_STRENGTH = b.defineInRange("surgeReturnStrength", 1.4D, 0.0D, 16.0D); + EYE_OF_THE_STORM_SURGE_DAMAGE = b.defineInRange("surgeDamage", 5.0F, 0.0F, 1024.0F); + b.pop(); b.push("critterCage"); CRITTER_CAGE_MAX_CAPTURABLE_WIDTH = b.comment("Maximum capturable entity width/depth based on the live hitbox, in blocks.").defineInRange("maxCapturableWidth", 1.65D, 0.1D, 64.0D); CRITTER_CAGE_MAX_CAPTURABLE_HEIGHT = b.comment("Maximum capturable entity height based on the live hitbox, in blocks.").defineInRange("maxCapturableHeight", 1.65D, 0.1D, 64.0D); b.pop(); - - - // Miscellaneous items / consumables - b.push("ductTape"); DUCT_TAPE_REPAIR_PERCENT_PER_USE = b .comment("Fraction of max durability repaired per use. 0.25 = 25% per application.") @@ -497,7 +549,7 @@ public final class AntarchyToolsConfig { b.pop(); b.push("moggles"); - MOGGLES_VISION_RADIUS = b.comment("Radius used by Moggles cave detection.").defineInRange("visionRadius", 20.0D, 1.0D, 128.0D); + MOGGLES_VISION_RADIUS = b.comment("Search radius (in blocks) used by Moggles cave detection.").defineInRange("visionRadius", 20.0D, 1.0D, 128.0D); b.pop(); SPEC = b.build(); @@ -533,6 +585,10 @@ public final class AntarchyToolsConfig { static double ultimateCrossbowChargeSpeedMultiplier() { return ULTIMATE_CROSSBOW_CHARGE_SPEED_MULTIPLIER.get(); } static int ultimateCrossbowEnchantability() { return ULTIMATE_CROSSBOW_ENCHANTABILITY.get(); } + static double ultimateMaceDamageMultiplier() { return ULTIMATE_MACE_DAMAGE_MULTIPLIER.get(); } + static double ultimateMaceAttackSpeed() { return ULTIMATE_MACE_ATTACK_SPEED.get(); } + static int ultimateMaceEnchantability() { return ULTIMATE_MACE_ENCHANTABILITY.get(); } + static boolean ultimateArmorComesEnchanted() { return ULTIMATE_ARMOR_COMES_ENCHANTED.get(); } static int ultimateArmorEnchantability() { return ULTIMATE_ARMOR_ENCHANTABILITY.get(); } static int ultimateHelmetArmorValue() { return ULTIMATE_HELMET_ARMOR_VALUE.get(); } @@ -572,6 +628,7 @@ public final class AntarchyToolsConfig { static int krakensGraspTentacleSlownessAmplifier() { return KRAKENS_GRASP_TENTACLE_SLOWNESS_AMPLIFIER.get(); } static int krakensGraspTentacleSlownessRefreshTicks() { return KRAKENS_GRASP_TENTACLE_SLOWNESS_REFRESH_TICKS.get(); } static double scorpionWhipBaseDamage() { return SCORPION_WHIP_BASE_DAMAGE.get(); } + static double scorpionWhipReachBonus() { return SCORPION_WHIP_REACH_BONUS.get(); } static int scorpionWhipPoisonDurationTicks() { return SCORPION_WHIP_POISON_DURATION_TICKS.get(); } static double scorpionWhipTetherMaxRange() { return SCORPION_WHIP_TETHER_MAX_RANGE.get(); } static double scorpionWhipSnapBonusDamage() { return SCORPION_WHIP_SNAP_BONUS_DAMAGE.get(); } @@ -581,6 +638,9 @@ public final class AntarchyToolsConfig { static int bloodCrystalKatanaAttackDamage() { return BLOOD_CRYSTAL_KATANA_ATTACK_DAMAGE.get(); } static double bloodCrystalKatanaLaunchStrength() { return BLOOD_CRYSTAL_KATANA_LAUNCH_STRENGTH.get(); } static int bloodCrystalKatanaTrailDurationTicks() { return BLOOD_CRYSTAL_KATANA_TRAIL_DURATION_TICKS.get(); } + static double bloodCrystalKatanaReachBonus() { return BLOOD_CRYSTAL_KATANA_REACH_BONUS.get(); } + static int bloodCrystalKatanaInvulnTicks() { return BLOOD_CRYSTAL_KATANA_INVULN_TICKS.get(); } + static int bloodCrystalKatanaDashCooldownTicks() { return BLOOD_CRYSTAL_KATANA_DASH_COOLDOWN_TICKS.get(); } static int nightmareHelmetArmorValue() { return NIGHTMARE_HELMET_ARMOR_VALUE.get(); } static int nightmareChestplateArmorValue() { return NIGHTMARE_CHESTPLATE_ARMOR_VALUE.get(); } @@ -633,8 +693,6 @@ public final class AntarchyToolsConfig { static double shrinkingPotionDelta() { return SHRINKING_POTION_DELTA.get(); } static double growthPotionDelta() { return GROWTH_POTION_DELTA.get(); } - static boolean invertProjectilesFromInvertedPlayers() { return INVERT_PROJECTILES_FROM_INVERTED_PLAYERS.get(); } - static boolean gravityGunEnabled() { return GRAVITY_GUN_ENABLED.get(); } static boolean gravityGunBlocksEnabled() { return GRAVITY_GUN_BLOCKS_ENABLED.get(); } static boolean gravityGunEntitiesEnabled() { return GRAVITY_GUN_ENTITIES_ENABLED.get(); } @@ -647,7 +705,6 @@ public final class AntarchyToolsConfig { static double critterCageMaxCapturableWidth() { return CRITTER_CAGE_MAX_CAPTURABLE_WIDTH.get(); } static double critterCageMaxCapturableHeight() { return CRITTER_CAGE_MAX_CAPTURABLE_HEIGHT.get(); } - static double ductTapeRepairPercentPerUse() { return DUCT_TAPE_REPAIR_PERCENT_PER_USE.get(); } static double potentNyxiteInvertedDurationSeconds() { return POTENT_NYXITE_INVERTED_DURATION_SECONDS.get(); } static int corneaEarNightVisionSeconds() { return CORNEA_EAR_NIGHT_VISION_SECONDS.get(); } @@ -658,5 +715,79 @@ public final class AntarchyToolsConfig { static int americanRegenerationAmplifier() { return AMERICAN_REGENERATION_AMPLIFIER.get(); } static double mogglesVisionRadius() { return MOGGLES_VISION_RADIUS.get(); } + static boolean eyeOfTheStormEnabled() { return EYE_OF_THE_STORM_ENABLED.get(); } + static int eyeOfTheStormUpdraftCooldownTicks() { return EYE_OF_THE_STORM_UPDRAFT_COOLDOWN_TICKS.get(); } + static double eyeOfTheStormUpdraftLaunchStrength() { return EYE_OF_THE_STORM_UPDRAFT_LAUNCH_STRENGTH.get(); } + static double eyeOfTheStormUpdraftHeight() { return EYE_OF_THE_STORM_UPDRAFT_HEIGHT.get(); } + static double eyeOfTheStormUpdraftRadius() { return EYE_OF_THE_STORM_UPDRAFT_RADIUS.get(); } + static int eyeOfTheStormUpdraftDurationTicks() { return EYE_OF_THE_STORM_UPDRAFT_DURATION_TICKS.get(); } + static int eyeOfTheStormSurgeCooldownTicks() { return EYE_OF_THE_STORM_SURGE_COOLDOWN_TICKS.get(); } + static double eyeOfTheStormSurgeRange() { return EYE_OF_THE_STORM_SURGE_RANGE.get(); } + static int eyeOfTheStormSurgeDurationTicks() { return EYE_OF_THE_STORM_SURGE_DURATION_TICKS.get(); } + static double eyeOfTheStormSurgeRadius() { return EYE_OF_THE_STORM_SURGE_RADIUS.get(); } + static double eyeOfTheStormSurgeHeight() { return EYE_OF_THE_STORM_SURGE_HEIGHT.get(); } + static double eyeOfTheStormSurgePullStrength() { return EYE_OF_THE_STORM_SURGE_PULL_STRENGTH.get(); } + static double eyeOfTheStormSurgeReturnStrength() { return EYE_OF_THE_STORM_SURGE_RETURN_STRENGTH.get(); } + static float eyeOfTheStormSurgeDamage() { return EYE_OF_THE_STORM_SURGE_DAMAGE.get().floatValue(); } + + static boolean royalArmorComesEnchanted() { return ROYAL_ARMOR_COMES_ENCHANTED.get(); } + static int royalArmorProtectionLevel() { return ROYAL_ARMOR_PROTECTION_LEVEL.get(); } + static int royalArmorEnchantability() { return ROYAL_ARMOR_ENCHANTABILITY.get(); } + static int royalArmorDurabilityMultiplier() { return ROYAL_ARMOR_DURABILITY_MULTIPLIER.get(); } + static int royalGuardianHelmetArmorValue() { return ROYAL_GUARDIAN_HELMET_ARMOR_VALUE.get(); } + static int royalGuardianChestplateArmorValue() { return ROYAL_GUARDIAN_CHESTPLATE_ARMOR_VALUE.get(); } + static int royalGuardianLeggingsArmorValue() { return ROYAL_GUARDIAN_LEGGINGS_ARMOR_VALUE.get(); } + static int royalGuardianBootsArmorValue() { return ROYAL_GUARDIAN_BOOTS_ARMOR_VALUE.get(); } + static double royalGuardianArmorToughness() { return ROYAL_GUARDIAN_ARMOR_TOUGHNESS.get(); } + static double royalGuardianArmorKnockbackResistance() { return ROYAL_GUARDIAN_ARMOR_KNOCKBACK_RESISTANCE.get(); } + static double royalGuardianHelmetJudgmentBonus() { return ROYAL_GUARDIAN_HELMET_JUDGMENT_BONUS.get(); } + static double royalGuardianChestplateJudgmentBonus() { return ROYAL_GUARDIAN_CHESTPLATE_JUDGMENT_BONUS.get(); } + static double royalGuardianLeggingsJudgmentBonus() { return ROYAL_GUARDIAN_LEGGINGS_JUDGMENT_BONUS.get(); } + static double royalGuardianBootsJudgmentBonus() { return ROYAL_GUARDIAN_BOOTS_JUDGMENT_BONUS.get(); } + static int royalGuardianJudgmentDurationTicks() { return ROYAL_GUARDIAN_JUDGMENT_DURATION_TICKS.get(); } + static int royalAssailantHelmetArmorValue() { return ROYAL_ASSAILANT_HELMET_ARMOR_VALUE.get(); } + static int royalAssailantChestplateArmorValue() { return ROYAL_ASSAILANT_CHESTPLATE_ARMOR_VALUE.get(); } + static int royalAssailantLeggingsArmorValue() { return ROYAL_ASSAILANT_LEGGINGS_ARMOR_VALUE.get(); } + static int royalAssailantBootsArmorValue() { return ROYAL_ASSAILANT_BOOTS_ARMOR_VALUE.get(); } + static double royalAssailantArmorToughness() { return ROYAL_ASSAILANT_ARMOR_TOUGHNESS.get(); } + static double royalAssailantArmorKnockbackResistance() { return ROYAL_ASSAILANT_ARMOR_KNOCKBACK_RESISTANCE.get(); } + static double royalAssailantHelmetDoubleDamageChance() { return ROYAL_ASSAILANT_HELMET_DOUBLE_DAMAGE_CHANCE.get(); } + static double royalAssailantChestplateDoubleDamageChance() { return ROYAL_ASSAILANT_CHESTPLATE_DOUBLE_DAMAGE_CHANCE.get(); } + static double royalAssailantLeggingsDoubleDamageChance() { return ROYAL_ASSAILANT_LEGGINGS_DOUBLE_DAMAGE_CHANCE.get(); } + static double royalAssailantBootsDoubleDamageChance() { return ROYAL_ASSAILANT_BOOTS_DOUBLE_DAMAGE_CHANCE.get(); } + static double royalGuardianSwordAttackDamage() { return ROYAL_GUARDIAN_SWORD_ATTACK_DAMAGE.get(); } + static double giantFryingPanAttackDamage() { return GIANT_FRYING_PAN_ATTACK_DAMAGE.get(); } + static int giantFryingPanCookTimeTicks() { return GIANT_FRYING_PAN_COOK_TIME_TICKS.get(); } + static double royalGuardianSwordAttackSpeed() { return ROYAL_GUARDIAN_SWORD_ATTACK_SPEED.get(); } + static int royalGuardianSwordElementalCooldownTicks() { return ROYAL_GUARDIAN_SWORD_ELEMENTAL_COOLDOWN_TICKS.get(); } + static double royalGuardianSwordFirePrimaryDamage() { return ROYAL_GUARDIAN_SWORD_FIRE_PRIMARY_DAMAGE.get(); } + static double royalGuardianSwordFireSplashDamage() { return ROYAL_GUARDIAN_SWORD_FIRE_SPLASH_DAMAGE.get(); } + static double royalGuardianSwordFrostSpikeDamage() { return ROYAL_GUARDIAN_SWORD_FROST_SPIKE_DAMAGE.get(); } + static double royalGuardianSwordStormPrimaryDamage() { return ROYAL_GUARDIAN_SWORD_STORM_PRIMARY_DAMAGE.get(); } + static double royalGuardianSwordStormJumpDamage() { return ROYAL_GUARDIAN_SWORD_STORM_JUMP_DAMAGE.get(); } + static int royalGuardianSwordStormMaxJumps() { return ROYAL_GUARDIAN_SWORD_STORM_MAX_JUMPS.get(); } + static double royalGuardianSwordStormJumpRange() { return ROYAL_GUARDIAN_SWORD_STORM_JUMP_RANGE.get(); } + static double royalAssailantBattleAxeAttackDamage() { return ROYAL_ASSAILANT_BATTLE_AXE_ATTACK_DAMAGE.get(); } + static double royalAssailantBattleAxeAttackSpeed() { return ROYAL_ASSAILANT_BATTLE_AXE_ATTACK_SPEED.get(); } + static double royalWeaponAttackReachBonus() { return ROYAL_WEAPON_ATTACK_REACH_BONUS.get(); } + static double royalWeaponAttackKnockbackBonus() { return ROYAL_WEAPON_ATTACK_KNOCKBACK_BONUS.get(); } + static int royalWeaponDurability() { return ROYAL_WEAPON_DURABILITY.get(); } + static int royalWeaponEnchantability() { return ROYAL_WEAPON_ENCHANTABILITY.get(); } + static int royalGuardianShieldDurability() { return ROYAL_GUARDIAN_SHIELD_DURABILITY.get(); } + static double royalGuardianMusterRange() { return ROYAL_GUARDIAN_MUSTER_RANGE.get(); } + static int royalGuardianMusterDurationTicks() { return ROYAL_GUARDIAN_MUSTER_DURATION_TICKS.get(); } + static int royalGuardianMusterCooldownTicks() { return ROYAL_GUARDIAN_MUSTER_COOLDOWN_TICKS.get(); } + static int royalGuardianMusterMobCap() { return ROYAL_GUARDIAN_MUSTER_MOB_CAP.get(); } + static double royalGuardianMusterDamageReduction() { return ROYAL_GUARDIAN_MUSTER_DAMAGE_REDUCTION.get(); } + static double royalGuardianMusterAttackBonus() { return ROYAL_GUARDIAN_MUSTER_ATTACK_BONUS.get(); } + static double royalGuardianMusterSpeedBonus() { return ROYAL_GUARDIAN_MUSTER_SPEED_BONUS.get(); } + static double royalGuardianMusterPassiveDamageFloor() { return ROYAL_GUARDIAN_MUSTER_PASSIVE_DAMAGE_FLOOR.get(); } + static double royalGuardianBoundaryRadius() { return ROYAL_GUARDIAN_BOUNDARY_RADIUS.get(); } + static int royalGuardianBoundaryDurationTicks() { return ROYAL_GUARDIAN_BOUNDARY_DURATION_TICKS.get(); } + static int royalGuardianBoundaryCooldownTicks() { return ROYAL_GUARDIAN_BOUNDARY_COOLDOWN_TICKS.get(); } + static int royalGuardianBoundaryStrengthAmplifier() { return ROYAL_GUARDIAN_BOUNDARY_STRENGTH_AMPLIFIER.get(); } + static int royalGuardianBoundaryArrestTicks() { return ROYAL_GUARDIAN_BOUNDARY_ARREST_TICKS.get(); } + static int royalGuardianBoundaryDropTicks() { return ROYAL_GUARDIAN_BOUNDARY_DROP_TICKS.get(); } + static int royalGuardianBoundaryProjectileCap() { return ROYAL_GUARDIAN_BOUNDARY_PROJECTILE_CAP.get(); } } diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyWoodTypes.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyWoodTypes.java index 877ae1b6..304ac435 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyWoodTypes.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyWoodTypes.java @@ -8,6 +8,8 @@ public final class AntarchyWoodTypes { public static final WoodType OURANWOOD = register("ouranwood"); public static final WoodType PEACH = register("peach"); public static final WoodType NADIR = register("nadir"); + public static final WoodType ROYAL = register("royal"); + public static final WoodType TRUFFALO = register("truffalo"); private AntarchyWoodTypes() { } diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/ForgeInfinityCompat.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/ForgeInfinityCompat.java index aedfdf99..5b8a9aec 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/ForgeInfinityCompat.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/ForgeInfinityCompat.java @@ -2,6 +2,7 @@ package com.craisinlord.antarchy.forge; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.compat.infinity.InfinityCompatBridge; +import com.craisinlord.antarchy.compat.infinity.InfinityWarpResult; import net.lerariemann.infinity.InfinityMod; import net.lerariemann.infinity.util.InfinityMethods; import net.lerariemann.infinity.util.teleport.PortalCreator; @@ -10,6 +11,12 @@ import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.MinecraftServer; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.level.Level; +import net.lerariemann.infinity.access.MinecraftServerAccess; +import net.lerariemann.infinity.access.ServerPlayerEntityAccess; import net.minecraft.util.RandomSource; import java.util.ArrayList; @@ -69,13 +76,71 @@ public final class ForgeInfinityCompat implements InfinityCompatBridge { } @Override - public boolean requestWarp(ServerPlayer player, ResourceLocation dimensionId) { + public InfinityWarpResult requestWarp(ServerPlayer player, ResourceLocation dimensionId) { try { - WarpLogic.requestWarp(player, dimensionId, false); - return true; + requestWarpCountingQueuedAsNew(player, dimensionId); + return InfinityWarpResult.PENDING; } catch (Throwable throwable) { Antarchy.LOGGER.error("[Antarchy] Failed to request an Infinity warp to {}", dimensionId, throwable); - return false; + return InfinityGenerationFailure.consume(dimensionId) + ? InfinityWarpResult.FAILED_GENERATION + : InfinityWarpResult.REJECTED; + } + } + + private static void requestWarpCountingQueuedAsNew(ServerPlayer player, ResourceLocation dimensionId) { + if (player == null) { + return; + } + MinecraftServer server = player.getServer(); + if (server == null) { + return; + } + if (((MinecraftServerAccess) server).infinity$needsInvocation()) { + PortalCreator.onInvocationNeedDetected(player); + return; + } + if (queuedDimensionCountsAsNew(server, dimensionId)) { + ((ServerPlayerEntityAccess) player).infinity$setWarpTimer(2L, dimensionId); + } else { + WarpLogic.performWarp(player, dimensionId); + } + } + + private static boolean queuedDimensionCountsAsNew(MinecraftServer server, ResourceLocation dimensionId) { + ResourceKey key = ResourceKey.create(Registries.DIMENSION, dimensionId); + if (server instanceof MinecraftServerAccess access && access.infinity$hasToAdd(key)) { + return true; + } + try { + return PortalCreator.tryAddInfinityDimension(server, dimensionId); + } catch (Throwable throwable) { + InfinityGenerationFailure.mark(dimensionId); + throw throwable; + } + } + + @Override + public InfinityWarpResult requestDimensionCreation(MinecraftServer server, ResourceLocation dimensionId) { + if (!isAvailable() || server == null || dimensionId == null || !"infinity".equals(dimensionId.getNamespace())) { + return InfinityWarpResult.REJECTED; + } + ResourceKey key = ResourceKey.create(Registries.DIMENSION, dimensionId); + if (server.getLevel(key) != null) { + return InfinityWarpResult.READY; + } + if (!(server instanceof MinecraftServerAccess access)) { + return InfinityWarpResult.REJECTED; + } + try { + if (access.infinity$hasToAdd(key)) { + return InfinityWarpResult.PENDING; + } + return PortalCreator.tryAddInfinityDimension(server, dimensionId) + ? InfinityWarpResult.PENDING : InfinityWarpResult.REJECTED; + } catch (Throwable throwable) { + Antarchy.LOGGER.error("[Antarchy] Failed to request creation of Infinity dimension {}", dimensionId, throwable); + return InfinityWarpResult.FAILED_GENERATION; } } diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/InfinityGenerationFailure.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/InfinityGenerationFailure.java new file mode 100644 index 00000000..063abd14 --- /dev/null +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/InfinityGenerationFailure.java @@ -0,0 +1,20 @@ +package com.craisinlord.antarchy.forge; + +import net.minecraft.resources.ResourceLocation; + +public final class InfinityGenerationFailure { + private static final ThreadLocal FAILURE = new ThreadLocal<>(); + + private InfinityGenerationFailure() { + } + + public static void mark(ResourceLocation dimensionId) { + FAILURE.set(dimensionId); + } + + public static boolean consume(ResourceLocation dimensionId) { + ResourceLocation failed = FAILURE.get(); + FAILURE.remove(); + return dimensionId.equals(failed); + } +} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/AntarchyForgeClient.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/AntarchyForgeClient.java index 80367415..8ef7f6f2 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/AntarchyForgeClient.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/AntarchyForgeClient.java @@ -1,16 +1,12 @@ package com.craisinlord.antarchy.forge.client; -import net.minecraftforge.fml.common.Mod; - import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.client.GlimmeringHudRenderer; import com.craisinlord.antarchy.content.client.GoopedHudRenderer; import com.craisinlord.antarchy.content.client.HordeHudRenderer; +import com.craisinlord.antarchy.content.client.TigerEyeClientHooks; import com.craisinlord.antarchy.content.client.hud.BloodglassHudRenderer; import com.craisinlord.antarchy.content.client.particle.*; import com.craisinlord.antarchy.content.client.renderer.*; -import com.craisinlord.antarchy.content.client.renderer.CreepingHorrorRenderer; -import com.craisinlord.antarchy.content.client.renderer.LurkingTerrorRenderer; import com.craisinlord.antarchy.forge.AntarchyForgeFluidTypes; import com.craisinlord.antarchy.forge.registry.AntarchyForgeBlocks; import com.craisinlord.antarchy.forge.registry.AntarchyForgeEntites; @@ -27,6 +23,7 @@ import net.minecraft.client.model.HumanoidModel; import net.minecraft.client.Minecraft; import net.minecraft.client.player.AbstractClientPlayer; import net.minecraft.client.renderer.entity.ThrownItemRenderer; +import com.craisinlord.antarchy.content.client.renderer.UnderVaultRenderer; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; @@ -38,7 +35,6 @@ import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; import net.minecraft.client.renderer.ItemBlockRenderTypes; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.blockentity.CampfireRenderer; -import net.minecraft.client.renderer.entity.ArmorStandRenderer; import net.minecraft.client.renderer.entity.LivingEntityRenderer; import net.minecraft.client.renderer.item.ItemProperties; import net.minecraft.resources.ResourceLocation; @@ -52,18 +48,21 @@ import net.minecraft.world.level.FoliageColor; import net.minecraft.world.level.material.FluidState; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.client.event.RegisterParticleProvidersEvent; import net.minecraftforge.client.event.RegisterColorHandlersEvent; import net.minecraftforge.client.event.EntityRenderersEvent; +import net.minecraftforge.client.event.RegisterClientReloadListenersEvent; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.client.event.RegisterGuiOverlaysEvent; import net.minecraftforge.client.gui.overlay.VanillaGuiOverlay; import net.minecraftforge.client.extensions.common.IClientItemExtensions; +import net.minecraftforge.client.extensions.common.IClientFluidTypeExtensions; import net.minecraftforge.client.model.DynamicFluidContainerModel; +import net.minecraftforge.common.MinecraftForge; import org.joml.Vector3f; import software.bernie.geckolib.core.animatable.GeoAnimatable; -import com.craisinlord.antarchy.content.client.AntarchyGeoItem; -import com.craisinlord.antarchy.content.client.AntarchyGeoItemRenderer; @Mod.EventBusSubscriber(modid = Antarchy.MODID, bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT) public final class AntarchyForgeClient { @@ -74,17 +73,36 @@ public final class AntarchyForgeClient { private static final ResourceLocation PEACH_CHEST_BOAT_TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/entity/chest_boat/peach.png"); private static final ResourceLocation NADIR_BOAT_TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/entity/boat/nadir.png"); private static final ResourceLocation NADIR_CHEST_BOAT_TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/entity/chest_boat/nadir.png"); - private static final ResourceLocation WATER_STILL = ResourceLocation.withDefaultNamespace("block/water_still"); - private static final ResourceLocation WATER_FLOW = ResourceLocation.withDefaultNamespace("block/water_flow"); - private static final ResourceLocation WATER_OVERLAY = ResourceLocation.withDefaultNamespace("block/water_overlay"); - private static final ResourceLocation UNDERWATER_OVERLAY = ResourceLocation.withDefaultNamespace("textures/misc/underwater.png"); + private static final ResourceLocation ROYAL_BOAT_TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/entity/boat/royal.png"); + private static final ResourceLocation ROYAL_CHEST_BOAT_TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/entity/chest_boat/royal.png"); + private static final ResourceLocation TRUFFALO_BOAT_TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/entity/boat/truffalo.png"); + private static final ResourceLocation TRUFFALO_CHEST_BOAT_TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/entity/chest_boat/truffalo.png"); + private static final ResourceLocation WATER_STILL = new ResourceLocation("block/water_still"); + private static final ResourceLocation WATER_FLOW = new ResourceLocation("block/water_flow"); + private static final ResourceLocation WATER_OVERLAY = new ResourceLocation("block/water_overlay"); + private static final ResourceLocation UNDERWATER_OVERLAY = new ResourceLocation("textures/misc/underwater.png"); private static final ResourceLocation ANTIWATER_STILL = new ResourceLocation(Antarchy.MODID, "block/antiwater_still"); private static final ResourceLocation ANTIWATER_FLOW = new ResourceLocation(Antarchy.MODID, "block/antiwater_flow"); private static final ResourceLocation BILE_STILL = new ResourceLocation(Antarchy.MODID, "block/bile/bile_still"); private static final ResourceLocation BILE_FLOW = new ResourceLocation(Antarchy.MODID, "block/bile/bile_flowing"); + private static final ResourceLocation ICHOR_STILL = new ResourceLocation(Antarchy.MODID, "block/ichor/ichor_still"); + private static final ResourceLocation ICHOR_FLOW = new ResourceLocation(Antarchy.MODID, "block/ichor/ichor_flowing"); private AntarchyForgeClient() { } + @SubscribeEvent + public static void clientSetup(FMLClientSetupEvent event) { + Antarchy.physicalClient = true; + com.craisinlord.antarchy.content.AntarchyAnthologyHooks.registerClient(); + event.enqueueWork(() -> { + com.craisinlord.antarchy.content.client.AntarchyArchivePreviews.register(); + com.craisinlord.antarchy.content.client.game.AntarchyComputerGames.register(); + net.minecraft.client.gui.screens.MenuScreens.register(AntarchyForgeMisc.DORRIE_INVENTORY_MENU.get(), com.craisinlord.antarchy.content.client.screen.DorrieInventoryScreen::new); + net.minecraft.client.gui.screens.MenuScreens.register(AntarchyForgeMisc.ROYAL_JUDGMENT_MENU.get(), com.craisinlord.antarchy.content.client.screen.RoyalJudgmentScreen::new); + net.minecraft.client.gui.screens.MenuScreens.register(AntarchyForgeMisc.GIANT_FRYING_PAN_MENU.get(), com.craisinlord.antarchy.content.client.screen.GiantFryingPanScreen::new); + }); + } + @SubscribeEvent public static void registerRenderers(EntityRenderersEvent.RegisterRenderers event) { event.registerBlockEntityRenderer(AntarchyForgeBlocks.DREAM_CAMPFIRE_BLOCK_ENTITY.get(), CampfireRenderer::new); @@ -103,22 +121,28 @@ public final class AntarchyForgeClient { event.registerEntityRenderer(AntarchyForgeEntites.BROWN_ANT.get(), context -> withParalyzedGeoLayer(new AntRenderer(context))); event.registerEntityRenderer(AntarchyForgeEntites.RAINBOW_ANT.get(), context -> withParalyzedGeoLayer(new AntRenderer(context))); event.registerEntityRenderer(AntarchyForgeEntites.MOLEWORM.get(), context -> withParalyzedGeoLayer(new MolewormRenderer(context))); + event.registerEntityRenderer(AntarchyForgeEntites.WORM.get(), context -> withParalyzedGeoLayer(new WormRenderer(context))); event.registerEntityRenderer(AntarchyForgeEntites.MANTIS.get(), context -> withParalyzedGeoLayer(new MantisRenderer(context))); event.registerEntityRenderer(AntarchyForgeEntites.ALPHA_MANTIS.get(), context -> withParalyzedGeoLayer(new AlphaMantisRenderer(context))); + event.registerEntityRenderer(AntarchyForgeEntites.HOVERBOARD.get(), com.craisinlord.antarchy.content.client.renderer.HoverboardRenderer::new); event.registerEntityRenderer(AntarchyForgeEntites.MOLEVORE.get(), context -> withParalyzedGeoLayer(new MolevoreRenderer(context))); - event.registerEntityRenderer(AntarchyForgeEntites.TRIFFID.get(), context -> withParalyzedGeoLayer(new TriffidRenderer(context))); + event.registerEntityRenderer(AntarchyForgeEntites.FLYTRAP.get(), context -> withParalyzedGeoLayer(new FlytrapRenderer(context))); event.registerEntityRenderer(AntarchyForgeEntites.OURANWOOD_BOAT_ENTITY.get(), context -> new OuranwoodBoatRenderer<>(context, OURANWOOD_BOAT_TEXTURE, false)); event.registerEntityRenderer(AntarchyForgeEntites.OURANWOOD_CHEST_BOAT_ENTITY.get(), context -> new OuranwoodBoatRenderer<>(context, OURANWOOD_CHEST_BOAT_TEXTURE, true)); event.registerEntityRenderer(AntarchyForgeEntites.PEACH_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, PEACH_BOAT_TEXTURE, false)); event.registerEntityRenderer(AntarchyForgeEntites.PEACH_CHEST_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, PEACH_CHEST_BOAT_TEXTURE, true)); event.registerEntityRenderer(AntarchyForgeEntites.NADIR_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, NADIR_BOAT_TEXTURE, false)); event.registerEntityRenderer(AntarchyForgeEntites.NADIR_CHEST_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, NADIR_CHEST_BOAT_TEXTURE, true)); + event.registerEntityRenderer(AntarchyForgeEntites.ROYAL_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, ROYAL_BOAT_TEXTURE, false)); + event.registerEntityRenderer(AntarchyForgeEntites.ROYAL_CHEST_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, ROYAL_CHEST_BOAT_TEXTURE, true)); + event.registerEntityRenderer(AntarchyForgeEntites.TRUFFALO_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, TRUFFALO_BOAT_TEXTURE, false)); + event.registerEntityRenderer(AntarchyForgeEntites.TRUFFALO_CHEST_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, TRUFFALO_CHEST_BOAT_TEXTURE, true)); event.registerEntityRenderer(AntarchyForgeEntites.APPLE_COW.get(), context -> withParalyzedGeoLayer(new AppleCowRenderer(context))); event.registerEntityRenderer(AntarchyForgeEntites.GOLDEN_APPLE_COW.get(), context -> withParalyzedGeoLayer(new AppleCowRenderer(context))); event.registerEntityRenderer(AntarchyForgeEntites.ENCHANTED_GOLDEN_APPLE_COW.get(), context -> withParalyzedGeoLayer(new AppleCowRenderer(context))); event.registerEntityRenderer(AntarchyForgeEntites.DIAMOND_MINECART.get(), DiamondMinecartRenderer::new); event.registerEntityRenderer(AntarchyForgeEntites.DR_TRAYAURUS.get(), context -> new DrTrayaurusRenderer(context, DR_TRAYAURUS_TEXTURE)); - event.registerEntityRenderer(AntarchyForgeEntites.CLOUD_SHARK.get(), context -> withParalyzedGeoLayer(new CloudSharkRenderer(context))); + event.registerEntityRenderer(AntarchyForgeEntites.STRATOSHARK.get(), context -> withParalyzedGeoLayer(new StratosharkRenderer(context))); event.registerEntityRenderer(AntarchyForgeEntites.KRAKEN.get(), context -> withParalyzedGeoLayer(new KrakenRenderer(context))); event.registerEntityRenderer(AntarchyForgeEntites.TENTACLE.get(), com.craisinlord.antarchy.content.client.renderer.TentacleRenderer::new); event.registerEntityRenderer(AntarchyForgeEntites.KRAKENS_GRASP_TRIDENT.get(), com.craisinlord.antarchy.content.client.renderer.KrakensGraspThrownTridentRenderer::new); @@ -126,11 +150,12 @@ public final class AntarchyForgeClient { event.registerEntityRenderer(AntarchyForgeEntites.OCTOPUS_BOMB.get(), context -> withParalyzedGeoLayer(new OctopusBombRenderer(context))); event.registerEntityRenderer(AntarchyForgeEntites.NIGHTMARE.get(), context -> withParalyzedGeoLayer(new NightmareRenderer(context))); event.registerEntityRenderer(AntarchyForgeEntites.NIGHTMARE_PORTAL.get(), NightmarePortalRenderer::new); - event.registerEntityRenderer(AntarchyForgeEntites.NIGHTMARE_BITE.get(), NightmareBiteRenderer::new); event.registerEntityRenderer(AntarchyForgeEntites.DIMENSIONAL_TEAR.get(), DimensionalTearRenderer::new); - event.registerEntityRenderer(AntarchyForgeEntites.TIME_DILATION_FIELD.get(), TimeDilationFieldRenderer::new); - event.registerEntityRenderer(AntarchyForgeEntites.ROYAL_ASSAILANT_BLACK_HOLE.get(), com.craisinlord.antarchy.content.client.renderer.RoyalAssailantBlackHoleRenderer::new); + event.registerEntityRenderer(AntarchyForgeEntites.PORTAL_GUN_PORTAL.get(), PortalGunPortalRenderer::new); + event.registerEntityRenderer(AntarchyForgeEntites.PORTAL_GUN_PROJECTILE.get(), com.craisinlord.antarchy.content.client.renderer.PortalGunProjectileRenderer::new); + event.registerEntityRenderer(AntarchyForgeEntites.NIGHTMARE_BITE.get(), NightmareBiteRenderer::new); event.registerEntityRenderer(AntarchyForgeEntites.LUCID.get(), context -> withParalyzedGeoLayer(new LucidRenderer(context))); + event.registerEntityRenderer(AntarchyForgeEntites.VORTEX.get(), context -> withParalyzedGeoLayer(new VortexRenderer(context))); event.registerEntityRenderer(AntarchyForgeEntites.BED_BUG.get(), context -> withParalyzedGeoLayer(new BedBugRenderer(context))); event.registerEntityRenderer(AntarchyForgeEntites.WASP.get(), context -> withParalyzedGeoLayer(new WaspRenderer(context))); event.registerEntityRenderer(AntarchyForgeEntites.BOMBER.get(), context -> withParalyzedGeoLayer(new BomberRenderer(context))); @@ -139,26 +164,39 @@ public final class AntarchyForgeClient { event.registerEntityRenderer(AntarchyForgeEntites.GROWTH_RAY_PROJECTILE.get(), SizeRayProjectileRenderer::new); event.registerEntityRenderer(AntarchyForgeEntites.LUCID_BOLT.get(), LucidBoltRenderer::new); event.registerEntityRenderer(AntarchyForgeEntites.LUCID_PEARL_PROJECTILE.get(), ThrownItemRenderer::new); + event.registerEntityRenderer(AntarchyForgeEntites.VORTEX_CHARGE_PROJECTILE.get(), ThrownItemRenderer::new); + event.registerEntityRenderer(AntarchyForgeEntites.WIND_VORTEX.get(), WindVortexRenderer::new); + event.registerEntityRenderer(AntarchyForgeEntites.ROYAL_BLACK_HOLE.get(), com.craisinlord.antarchy.content.client.renderer.RoyalBlackHoleRenderer::new); + event.registerEntityRenderer(AntarchyForgeEntites.ROYAL_ASSAILANT_BLACK_HOLE.get(), com.craisinlord.antarchy.content.client.renderer.RoyalAssailantBlackHoleRenderer::new); event.registerEntityRenderer(AntarchyForgeEntites.CRITTER_CAGE_PROJECTILE.get(), ThrownItemRenderer::new); + event.registerEntityRenderer(AntarchyForgeEntites.WORM_HOOK_PROJECTILE.get(), ThrownItemRenderer::new); event.registerEntityRenderer(AntarchyForgeEntites.HUSH_PROJECTILE.get(), HushProjectileRenderer::new); event.registerEntityRenderer(AntarchyForgeEntites.BRUTALFLY_ORB.get(), BrutalflyOrbRenderer::new); event.registerEntityRenderer(AntarchyForgeEntites.UPWARD_FALLING_BLOCK.get(), com.craisinlord.antarchy.content.client.renderer.UpwardFallingBlockRenderer::new); event.registerEntityRenderer(AntarchyForgeEntites.SCORPION.get(), context -> withParalyzedGeoLayer(new ScorpionRenderer(context))); event.registerEntityRenderer(AntarchyForgeEntites.EMPEROR_SCORPION.get(), context -> withParalyzedGeoLayer(new EmperorScorpionRenderer(context))); - event.registerEntityRenderer(AntarchyForgeEntites.TORETERROR.get(), ToreterrorRenderer::new); + event.registerEntityRenderer(AntarchyForgeEntites.TORETERROR.get(), context -> withParalyzedGeoLayer(new ToreterrorRenderer(context))); event.registerEntityRenderer(AntarchyForgeEntites.WATER_BOMB.get(), WaterBombRenderer::new); event.registerEntityRenderer(AntarchyForgeEntites.CHEEP.get(), context -> withParalyzedGeoLayer(new com.craisinlord.antarchy.content.client.renderer.CheepRenderer(context))); - event.registerEntityRenderer(AntarchyForgeEntites.DORRIE.get(), context -> new com.craisinlord.antarchy.content.client.renderer.DorrieRenderer(context)); - event.registerEntityRenderer(AntarchyForgeEntites.OURANWOOD_DEER.get(), context -> new com.craisinlord.antarchy.content.client.renderer.OuranwoodDeerRenderer(context)); + event.registerEntityRenderer(AntarchyForgeEntites.DORRIE.get(), context -> withParalyzedGeoLayer(new com.craisinlord.antarchy.content.client.renderer.DorrieRenderer(context))); + event.registerEntityRenderer(AntarchyForgeEntites.OURANWOOD_DEER.get(), context -> withParalyzedGeoLayer(new com.craisinlord.antarchy.content.client.renderer.OuranwoodDeerRenderer(context))); event.registerEntityRenderer(AntarchyForgeEntites.GLIMMER.get(), context -> withParalyzedGeoLayer(new com.craisinlord.antarchy.content.client.renderer.glimmer.GlimmerRenderer(context))); - event.registerEntityRenderer(AntarchyForgeEntites.ELKA.get(), context -> new com.craisinlord.antarchy.content.client.renderer.ElkaRenderer(context)); + event.registerEntityRenderer(AntarchyForgeEntites.ELKA.get(), context -> withParalyzedGeoLayer(new com.craisinlord.antarchy.content.client.renderer.ElkaRenderer(context))); event.registerEntityRenderer(AntarchyForgeEntites.ROLLY_POLLY.get(), context -> withParalyzedGeoLayer(new com.craisinlord.antarchy.content.client.renderer.RollyPollyRenderer(context))); event.registerEntityRenderer(AntarchyForgeEntites.TERMITE.get(), context -> withParalyzedGeoLayer(new com.craisinlord.antarchy.content.client.renderer.TermiteRenderer(context))); - event.registerEntityRenderer(AntarchyForgeEntites.CREEPING_HORROR.get(), context -> withParalyzedGeoLayer(new com.craisinlord.antarchy.content.client.renderer.CreepingHorrorRenderer(context))); - event.registerEntityRenderer(AntarchyForgeEntites.LURKING_TERROR.get(), context -> withParalyzedGeoLayer(new com.craisinlord.antarchy.content.client.renderer.LurkingTerrorRenderer(context))); + event.registerEntityRenderer(AntarchyForgeEntites.CRAWLING_BLIGHT.get(), context -> withParalyzedGeoLayer(new com.craisinlord.antarchy.content.client.renderer.CrawlingBlightRenderer(context))); + event.registerEntityRenderer(AntarchyForgeEntites.SKULKING_FRIGHT.get(), context -> withParalyzedGeoLayer(new com.craisinlord.antarchy.content.client.renderer.SkulkingFrightRenderer(context))); + event.registerEntityRenderer(AntarchyForgeEntites.MANTICORE.get(), context -> withParalyzedGeoLayer(new com.craisinlord.antarchy.content.client.renderer.ManticoreRenderer(context))); event.registerEntityRenderer(AntarchyForgeEntites.HERCULES_BEETLE.get(), context -> withParalyzedGeoLayer(new com.craisinlord.antarchy.content.client.renderer.HerculesBeetleRenderer(context))); + event.registerEntityRenderer(AntarchyForgeEntites.PRINCE.get(), com.craisinlord.antarchy.content.client.renderer.RoyalMountRenderer::new); + event.registerEntityRenderer(AntarchyForgeEntites.PRINCESS.get(), com.craisinlord.antarchy.content.client.renderer.RoyalMountRenderer::new); + event.registerEntityRenderer(AntarchyForgeEntites.KING.get(), com.craisinlord.antarchy.content.client.renderer.RoyalBossRenderer::new); + event.registerEntityRenderer(AntarchyForgeEntites.QUEEN.get(), com.craisinlord.antarchy.content.client.renderer.RoyalBossRenderer::new); + event.registerEntityRenderer(AntarchyForgeEntites.ROYAL_BOLT.get(), com.craisinlord.antarchy.content.client.renderer.RoyalBoltRenderer::new); + event.registerEntityRenderer(AntarchyForgeEntites.ROYAL_ELEMENTAL_PROJECTILE.get(), com.craisinlord.antarchy.content.client.renderer.RoyalElementalProjectileRenderer::new); + event.registerEntityRenderer(AntarchyForgeEntites.ROYAL_ICE_SPIKE.get(), com.craisinlord.antarchy.content.client.renderer.RoyalIceSpikeRenderer::new); event.registerEntityRenderer(AntarchyForgeEntites.JERRY.get(), context -> withParalyzedGeoLayer(new com.craisinlord.antarchy.content.client.renderer.JerryRenderer(context))); - event.registerEntityRenderer(AntarchyForgeEntites.JUMPY_BUG.get(), context -> withParalyzedGeoLayer(new com.craisinlord.antarchy.content.client.renderer.JumpyBugRenderer(context))); + event.registerEntityRenderer(AntarchyForgeEntites.SPRINGBUG.get(), context -> withParalyzedGeoLayer(new com.craisinlord.antarchy.content.client.renderer.SpringbugRenderer(context))); event.registerEntityRenderer(AntarchyForgeEntites.SPIT_BUG.get(), context -> withParalyzedGeoLayer(new com.craisinlord.antarchy.content.client.renderer.SpitBugRenderer(context))); event.registerEntityRenderer(AntarchyForgeEntites.SPIT_BUG_PROJECTILE.get(), com.craisinlord.antarchy.content.client.renderer.SpitBugProjectileRenderer::new); event.registerEntityRenderer(AntarchyForgeEntites.STINK_BUG.get(), context -> withParalyzedGeoLayer(new com.craisinlord.antarchy.content.client.renderer.StinkBugRenderer(context))); @@ -172,13 +210,13 @@ public final class AntarchyForgeClient { (LivingEntityRenderer>) event.getSkin(skin); if (renderer != null) { renderer.addLayer(new ParalyzedStonePlayerLayer(renderer)); - renderer.addLayer(new com.craisinlord.antarchy.content.client.renderer.TigerEyeCamouflagePlayerLayer(renderer)); + renderer.addLayer(new TigerEyeCamouflagePlayerLayer(renderer)); renderer.addLayer(new GoopedLivingLayer(renderer)); renderer.addLayer(new GlimmeringLivingLayer(renderer)); + renderer.addLayer(new com.craisinlord.antarchy.content.client.renderer.RoyalIndicatorLivingLayer<>(renderer)); renderer.addLayer(new BrutalflyElytraLayer(renderer)); + renderer.addLayer(new com.craisinlord.antarchy.content.client.renderer.ManticoreWingsLayer(renderer)); renderer.addLayer(new FallenKingCrownLayer(renderer)); - renderer.addLayer(new com.craisinlord.antarchy.content.client.renderer.TemporalContractionAfterimageLayer(renderer)); - renderer.addLayer(new com.craisinlord.antarchy.content.client.renderer.RoyalAssailantAxeAfterimageLayer(renderer)); } } LivingEntityRenderer armorStandRenderer = @@ -202,27 +240,32 @@ public final class AntarchyForgeClient { if (entityType == EntityType.PLAYER) { return; } - Object renderer = event.getRenderer((EntityType) entityType); + Object renderer; + try { + renderer = event.getRenderer((EntityType) entityType); + } catch (ClassCastException notLiving) { + return; + } if (renderer == null) { return; } - if (renderer instanceof GeoEntityRenderer) { + if (!(renderer instanceof LivingEntityRenderer livingRenderer)) { return; } - if (!(renderer instanceof LivingEntityRenderer)) { + if (renderer instanceof GeoEntityRenderer) { return; } - LivingEntityRenderer livingRenderer = (LivingEntityRenderer) renderer; - livingRenderer.addLayer(new ParalyzedStoneLivingLayer<>(livingRenderer)); - livingRenderer.addLayer(new GoopedLivingLayer<>(livingRenderer)); - livingRenderer.addLayer(new GlimmeringLivingLayer<>(livingRenderer)); - livingRenderer.addLayer(new com.craisinlord.antarchy.content.client.renderer.TemporalContractionAfterimageLayer(livingRenderer)); + ((LivingEntityRenderer) livingRenderer).addLayer(new ParalyzedStoneLivingLayer<>(livingRenderer)); + ((LivingEntityRenderer) livingRenderer).addLayer(new GoopedLivingLayer<>(livingRenderer)); + ((LivingEntityRenderer) livingRenderer).addLayer(new GlimmeringLivingLayer<>(livingRenderer)); + ((LivingEntityRenderer) livingRenderer).addLayer(new com.craisinlord.antarchy.content.client.renderer.RoyalIndicatorLivingLayer<>(livingRenderer)); } private static GeoEntityRenderer withParalyzedGeoLayer(GeoEntityRenderer renderer) { renderer.addRenderLayer(new ParalyzedStoneGeoLayer<>(renderer)); renderer.addRenderLayer(new GoopedGeoLayer<>(renderer)); - renderer.addRenderLayer(new com.craisinlord.antarchy.content.client.renderer.TemporalContractionGeoLayer<>(renderer)); + renderer.addRenderLayer(new com.craisinlord.antarchy.content.client.renderer.RoyalIndicatorGeoLayer<>(renderer)); + renderer.addRenderLayer(new TemporalContractionGeoLayer<>(renderer)); return renderer; } @@ -296,6 +339,7 @@ public final class AntarchyForgeClient { event.registerSpriteSet(AntarchyForgeMisc.STINKY_GAS.get(), HypnoticGasParticle.Provider::new); event.registerSpriteSet(AntarchyForgeMisc.STINKY_FLY.get(), FireflyParticle.Provider::new); event.registerSpriteSet(AntarchyForgeMisc.PEACH_LEAVES_PARTICLE.get(), PeachLeavesParticle.Provider::new); + event.registerSpriteSet(AntarchyForgeMisc.BUG_SPRAY_PARTICLE.get(), com.craisinlord.antarchy.content.client.particle.BugSprayParticle.Provider::new); event.registerSpriteSet(AntarchyForgeMisc.LOTUS_POLLEN.get(), com.craisinlord.antarchy.content.client.particle.LotusPollenParticle.Provider::new); event.registerSpriteSet(AntarchyForgeMisc.HYPNOTIC_GAS.get(), HypnoticGasParticle.Provider::new); event.registerSpriteSet(AntarchyForgeMisc.HYPNOTIC_GAS_DOWN.get(), sprites -> new HypnoticGasParticle.Provider(sprites, true)); @@ -314,24 +358,36 @@ public final class AntarchyForgeClient { event.registerSpriteSet(AntarchyForgeMisc.UNDERVAULT_CONNECTION.get(), UndertrialParticle.OmenProvider::new); } + @SubscribeEvent public static void registerGuiLayers(RegisterGuiOverlaysEvent event) { - event.registerAboveAll("dread_darkness", + event.registerAbove( + VanillaGuiOverlay.CROSSHAIR.id(), + "portal_gun_crosshair", + (gui, guiGraphics, partialTick, width, height) -> com.craisinlord.antarchy.content.client.PortalGunCrosshairRenderer.render(guiGraphics) + ); + event.registerAboveAll( + "dread_darkness", (gui, guiGraphics, partialTick, width, height) -> DreadHudRenderer.render(guiGraphics) ); - event.registerAboveAll("horde_intensity", + event.registerAboveAll( + "horde_intensity", (gui, guiGraphics, partialTick, width, height) -> HordeHudRenderer.render(guiGraphics) ); - event.registerAboveAll("paralyzed_stone", + event.registerAboveAll( + "paralyzed_stone", (gui, guiGraphics, partialTick, width, height) -> ParalyzedHudRenderer.render(guiGraphics) ); - event.registerAboveAll("gooped_tint", + event.registerAboveAll( + "gooped_tint", (gui, guiGraphics, partialTick, width, height) -> GoopedHudRenderer.render(guiGraphics) ); - event.registerAboveAll("glimmering_tint", - (gui, guiGraphics, partialTick, width, height) -> GlimmeringHudRenderer.render(guiGraphics) + event.registerAboveAll( + "glimmering_tint", + (gui, guiGraphics, partialTick, width, height) -> com.craisinlord.antarchy.content.client.GlimmeringHudRenderer.render(guiGraphics) ); - event.registerAboveAll("brutalfly_elytra", + event.registerAboveAll( + "brutalfly_elytra", (gui, guiGraphics, partialTick, width, height) -> BrutalflyElytraHudRenderer.render(guiGraphics) ); event.registerBelow( @@ -339,27 +395,35 @@ public final class AntarchyForgeClient { "bloodglass_hearts", (gui, guiGraphics, partialTick, width, height) -> BloodglassHudRenderer.render(guiGraphics) ); - event.registerAboveAll("triffid_goo", - (gui, guiGraphics, partialTick, width, height) -> TriffidGooHudRenderer.render(guiGraphics) + event.registerAboveAll( + "flytrap_goo", + (gui, guiGraphics, partialTick, width, height) -> FlytrapGooHudRenderer.render(guiGraphics) ); - event.registerAboveAll("springy_boots", - (gui, guiGraphics, partialTick, width, height) -> JumpyBootsHudRenderer.render(guiGraphics) + event.registerAboveAll( + "springy_boots", + (gui, guiGraphics, partialTick, width, height) -> SpringyBootsHudRenderer.render(guiGraphics) ); - event.registerAboveAll("dorrie_jump", + event.registerAboveAll( + "dorrie_jump", (gui, guiGraphics, partialTick, width, height) -> DorrieJumpHudRenderer.render(guiGraphics) ); - event.registerAboveAll("hercules_beetle_charge", + event.registerAboveAll( + "hercules_beetle_charge", (gui, guiGraphics, partialTick, width, height) -> HerculesBeetleChargeHudRenderer.render(guiGraphics) ); + event.registerAboveAll( + "king_judgment_flash", + (gui, guiGraphics, partialTick, width, height) -> com.craisinlord.antarchy.content.client.KingJudgmentFlashHudRenderer.render(guiGraphics) + ); } + @SubscribeEvent public static void onClientSetup(FMLClientSetupEvent event) { event.enqueueWork(() -> { - net.minecraft.client.gui.screens.MenuScreens.register(AntarchyForgeMisc.DORRIE_INVENTORY_MENU.get(), com.craisinlord.antarchy.content.client.screen.DorrieInventoryScreen::new); - com.craisinlord.antarchy.content.client.TigerEyeClientHooks.setCamouflageKeyTextSupplier( - () -> AntarchyKeyBindings.TIGERS_EYE_CAMOUFLAGE.getTranslatedKeyMessage()); - + TigerEyeClientHooks.setCamouflageKeyTextSupplier(() -> AntarchyKeyBindings.TIGERS_EYE_CAMOUFLAGE.getTranslatedKeyMessage()); + ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.UNDERTRIAL_SPAWNER.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.UNDERVAULT.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.ANTIMETAL_RAIL.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.ANTIMETAL_POWERED_RAIL.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.ANTIMETAL_DETECTOR_RAIL.get(), RenderType.cutout()); @@ -380,10 +444,22 @@ public final class AntarchyForgeClient { ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.NADIR_TRAPDOOR.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.NADIR_SAPLING.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.POTTED_NADIR_SAPLING.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.ROYAL_LEAVES.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.ROYAL_FLOWERING_LEAVES.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.ROYAL_DOOR.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.ROYAL_TRAPDOOR.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.ROYAL_SAPLING.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.POTTED_ROYAL_SAPLING.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.TRUFFALO_DOOR.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.TRUFFALO_TRAPDOOR.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.TRUFFALO_SAPLING.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.POTTED_TRUFFALO_SAPLING.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.DUPLICATOR_SAPLING.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.ORANGE_MILKWEED.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.PINK_MILKWEED.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.GLIMMERING_REED.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.AMBER_LICHEN.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.MUCUS.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.CREEPVINE.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.CAMELLIA.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.SPIDER_LILY.get(), RenderType.cutout()); @@ -400,6 +476,15 @@ public final class AntarchyForgeClient { ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.UMBRAL_MOSS_CARPET.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.NYXITE_SPIKE.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.CHITIN_SPIKE.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.TYPHONITE_SPIKE.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.SPIRALING_VINES.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.GOREVINE.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.WHIRLFLOWER.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.NADIR_FERN.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.LARGE_NADIR_FERN.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.DUSKBELL.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.NADIR_ROOTS.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.VERDANT_ROOTS.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.STAR_CORAL.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.STAR_CORAL_FAN.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.STAR_CORAL_WALL_FAN.get(), RenderType.cutout()); @@ -422,18 +507,16 @@ public final class AntarchyForgeClient { ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.DREAM_FIRE.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.DREAM_CEILING_FIRE.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.ANTIWATER_BLOCK.get(), RenderType.translucent()); - ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.LUMEN_BLOCK.get(), RenderType.translucent()); ItemBlockRenderTypes.setRenderLayer(AntarchyForgeMisc.ANTIWATER.get(), RenderType.translucent()); ItemBlockRenderTypes.setRenderLayer(AntarchyForgeMisc.FLOWING_ANTIWATER.get(), RenderType.translucent()); - ItemBlockRenderTypes.setRenderLayer(AntarchyForgeMisc.ICHOR.get(), RenderType.translucent()); - ItemBlockRenderTypes.setRenderLayer(AntarchyForgeMisc.FLOWING_ICHOR.get(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.LUMEN_BLOCK.get(), RenderType.translucent()); ItemBlockRenderTypes.setRenderLayer(AntarchyForgeMisc.LUMEN.get(), RenderType.translucent()); ItemBlockRenderTypes.setRenderLayer(AntarchyForgeMisc.FLOWING_LUMEN.get(), RenderType.translucent()); - ItemBlockRenderTypes.setRenderLayer(AntarchyForgeMisc.BILE.get(), RenderType.translucent()); - ItemBlockRenderTypes.setRenderLayer(AntarchyForgeMisc.FLOWING_BILE.get(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.LUCID_ANCHOR.get(), RenderType.translucent()); ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.ELYTHIA_PORTAL.get(), RenderType.translucent()); ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.THORAXIS_PORTAL.get(), RenderType.translucent()); - ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.TRIFFID_GOO_BLOCK.get(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.FLYTRAP_GOO_BLOCK.get(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.VORTEX_LENS.get(), RenderType.translucent()); ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.URANIUM_DOOR.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.TITANIUM_DOOR.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.URANIUM_TRAPDOOR.get(), RenderType.cutout()); @@ -441,7 +524,7 @@ public final class AntarchyForgeClient { ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.URANIUM_BARS.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.TITANIUM_BARS.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.CLOUD_BLOCK.get(), RenderType.translucent()); - ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.JUMPY_BUG_EGG.get(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.SPRINGBUG_EGG.get(), RenderType.translucent()); ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.SPIT_BUG_EGG.get(), RenderType.translucent()); ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.JERRY_EGG.get(), RenderType.translucent()); ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.BIOWART_TENDRILS.get(), RenderType.cutout()); @@ -454,10 +537,25 @@ public final class AntarchyForgeClient { }); } + @SubscribeEvent + public static void registerClientReloadListeners(RegisterClientReloadListenersEvent event) { + event.registerReloadListener(new net.minecraft.server.packs.resources.SimplePreparableReloadListener() { + @Override + protected Void prepare(net.minecraft.server.packs.resources.ResourceManager resourceManager, net.minecraft.util.profiling.ProfilerFiller profiler) { + return null; + } + + @Override + protected void apply(Void object, net.minecraft.server.packs.resources.ResourceManager resourceManager, net.minecraft.util.profiling.ProfilerFiller profiler) { + TigerEyeCamouflageClientHandler.clearClientCaches(); + } + }); + } + private static void registerUltimateBowProperties() { ItemProperties.register( AntarchyForgeItems.ULTIMATE_BOW.get(), - ResourceLocation.withDefaultNamespace("pull"), + new ResourceLocation("pull"), (stack, level, entity, seed) -> { if (entity == null || entity.getUseItem() != stack) { return 0.0F; @@ -468,7 +566,7 @@ public final class AntarchyForgeClient { ); ItemProperties.register( AntarchyForgeItems.ULTIMATE_BOW.get(), - ResourceLocation.withDefaultNamespace("pulling"), + new ResourceLocation("pulling"), (stack, level, entity, seed) -> entity != null && entity.isUsingItem() && entity.getUseItem() == stack ? 1.0F : 0.0F ); @@ -477,7 +575,7 @@ public final class AntarchyForgeClient { private static void registerUltimateCrossbowProperties() { ItemProperties.register( AntarchyForgeItems.ULTIMATE_CROSSBOW.get(), - ResourceLocation.withDefaultNamespace("pull"), + new ResourceLocation("pull"), (stack, level, entity, seed) -> { if (entity == null || CrossbowItem.isCharged(stack) || entity.getUseItem() != stack) { return 0.0F; @@ -489,18 +587,18 @@ public final class AntarchyForgeClient { ); ItemProperties.register( AntarchyForgeItems.ULTIMATE_CROSSBOW.get(), - ResourceLocation.withDefaultNamespace("pulling"), + new ResourceLocation("pulling"), (stack, level, entity, seed) -> entity != null && entity.isUsingItem() && entity.getUseItem() == stack && !CrossbowItem.isCharged(stack) ? 1.0F : 0.0F ); ItemProperties.register( AntarchyForgeItems.ULTIMATE_CROSSBOW.get(), - ResourceLocation.withDefaultNamespace("charged"), + new ResourceLocation("charged"), (stack, level, entity, seed) -> CrossbowItem.isCharged(stack) ? 1.0F : 0.0F ); ItemProperties.register( AntarchyForgeItems.ULTIMATE_CROSSBOW.get(), - ResourceLocation.withDefaultNamespace("firework"), + new ResourceLocation("firework"), (stack, level, entity, seed) -> CrossbowItem.isCharged(stack) && CrossbowItem.containsChargedProjectile(stack, Items.FIREWORK_ROCKET) ? 1.0F : 0.0F ); ItemProperties.register( @@ -515,6 +613,9 @@ public final class AntarchyForgeClient { ); } + + + private static int bluestoneWireColor(int power) { float normalized = power / 15.0F; int red = (int) (6.0F + normalized * 54.0F); diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/AntarchyKeyBindings.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/AntarchyKeyBindings.java index 4200251c..89dbb95f 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/AntarchyKeyBindings.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/AntarchyKeyBindings.java @@ -1,12 +1,11 @@ package com.craisinlord.antarchy.forge.client; -import net.minecraftforge.fml.common.Mod; - import com.craisinlord.antarchy.Antarchy; import com.mojang.blaze3d.platform.InputConstants; import net.minecraft.client.KeyMapping; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; import net.minecraftforge.client.event.RegisterKeyMappingsEvent; import net.minecraftforge.client.settings.KeyConflictContext; @@ -22,24 +21,16 @@ public final class AntarchyKeyBindings { CATEGORY ); - public static final KeyMapping DORRIE_CHARGE_JUMP = new KeyMapping( - "key.antarchy.dorrie_charge_jump", + public static final KeyMapping MOUNT_SPECIAL = new KeyMapping( + "key.antarchy.mount_special", KeyConflictContext.IN_GAME, InputConstants.Type.KEYSYM, InputConstants.KEY_LCONTROL, CATEGORY ); - public static final KeyMapping HERCULES_BEETLE_CHARGE = new KeyMapping( - "key.antarchy.hercules_beetle_charge", - KeyConflictContext.IN_GAME, - InputConstants.Type.KEYSYM, - InputConstants.KEY_LCONTROL, - CATEGORY - ); - - public static final KeyMapping HERCULES_BEETLE_FLIGHT_TOGGLE = new KeyMapping( - "key.antarchy.hercules_beetle_flight_toggle", + public static final KeyMapping MOUNT_FLIGHT_TOGGLE = new KeyMapping( + "key.antarchy.mount_flight_toggle", KeyConflictContext.IN_GAME, InputConstants.Type.KEYSYM, InputConstants.KEY_R, @@ -53,22 +44,78 @@ public final class AntarchyKeyBindings { CATEGORY ); + public static final KeyMapping ROYAL_INVERSION_TOGGLE = new KeyMapping( + "key.antarchy.royal_inversion_toggle", + KeyConflictContext.IN_GAME, + InputConstants.Type.KEYSYM, + InputConstants.KEY_V, + CATEGORY + ); + public static final KeyMapping ROYAL_BOUNDARY = new KeyMapping( + "key.antarchy.royal_boundary", + KeyConflictContext.IN_GAME, + InputConstants.Type.KEYSYM, + InputConstants.KEY_B, + CATEGORY + ); + public static final KeyMapping PORTAL_GUN_ZOOM = new KeyMapping( + "key.antarchy.portal_gun_zoom", + KeyConflictContext.IN_GAME, + InputConstants.Type.MOUSE, + InputConstants.MOUSE_BUTTON_MIDDLE, + CATEGORY + ); + public static final KeyMapping PORTAL_GUN_RESET = new KeyMapping( + "key.antarchy.portal_gun_reset", + KeyConflictContext.IN_GAME, + InputConstants.Type.KEYSYM, + InputConstants.KEY_R, + CATEGORY + ); + private AntarchyKeyBindings() {} @SubscribeEvent public static void onRegisterKeyMappings(RegisterKeyMappingsEvent event) { event.register(BRUTALFLY_FLAP); - event.register(DORRIE_CHARGE_JUMP); - event.register(HERCULES_BEETLE_CHARGE); - event.register(HERCULES_BEETLE_FLIGHT_TOGGLE); + event.register(MOUNT_SPECIAL); + event.register(MOUNT_FLIGHT_TOGGLE); event.register(TIGERS_EYE_CAMOUFLAGE); + event.register(ROYAL_INVERSION_TOGGLE); + event.register(ROYAL_BOUNDARY); + event.register(PORTAL_GUN_ZOOM); + event.register(PORTAL_GUN_RESET); } - public static boolean isHerculesBeetleFlightTogglePressed() { - return HERCULES_BEETLE_FLIGHT_TOGGLE.isDown(); + public static boolean isMountFlightTogglePressed() { + return MOUNT_FLIGHT_TOGGLE.isDown(); + } + + public static boolean isMountSpecialPressed() { + return MOUNT_SPECIAL.isDown(); } public static boolean consumeTigerEyeCamouflagePressed() { return TIGERS_EYE_CAMOUFLAGE.consumeClick(); } + + public static boolean consumeRoyalInversionTogglePressed() { + return ROYAL_INVERSION_TOGGLE.consumeClick(); + } + + public static boolean consumeRoyalBoundaryPressed() { + return ROYAL_BOUNDARY.consumeClick(); + } + + public static boolean consumePortalGunZoomPressed() { + return PORTAL_GUN_ZOOM.consumeClick(); + } + + public static boolean consumePortalGunResetPressed() { + return PORTAL_GUN_RESET.consumeClick(); + } + + public static boolean isPortalGunResetDown() { + return PORTAL_GUN_RESET.isDown() || PORTAL_GUN_RESET.consumeClick(); + } } diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/BigBerthaClientHandler.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/BigBerthaClientHandler.java index 44590d4c..0645d6b2 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/BigBerthaClientHandler.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/BigBerthaClientHandler.java @@ -1,13 +1,14 @@ package com.craisinlord.antarchy.forge.client; -import net.minecraftforge.fml.common.Mod; - import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.item.BigBerthaItem; +import com.craisinlord.antarchy.content.item.RoyalGuardianSwordItem; import com.craisinlord.antarchy.content.network.BigBerthaModeCyclePayload; +import com.craisinlord.antarchy.content.network.RoyalGuardianSwordModeCyclePayload; import net.minecraft.client.Minecraft; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; import net.minecraftforge.event.TickEvent; import com.craisinlord.antarchy.forge.network.AntarchyForgeNetworkCore; @@ -27,7 +28,9 @@ public final class BigBerthaClientHandler { return; } - if (!(mc.player.getMainHandItem().getItem() instanceof BigBerthaItem)) { + boolean bigBertha = mc.player.getMainHandItem().getItem() instanceof BigBerthaItem; + boolean royalGuardianSword = mc.player.getMainHandItem().getItem() instanceof RoyalGuardianSwordItem; + if (!bigBertha && !royalGuardianSword) { lastUseDown = false; return; } @@ -36,8 +39,9 @@ public final class BigBerthaClientHandler { if (useDown && !lastUseDown && mc.player.isShiftKeyDown() - && mc.player.getCooldowns().isOnCooldown(mc.player.getMainHandItem().getItem())) { - AntarchyForgeNetworkCore.sendToServer(new BigBerthaModeCyclePayload()); + ) { + if (bigBertha) AntarchyForgeNetworkCore.sendToServer(new BigBerthaModeCyclePayload()); + else AntarchyForgeNetworkCore.sendToServer(new RoyalGuardianSwordModeCyclePayload()); } lastUseDown = useDown; } diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/BrutalflyElytraClientHandler.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/BrutalflyElytraClientHandler.java index 0d601936..81285a51 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/BrutalflyElytraClientHandler.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/BrutalflyElytraClientHandler.java @@ -1,17 +1,14 @@ package com.craisinlord.antarchy.forge.client; -import net.minecraftforge.fml.common.Mod; - import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.client.BrutalflyElytraClientState; import com.craisinlord.antarchy.content.item.BrutalflyElytraFlightHelper; import com.craisinlord.antarchy.content.item.BrutalflyElytraItem; import com.craisinlord.antarchy.content.network.BrutalflyElytraFlapPayload; import net.minecraft.client.Minecraft; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; import net.minecraftforge.event.TickEvent; import net.minecraftforge.client.event.RenderGuiOverlayEvent; import net.minecraftforge.client.gui.overlay.VanillaGuiOverlay; @@ -19,7 +16,6 @@ import com.craisinlord.antarchy.forge.network.AntarchyForgeNetworkCore; @Mod.EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) public final class BrutalflyElytraClientHandler { - private static final Logger LOGGER = LoggerFactory.getLogger("Antarchy/BrutalflyElytra"); private static boolean lastJumpDown; private static int chargeTicks; diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/BrutalflyElytraHudRenderer.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/BrutalflyElytraHudRenderer.java index 73068a5f..38485e0e 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/BrutalflyElytraHudRenderer.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/BrutalflyElytraHudRenderer.java @@ -9,7 +9,7 @@ import net.minecraft.util.Mth; import net.minecraft.world.entity.player.Player; public final class BrutalflyElytraHudRenderer { - private static final ResourceLocation GUI_ICONS_LOCATION = ResourceLocation.withDefaultNamespace("textures/gui/icons.png"); + private static final ResourceLocation GUI_ICONS_LOCATION = new ResourceLocation("textures/gui/icons.png"); private static final int BAR_WIDTH = 182; private static final int BAR_HEIGHT = 5; diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/CameraShakeHandler.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/CameraShakeHandler.java deleted file mode 100644 index 1d5d1337..00000000 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/CameraShakeHandler.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.craisinlord.antarchy.forge.client; - -import net.minecraftforge.fml.common.Mod; - -import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.client.CameraShakeClientState; -import com.craisinlord.antarchy.content.client.HerculesBeetleImpactShakeClientState; -import com.craisinlord.antarchy.content.item.BigBerthaItem; -import net.minecraft.client.Minecraft; -import net.minecraft.util.Mth; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.client.event.ViewportEvent; - -@Mod.EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) -public final class CameraShakeHandler { - private static final int TORETERROR_SHAKE_TICKS = 25; - - private CameraShakeHandler() { - } - - @SubscribeEvent - public static void onComputeCameraAngles(ViewportEvent.ComputeCameraAngles event) { - Minecraft mc = Minecraft.getInstance(); - if (mc.level == null || mc.player == null) { - CameraShakeClientState.clear(); - return; - } - - float shakeStrength = CameraShakeClientState.getStrength(event.getCamera().getPosition()); - - int beetleShakeTicks = HerculesBeetleImpactShakeClientState.getTicks(); - if (beetleShakeTicks > 0) { - shakeStrength += (float) beetleShakeTicks / TORETERROR_SHAKE_TICKS * 2.0F; - } - - int bigBerthaShakeTicks = BigBerthaItem.clientShakeTicks; - if (bigBerthaShakeTicks > 0) { - shakeStrength += (float) bigBerthaShakeTicks / TORETERROR_SHAKE_TICKS * 2.0F; - } - - if (shakeStrength <= 0.0F) return; - - float time = (float) (mc.player.tickCount + event.getPartialTick()); - event.setYaw(event.getYaw() + Mth.sin(time * 1.5F) * shakeStrength * 2.5F); - event.setPitch(event.getPitch() + Mth.cos(time * 1.8F) * shakeStrength * 2.0F); - event.setRoll(event.getRoll() + Mth.sin(time * 2.2F) * shakeStrength * 1.5F); - } -} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/ClientTimeDilationHandler.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/ClientTimeDilationHandler.java deleted file mode 100644 index c314ee3a..00000000 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/ClientTimeDilationHandler.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.craisinlord.antarchy.forge.client; - -import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.client.ClientTimeDilationTicker; -import net.minecraft.client.Minecraft; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.event.TickEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; - -@Mod.EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.FORGE) -public final class ClientTimeDilationHandler { - private ClientTimeDilationHandler() {} - - @SubscribeEvent - public static void onClientTick(TickEvent.ClientTickEvent event) { - if (event.phase == TickEvent.Phase.END) { - Minecraft mc = Minecraft.getInstance(); - if (mc.level != null) { - ClientTimeDilationTicker.tick(mc.level); - com.craisinlord.antarchy.content.client.ContractionAfterimages.tick(mc.level); - } - } - } -} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/DiamondMinecartClientHandler.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/DiamondMinecartClientHandler.java index 71e48103..be9bb1e1 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/DiamondMinecartClientHandler.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/DiamondMinecartClientHandler.java @@ -1,7 +1,5 @@ package com.craisinlord.antarchy.forge.client; -import net.minecraftforge.fml.common.Mod; - import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.entity.DiamondMinecartEntity; @@ -9,6 +7,7 @@ import com.craisinlord.antarchy.content.network.DiamondMinecartInputPayload; import net.minecraft.client.Minecraft; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; import net.minecraftforge.event.TickEvent; import com.craisinlord.antarchy.forge.network.AntarchyForgeNetworkCore; diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/DorrieJumpClientHandler.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/DorrieJumpClientHandler.java index 44120ede..c2bffeb3 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/DorrieJumpClientHandler.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/DorrieJumpClientHandler.java @@ -1,7 +1,5 @@ package com.craisinlord.antarchy.forge.client; -import net.minecraftforge.fml.common.Mod; - import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.entity.DorrieEntity; import com.craisinlord.antarchy.content.network.DorrieChargeJumpPayload; @@ -10,6 +8,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; import net.minecraftforge.event.TickEvent; import com.craisinlord.antarchy.forge.network.AntarchyForgeNetworkCore; @@ -42,7 +41,7 @@ public final class DorrieJumpClientHandler { wasPressingJump = pressingJump; } - boolean pressingCharge = AntarchyKeyBindings.DORRIE_CHARGE_JUMP.isDown(); + boolean pressingCharge = AntarchyKeyBindings.MOUNT_SPECIAL.isDown(); if (pressingCharge != wasPressingCharge) { AntarchyForgeNetworkCore.sendToServer(new DorrieChargeJumpPayload(pressingCharge)); if (!pressingCharge && player.getVehicle() instanceof DorrieEntity dorrie) { diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/DorrieJumpHudRenderer.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/DorrieJumpHudRenderer.java index ff6e6da4..7e02a5f3 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/DorrieJumpHudRenderer.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/DorrieJumpHudRenderer.java @@ -9,7 +9,7 @@ import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; public final class DorrieJumpHudRenderer { - private static final ResourceLocation GUI_ICONS_LOCATION = ResourceLocation.withDefaultNamespace("textures/gui/icons.png"); + private static final ResourceLocation GUI_ICONS_LOCATION = new ResourceLocation("textures/gui/icons.png"); private static final int BAR_WIDTH = 182; private static final int BAR_HEIGHT = 5; diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/DreadClientHandler.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/DreadClientHandler.java index 9c8a74fe..a796cd7f 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/DreadClientHandler.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/DreadClientHandler.java @@ -1,7 +1,5 @@ package com.craisinlord.antarchy.forge.client; -import net.minecraftforge.fml.common.Mod; - import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyTags; @@ -21,6 +19,7 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.phys.Vec3; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; import net.minecraftforge.event.TickEvent; import java.util.ArrayList; diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/DuctTapeClientHandler.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/DuctTapeClientHandler.java deleted file mode 100644 index ca48d7a0..00000000 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/DuctTapeClientHandler.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.craisinlord.antarchy.forge.client; - -import net.minecraftforge.fml.common.Mod; - -import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.block.DuctTapeBlock; -import net.minecraft.client.Minecraft; -import net.minecraft.client.player.LocalPlayer; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.client.event.MovementInputUpdateEvent; - -@Mod.EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) -public final class DuctTapeClientHandler { - private DuctTapeClientHandler() { - } - - @SubscribeEvent - public static void onMovementInputUpdate(MovementInputUpdateEvent event) { - if (!(event.getEntity() instanceof LocalPlayer player)) { - return; - } - - Minecraft mc = Minecraft.getInstance(); - if (mc.level == null || (!player.isNoGravity() && !DuctTapeBlock.isTouchingTape(mc.level, player))) { - return; - } - - var input = event.getInput(); - input.left = false; - input.right = false; - input.up = false; - input.down = false; - input.leftImpulse = 0.0F; - input.forwardImpulse = 0.0F; - input.jumping = false; - input.shiftKeyDown = false; - } -} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/ElythiaFireflyManager.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/ElythiaFireflyManager.java index 5c70a317..a8a94410 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/ElythiaFireflyManager.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/ElythiaFireflyManager.java @@ -1,7 +1,5 @@ package com.craisinlord.antarchy.forge.client; -import net.minecraftforge.fml.common.Mod; - import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyTags; @@ -15,6 +13,7 @@ import net.minecraft.sounds.SoundSource; import net.minecraft.world.entity.player.Player; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; import net.minecraftforge.event.TickEvent; @Mod.EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/EyeOfStormClientHandler.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/EyeOfStormClientHandler.java new file mode 100644 index 00000000..e45c72dc --- /dev/null +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/EyeOfStormClientHandler.java @@ -0,0 +1,41 @@ +package com.craisinlord.antarchy.forge.client; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.item.EyeOfTheStormItem; +import com.craisinlord.antarchy.content.network.EyeOfStormPrimaryPayload; +import net.minecraft.client.Minecraft; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.event.TickEvent; +import com.craisinlord.antarchy.forge.network.AntarchyForgeNetworkCore; + +@Mod.EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) +public final class EyeOfStormClientHandler { + private static boolean lastAttackDown; + + private EyeOfStormClientHandler() { + } + + @SubscribeEvent + public static void onClientTick(TickEvent.ClientTickEvent event) { + if (event.phase != TickEvent.Phase.END) return; + Minecraft mc = Minecraft.getInstance(); + if (mc.player == null || mc.level == null || mc.screen != null || !AntarchySettings.eyeOfTheStormEnabled()) { + lastAttackDown = false; + return; + } + + if (!(mc.player.getMainHandItem().getItem() instanceof EyeOfTheStormItem)) { + lastAttackDown = false; + return; + } + + boolean attackDown = mc.options.keyAttack.isDown(); + if (attackDown && !lastAttackDown) { + AntarchyForgeNetworkCore.sendToServer(new EyeOfStormPrimaryPayload()); + } + lastAttackDown = attackDown; + } +} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/FlytrapGooHudRenderer.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/FlytrapGooHudRenderer.java new file mode 100644 index 00000000..4c97aaa4 --- /dev/null +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/FlytrapGooHudRenderer.java @@ -0,0 +1,45 @@ +package com.craisinlord.antarchy.forge.client; + +import com.craisinlord.antarchy.forge.registry.AntarchyForgeBlocks; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.core.BlockPos; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.block.Block; + +public final class FlytrapGooHudRenderer { + private FlytrapGooHudRenderer() { + } + private static float fadeProgress = 0f; + private static final float FADE_SPEED = 0.05f; + private static final int MAX_ALPHA = 0x55; + + public static void render(GuiGraphics guiGraphics) { + Minecraft minecraft = Minecraft.getInstance(); + Player player = minecraft.player; + if (player == null || player.isDeadOrDying()) { + fadeProgress = Math.max(0f, fadeProgress - FADE_SPEED); + if (fadeProgress <= 0f) return; + } else { + Block goo = AntarchyForgeBlocks.FLYTRAP_GOO_BLOCK.get(); + BlockPos feet = player.blockPosition(); + boolean inGoo = player.level().getBlockState(feet).is(goo) + || player.level().getBlockState(feet.above()).is(goo); + + if (inGoo) { + fadeProgress = Math.min(1f, fadeProgress + FADE_SPEED); + } else { + fadeProgress = Math.max(0f, fadeProgress - FADE_SPEED); + } + + if (fadeProgress <= 0f || minecraft.screen != null) return; + } + + int alpha = Mth.floor(MAX_ALPHA * fadeProgress); + int color = (alpha << 24) | 0x003300; + int width = minecraft.getWindow().getGuiScaledWidth(); + int height = minecraft.getWindow().getGuiScaledHeight(); + guiGraphics.fill(0, 0, width, height, color); + } +} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/GiantFryingPanClientHandler.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/GiantFryingPanClientHandler.java new file mode 100644 index 00000000..13fb42ad --- /dev/null +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/GiantFryingPanClientHandler.java @@ -0,0 +1,38 @@ +package com.craisinlord.antarchy.forge.client; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.item.GiantFryingPanItem; +import com.craisinlord.antarchy.content.network.OpenGiantFryingPanPayload; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.event.TickEvent; +import com.craisinlord.antarchy.forge.network.AntarchyForgeNetworkCore; + +@Mod.EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) +public final class GiantFryingPanClientHandler { + private static boolean wasUse; + + private GiantFryingPanClientHandler() { + } + + @SubscribeEvent + public static void onClientTick(TickEvent.ClientTickEvent event) { + if (event.phase != TickEvent.Phase.END) return; + Minecraft mc = Minecraft.getInstance(); + LocalPlayer player = mc.player; + if (player == null || mc.screen != null) { + wasUse = false; + return; + } + boolean use = mc.options.keyUse.isDown(); + if (use && !wasUse && player.isShiftKeyDown() + && (player.getMainHandItem().getItem() instanceof GiantFryingPanItem + || player.getOffhandItem().getItem() instanceof GiantFryingPanItem)) { + AntarchyForgeNetworkCore.sendToServer(OpenGiantFryingPanPayload.INSTANCE); + } + wasUse = use; + } +} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/GravityCameraRollHandler.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/GravityCameraRollHandler.java deleted file mode 100644 index 6a3a9fd4..00000000 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/GravityCameraRollHandler.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.craisinlord.antarchy.forge.client; - -import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import net.minecraft.client.Camera; -import net.minecraft.world.entity.Entity; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.client.event.ViewportEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; -import org.joml.Vector3f; - -@Mod.EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) -public final class GravityCameraRollHandler { - private GravityCameraRollHandler() { - } - - @SubscribeEvent - public static void onComputeCameraAngles(ViewportEvent.ComputeCameraAngles event) { - Camera camera = event.getCamera(); - Entity entity = camera.getEntity(); - if (entity == null) { - return; - } - - float flipProgress = AntarchyGravityApi.getGravityFlipProgress(entity, (float) event.getPartialTick()); - if (flipProgress <= 0.0F) { - return; - } - - float gravityRoll = 180.0F * flipProgress; - event.setRoll(event.getRoll() + gravityRoll); - - Vector3f look = camera.getLookVector(); - float radians = (float) Math.toRadians(gravityRoll); - camera.getUpVector().rotateAxis(radians, look.x(), look.y(), look.z()); - camera.getLeftVector().rotateAxis(radians, look.x(), look.y(), look.z()); - } -} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/GravityGunClientHandler.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/GravityGunClientHandler.java index 3fd5fb42..272ad61b 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/GravityGunClientHandler.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/GravityGunClientHandler.java @@ -1,17 +1,18 @@ package com.craisinlord.antarchy.forge.client; -import net.minecraftforge.fml.common.Mod; - import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.item.GravityGunItem; import com.craisinlord.antarchy.content.network.GravityGunPrimaryPayload; import com.craisinlord.antarchy.content.network.GravityGunScrollPayload; +import com.craisinlord.antarchy.content.network.TemporalTunerScrollPayload; +import com.craisinlord.antarchy.content.item.TemporalTunerItem; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.Screen; import net.minecraft.util.Mth; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; import net.minecraftforge.event.TickEvent; import net.minecraftforge.client.event.InputEvent; import com.craisinlord.antarchy.forge.network.AntarchyForgeNetworkCore; @@ -48,7 +49,20 @@ public final class GravityGunClientHandler { @SubscribeEvent public static void onMouseScroll(InputEvent.MouseScrollingEvent event) { Minecraft mc = Minecraft.getInstance(); - if (mc.player == null || mc.level == null || mc.screen != null || !Screen.hasControlDown() || !AntarchySettings.gravityGunEnabled()) { + if (mc.player == null || mc.level == null || mc.screen != null) { + return; + } + + if (Screen.hasShiftDown() && TemporalTunerItem.isAvailable(mc.player)) { + double scrollAmount = Mth.clamp(event.getScrollDelta(), -1.0D, 1.0D); + if (Math.abs(scrollAmount) >= 1.0E-4D) { + AntarchyForgeNetworkCore.sendToServer(new TemporalTunerScrollPayload(scrollAmount * TemporalTunerItem.STEP)); + event.setCanceled(true); + return; + } + } + + if (!Screen.hasControlDown() || !AntarchySettings.gravityGunEnabled()) { return; } diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/HerculesBeetleChargeHudRenderer.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/HerculesBeetleChargeHudRenderer.java index 856adf66..22b6702f 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/HerculesBeetleChargeHudRenderer.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/HerculesBeetleChargeHudRenderer.java @@ -8,7 +8,7 @@ import net.minecraft.util.Mth; import net.minecraft.world.entity.player.Player; public final class HerculesBeetleChargeHudRenderer { - private static final ResourceLocation GUI_ICONS_LOCATION = ResourceLocation.withDefaultNamespace("textures/gui/icons.png"); + private static final ResourceLocation GUI_ICONS_LOCATION = new ResourceLocation("textures/gui/icons.png"); private static final int BAR_WIDTH = 182; private static final int BAR_HEIGHT = 5; diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/HerculesBeetleClientHandler.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/HerculesBeetleClientHandler.java index 16a59849..d87833e1 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/HerculesBeetleClientHandler.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/HerculesBeetleClientHandler.java @@ -1,11 +1,9 @@ package com.craisinlord.antarchy.forge.client; -import net.minecraftforge.fml.common.Mod; - import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.client.CameraShakeClientState; import com.craisinlord.antarchy.content.client.HerculesBeetleImpactShakeClientState; import com.craisinlord.antarchy.content.client.HordeClientState; +import com.craisinlord.antarchy.content.client.KingJudgmentFlashClientState; import com.craisinlord.antarchy.content.entity.HerculesBeetleEntity; import com.craisinlord.antarchy.content.network.HerculesBeetleFlightTogglePayload; import com.craisinlord.antarchy.content.network.HerculesBeetleJumpInputPayload; @@ -15,6 +13,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; import net.minecraftforge.event.TickEvent; import com.craisinlord.antarchy.forge.network.AntarchyForgeNetworkCore; @@ -31,8 +30,8 @@ public final class HerculesBeetleClientHandler { @SubscribeEvent public static void onClientTick(TickEvent.ClientTickEvent event) { if (event.phase != TickEvent.Phase.END) return; - CameraShakeClientState.tick(); HerculesBeetleImpactShakeClientState.tick(); + KingJudgmentFlashClientState.tick(); HordeClientState.tick(); Minecraft mc = Minecraft.getInstance(); @@ -59,13 +58,13 @@ public final class HerculesBeetleClientHandler { } wasPressingAttack = pressingAttack; - boolean charging = AntarchyKeyBindings.HERCULES_BEETLE_CHARGE.isDown(); + boolean charging = AntarchyKeyBindings.MOUNT_SPECIAL.isDown(); if (charging != wasCharging) { AntarchyForgeNetworkCore.sendToServer(new HerculesBeetleMountedChargePayload(charging)); } wasCharging = charging; - boolean pressingFlightToggle = AntarchyKeyBindings.HERCULES_BEETLE_FLIGHT_TOGGLE.isDown(); + boolean pressingFlightToggle = AntarchyKeyBindings.MOUNT_FLIGHT_TOGGLE.isDown(); if (pressingFlightToggle && !wasPressingFlightToggle) { AntarchyForgeNetworkCore.sendToServer(new HerculesBeetleFlightTogglePayload()); } diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/HoverboardTrailHandler.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/HoverboardTrailHandler.java new file mode 100644 index 00000000..530cfd1b --- /dev/null +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/HoverboardTrailHandler.java @@ -0,0 +1,31 @@ +package com.craisinlord.antarchy.forge.client; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.client.HoverboardSoundSystem; +import com.craisinlord.antarchy.content.client.HoverboardTrailSystem; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.event.TickEvent; +import net.minecraftforge.client.event.RenderLevelStageEvent; + +@Mod.EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) +public final class HoverboardTrailHandler { + private HoverboardTrailHandler() { + } + + @SubscribeEvent + public static void onClientTick(TickEvent.ClientTickEvent event) { + if (event.phase != TickEvent.Phase.END) return; + HoverboardTrailSystem.tick(); + HoverboardSoundSystem.tick(); + } + + @SubscribeEvent + public static void onRenderLevelStage(RenderLevelStageEvent event) { + if (event.getStage() != RenderLevelStageEvent.Stage.AFTER_PARTICLES) { + return; + } + HoverboardTrailSystem.render(event.getCamera(), event.getPoseStack().last().pose()); + } +} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/JumpyBootsClientHandler.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/JumpyBootsClientHandler.java deleted file mode 100644 index 9e0bd937..00000000 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/JumpyBootsClientHandler.java +++ /dev/null @@ -1,117 +0,0 @@ -package com.craisinlord.antarchy.forge.client; - -import net.minecraftforge.fml.common.Mod; - -import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.item.JumpyBootsHelper; -import com.craisinlord.antarchy.content.item.JumpyBootsItem; -import com.craisinlord.antarchy.content.network.JumpyBootsLaunchPayload; -import net.minecraft.client.Minecraft; -import net.minecraft.client.player.LocalPlayer; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.event.TickEvent; -import net.minecraftforge.client.event.RenderGuiOverlayEvent; -import net.minecraftforge.client.gui.overlay.VanillaGuiOverlay; -import com.craisinlord.antarchy.forge.network.AntarchyForgeNetworkCore; - -@Mod.EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) -public final class JumpyBootsClientHandler { - private static int chargeTicks = 0; - private static boolean wasCharging = false; - private static int primeWindowTicks = 0; - private static int storedChargeTicks = 0; - - private JumpyBootsClientHandler() { - } - - @SubscribeEvent - public static void onClientTick(TickEvent.ClientTickEvent event) { - if (event.phase != TickEvent.Phase.END) return; - Minecraft mc = Minecraft.getInstance(); - LocalPlayer player = mc.player; - - if (player == null || mc.level == null || mc.screen != null) { - reset(); - return; - } - - if (!JumpyBootsItem.isWearingJumpyBoots(player)) { - reset(); - return; - } - - boolean onGround = player.onGround(); - boolean sneaking = player.input.shiftKeyDown; - boolean jumpPressed = mc.options.keyJump.consumeClick(); - - if (primeWindowTicks > 0) { - primeWindowTicks--; - if (jumpPressed) { - AntarchyForgeNetworkCore.sendToServer(new JumpyBootsLaunchPayload(storedChargeTicks, player.isSprinting())); - reset(); - return; - } - if (primeWindowTicks <= 0) { - reset(); - } - return; - } - - if (!onGround) { - chargeTicks = 0; - wasCharging = false; - return; - } - - if (jumpPressed && wasCharging && chargeTicks > 0) { - AntarchyForgeNetworkCore.sendToServer(new JumpyBootsLaunchPayload(chargeTicks, player.isSprinting())); - reset(); - return; - } - - if (sneaking) { - chargeTicks = Math.min(chargeTicks + 1, JumpyBootsHelper.CHARGE_TICKS_MAX); - wasCharging = true; - } else if (wasCharging && chargeTicks > 0) { - storedChargeTicks = chargeTicks; - if (jumpPressed) { - AntarchyForgeNetworkCore.sendToServer(new JumpyBootsLaunchPayload(storedChargeTicks, player.isSprinting())); - reset(); - return; - } - primeWindowTicks = JumpyBootsHelper.PRIME_WINDOW_TICKS; - chargeTicks = 0; - wasCharging = false; - } else { - chargeTicks = 0; - wasCharging = false; - } - } - - private static void reset() { - chargeTicks = 0; - wasCharging = false; - primeWindowTicks = 0; - storedChargeTicks = 0; - } - - @SubscribeEvent - public static void onRenderGuiLayer(RenderGuiOverlayEvent.Pre event) { - Minecraft mc = Minecraft.getInstance(); - if (mc.player == null || !JumpyBootsItem.isWearingJumpyBoots(mc.player) || !isCharging()) { - return; - } - if (event.getOverlay().id().equals(VanillaGuiOverlay.EXPERIENCE_BAR.id())) { - event.setCanceled(true); - } - } - - public static boolean isCharging() { - return chargeTicks > 0; - } - - public static int getChargeTicks() { - return chargeTicks; - } -} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/JumpyBootsHudRenderer.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/JumpyBootsHudRenderer.java deleted file mode 100644 index e0616169..00000000 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/JumpyBootsHudRenderer.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.craisinlord.antarchy.forge.client; - -import com.craisinlord.antarchy.content.item.JumpyBootsHelper; -import com.craisinlord.antarchy.content.item.JumpyBootsItem; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.util.Mth; -import net.minecraft.world.entity.player.Player; - -public final class JumpyBootsHudRenderer { - private static final ResourceLocation GUI_ICONS_LOCATION = ResourceLocation.withDefaultNamespace("textures/gui/icons.png"); - private static final int BAR_WIDTH = 182; - private static final int BAR_HEIGHT = 5; - - private JumpyBootsHudRenderer() { - } - - public static void render(GuiGraphics guiGraphics) { - Minecraft mc = Minecraft.getInstance(); - Player player = mc.player; - if (player == null || mc.screen != null || player.isDeadOrDying()) { - return; - } - if (!JumpyBootsItem.isWearingJumpyBoots(player)) { - return; - } - if (!JumpyBootsClientHandler.isCharging()) { - return; - } - - int width = mc.getWindow().getGuiScaledWidth(); - int height = mc.getWindow().getGuiScaledHeight(); - int x0 = width / 2 - BAR_WIDTH / 2; - int y0 = height - 29; - - guiGraphics.blit(GUI_ICONS_LOCATION, x0, y0, 0, 84, BAR_WIDTH, BAR_HEIGHT); - - int chargeTicks = JumpyBootsClientHandler.getChargeTicks(); - float chargeRatio = Mth.clamp(chargeTicks / (float) JumpyBootsHelper.CHARGE_TICKS_MAX, 0.0F, 1.0F); - int filledWidth = Mth.clamp((int) (chargeRatio * BAR_WIDTH), 0, BAR_WIDTH); - if (filledWidth > 0) { - guiGraphics.setColor(1.0F, 1.0F, 1.0F, 0.35F + chargeRatio * 0.65F); - guiGraphics.blit(GUI_ICONS_LOCATION, x0, y0, 0, 89, filledWidth, BAR_HEIGHT); - guiGraphics.setColor(1.0F, 1.0F, 1.0F, 1.0F); - } - } -} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/LucidSoundHandler.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/LucidSoundHandler.java index 3382e5da..be7ff562 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/LucidSoundHandler.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/LucidSoundHandler.java @@ -1,7 +1,5 @@ package com.craisinlord.antarchy.forge.client; -import net.minecraftforge.fml.common.Mod; - import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; import com.craisinlord.antarchy.forge.registry.AntarchyForgeSounds; @@ -14,6 +12,7 @@ import net.minecraft.sounds.SoundSource; import net.minecraft.util.RandomSource; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; import net.minecraftforge.event.TickEvent; import org.jetbrains.annotations.Nullable; @@ -26,9 +25,11 @@ import java.util.UUID; @Mod.EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) public final class LucidSoundHandler { private static final double START_SCAN_RADIUS = 96.0D; + private static final int DISCOVERY_SCAN_INTERVAL_TICKS = 10; private static final int ANIM_ATTACK = 2; private static final int ANIM_DEATH = 3; private static final Map ACTIVE_LOOPS = new HashMap<>(); + private static long nextDiscoveryScanTick; private LucidSoundHandler() { } @@ -48,7 +49,21 @@ public final class LucidSoundHandler { } pruneStaleLoops(mc); - refreshNearbyLucids(mc); + refreshActiveLoops(mc); + + long gameTime = mc.level.getGameTime(); + if (gameTime >= nextDiscoveryScanTick) { + nextDiscoveryScanTick = gameTime + DISCOVERY_SCAN_INTERVAL_TICKS; + refreshNearbyLucids(mc); + } + } + + private static void refreshActiveLoops(Minecraft mc) { + for (LucidLoopSet set : ACTIVE_LOOPS.values()) { + if (set.isValid()) { + set.refresh(mc, set.entity); + } + } } private static void refreshNearbyLucids(Minecraft mc) { @@ -96,6 +111,7 @@ public final class LucidSoundHandler { set.stop(mc); } ACTIVE_LOOPS.clear(); + nextDiscoveryScanTick = 0L; } private static final class LucidLoopSet { diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/MogglesClientRenderer.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/MogglesClientRenderer.java index 581a0f64..f1152ee8 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/MogglesClientRenderer.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/MogglesClientRenderer.java @@ -1,7 +1,5 @@ package com.craisinlord.antarchy.forge.client; -import net.minecraftforge.fml.common.Mod; - import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.item.MogglesCaveDetector; import com.craisinlord.antarchy.content.item.MogglesLogic; @@ -13,9 +11,10 @@ import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec3; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; import net.minecraftforge.event.TickEvent; -@Mod.EventBusSubscriber(modid = Antarchy.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE, value = Dist.CLIENT) +@Mod.EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) public final class MogglesClientRenderer { private MogglesClientRenderer() {} @@ -32,13 +31,11 @@ public final class MogglesClientRenderer { return; } - // Run cave BFS (internally rate-limited to every 40 ticks). MogglesCaveDetector.tick(player, level); BlockPos target = MogglesCaveDetector.getCaveTarget(); if (target == null) return; - // Spawn particle trail toward the cave every 2 ticks. if (level.getGameTime() % 2 != 0) return; Vec3 eye = player.getEyePosition(); diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/ParalyzedClientHandler.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/ParalyzedClientHandler.java index 704d380b..41ecdeb6 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/ParalyzedClientHandler.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/ParalyzedClientHandler.java @@ -1,7 +1,5 @@ package com.craisinlord.antarchy.forge.client; -import net.minecraftforge.fml.common.Mod; - import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.forge.registry.AntarchyForgeMisc; import net.minecraft.client.Minecraft; @@ -14,6 +12,7 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; import net.minecraftforge.event.TickEvent; import net.minecraftforge.client.event.MovementInputUpdateEvent; diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/ParalyzedStoneRenderHandler.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/ParalyzedStoneRenderHandler.java index 0055fbb3..cdd58fed 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/ParalyzedStoneRenderHandler.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/ParalyzedStoneRenderHandler.java @@ -1,10 +1,9 @@ package com.craisinlord.antarchy.forge.client; -import net.minecraftforge.fml.common.Mod; - import com.craisinlord.antarchy.Antarchy; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; import software.bernie.geckolib.event.GeoRenderEvent; @Mod.EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/PortalGunClientHandler.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/PortalGunClientHandler.java new file mode 100644 index 00000000..94cbaa5b --- /dev/null +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/PortalGunClientHandler.java @@ -0,0 +1,61 @@ +package com.craisinlord.antarchy.forge.client; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.item.PortalGunItem; +import com.craisinlord.antarchy.content.client.PortalGunZoomClientState; +import com.craisinlord.antarchy.content.network.PortalGunPrimaryPayload; +import net.minecraft.client.Minecraft; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.event.TickEvent; +import com.craisinlord.antarchy.forge.network.AntarchyForgeNetworkCore; + +@Mod.EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) +public final class PortalGunClientHandler { + private static boolean lastAttackDown; + + private PortalGunClientHandler() { + } + + @SubscribeEvent + public static void onClientTick(TickEvent.ClientTickEvent event) { + if (event.phase != TickEvent.Phase.END) return; + Minecraft mc = Minecraft.getInstance(); + if (mc.player == null) { + com.craisinlord.antarchy.content.client.PortalGunResetClientState.clear(); + } + com.craisinlord.antarchy.content.client.PortalGunIndicatorClientState.setRequestSender(com.craisinlord.antarchy.forge.network.AntarchyForgeNetworkCore::sendToServer); + com.craisinlord.antarchy.content.client.MoonSkyTracker.setSender(com.craisinlord.antarchy.forge.network.AntarchyForgeNetworkCore::sendToServer); + com.craisinlord.antarchy.content.portalgun.PortalGunMoonAimSync.setClientReporter(com.craisinlord.antarchy.content.client.MoonSkyTracker::report); + boolean hasPortalGun = mc.player != null && (mc.player.getMainHandItem().getItem() instanceof PortalGunItem || mc.player.getOffhandItem().getItem() instanceof PortalGunItem); + boolean gameplayInput = mc.screen == null; + boolean held = hasPortalGun && gameplayInput; + boolean zoomPressed = AntarchyKeyBindings.consumePortalGunZoomPressed(); + PortalGunZoomClientState.tick(mc, hasPortalGun, zoomPressed && gameplayInput); + boolean resetActive = com.craisinlord.antarchy.content.client.PortalGunResetClientState.tick( + mc, + held, + AntarchyKeyBindings.isPortalGunResetDown(), + com.craisinlord.antarchy.forge.network.AntarchyForgeNetworkCore::sendToServer + ); + if (mc.player == null || mc.level == null || mc.screen != null) { + lastAttackDown = false; + return; + } + + boolean offhand = !(mc.player.getMainHandItem().getItem() instanceof PortalGunItem) + && mc.player.getOffhandItem().getItem() instanceof PortalGunItem; + if (!offhand && !(mc.player.getMainHandItem().getItem() instanceof PortalGunItem)) { + lastAttackDown = false; + return; + } + + boolean attackDown = mc.options.keyAttack.isDown(); + if (attackDown && !lastAttackDown && !resetActive) { + com.craisinlord.antarchy.content.portalgun.PortalGunMoonAimSync.reportFromClient(); + AntarchyForgeNetworkCore.sendToServer(new PortalGunPrimaryPayload(offhand)); + } + lastAttackDown = attackDown; + } +} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/QueenMusicClientHandler.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/QueenMusicClientHandler.java new file mode 100644 index 00000000..51d5d0a6 --- /dev/null +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/QueenMusicClientHandler.java @@ -0,0 +1,23 @@ +package com.craisinlord.antarchy.forge.client; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.client.QueenMusicHandler; +import com.craisinlord.antarchy.forge.registry.AntarchyForgeSounds; +import net.minecraft.client.Minecraft; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.event.TickEvent; + +@Mod.EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) +public final class QueenMusicClientHandler { + private QueenMusicClientHandler() { + } + + @SubscribeEvent + public static void onClientTick(TickEvent.ClientTickEvent event) { + if (event.phase != TickEvent.Phase.END) return; + Minecraft minecraft = Minecraft.getInstance(); + QueenMusicHandler.tick(minecraft, AntarchyForgeSounds.THE_QUEEN.get()); + } +} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/RoyalBoundaryClientHandler.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/RoyalBoundaryClientHandler.java new file mode 100644 index 00000000..a814d200 --- /dev/null +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/RoyalBoundaryClientHandler.java @@ -0,0 +1,26 @@ +package com.craisinlord.antarchy.forge.client; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.network.ActivateRoyalBoundaryPayload; +import net.minecraft.client.Minecraft; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.event.TickEvent; +import com.craisinlord.antarchy.forge.network.AntarchyForgeNetworkCore; + +@Mod.EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) +public final class RoyalBoundaryClientHandler { + private RoyalBoundaryClientHandler() { + } + + @SubscribeEvent + public static void onClientTick(TickEvent.ClientTickEvent event) { + if (event.phase != TickEvent.Phase.END) return; + Minecraft minecraft = Minecraft.getInstance(); + if (minecraft.player == null || minecraft.level == null) return; + while (AntarchyKeyBindings.consumeRoyalBoundaryPressed()) { + AntarchyForgeNetworkCore.sendToServer(new ActivateRoyalBoundaryPayload()); + } + } +} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/RoyalInversionClientHandler.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/RoyalInversionClientHandler.java new file mode 100644 index 00000000..325c2c48 --- /dev/null +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/RoyalInversionClientHandler.java @@ -0,0 +1,28 @@ +package com.craisinlord.antarchy.forge.client; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.network.ToggleRoyalInversionPayload; +import net.minecraft.client.Minecraft; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.event.TickEvent; +import com.craisinlord.antarchy.forge.network.AntarchyForgeNetworkCore; + +@Mod.EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) +public final class RoyalInversionClientHandler { + private RoyalInversionClientHandler() { + } + + @SubscribeEvent + public static void onClientTick(TickEvent.ClientTickEvent event) { + if (event.phase != TickEvent.Phase.END) return; + Minecraft minecraft = Minecraft.getInstance(); + if (minecraft.player == null || minecraft.level == null) { + return; + } + while (AntarchyKeyBindings.consumeRoyalInversionTogglePressed()) { + AntarchyForgeNetworkCore.sendToServer(new ToggleRoyalInversionPayload()); + } + } +} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/RoyalMountClientHandler.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/RoyalMountClientHandler.java new file mode 100644 index 00000000..97ccdd99 --- /dev/null +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/RoyalMountClientHandler.java @@ -0,0 +1,87 @@ +package com.craisinlord.antarchy.forge.client; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.royal.RoyalMountEntity; +import com.craisinlord.antarchy.content.network.RoyalMountActionPayload; +import com.craisinlord.antarchy.content.network.RoyalMountVerticalPayload; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.world.phys.EntityHitResult; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.event.TickEvent; +import com.craisinlord.antarchy.forge.network.AntarchyForgeNetworkCore; + +@Mod.EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) +public final class RoyalMountClientHandler { + private static boolean wasAttack; + private static boolean wasSpecial; + private static boolean wasFlightToggle; + private static boolean wasAscend; + private static boolean wasDescend; + private static boolean wasUse; + + private RoyalMountClientHandler() { + } + + @SubscribeEvent + public static void onClientTick(TickEvent.ClientTickEvent event) { + if (event.phase != TickEvent.Phase.END) return; + Minecraft mc = Minecraft.getInstance(); + LocalPlayer player = mc.player; + if (player == null || mc.screen != null) { + reset(); + wasUse = false; + return; + } + if (!(player.getVehicle() instanceof RoyalMountEntity)) { + reset(); + boolean use = mc.options.keyUse.isDown(); + if (use && !wasUse && !(mc.hitResult instanceof EntityHitResult) + && RoyalMountEntity.findAssistedMountTarget(player, 1.0D) != null) { + AntarchyForgeNetworkCore.sendToServer(new RoyalMountActionPayload(RoyalMountActionPayload.MOUNT)); + } + wasUse = use; + return; + } + wasUse = mc.options.keyUse.isDown(); + + boolean attack = mc.options.keyAttack.isDown(); + if (attack && !wasAttack) { + AntarchyForgeNetworkCore.sendToServer(new RoyalMountActionPayload(RoyalMountActionPayload.BITE)); + } + wasAttack = attack; + + boolean special = AntarchyKeyBindings.isMountSpecialPressed(); + if (special && !wasSpecial) { + AntarchyForgeNetworkCore.sendToServer(new RoyalMountActionPayload(RoyalMountActionPayload.SPIT)); + } + wasSpecial = special; + + boolean flightToggle = AntarchyKeyBindings.isMountFlightTogglePressed(); + if (flightToggle && !wasFlightToggle) { + AntarchyForgeNetworkCore.sendToServer(new RoyalMountActionPayload(RoyalMountActionPayload.FLIGHT_TOGGLE)); + } + wasFlightToggle = flightToggle; + + boolean ascend = mc.options.keyJump.isDown(); + boolean descend = mc.options.keyShift.isDown(); + if (ascend != wasAscend || descend != wasDescend) { + AntarchyForgeNetworkCore.sendToServer(new RoyalMountVerticalPayload(ascend, descend)); + wasAscend = ascend; + wasDescend = descend; + } + } + + private static void reset() { + if (wasAscend || wasDescend) { + AntarchyForgeNetworkCore.sendToServer(new RoyalMountVerticalPayload(false, false)); + } + wasAttack = false; + wasSpecial = false; + wasFlightToggle = false; + wasAscend = false; + wasDescend = false; + } +} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/SizeRaySoundHandlerForge.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/SizeRaySoundHandlerForge.java index 7e631b0e..e8d589e9 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/SizeRaySoundHandlerForge.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/SizeRaySoundHandlerForge.java @@ -4,9 +4,9 @@ import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.client.SizeRaySoundHandler; import net.minecraft.client.Minecraft; import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.event.TickEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.event.TickEvent; @Mod.EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) public final class SizeRaySoundHandlerForge { @@ -15,9 +15,7 @@ public final class SizeRaySoundHandlerForge { @SubscribeEvent public static void onClientTick(TickEvent.ClientTickEvent event) { - if (event.phase != TickEvent.Phase.END) { - return; - } + if (event.phase != TickEvent.Phase.END) return; SizeRaySoundHandler.tick(Minecraft.getInstance()); } } diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/SpringyBootsClientHandler.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/SpringyBootsClientHandler.java new file mode 100644 index 00000000..fb0717aa --- /dev/null +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/SpringyBootsClientHandler.java @@ -0,0 +1,116 @@ +package com.craisinlord.antarchy.forge.client; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.item.SpringyBootsHelper; +import com.craisinlord.antarchy.content.item.SpringyBootsItem; +import com.craisinlord.antarchy.content.network.SpringyBootsLaunchPayload; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.event.TickEvent; +import net.minecraftforge.client.event.RenderGuiOverlayEvent; +import net.minecraftforge.client.gui.overlay.VanillaGuiOverlay; +import com.craisinlord.antarchy.forge.network.AntarchyForgeNetworkCore; + +@Mod.EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) +public final class SpringyBootsClientHandler { + private static int chargeTicks = 0; + private static boolean wasCharging = false; + private static int primeWindowTicks = 0; + private static int storedChargeTicks = 0; + + private SpringyBootsClientHandler() { + } + + @SubscribeEvent + public static void onClientTick(TickEvent.ClientTickEvent event) { + if (event.phase != TickEvent.Phase.END) return; + Minecraft mc = Minecraft.getInstance(); + LocalPlayer player = mc.player; + + if (player == null || mc.level == null || mc.screen != null) { + reset(); + return; + } + + if (!SpringyBootsItem.isWearingSpringyBoots(player)) { + reset(); + return; + } + + boolean onGround = player.onGround(); + boolean sneaking = player.input.shiftKeyDown; + boolean jumpPressed = mc.options.keyJump.consumeClick(); + + if (primeWindowTicks > 0) { + primeWindowTicks--; + if (jumpPressed) { + AntarchyForgeNetworkCore.sendToServer(new SpringyBootsLaunchPayload(storedChargeTicks, player.isSprinting())); + reset(); + return; + } + if (primeWindowTicks <= 0) { + reset(); + } + return; + } + + if (!onGround) { + chargeTicks = 0; + wasCharging = false; + return; + } + + if (jumpPressed && wasCharging && chargeTicks > 0) { + AntarchyForgeNetworkCore.sendToServer(new SpringyBootsLaunchPayload(chargeTicks, player.isSprinting())); + reset(); + return; + } + + if (sneaking) { + chargeTicks = Math.min(chargeTicks + 1, SpringyBootsHelper.CHARGE_TICKS_MAX); + wasCharging = true; + } else if (wasCharging && chargeTicks > 0) { + storedChargeTicks = chargeTicks; + if (jumpPressed) { + AntarchyForgeNetworkCore.sendToServer(new SpringyBootsLaunchPayload(storedChargeTicks, player.isSprinting())); + reset(); + return; + } + primeWindowTicks = SpringyBootsHelper.PRIME_WINDOW_TICKS; + chargeTicks = 0; + wasCharging = false; + } else { + chargeTicks = 0; + wasCharging = false; + } + } + + private static void reset() { + chargeTicks = 0; + wasCharging = false; + primeWindowTicks = 0; + storedChargeTicks = 0; + } + + @SubscribeEvent + public static void onRenderGuiLayer(RenderGuiOverlayEvent.Pre event) { + Minecraft mc = Minecraft.getInstance(); + if (mc.player == null || !SpringyBootsItem.isWearingSpringyBoots(mc.player) || !isCharging()) { + return; + } + if (event.getOverlay().id().equals(VanillaGuiOverlay.EXPERIENCE_BAR.id())) { + event.setCanceled(true); + } + } + + public static boolean isCharging() { + return chargeTicks > 0; + } + + public static int getChargeTicks() { + return chargeTicks; + } +} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/SpringyBootsHudRenderer.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/SpringyBootsHudRenderer.java new file mode 100644 index 00000000..2a505dc8 --- /dev/null +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/SpringyBootsHudRenderer.java @@ -0,0 +1,48 @@ +package com.craisinlord.antarchy.forge.client; + +import com.craisinlord.antarchy.content.item.SpringyBootsHelper; +import com.craisinlord.antarchy.content.item.SpringyBootsItem; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.player.Player; + +public final class SpringyBootsHudRenderer { + private static final ResourceLocation GUI_ICONS_LOCATION = new ResourceLocation("textures/gui/icons.png"); + private static final int BAR_WIDTH = 182; + private static final int BAR_HEIGHT = 5; + + private SpringyBootsHudRenderer() { + } + + public static void render(GuiGraphics guiGraphics) { + Minecraft mc = Minecraft.getInstance(); + Player player = mc.player; + if (player == null || mc.screen != null || player.isDeadOrDying()) { + return; + } + if (!SpringyBootsItem.isWearingSpringyBoots(player)) { + return; + } + if (!SpringyBootsClientHandler.isCharging()) { + return; + } + + int width = mc.getWindow().getGuiScaledWidth(); + int height = mc.getWindow().getGuiScaledHeight(); + int x0 = width / 2 - BAR_WIDTH / 2; + int y0 = height - 29; + + guiGraphics.blit(GUI_ICONS_LOCATION, x0, y0, 0, 84, BAR_WIDTH, BAR_HEIGHT); + + int chargeTicks = SpringyBootsClientHandler.getChargeTicks(); + float chargeRatio = Mth.clamp(chargeTicks / (float) SpringyBootsHelper.CHARGE_TICKS_MAX, 0.0F, 1.0F); + int filledWidth = Mth.clamp((int) (chargeRatio * BAR_WIDTH), 0, BAR_WIDTH); + if (filledWidth > 0) { + guiGraphics.setColor(1.0F, 1.0F, 1.0F, 0.35F + chargeRatio * 0.65F); + guiGraphics.blit(GUI_ICONS_LOCATION, x0, y0, 0, 89, filledWidth, BAR_HEIGHT); + guiGraphics.setColor(1.0F, 1.0F, 1.0F, 1.0F); + } + } +} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/StinkySoundHandler.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/StinkySoundHandler.java index bd4d4d58..c05c5c79 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/StinkySoundHandler.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/StinkySoundHandler.java @@ -1,7 +1,5 @@ package com.craisinlord.antarchy.forge.client; -import net.minecraftforge.fml.common.Mod; - import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchySoundEvents; @@ -9,9 +7,10 @@ import net.minecraft.client.Minecraft; import net.minecraft.sounds.SoundSource; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; import net.minecraftforge.event.TickEvent; -@Mod.EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.FORGE) +@Mod.EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) public final class StinkySoundHandler { private static final int FIRST_SOUND_DELAY = 20; private static final int MIN_INTERVAL = 60; diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/TearIdleSoundHandler.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/TearIdleSoundHandler.java new file mode 100644 index 00000000..2dfa6dbc --- /dev/null +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/TearIdleSoundHandler.java @@ -0,0 +1,118 @@ +package com.craisinlord.antarchy.forge.client; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.antarchy.content.entity.portal.DimensionalTearEntity; +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.sounds.AbstractTickableSoundInstance; +import net.minecraft.sounds.SoundSource; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.event.TickEvent; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +@Mod.EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) +public final class TearIdleSoundHandler { + private static final double START_SCAN_RADIUS = 64.0D; + private static final int DISCOVERY_SCAN_INTERVAL_TICKS = 10; + private static final Map ACTIVE_LOOPS = new HashMap<>(); + private static long nextDiscoveryScanTick; + + private TearIdleSoundHandler() { + } + + @SubscribeEvent + public static void onClientTick(TickEvent.ClientTickEvent event) { + if (event.phase != TickEvent.Phase.END) return; + Minecraft mc = Minecraft.getInstance(); + if (mc.level == null || mc.player == null || mc.isPaused()) { + resetAll(mc); + return; + } + + pruneStaleLoops(mc); + + long gameTime = mc.level.getGameTime(); + if (gameTime >= nextDiscoveryScanTick) { + nextDiscoveryScanTick = gameTime + DISCOVERY_SCAN_INTERVAL_TICKS; + discoverNearbyTears(mc); + } + } + + private static void discoverNearbyTears(Minecraft mc) { + List tears = mc.level.getEntitiesOfClass( + DimensionalTearEntity.class, + mc.player.getBoundingBox().inflate(START_SCAN_RADIUS) + ); + + for (DimensionalTearEntity tear : tears) { + if (!tear.shouldPlayIdleSound() || ACTIVE_LOOPS.containsKey(tear.getUUID())) { + continue; + } + TearIdleSound sound = new TearIdleSound(tear); + ACTIVE_LOOPS.put(tear.getUUID(), sound); + mc.getSoundManager().play(sound); + } + } + + private static void pruneStaleLoops(Minecraft mc) { + Iterator> iterator = ACTIVE_LOOPS.entrySet().iterator(); + while (iterator.hasNext()) { + TearIdleSound sound = iterator.next().getValue(); + if (!sound.isValid()) { + mc.getSoundManager().stop(sound); + iterator.remove(); + } + } + } + + private static void resetAll(Minecraft mc) { + for (TearIdleSound sound : ACTIVE_LOOPS.values()) { + mc.getSoundManager().stop(sound); + } + ACTIVE_LOOPS.clear(); + nextDiscoveryScanTick = 0L; + } + + private static final class TearIdleSound extends AbstractTickableSoundInstance { + private final DimensionalTearEntity tear; + + private TearIdleSound(DimensionalTearEntity tear) { + super(AntarchySoundEvents.DIMENSIONAL_TEAR_IDLE.get(), SoundSource.HOSTILE, tear.level().getRandom()); + this.tear = tear; + this.looping = true; + this.delay = 0; + this.volume = 0.6F; + this.pitch = 1.0F; + this.x = tear.getX(); + this.y = tear.getY(); + this.z = tear.getZ(); + } + + private boolean isValid() { + return !this.tear.isRemoved() && this.tear.shouldPlayIdleSound(); + } + + @Override + public void tick() { + if (!this.isValid()) { + this.stop(); + return; + } + this.x = this.tear.getX(); + this.y = this.tear.getY(); + this.z = this.tear.getZ(); + } + + @Override + public boolean canStartSilent() { + return true; + } + } +} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/ThoraxisGravityCameraHandler.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/ThoraxisGravityCameraHandler.java index afd39bca..b4a62858 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/ThoraxisGravityCameraHandler.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/ThoraxisGravityCameraHandler.java @@ -1,10 +1,9 @@ package com.craisinlord.antarchy.forge.client; -import net.minecraftforge.fml.common.Mod; - import com.craisinlord.antarchy.Antarchy; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; import net.minecraftforge.client.event.ViewportEvent; @Mod.EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/TigerEyeCamouflageClientHandler.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/TigerEyeCamouflageClientHandler.java index 57f3f629..fb8e99fb 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/TigerEyeCamouflageClientHandler.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/TigerEyeCamouflageClientHandler.java @@ -1,16 +1,15 @@ package com.craisinlord.antarchy.forge.client; -import net.minecraftforge.fml.common.Mod; - import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.client.TigerEyeCamouflageClientState; import com.craisinlord.antarchy.content.client.renderer.TigerEyeCamouflageTextureResolver; import com.craisinlord.antarchy.content.network.ToggleTigerEyeCamouflagePayload; -import com.craisinlord.antarchy.forge.network.AntarchyForgeNetworkCore; import net.minecraft.client.Minecraft; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; import net.minecraftforge.event.TickEvent; +import com.craisinlord.antarchy.forge.network.AntarchyForgeNetworkCore; @Mod.EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) public final class TigerEyeCamouflageClientHandler { @@ -20,7 +19,6 @@ public final class TigerEyeCamouflageClientHandler { @SubscribeEvent public static void onClientTick(TickEvent.ClientTickEvent event) { if (event.phase != TickEvent.Phase.END) return; - Minecraft minecraft = Minecraft.getInstance(); if (minecraft.player == null || minecraft.level == null) { TigerEyeCamouflageClientState.clear(); diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/TriffidGooHudRenderer.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/TriffidGooHudRenderer.java deleted file mode 100644 index 9ae5480d..00000000 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/TriffidGooHudRenderer.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.craisinlord.antarchy.forge.client; - -import com.craisinlord.antarchy.forge.registry.AntarchyForgeBlocks; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.core.BlockPos; -import net.minecraft.util.Mth; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.block.Block; - -public final class TriffidGooHudRenderer { - private TriffidGooHudRenderer() { - } - private static float fadeProgress = 0f; - private static final float FADE_SPEED = 0.05f; - private static final int MAX_ALPHA = 0x55; - - public static void render(GuiGraphics guiGraphics) { - Minecraft minecraft = Minecraft.getInstance(); - Player player = minecraft.player; - if (player == null || player.isDeadOrDying()) { - fadeProgress = Math.max(0f, fadeProgress - FADE_SPEED); - if (fadeProgress <= 0f) return; - } else { - Block goo = AntarchyForgeBlocks.TRIFFID_GOO_BLOCK.get(); - BlockPos feet = player.blockPosition(); - boolean inGoo = player.level().getBlockState(feet).is(goo) - || player.level().getBlockState(feet.above()).is(goo); - - if (inGoo) { - fadeProgress = Math.min(1f, fadeProgress + FADE_SPEED); - } else { - fadeProgress = Math.max(0f, fadeProgress - FADE_SPEED); - } - - if (fadeProgress <= 0f || minecraft.screen != null) return; - } - - int alpha = Mth.floor(MAX_ALPHA * fadeProgress); - int color = (alpha << 24) | 0x003300; - int width = minecraft.getWindow().getGuiScaledWidth(); - int height = minecraft.getWindow().getGuiScaledHeight(); - guiGraphics.fill(0, 0, width, height, color); - } -} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/WaspSoundHandler.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/WaspSoundHandler.java index c87ee0d2..86a6b46a 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/WaspSoundHandler.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/WaspSoundHandler.java @@ -1,7 +1,5 @@ package com.craisinlord.antarchy.forge.client; -import net.minecraftforge.fml.common.Mod; - import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.entity.WaspEntity; import com.craisinlord.antarchy.forge.registry.AntarchyForgeSounds; @@ -17,6 +15,7 @@ import net.minecraft.sounds.SoundSource; import net.minecraft.util.RandomSource; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; import net.minecraftforge.event.TickEvent; import org.jetbrains.annotations.Nullable; @@ -31,7 +30,6 @@ public final class WaspSoundHandler { @SubscribeEvent public static void onClientTick(TickEvent.ClientTickEvent event) { if (event.phase != TickEvent.Phase.END) return; - // Ambient buzzing now comes from the wasp entity itself. } private static void refreshNearbyWasps(Minecraft mc) { diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/WormHookTetherRenderHandler.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/WormHookTetherRenderHandler.java new file mode 100644 index 00000000..b454ff4a --- /dev/null +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/WormHookTetherRenderHandler.java @@ -0,0 +1,175 @@ +package com.craisinlord.antarchy.forge.client; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.client.WormHookTetherClientState; +import com.craisinlord.antarchy.content.item.WormHookItem; +import com.craisinlord.antarchy.content.util.WormHookRope; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.BufferBuilder; +import com.mojang.blaze3d.vertex.BufferUploader; +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.Tesselator; +import com.mojang.blaze3d.vertex.VertexFormat; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import net.minecraft.client.Camera; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.HumanoidArm; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.phys.Vec3; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.event.TickEvent; +import net.minecraftforge.client.event.RenderLevelStageEvent; +import org.joml.Matrix4f; + +@Mod.EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) +public final class WormHookTetherRenderHandler { + private static final Map ROPES = new HashMap<>(); + + private WormHookTetherRenderHandler() { + } + + @SubscribeEvent + public static void onClientTick(TickEvent.ClientTickEvent event) { + if (event.phase != TickEvent.Phase.END) return; + Minecraft minecraft = Minecraft.getInstance(); + if (minecraft.level == null) { + WormHookTetherClientState.clear(); + ROPES.clear(); + return; + } + + Map tethers = WormHookTetherClientState.snapshot(); + ROPES.keySet().removeIf(playerId -> !tethers.containsKey(playerId)); + + for (Map.Entry entry : tethers.entrySet()) { + Entity source = minecraft.level.getEntity(entry.getKey()); + Entity hook = minecraft.level.getEntity(entry.getValue()); + if (!(source instanceof Player player) || hook == null || hook.isRemoved()) { + continue; + } + + Vec3 anchor = hook.position(); + Vec3 playerEye = player.getEyePosition(); + WormHookRope rope = ROPES.computeIfAbsent(entry.getKey(), id -> new WormHookRope(anchor, playerEye)); + rope.update(hook, anchor, playerEye, anchor.distanceTo(playerEye) + 32.0D); + } + } + + @SubscribeEvent + public static void onRenderLevelStage(RenderLevelStageEvent event) { + if (event.getStage() != RenderLevelStageEvent.Stage.AFTER_PARTICLES) { + return; + } + + Minecraft minecraft = Minecraft.getInstance(); + if (minecraft.level == null) { + return; + } + + Map tethers = WormHookTetherClientState.snapshot(); + if (tethers.isEmpty()) { + return; + } + + Camera camera = event.getCamera(); + Vec3 cameraPos = camera.getPosition(); + Matrix4f pose = event.getPoseStack().last().pose(); + + RenderSystem.enableBlend(); + RenderSystem.defaultBlendFunc(); + RenderSystem.depthMask(false); + RenderSystem.disableCull(); + RenderSystem.setShader(GameRenderer::getPositionColorShader); + + BufferBuilder buffer = Tesselator.getInstance().getBuilder(); + buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); + for (Map.Entry entry : tethers.entrySet()) { + Entity source = minecraft.level.getEntity(entry.getKey()); + Entity hook = minecraft.level.getEntity(entry.getValue()); + if (!(source instanceof Player player) || hook == null || hook.isRemoved()) { + continue; + } + + WormHookRope rope = ROPES.get(entry.getKey()); + List points = rope != null ? rope.points() : List.of(hook.position(), player.getEyePosition()); + + Vec3 handPos = tetherStart(player, event.getPartialTick()); + for (int i = points.size() - 1; i > 0; i--) { + Vec3 start = i == points.size() - 1 ? handPos : points.get(i); + Vec3 end = points.get(i - 1); + buildTether(buffer, pose, start, end, cameraPos); + } + } + + BufferUploader.drawWithShader(buffer.end()); + + RenderSystem.enableCull(); + RenderSystem.depthMask(true); + RenderSystem.disableBlend(); + } + + private static Vec3 tetherStart(Player player, float partialTick) { + Vec3 start = player.getEyePosition(partialTick).add(0.0D, -0.45D, 0.0D); + boolean mainHandHook = player.getMainHandItem().getItem() instanceof WormHookItem; + boolean offHandHook = player.getOffhandItem().getItem() instanceof WormHookItem; + if (!mainHandHook && !offHandHook) { + return start; + } + + boolean useMainHand = mainHandHook || !offHandHook; + HumanoidArm arm = useMainHand ? player.getMainArm() : player.getMainArm().getOpposite(); + float bodyYaw = Mth.rotLerp(partialTick, player.yBodyRotO, player.yBodyRot); + double radians = Math.toRadians(bodyYaw + 90.0F); + double side = arm == HumanoidArm.RIGHT ? -0.28D : 0.28D; + return start.add(Math.cos(radians) * side, -0.12D, Math.sin(radians) * side); + } + + private static void buildTether(BufferBuilder buffer, Matrix4f pose, Vec3 start, Vec3 end, Vec3 cameraPos) { + Vec3 delta = end.subtract(start); + double length = delta.length(); + if (length < 0.001D) { + return; + } + + Vec3 forward = delta.scale(1.0D / length); + Vec3 right = forward.cross(new Vec3(0.0D, 1.0D, 0.0D)); + if (right.lengthSqr() < 1.0E-6D) { + right = forward.cross(new Vec3(1.0D, 0.0D, 0.0D)); + } + right = right.normalize(); + + int segments = Math.max(4, Mth.ceil(length * 8.0D)); + for (int i = 0; i < segments; i++) { + double t0 = (double) i / (double) segments; + double t1 = (double) (i + 1) / (double) segments; + Vec3 p0 = ropePoint(start, delta, t0, length); + Vec3 p1 = ropePoint(start, delta, t1, length); + float width = 0.04F; + Vec3 offset = right.scale(width); + + Vec3 a = p0.subtract(cameraPos); + Vec3 b = p1.subtract(cameraPos); + float shade = i % 2 == 0 ? 0.85F : 0.65F; + float red = 0.42F * shade; + float green = 0.36F * shade; + float blue = 0.24F * shade; + + buffer.vertex(pose, (float) (a.x + offset.x), (float) (a.y + offset.y), (float) (a.z + offset.z)).color(red, green, blue, 1.0F).endVertex(); + buffer.vertex(pose, (float) (a.x - offset.x), (float) (a.y - offset.y), (float) (a.z - offset.z)).color(red, green, blue, 1.0F).endVertex(); + buffer.vertex(pose, (float) (b.x - offset.x), (float) (b.y - offset.y), (float) (b.z - offset.z)).color(red, green, blue, 1.0F).endVertex(); + buffer.vertex(pose, (float) (b.x + offset.x), (float) (b.y + offset.y), (float) (b.z + offset.z)).color(red, green, blue, 1.0F).endVertex(); + } + } + + private static Vec3 ropePoint(Vec3 start, Vec3 delta, double t, double length) { + double sag = Math.sin(t * Math.PI) * Math.min(0.2D, length * 0.03D); + return start.add(delta.scale(t)).add(0.0D, -sag, 0.0D); + } +} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/content/fluid/AntiwaterFluid.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/content/fluid/AntiwaterFluid.java index f1ebadb9..e3466b5b 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/content/fluid/AntiwaterFluid.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/content/fluid/AntiwaterFluid.java @@ -1,7 +1,5 @@ package com.craisinlord.antarchy.forge.content.fluid; -import com.craisinlord.antarchy.content.fluid.AntiwaterBubbleColumnUtil; - import com.craisinlord.antarchy.forge.registry.AntarchyForgeBlocks; import java.util.HashSet; import java.util.Set; @@ -117,65 +115,11 @@ public abstract class AntiwaterFluid extends ForgeFlowingFluid { return net.minecraft.world.level.material.Fluids.EMPTY.defaultFluidState(); } - /* @Override protected void spread(Level level, BlockPos pos, FluidState state) { if (state.isEmpty()) { return; } - if (!state.isSource() && !this.isFlowingStateValid(level, pos, state)) { - level.setBlockAndUpdate(pos, net.minecraft.world.level.block.Blocks.AIR.defaultBlockState()); - this.scheduleCleanup(level, pos); - return; - } - - BlockState blockState = level.getBlockState(pos); - int nextAmount = state.getAmount() - 1; - - BlockPos abovePos = pos.above(); - BlockState aboveState = level.getBlockState(abovePos); - FluidState aboveFluid = level.getFluidState(abovePos); - - if (!aboveState.isSolid() && !aboveFluid.getType().isSame(this)) { - FluidState upwardState = this.getFlowing(8, false); - if (this.canSpreadTo(level, pos, blockState, Direction.UP, abovePos, aboveState, aboveFluid, upwardState.getType())) { - this.spreadTo(level, abovePos, aboveState, Direction.UP, upwardState); - } - } - - if (!this.canHangAt(level, pos)) { - return; - } - - if (nextAmount <= 0) { - return; - } - - for (Direction direction : Direction.Plane.HORIZONTAL) { - BlockPos targetPos = pos.relative(direction); - BlockState targetState = level.getBlockState(targetPos); - FluidState targetFluid = targetState.getFluidState(); - if (!this.canSpreadHorizontallyInto(level, targetPos)) { - continue; - } - - FluidState horizontalState = this.getFlowing(Math.min(nextAmount, MAX_HORIZONTAL_SPREAD_AMOUNT), false); - if (!this.canSpreadTo(level, pos, blockState, direction, targetPos, targetState, targetFluid, horizontalState.getType())) { - continue; - } - - this.spreadTo(level, targetPos, targetState, direction, horizontalState); - } - } - */ - - @Override - protected void spread(Level level, BlockPos pos, FluidState state) { - if (state.isEmpty()) { - return; - } - - AntiwaterBubbleColumnUtil.update(level, pos, state); if (!state.isSource() && !this.isFlowingStateValid(level, pos, state)) { level.setBlockAndUpdate(pos, net.minecraft.world.level.block.Blocks.AIR.defaultBlockState()); @@ -321,7 +265,6 @@ public abstract class AntiwaterFluid extends ForgeFlowingFluid { BlockState aboveState = level.getBlockState(abovePos); FluidState aboveFluid = level.getFluidState(abovePos); - // Antiwater flowing into water solidifies rather than displacing it if (aboveFluid.getFluidType() == ForgeMod.WATER_TYPE.get()) { BlockState result = state.isSource() ? AntarchyForgeBlocks.ANTIMETAL.get().defaultBlockState() diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/content/fluid/AntiwaterFluidType.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/content/fluid/AntiwaterFluidType.java index 02c0abfe..5117c771 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/content/fluid/AntiwaterFluidType.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/content/fluid/AntiwaterFluidType.java @@ -1,8 +1,8 @@ package com.craisinlord.antarchy.forge.content.fluid; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; +import com.craisinlord.anthology.gravity.GravityRotationUtil; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.MoverType; import net.minecraft.world.entity.item.ItemEntity; @@ -31,9 +31,9 @@ public class AntiwaterFluidType extends FluidType { motion = new Vec3(motion.x, 0.2, motion.z); } - AntarchyGravityDirection gravityDirection = AntarchyGravityApi.getGravityDirection(entity); + GravityDirection gravityDirection = GravityApi.getGravityDirection(entity); Vec3 worldMotion = gravityDirection.isInverted() - ? AntarchyGravityRotationUtil.vecPlayerToWorld(motion, gravityDirection) + ? GravityRotationUtil.vecPlayerToWorld(motion, gravityDirection) : motion; double drag = entity.isSwimming() ? 0.9 : 0.8; @@ -45,7 +45,7 @@ public class AntiwaterFluidType extends FluidType { entity.setDeltaMovement( gravityDirection.isInverted() - ? AntarchyGravityRotationUtil.vecWorldToPlayer(worldMotion, gravityDirection) + ? GravityRotationUtil.vecWorldToPlayer(worldMotion, gravityDirection) : worldMotion ); if (entity.horizontalCollision && entity.isFree( @@ -55,7 +55,7 @@ public class AntiwaterFluidType extends FluidType { Vec3 boostedWorldMotion = new Vec3(worldMotion.x, 0.3D, worldMotion.z); entity.setDeltaMovement( gravityDirection.isInverted() - ? AntarchyGravityRotationUtil.vecWorldToPlayer(boostedWorldMotion, gravityDirection) + ? GravityRotationUtil.vecWorldToPlayer(boostedWorldMotion, gravityDirection) : boostedWorldMotion ); } diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/entity/multipart/MultipartPartEntity.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/entity/multipart/MultipartPartEntity.java deleted file mode 100644 index e716f1a8..00000000 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/entity/multipart/MultipartPartEntity.java +++ /dev/null @@ -1,195 +0,0 @@ -package com.craisinlord.antarchy.forge.entity.multipart; - -import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner; -import com.craisinlord.antarchy.content.entity.multipart.MultipartFramework; -import com.craisinlord.antarchy.content.entity.multipart.MultipartPartAccess; -import com.craisinlord.antarchy.content.entity.multipart.MultipartPartDefinition; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.InteractionResult; -import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.EntityDimensions; -import net.minecraft.world.entity.OwnableEntity; -import net.minecraft.world.entity.Pose; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.phys.Vec3; -import net.minecraftforge.entity.PartEntity; -import org.jetbrains.annotations.Nullable; - -public class MultipartPartEntity extends PartEntity implements OwnableEntity, MultipartPartAccess { - private final MultipartEntityOwner owner; - private final int partIndex; - private final MultipartPartDefinition definition; - - public MultipartPartEntity(Entity parent, MultipartEntityOwner owner, int partIndex, MultipartPartDefinition definition) { - super(parent); - this.owner = owner; - this.partIndex = partIndex; - this.definition = definition; - this.setNoGravity(true); - this.refreshDimensions(); - this.antarchy$syncFromParent(); - } - - public int getPartIndex() { - return this.partIndex; - } - - public String getPartName() { - return this.definition.name(); - } - - public float getDamageMultiplier() { - return this.definition.damageMultiplier(); - } - - public MultipartPartDefinition getPartDefinition() { - return this.definition; - } - - @Override - public @Nullable java.util.UUID getOwnerUUID() { - Entity parent = this.getParent(); - return parent instanceof OwnableEntity ownable ? ownable.getOwnerUUID() : null; - } - - @Override - public EntityDimensions getDimensions(Pose pose) { - return EntityDimensions.scalable(this.definition.width(), this.definition.height()); - } - - @Override - public void antarchy$syncFromParent() { - Entity parent = this.getParent(); - if (parent == null || parent.isRemoved()) { - return; - } - - double oldX = this.getX(); - double oldY = this.getY(); - double oldZ = this.getZ(); - double yawRadians = Math.toRadians(parent.getYRot()); - Vec3 forward = new Vec3(-Math.sin(yawRadians), 0.0D, Math.cos(yawRadians)); - Vec3 right = new Vec3(forward.z, 0.0D, -forward.x); - Vec3 position = new Vec3( - parent.getX() + forward.x * this.definition.forwardOffset() + right.x * this.definition.lateralOffset(), - parent.getY() + this.definition.yOffset(), - parent.getZ() + forward.z * this.definition.forwardOffset() + right.z * this.definition.lateralOffset() - ); - this.setPos(position.x, position.y, position.z); - this.setRot(parent.getYRot(), parent.getXRot()); - this.xo = oldX; - this.yo = oldY; - this.zo = oldZ; - this.xOld = oldX; - this.yOld = oldY; - this.zOld = oldZ; - } - - @Override - public boolean is(Entity entity) { - return entity == this || entity == this.getParent(); - } - - @Override - public boolean isPickable() { - return true; - } - - @Override - public boolean isAttackable() { - return true; - } - - @Override - public boolean isPushable() { - return false; - } - - @Override - public boolean canBeCollidedWith() { - // Always true so player melee raycasts (ProjectileUtil.getEntityHitResult) can find this part. - // Physical push is prevented separately via isPushable()=false and canCollideWith()=false. - return !this.isRemoved(); - } - - @Override - public boolean canCollideWith(Entity entity) { - if (!this.definition.collisionEnabled()) { - return false; - } - - Entity parent = this.getParent(); - if (entity == parent) { - return false; - } - - if (entity instanceof PartEntity otherPart && otherPart.getParent() == parent) { - return false; - } - - return entity.canBeCollidedWith() && !this.isPassengerOfSameVehicle(entity); - } - - @Override - public boolean shouldBeSaved() { - return false; - } - - @Override - public ItemStack getPickResult() { - Entity parent = this.getParent(); - return parent == null ? ItemStack.EMPTY : parent.getPickResult(); - } - - @Override - public boolean hurt(DamageSource source, float amount) { - Entity parent = this.getParent(); - if (parent == null || parent.isRemoved()) { - return false; - } - - if (this.level().isClientSide()) { - if (source.getEntity() instanceof Player) { - MultipartFramework.sendMultipartAttack(parent.getUUID(), this.partIndex, amount * this.definition.damageMultiplier()); - } - return true; - } - - return this.owner.antarchy$hurtMultipartPart(this, source, amount * this.definition.damageMultiplier()); - } - - @Override - public boolean isInvulnerableTo(DamageSource source) { - return false; - } - - @Override - public InteractionResult interactAt(Player player, Vec3 vec, InteractionHand hand) { - Entity parent = this.getParent(); - if (parent == null || parent.isRemoved()) { - return InteractionResult.PASS; - } - - if (this.level().isClientSide()) { - MultipartFramework.sendMultipartInteract(parent.getUUID(), this.partIndex, hand.ordinal()); - return InteractionResult.SUCCESS; - } - - return this.owner.antarchy$interactMultipartPart(this, player, vec, hand); - } - - @Override - protected void defineSynchedData() { - } - - @Override - protected void readAdditionalSaveData(CompoundTag tag) { - } - - @Override - protected void addAdditionalSaveData(CompoundTag tag) { - } -} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/entity/multipart/MultipartPartLevelRegistry.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/entity/multipart/MultipartPartLevelRegistry.java deleted file mode 100644 index b8ae887d..00000000 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/entity/multipart/MultipartPartLevelRegistry.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.craisinlord.antarchy.forge.entity.multipart; - -import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner; -import com.craisinlord.antarchy.forge.mixins.level.ClientLevelPartEntitiesAccessor; -import com.craisinlord.antarchy.forge.mixins.level.ServerLevelPartEntitiesAccessor; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.level.Level; -import net.minecraftforge.entity.PartEntity; - -public final class MultipartPartLevelRegistry { - private MultipartPartLevelRegistry() { - } - - public static void register(MultipartEntityOwner owner) { - Entity[] parts = owner.antarchy$getMultipartParts(); - if (parts == null) { - return; - } - - Int2ObjectMap> registry = getRegistry(((Entity) owner).level()); - if (registry == null) { - return; - } - - for (Entity part : parts) { - if (part instanceof PartEntity partEntity) { - registry.put(partEntity.getId(), partEntity); - } - } - } - - public static void unregister(MultipartEntityOwner owner) { - Entity[] parts = owner.antarchy$getMultipartParts(); - if (parts == null) { - return; - } - - Int2ObjectMap> registry = getRegistry(((Entity) owner).level()); - if (registry == null) { - return; - } - - for (Entity part : parts) { - if (part instanceof PartEntity partEntity) { - registry.remove(partEntity.getId()); - } - } - } - - private static Int2ObjectMap> getRegistry(Level level) { - if (level instanceof ServerLevel serverLevel) { - return ((ServerLevelPartEntitiesAccessor) serverLevel).antarchy$getPartEntities(); - } - - if (level instanceof ClientLevel clientLevel) { - return ((ClientLevelPartEntitiesAccessor) clientLevel).antarchy$getPartEntities(); - } - - return null; - } -} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/mixins/entity/MultipartEntityBridgeMixin.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/mixins/entity/MultipartEntityBridgeMixin.java deleted file mode 100644 index 0f9ebd44..00000000 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/mixins/entity/MultipartEntityBridgeMixin.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.craisinlord.antarchy.forge.mixins.entity; - -import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner; -import net.minecraft.world.entity.Entity; -import net.minecraftforge.entity.PartEntity; -import org.jetbrains.annotations.Nullable; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; - -@Mixin(Entity.class) -/* - * Exposes multipart child lookup from base entities. - */ -public abstract class MultipartEntityBridgeMixin { - @Unique - private Entity[] antarchy$multipartSourceParts; - - @Unique - private PartEntity[] antarchy$multipartBridgeParts; - - public boolean isMultipartEntity() { - return (Object) this instanceof MultipartEntityOwner; - } - - @Nullable - public PartEntity[] getParts() { - if (!((Object) this instanceof MultipartEntityOwner owner)) { - return null; - } - - Entity[] parts = owner.antarchy$getMultipartParts(); - if (parts == null) { - parts = owner.antarchy$createMultipartParts(); - owner.antarchy$setMultipartParts(parts); - owner.antarchy$syncMultipartParts(); - } - - if (parts.length == 0) { - return new PartEntity[0]; - } - - if (this.antarchy$multipartSourceParts != parts || this.antarchy$multipartBridgeParts == null || this.antarchy$multipartBridgeParts.length != parts.length) { - PartEntity[] bridgedParts = new PartEntity[parts.length]; - for (int i = 0; i < parts.length; i++) { - if (!(parts[i] instanceof PartEntity part)) { - throw new IllegalStateException("Multipart owner returned a non-PartEntity child: " + parts[i]); - } - bridgedParts[i] = part; - } - this.antarchy$multipartSourceParts = parts; - this.antarchy$multipartBridgeParts = bridgedParts; - } - - return this.antarchy$multipartBridgeParts; - } -} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/mixins/entity/MultipartEntityLevelRegistryMixin.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/mixins/entity/MultipartEntityLevelRegistryMixin.java deleted file mode 100644 index 98cbac7c..00000000 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/mixins/entity/MultipartEntityLevelRegistryMixin.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.craisinlord.antarchy.forge.mixins.entity; - -import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner; -import com.craisinlord.antarchy.forge.entity.multipart.MultipartPartLevelRegistry; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.level.entity.EntityInLevelCallback; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(Entity.class) -/* - * Keeps multipart child entities registered in NeoForge levels. - */ -public abstract class MultipartEntityLevelRegistryMixin { - @Inject(method = "setLevelCallback", at = @At("TAIL")) - private void antarchy$registerMultipartParts(EntityInLevelCallback entityInLevelCallback, CallbackInfo ci) { - if ((Object) this instanceof MultipartEntityOwner owner - && entityInLevelCallback != EntityInLevelCallback.NULL) { - if (owner.antarchy$getMultipartParts() == null) { - owner.antarchy$spawnMultipartParts(); - } - MultipartPartLevelRegistry.register(owner); - } - } - - @Inject(method = "setRemoved", at = @At("HEAD")) - private void antarchy$unregisterMultipartParts(Entity.RemovalReason removalReason, CallbackInfo ci) { - if ((Object) this instanceof MultipartEntityOwner owner) { - MultipartPartLevelRegistry.unregister(owner); - } - } -} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/mixins/entity/ParalyzedMobFreezeMixin.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/mixins/entity/ParalyzedMobFreezeMixin.java index 949f4632..48a9c7c9 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/mixins/entity/ParalyzedMobFreezeMixin.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/mixins/entity/ParalyzedMobFreezeMixin.java @@ -8,9 +8,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(Mob.class) -/* - * Stops mob AI movement while paralyzed. - */ + public abstract class ParalyzedMobFreezeMixin { @Inject(method = "serverAiStep", at = @At("HEAD")) private void antarchy$freezeAiWhileParalyzed(CallbackInfo ci) { diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/mixins/infinity/AmendmentRareOresMixin.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/mixins/infinity/AmendmentRareOresMixin.java index 357333fa..4242eef3 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/mixins/infinity/AmendmentRareOresMixin.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/mixins/infinity/AmendmentRareOresMixin.java @@ -12,12 +12,7 @@ import java.util.List; import java.util.Map; @Mixin(value = Amendment.class, remap = false) -/* - * Makes Antarchy's uranium/titanium ores and blocks much rarer in Infinite Dimensions' - * procedural dimensions. This is done natively via Infinity's own amendment system rather - * than relying on players editing infinity's config, keyed off the antarchy:infinity_dimension_rare_ores - * block tag so the list stays data-driven and native to Antarchy. - */ + public class AmendmentRareOresMixin { @Inject(method = "getAmendmentList", at = @At("RETURN"), remap = false) private static void antarchy$addRareOreAmendment(CallbackInfoReturnable>> cir) { diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/mixins/infinity/ConfigGenInvocationMixin.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/mixins/infinity/ConfigGenInvocationMixin.java index a4ee7262..0ecac713 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/mixins/infinity/ConfigGenInvocationMixin.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/mixins/infinity/ConfigGenInvocationMixin.java @@ -9,11 +9,6 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @Mixin(value = ConfigGenInvocation.class, remap = false) -/* - * Guards against a NPE in Infinite Dimensions' SurfaceRuleScanner when another mod - * registers a surface rule with a missing "biome_is" field. Without this, the crash - * propagates up through PlayerList.placeNewPlayer and kicks the player on login - */ public class ConfigGenInvocationMixin { @Redirect( diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/mixins/infinity/PortalCreatorMixin.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/mixins/infinity/PortalCreatorMixin.java deleted file mode 100644 index 2a037618..00000000 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/mixins/infinity/PortalCreatorMixin.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.craisinlord.antarchy.forge.mixins.infinity; - -import com.craisinlord.antarchy.config.AntarchySettings; -import net.minecraft.core.BlockPos; -import net.minecraft.world.entity.item.ItemEntity; -import net.minecraft.world.item.Items; -import net.minecraft.world.item.ItemStack; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import net.lerariemann.infinity.util.teleport.PortalCreator; -import net.minecraft.server.level.ServerLevel; - -@Mixin(value = PortalCreator.class, remap = false) -/* - * Blocks Infinity portal creation when the config says no - */ -public class PortalCreatorMixin { - @Inject( - method = "tryCreatePortalFromItem(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/entity/item/ItemEntity;)V", - at = @At("HEAD"), - cancellable = true, - remap = false - ) - private static void antarchy$blockInfinityBookActivation(ServerLevel level, BlockPos pos, ItemEntity itemEntity, CallbackInfo ci) { - if (!AntarchySettings.disableInfinityBookPortalCreation()) { - return; - } - - if (itemEntity.isRemoved()) { - return; - } - - ItemStack stack = itemEntity.getItem(); - if (!stack.is(Items.WRITABLE_BOOK) && !stack.is(Items.WRITTEN_BOOK)) { - return; - } - - ci.cancel(); - } -} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/mixins/level/ClientLevelPartEntitiesAccessor.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/mixins/level/ClientLevelPartEntitiesAccessor.java deleted file mode 100644 index 3bdcc134..00000000 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/mixins/level/ClientLevelPartEntitiesAccessor.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.craisinlord.antarchy.forge.mixins.level; - -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraftforge.entity.PartEntity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(ClientLevel.class) -/* - * Accessor for client part-entity storage. - */ -public interface ClientLevelPartEntitiesAccessor { - @Accessor("partEntities") - Int2ObjectMap> antarchy$getPartEntities(); -} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/mixins/level/LevelStemDiagnosticMixin.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/mixins/level/LevelStemDiagnosticMixin.java deleted file mode 100644 index 458a7c66..00000000 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/mixins/level/LevelStemDiagnosticMixin.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.craisinlord.antarchy.forge.mixins.level; - -import com.craisinlord.antarchy.Antarchy; -import net.minecraft.core.RegistryAccess; -import net.minecraft.core.registries.Registries; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.world.level.storage.PrimaryLevelData; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(PrimaryLevelData.class) -public abstract class LevelStemDiagnosticMixin { - @Inject(method = "createTag", at = @At("HEAD")) - private void antarchy$logLevelStems(RegistryAccess registryAccess, CompoundTag playerTag, CallbackInfoReturnable cir) { - try { - var registry = registryAccess.registryOrThrow(Registries.LEVEL_STEM); - Antarchy.LOGGER.info("[Antarchy/Diagnostic] createTag LEVEL_STEM size={} keys={}", registry.size(), registry.keySet()); - } catch (Throwable t) { - Antarchy.LOGGER.error("[Antarchy/Diagnostic] createTag LEVEL_STEM lookup failed", t); - } - } -} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/mixins/level/ServerLevelPartEntitiesAccessor.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/mixins/level/ServerLevelPartEntitiesAccessor.java deleted file mode 100644 index 8587bc97..00000000 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/mixins/level/ServerLevelPartEntitiesAccessor.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.craisinlord.antarchy.forge.mixins.level; - -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.server.level.ServerLevel; -import net.minecraftforge.entity.PartEntity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(ServerLevel.class) -/* - * Accessor for server part-entity storage. - */ -public interface ServerLevelPartEntitiesAccessor { - @Accessor("dragonParts") - Int2ObjectMap> antarchy$getPartEntities(); -} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/AntarchyForgeNetworkCore.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/AntarchyForgeNetworkCore.java index c4413aff..c56a6344 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/AntarchyForgeNetworkCore.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/AntarchyForgeNetworkCore.java @@ -1,81 +1,23 @@ package com.craisinlord.antarchy.forge.network; -import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.compat.network.CustomPacketPayload; -import com.craisinlord.antarchy.compat.network.StreamCodec; -import io.netty.buffer.ByteBuf; -import java.util.function.BiConsumer; -import java.util.function.Supplier; -import net.minecraft.resources.ResourceLocation; +import com.craisinlord.anthology.network.AnthologyNetwork; +import com.craisinlord.anthology.network.CustomPacketPayload; import net.minecraft.server.level.ServerPlayer; -import net.minecraftforge.network.NetworkDirection; -import net.minecraftforge.network.NetworkEvent; -import net.minecraftforge.network.NetworkRegistry; -import net.minecraftforge.network.PacketDistributor; -import net.minecraftforge.network.simple.SimpleChannel; +import net.minecraft.world.entity.Entity; public final class AntarchyForgeNetworkCore { - private static final String PROTOCOL_VERSION = "1"; - private static final SimpleChannel CHANNEL = NetworkRegistry.ChannelBuilder - .named(new ResourceLocation(Antarchy.MODID, "main")) - .networkProtocolVersion(() -> PROTOCOL_VERSION) - .clientAcceptedVersions(PROTOCOL_VERSION::equals) - .serverAcceptedVersions(PROTOCOL_VERSION::equals) - .simpleChannel(); - - private static int nextId = 0; - private AntarchyForgeNetworkCore() { } - public static void registerS2C(Class clazz, StreamCodec codec, java.util.function.Consumer clientHandler) { - CHANNEL.registerMessage( - nextId++, - clazz, - (msg, buf) -> codec.encode(buf, msg), - codec::decode, - (msg, ctxSupplier) -> { - NetworkEvent.Context ctx = ctxSupplier.get(); - ctx.enqueueWork(() -> clientHandler.accept(msg)); - ctx.setPacketHandled(true); - }, - java.util.Optional.of(NetworkDirection.PLAY_TO_CLIENT) - ); + public static void sendToPlayer(ServerPlayer player, CustomPacketPayload payload) { + AnthologyNetwork.sendToPlayer(player, payload); } - public static void registerC2S(Class clazz, StreamCodec codec, BiConsumer serverHandler) { - CHANNEL.registerMessage( - nextId++, - clazz, - (msg, buf) -> codec.encode(buf, msg), - codec::decode, - (msg, ctxSupplier) -> { - NetworkEvent.Context ctx = ctxSupplier.get(); - ServerPlayer player = ctx.getSender(); - ctx.enqueueWork(() -> { - if (player != null) { - serverHandler.accept(player, msg); - } - }); - ctx.setPacketHandled(true); - }, - java.util.Optional.of(NetworkDirection.PLAY_TO_SERVER) - ); + public static void sendToTrackingEntity(Entity entity, CustomPacketPayload payload) { + AnthologyNetwork.sendToTrackingAndSelf(entity, payload); } - public static void sendToPlayer(ServerPlayer player, T payload) { - CHANNEL.send(PacketDistributor.PLAYER.with(() -> player), payload); - } - - public static void sendToTracking(ServerPlayer player, T payload) { - CHANNEL.send(PacketDistributor.TRACKING_ENTITY_AND_SELF.with(player::getVehicle), payload); - } - - public static void sendToTrackingEntity(net.minecraft.world.entity.Entity entity, T payload) { - CHANNEL.send(PacketDistributor.TRACKING_ENTITY_AND_SELF.with(() -> entity), payload); - } - - public static void sendToServer(T payload) { - CHANNEL.sendToServer(payload); + public static void sendToServer(CustomPacketPayload payload) { + AnthologyNetwork.sendToServer(payload); } } diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/AntarchyForgePayloadRegistrar.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/AntarchyForgePayloadRegistrar.java new file mode 100644 index 00000000..beb96f7a --- /dev/null +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/AntarchyForgePayloadRegistrar.java @@ -0,0 +1,27 @@ +package com.craisinlord.antarchy.forge.network; + +import com.craisinlord.anthology.network.AnthologyNetwork; +import com.craisinlord.anthology.network.CustomPacketPayload; +import com.craisinlord.anthology.network.StreamCodec; +import java.util.function.BiConsumer; +import net.minecraft.network.FriendlyByteBuf; + +public final class AntarchyForgePayloadRegistrar { + public AntarchyForgePayloadRegistrar playToServer( + CustomPacketPayload.Type type, + StreamCodec codec, + BiConsumer handler + ) { + AnthologyNetwork.registerServerbound(type, codec, (payload, player) -> handler.accept(payload, new AntarchyPayloadContext(player))); + return this; + } + + public AntarchyForgePayloadRegistrar playToClient( + CustomPacketPayload.Type type, + StreamCodec codec, + BiConsumer handler + ) { + AnthologyNetwork.registerClientbound(type, codec, (payload, player) -> handler.accept(payload, new AntarchyPayloadContext(player))); + return this; + } +} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/AntarchyGravityNetworking.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/AntarchyGravityNetworking.java index 92938ffe..c1ef0c90 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/AntarchyGravityNetworking.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/AntarchyGravityNetworking.java @@ -1,116 +1,193 @@ package com.craisinlord.antarchy.forge.network; import com.craisinlord.antarchy.content.entity.DiamondMinecartEntity; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; import com.craisinlord.antarchy.content.item.BigBerthaItem; +import com.craisinlord.antarchy.content.item.EyeOfTheStormItem; import com.craisinlord.antarchy.content.item.GravityGunItem; +import com.craisinlord.antarchy.content.item.PortalGunItem; import com.craisinlord.antarchy.content.network.BigBerthaModeCyclePayload; -import com.craisinlord.antarchy.content.network.DiamondMinecartInputPayload; +import com.craisinlord.antarchy.content.network.RoyalGuardianSwordModeCyclePayload; +import com.craisinlord.antarchy.content.network.EyeOfStormPrimaryPayload; import com.craisinlord.antarchy.content.network.GravityGunPrimaryPayload; import com.craisinlord.antarchy.content.network.GravityGunScrollPayload; -import com.craisinlord.antarchy.content.network.GravityStatePayload; -import com.craisinlord.antarchy.content.network.ImpactShakePayload; -import com.craisinlord.antarchy.content.client.CameraShakeClientState; -import net.minecraft.client.Minecraft; -import net.minecraft.world.entity.Entity; +import com.craisinlord.antarchy.content.network.TemporalTunerScrollPayload; +import com.craisinlord.antarchy.content.item.TemporalTunerItem; +import com.craisinlord.antarchy.content.network.PortalGunPrimaryPayload; import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.phys.Vec3; +import net.minecraft.world.item.ItemStack; +import com.craisinlord.antarchy.forge.network.AntarchyForgeNetworkCore; +import com.craisinlord.antarchy.forge.network.AntarchyPayloadContext; +import com.craisinlord.antarchy.forge.network.AntarchyForgePayloadRegistrar; public final class AntarchyGravityNetworking { private AntarchyGravityNetworking() { } - public static void register() { - AntarchyForgeNetworkCore.registerS2C(GravityStatePayload.class, GravityStatePayload.STREAM_CODEC, AntarchyGravityNetworking::handleGravityState); - AntarchyForgeNetworkCore.registerS2C(ImpactShakePayload.class, ImpactShakePayload.STREAM_CODEC, AntarchyGravityNetworking::handleImpactShake); - AntarchyForgeNetworkCore.registerC2S(GravityGunPrimaryPayload.class, GravityGunPrimaryPayload.STREAM_CODEC, AntarchyGravityNetworking::handleGravityGunPrimary); - AntarchyForgeNetworkCore.registerC2S(GravityGunScrollPayload.class, GravityGunScrollPayload.STREAM_CODEC, AntarchyGravityNetworking::handleGravityGunScroll); - AntarchyForgeNetworkCore.registerC2S(BigBerthaModeCyclePayload.class, BigBerthaModeCyclePayload.STREAM_CODEC, AntarchyGravityNetworking::handleBigBerthaModeCycle); - AntarchyForgeNetworkCore.registerC2S(DiamondMinecartInputPayload.class, DiamondMinecartInputPayload.STREAM_CODEC, AntarchyGravityNetworking::handleDiamondMinecartInput); - } - - public static void syncToPlayer(ServerPlayer target, Entity entity) { - GravityStatePayload payload = new GravityStatePayload( - entity.getId(), - AntarchyGravityApi.getGravityDirection(entity), - AntarchyGravityApi.getPrevGravityDirection(entity), - AntarchyGravityApi.isGravityForced(entity), - AntarchyGravityApi.getTransitionDuration(entity), - AntarchyGravityApi.getTransitionRemaining(entity) - ); - AntarchyForgeNetworkCore.sendToPlayer(target, payload); - } - - public static void syncEntity(Entity entity) { - GravityStatePayload payload = new GravityStatePayload( - entity.getId(), - AntarchyGravityApi.getGravityDirection(entity), - AntarchyGravityApi.getPrevGravityDirection(entity), - AntarchyGravityApi.isGravityForced(entity), - AntarchyGravityApi.getTransitionDuration(entity), - AntarchyGravityApi.getTransitionRemaining(entity) - ); - AntarchyForgeNetworkCore.sendToTrackingEntity(entity, payload); - } - - private static void handleGravityState(GravityStatePayload payload) { - var player = Minecraft.getInstance().player; - if (player == null) { - return; - } - Entity entity = player.level().getEntity(payload.entityId()); - if (entity == null && player.getId() == payload.entityId()) { - entity = player; - } - if (entity == null) { - return; - } - - AntarchyGravityApi.applySyncedState( - entity, - payload.direction(), - payload.previousDirection(), - payload.forced(), - payload.transitionDuration(), - payload.transitionRemaining() + public static void register(AntarchyForgePayloadRegistrar registrar) { + com.craisinlord.antarchy.content.portalgun.PortalGunIndicatorSync.setSender(AntarchyForgeNetworkCore::sendToPlayer); + registrar.playToClient( + com.craisinlord.antarchy.content.network.PortalGunIndicatorPayload.TYPE, + com.craisinlord.antarchy.content.network.PortalGunIndicatorPayload.STREAM_CODEC, + (payload, context) -> context.enqueueWork(() -> com.craisinlord.antarchy.content.client.PortalGunIndicatorClientState.update(payload)) + ).playToServer( + com.craisinlord.antarchy.content.network.PortalGunIndicatorRequestPayload.TYPE, + com.craisinlord.antarchy.content.network.PortalGunIndicatorRequestPayload.STREAM_CODEC, + AntarchyGravityNetworking::handlePortalGunIndicatorRequest + ).playToServer( + GravityGunPrimaryPayload.TYPE, + GravityGunPrimaryPayload.STREAM_CODEC, + AntarchyGravityNetworking::handleGravityGunPrimary + ).playToServer( + PortalGunPrimaryPayload.TYPE, + PortalGunPrimaryPayload.STREAM_CODEC, + AntarchyGravityNetworking::handlePortalGunPrimary + ).playToServer( + com.craisinlord.antarchy.content.network.PortalGunMoonAimPayload.TYPE, + com.craisinlord.antarchy.content.network.PortalGunMoonAimPayload.STREAM_CODEC, + (payload, context) -> context.enqueueWork(() -> { + if (context.player() instanceof ServerPlayer serverPlayer) { + com.craisinlord.antarchy.content.portalgun.PortalGunMoonAimSync.handle(serverPlayer, payload); + } + }) + ).playToServer( + com.craisinlord.antarchy.content.network.PortalGunResetPayload.TYPE, + com.craisinlord.antarchy.content.network.PortalGunResetPayload.STREAM_CODEC, + (payload, context) -> context.enqueueWork(() -> { + if (context.player() instanceof ServerPlayer serverPlayer) { + com.craisinlord.antarchy.content.portalgun.PortalGunResetManager.handleInput(serverPlayer, payload.action()); + } + }) + ).playToServer( + EyeOfStormPrimaryPayload.TYPE, + EyeOfStormPrimaryPayload.STREAM_CODEC, + AntarchyGravityNetworking::handleEyeOfStormPrimary + ).playToServer( + GravityGunScrollPayload.TYPE, + GravityGunScrollPayload.STREAM_CODEC, + AntarchyGravityNetworking::handleGravityGunScroll + ).playToServer( + TemporalTunerScrollPayload.TYPE, + TemporalTunerScrollPayload.STREAM_CODEC, + AntarchyGravityNetworking::handleTemporalTunerScroll + ).playToServer( + BigBerthaModeCyclePayload.TYPE, + BigBerthaModeCyclePayload.STREAM_CODEC, + AntarchyGravityNetworking::handleBigBerthaModeCycle + ).playToServer( + RoyalGuardianSwordModeCyclePayload.TYPE, + RoyalGuardianSwordModeCyclePayload.STREAM_CODEC, + AntarchyGravityNetworking::handleRoyalGuardianSwordModeCycle + ).playToServer( + com.craisinlord.antarchy.content.network.DiamondMinecartInputPayload.TYPE, + com.craisinlord.antarchy.content.network.DiamondMinecartInputPayload.STREAM_CODEC, + AntarchyGravityNetworking::handleDiamondMinecartInput ); } - private static void handleImpactShake(ImpactShakePayload payload) { - CameraShakeClientState.triggerImpact( - new Vec3(payload.x(), payload.y(), payload.z()), - payload.intensity(), - payload.durationTicks(), - payload.radius() - ); + private static void handleGravityGunScroll(GravityGunScrollPayload payload, AntarchyPayloadContext context) { + context.enqueueWork(() -> { + if (!(context.player() instanceof ServerPlayer serverPlayer)) { + return; + } + + if (!(serverPlayer.getMainHandItem().getItem() instanceof GravityGunItem)) { + return; + } + + GravityGunItem.adjustHeldDistance(serverPlayer.getMainHandItem(), payload.distanceDelta()); + }); } - private static void handleGravityGunScroll(ServerPlayer serverPlayer, GravityGunScrollPayload payload) { - if (!(serverPlayer.getMainHandItem().getItem() instanceof GravityGunItem)) { - return; - } - - GravityGunItem.adjustHeldDistance(serverPlayer.getMainHandItem(), payload.distanceDelta()); + private static void handleDiamondMinecartInput(com.craisinlord.antarchy.content.network.DiamondMinecartInputPayload payload, AntarchyPayloadContext context) { + context.enqueueWork(() -> { + if (!(context.player() instanceof ServerPlayer serverPlayer)) return; + if (!(serverPlayer.getVehicle() instanceof DiamondMinecartEntity cart)) return; + cart.onInputReceived(payload.inputFlags()); + }); } - private static void handleDiamondMinecartInput(ServerPlayer serverPlayer, DiamondMinecartInputPayload payload) { - if (!(serverPlayer.getVehicle() instanceof DiamondMinecartEntity cart)) return; - cart.onInputReceived(payload.inputFlags()); + private static void handleBigBerthaModeCycle(BigBerthaModeCyclePayload payload, AntarchyPayloadContext context) { + context.enqueueWork(() -> { + if (!(context.player() instanceof ServerPlayer serverPlayer)) { + return; + } + + if (!(serverPlayer.getMainHandItem().getItem() instanceof BigBerthaItem bigBerthaItem)) { + return; + } + + bigBerthaItem.tryCycleModeFromInput(serverPlayer.serverLevel(), serverPlayer, serverPlayer.getMainHandItem()); + }); } - private static void handleBigBerthaModeCycle(ServerPlayer serverPlayer, BigBerthaModeCyclePayload payload) { - if (!(serverPlayer.getMainHandItem().getItem() instanceof BigBerthaItem bigBerthaItem)) { - return; - } - - bigBerthaItem.tryCycleModeWhileCoolingDown(serverPlayer.serverLevel(), serverPlayer, serverPlayer.getMainHandItem()); + private static void handleTemporalTunerScroll(TemporalTunerScrollPayload payload, AntarchyPayloadContext context) { + context.enqueueWork(() -> { + if (context.player() instanceof ServerPlayer serverPlayer + && TemporalTunerItem.isAvailable(serverPlayer)) { + TemporalTunerItem.adjust(serverPlayer, payload.delta()); + } + }); } - private static void handleGravityGunPrimary(ServerPlayer serverPlayer, GravityGunPrimaryPayload payload) { - if (!(serverPlayer.getMainHandItem().getItem() instanceof GravityGunItem gravityGunItem)) { - return; - } + private static void handleRoyalGuardianSwordModeCycle(RoyalGuardianSwordModeCyclePayload payload, AntarchyPayloadContext context) { + context.enqueueWork(() -> { + if (!(context.player() instanceof ServerPlayer serverPlayer) + || !(serverPlayer.getMainHandItem().getItem() instanceof com.craisinlord.antarchy.content.item.RoyalGuardianSwordItem sword)) { + return; + } + sword.tryCycleModeFromInput(serverPlayer.serverLevel(), serverPlayer, serverPlayer.getMainHandItem()); + }); + } - gravityGunItem.firePrimary(serverPlayer.serverLevel(), serverPlayer, serverPlayer.getMainHandItem()); + private static void handleGravityGunPrimary(GravityGunPrimaryPayload payload, AntarchyPayloadContext context) { + context.enqueueWork(() -> { + if (!(context.player() instanceof ServerPlayer serverPlayer)) { + return; + } + + if (!(serverPlayer.getMainHandItem().getItem() instanceof GravityGunItem gravityGunItem)) { + return; + } + + gravityGunItem.firePrimary(serverPlayer.serverLevel(), serverPlayer, serverPlayer.getMainHandItem()); + }); + } + + private static void handlePortalGunPrimary(PortalGunPrimaryPayload payload, AntarchyPayloadContext context) { + context.enqueueWork(() -> { + if (!(context.player() instanceof ServerPlayer serverPlayer)) { + return; + } + + ItemStack stack = payload.offhand() ? serverPlayer.getOffhandItem() : serverPlayer.getMainHandItem(); + if (!(stack.getItem() instanceof PortalGunItem portalGunItem)) { + return; + } + + portalGunItem.firePrimary(serverPlayer.serverLevel(), serverPlayer, stack, payload.offhand()); + }); + } + + + private static void handlePortalGunIndicatorRequest(com.craisinlord.antarchy.content.network.PortalGunIndicatorRequestPayload payload, AntarchyPayloadContext context) { + context.enqueueWork(() -> { + if (context.player() instanceof ServerPlayer serverPlayer) { + com.craisinlord.antarchy.content.portalgun.PortalGunIndicatorSync.handleRequest(serverPlayer, payload); + } + }); + } + + private static void handleEyeOfStormPrimary(EyeOfStormPrimaryPayload payload, AntarchyPayloadContext context) { + context.enqueueWork(() -> { + if (!(context.player() instanceof ServerPlayer serverPlayer)) { + return; + } + + if (!(serverPlayer.getMainHandItem().getItem() instanceof EyeOfTheStormItem eyeOfTheStormItem)) { + return; + } + + eyeOfTheStormItem.firePrimary(serverPlayer.serverLevel(), serverPlayer, serverPlayer.getMainHandItem()); + }); } } diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/AntarchyPayloadContext.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/AntarchyPayloadContext.java new file mode 100644 index 00000000..59ce6a40 --- /dev/null +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/AntarchyPayloadContext.java @@ -0,0 +1,9 @@ +package com.craisinlord.antarchy.forge.network; + +import net.minecraft.world.entity.player.Player; + +public record AntarchyPayloadContext(Player player) { + public void enqueueWork(Runnable work) { + work.run(); + } +} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/AntarchyTimeDilationNetworking.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/AntarchyTimeDilationNetworking.java deleted file mode 100644 index e98a3912..00000000 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/AntarchyTimeDilationNetworking.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.craisinlord.antarchy.forge.network; - -import com.craisinlord.antarchy.content.network.TimeDilationFieldsPayload; -import com.craisinlord.antarchy.content.network.TimeDilationRatePayload; -import com.craisinlord.antarchy.content.time.TimeDilationFieldSnapshot; -import java.util.List; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.entity.Entity; - -public final class AntarchyTimeDilationNetworking { - private AntarchyTimeDilationNetworking() {} - - public static void register() { - AntarchyForgeNetworkCore.registerS2C(TimeDilationRatePayload.class, TimeDilationRatePayload.STREAM_CODEC, - payload -> com.craisinlord.antarchy.content.time.TimeDilationApi.applySyncedRate(payload.entityUuid(), payload.rate())); - AntarchyForgeNetworkCore.registerS2C(TimeDilationFieldsPayload.class, TimeDilationFieldsPayload.STREAM_CODEC, - payload -> com.craisinlord.antarchy.content.client.ClientTimeDilationTicker.applyFields(payload.fields())); - } - - public static void syncRate(Entity entity, double rate) { - AntarchyForgeNetworkCore.sendToTrackingEntity(entity, new TimeDilationRatePayload(entity.getUUID(), rate)); - } - - public static void syncRateToPlayer(ServerPlayer player, Entity entity, double rate) { - AntarchyForgeNetworkCore.sendToPlayer(player, new TimeDilationRatePayload(entity.getUUID(), rate)); - } - - public static void syncFields(ServerPlayer player, List fields) { - AntarchyForgeNetworkCore.sendToPlayer(player, new TimeDilationFieldsPayload(fields)); - } -} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/BrutalflyElytraNetworking.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/BrutalflyElytraNetworking.java index 03af6472..43e98370 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/BrutalflyElytraNetworking.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/BrutalflyElytraNetworking.java @@ -12,67 +12,83 @@ import net.minecraft.sounds.SoundSource; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.item.ItemStack; import net.minecraft.world.phys.Vec3; +import com.craisinlord.antarchy.forge.network.AntarchyForgeNetworkCore; +import com.craisinlord.antarchy.forge.network.AntarchyPayloadContext; +import com.craisinlord.antarchy.forge.network.AntarchyForgePayloadRegistrar; public final class BrutalflyElytraNetworking { private BrutalflyElytraNetworking() { } - public static void register() { - AntarchyForgeNetworkCore.registerC2S(BrutalflyElytraFlapPayload.class, BrutalflyElytraFlapPayload.STREAM_CODEC, BrutalflyElytraNetworking::handleFlap); - AntarchyForgeNetworkCore.registerS2C(BrutalflyElytraAnimationPayload.class, BrutalflyElytraAnimationPayload.STREAM_CODEC, BrutalflyElytraNetworking::handleAnimation); - } - - private static void handleFlap(ServerPlayer serverPlayer, BrutalflyElytraFlapPayload payload) { - ItemStack chestStack = serverPlayer.getItemBySlot(EquipmentSlot.CHEST); - if (!(chestStack.getItem() instanceof BrutalflyElytraItem)) { - return; - } - if (serverPlayer.isSpectator() || !serverPlayer.isFallFlying() || serverPlayer.isPassenger()) { - return; - } - if (serverPlayer.getCooldowns().isOnCooldown(chestStack.getItem())) { - return; - } - - BrutalflyElytraFlightHelper.FlapTier tier = BrutalflyElytraFlightHelper.resolveFlapTier(payload.chargeTicks()); - if (tier == BrutalflyElytraFlightHelper.FlapTier.FAIL) { - return; - } - - float lift = BrutalflyElytraFlightHelper.liftFor(tier); - float forwardBoost = BrutalflyElytraFlightHelper.forwardBoostFor(tier); - Vec3 look = serverPlayer.getLookAngle(); - Vec3 boost = new Vec3(look.x * forwardBoost, lift, look.z * forwardBoost); - serverPlayer.setDeltaMovement(serverPlayer.getDeltaMovement().add(boost)); - serverPlayer.hasImpulse = true; - serverPlayer.hurtMarked = true; - serverPlayer.resetFallDistance(); - serverPlayer.connection.send(new ClientboundSetEntityMotionPacket(serverPlayer)); - chestStack.hurtAndBreak(1, serverPlayer, p -> p.broadcastBreakEvent(EquipmentSlot.CHEST)); - serverPlayer.getCooldowns().addCooldown(chestStack.getItem(), BrutalflyElytraFlightHelper.FLAP_COOLDOWN_TICKS); - serverPlayer.level().playSound( - null, - serverPlayer.blockPosition(), - SoundEvents.PHANTOM_FLAP, - SoundSource.PLAYERS, - 0.9F, - tier == BrutalflyElytraFlightHelper.FlapTier.PERFECT ? 0.8F : tier == BrutalflyElytraFlightHelper.FlapTier.GOOD ? 0.95F : 1.1F - ); - AntarchyForgeNetworkCore.sendToTrackingEntity( - serverPlayer, - new BrutalflyElytraAnimationPayload( - serverPlayer.getId(), - BrutalflyElytraFlightHelper.animationTicksFor(tier), - lift - ) + public static void register(AntarchyForgePayloadRegistrar registrar) { + registrar.playToServer( + BrutalflyElytraFlapPayload.TYPE, + BrutalflyElytraFlapPayload.STREAM_CODEC, + BrutalflyElytraNetworking::handleFlap + ).playToClient( + BrutalflyElytraAnimationPayload.TYPE, + BrutalflyElytraAnimationPayload.STREAM_CODEC, + BrutalflyElytraNetworking::handleAnimation ); } - private static void handleAnimation(BrutalflyElytraAnimationPayload payload) { - BrutalflyElytraClientState.trigger( + private static void handleFlap(com.craisinlord.antarchy.content.network.BrutalflyElytraFlapPayload payload, AntarchyPayloadContext context) { + context.enqueueWork(() -> { + if (!(context.player() instanceof ServerPlayer serverPlayer)) { + return; + } + + ItemStack chestStack = serverPlayer.getItemBySlot(EquipmentSlot.CHEST); + if (!(chestStack.getItem() instanceof BrutalflyElytraItem)) { + return; + } + if (serverPlayer.isSpectator() || !serverPlayer.isFallFlying() || serverPlayer.isPassenger()) { + return; + } + if (serverPlayer.getCooldowns().isOnCooldown(chestStack.getItem())) { + return; + } + + BrutalflyElytraFlightHelper.FlapTier tier = BrutalflyElytraFlightHelper.resolveFlapTier(payload.chargeTicks()); + if (tier == BrutalflyElytraFlightHelper.FlapTier.FAIL) { + return; + } + + float lift = BrutalflyElytraFlightHelper.liftFor(tier); + float forwardBoost = BrutalflyElytraFlightHelper.forwardBoostFor(tier); + Vec3 look = serverPlayer.getLookAngle(); + Vec3 boost = new Vec3(look.x * forwardBoost, lift, look.z * forwardBoost); + serverPlayer.setDeltaMovement(serverPlayer.getDeltaMovement().add(boost)); + serverPlayer.hasImpulse = true; + serverPlayer.hurtMarked = true; + serverPlayer.resetFallDistance(); + serverPlayer.connection.send(new ClientboundSetEntityMotionPacket(serverPlayer)); + chestStack.hurtAndBreak(1, serverPlayer, player -> player.broadcastBreakEvent(EquipmentSlot.CHEST)); + serverPlayer.getCooldowns().addCooldown(chestStack.getItem(), BrutalflyElytraFlightHelper.FLAP_COOLDOWN_TICKS); + serverPlayer.level().playSound( + null, + serverPlayer.blockPosition(), + SoundEvents.PHANTOM_FLAP, + SoundSource.PLAYERS, + 0.9F, + tier == BrutalflyElytraFlightHelper.FlapTier.PERFECT ? 0.8F : tier == BrutalflyElytraFlightHelper.FlapTier.GOOD ? 0.95F : 1.1F + ); + AntarchyForgeNetworkCore.sendToTrackingEntity( + serverPlayer, + new BrutalflyElytraAnimationPayload( + serverPlayer.getId(), + BrutalflyElytraFlightHelper.animationTicksFor(tier), + lift + ) + ); + }); + } + + private static void handleAnimation(BrutalflyElytraAnimationPayload payload, AntarchyPayloadContext context) { + context.enqueueWork(() -> BrutalflyElytraClientState.trigger( payload.entityId(), payload.durationTicks(), payload.strength() - ); + )); } } diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/DorrieJumpNetworking.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/DorrieJumpNetworking.java index 5dfdd026..33c57e30 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/DorrieJumpNetworking.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/DorrieJumpNetworking.java @@ -4,26 +4,42 @@ import com.craisinlord.antarchy.content.entity.DorrieEntity; import com.craisinlord.antarchy.content.network.DorrieChargeJumpPayload; import com.craisinlord.antarchy.content.network.DorrieJumpInputPayload; import net.minecraft.server.level.ServerPlayer; +import com.craisinlord.antarchy.forge.network.AntarchyPayloadContext; +import com.craisinlord.antarchy.forge.network.AntarchyForgePayloadRegistrar; public final class DorrieJumpNetworking { private DorrieJumpNetworking() {} - public static void register() { - AntarchyForgeNetworkCore.registerC2S(DorrieJumpInputPayload.class, DorrieJumpInputPayload.STREAM_CODEC, DorrieJumpNetworking::handleJumpInput); - AntarchyForgeNetworkCore.registerC2S(DorrieChargeJumpPayload.class, DorrieChargeJumpPayload.STREAM_CODEC, DorrieJumpNetworking::handleChargeInput); + public static void register(AntarchyForgePayloadRegistrar registrar) { + registrar.playToServer( + DorrieJumpInputPayload.TYPE, + DorrieJumpInputPayload.STREAM_CODEC, + DorrieJumpNetworking::handleJumpInput + ); + registrar.playToServer( + DorrieChargeJumpPayload.TYPE, + DorrieChargeJumpPayload.STREAM_CODEC, + DorrieJumpNetworking::handleChargeInput + ); } - private static void handleJumpInput(ServerPlayer player, DorrieJumpInputPayload payload) { - if (!(player.getVehicle() instanceof DorrieEntity dorrie)) return; - dorrie.setPressingJump(payload.pressing()); + private static void handleJumpInput(DorrieJumpInputPayload payload, AntarchyPayloadContext context) { + context.enqueueWork(() -> { + if (!(context.player() instanceof ServerPlayer player)) return; + if (!(player.getVehicle() instanceof DorrieEntity dorrie)) return; + dorrie.setPressingJump(payload.pressing()); + }); } - private static void handleChargeInput(ServerPlayer player, DorrieChargeJumpPayload payload) { - if (!(player.getVehicle() instanceof DorrieEntity dorrie)) return; - if (payload.pressing()) { - dorrie.startJumpCharge(); - } else { - dorrie.releaseJump(); - } + private static void handleChargeInput(DorrieChargeJumpPayload payload, AntarchyPayloadContext context) { + context.enqueueWork(() -> { + if (!(context.player() instanceof ServerPlayer player)) return; + if (!(player.getVehicle() instanceof DorrieEntity dorrie)) return; + if (payload.pressing()) { + dorrie.startJumpCharge(); + } else { + dorrie.releaseJump(); + } + }); } } diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/HerculesBeetleNetworking.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/HerculesBeetleNetworking.java index 25a3754a..e12680e4 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/HerculesBeetleNetworking.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/HerculesBeetleNetworking.java @@ -8,48 +8,86 @@ import com.craisinlord.antarchy.content.network.HerculesBeetleJumpInputPayload; import com.craisinlord.antarchy.content.network.HerculesBeetleMountedAttackPayload; import com.craisinlord.antarchy.content.network.HerculesBeetleMountedChargePayload; import net.minecraft.server.level.ServerPlayer; +import com.craisinlord.antarchy.forge.network.AntarchyPayloadContext; +import com.craisinlord.antarchy.forge.network.AntarchyForgePayloadRegistrar; public final class HerculesBeetleNetworking { private HerculesBeetleNetworking() { } - public static void register() { - AntarchyForgeNetworkCore.registerC2S(HerculesBeetleJumpInputPayload.class, HerculesBeetleJumpInputPayload.STREAM_CODEC, HerculesBeetleNetworking::handleJumpInput); - AntarchyForgeNetworkCore.registerC2S(HerculesBeetleFlightTogglePayload.class, HerculesBeetleFlightTogglePayload.STREAM_CODEC, HerculesBeetleNetworking::handleFlightToggle); - AntarchyForgeNetworkCore.registerC2S(HerculesBeetleMountedAttackPayload.class, HerculesBeetleMountedAttackPayload.STREAM_CODEC, HerculesBeetleNetworking::handleMountedAttack); - AntarchyForgeNetworkCore.registerC2S(HerculesBeetleMountedChargePayload.class, HerculesBeetleMountedChargePayload.STREAM_CODEC, HerculesBeetleNetworking::handleMountedCharge); - AntarchyForgeNetworkCore.registerS2C(HerculesBeetleImpactShakePayload.class, HerculesBeetleImpactShakePayload.STREAM_CODEC, HerculesBeetleNetworking::handleImpactShake); + public static void register(AntarchyForgePayloadRegistrar registrar) { + registrar.playToServer( + HerculesBeetleJumpInputPayload.TYPE, + HerculesBeetleJumpInputPayload.STREAM_CODEC, + HerculesBeetleNetworking::handleJumpInput + ).playToServer( + HerculesBeetleFlightTogglePayload.TYPE, + HerculesBeetleFlightTogglePayload.STREAM_CODEC, + HerculesBeetleNetworking::handleFlightToggle + ).playToServer( + HerculesBeetleMountedAttackPayload.TYPE, + HerculesBeetleMountedAttackPayload.STREAM_CODEC, + HerculesBeetleNetworking::handleMountedAttack + ).playToServer( + HerculesBeetleMountedChargePayload.TYPE, + HerculesBeetleMountedChargePayload.STREAM_CODEC, + HerculesBeetleNetworking::handleMountedCharge + ).playToClient( + HerculesBeetleImpactShakePayload.TYPE, + HerculesBeetleImpactShakePayload.STREAM_CODEC, + HerculesBeetleNetworking::handleImpactShake + ); } - private static void handleJumpInput(ServerPlayer player, HerculesBeetleJumpInputPayload payload) { - if (player.getVehicle() instanceof HerculesBeetleEntity beetle) { - beetle.setRiderJumpPressed(payload.pressing()); - } - } - - private static void handleMountedAttack(ServerPlayer player, HerculesBeetleMountedAttackPayload payload) { - if (player.getVehicle() instanceof HerculesBeetleEntity beetle) { - beetle.handleMountedRegularAttack(player); - } - } - - private static void handleFlightToggle(ServerPlayer player, HerculesBeetleFlightTogglePayload payload) { - if (player.getVehicle() instanceof HerculesBeetleEntity beetle) { - beetle.toggleMountedFlight(player); - } - } - - private static void handleMountedCharge(ServerPlayer player, HerculesBeetleMountedChargePayload payload) { - if (player.getVehicle() instanceof HerculesBeetleEntity beetle) { - if (payload.pressing()) { - beetle.startMountedCharge(player); - } else { - beetle.releaseMountedCharge(player); + private static void handleJumpInput(HerculesBeetleJumpInputPayload payload, AntarchyPayloadContext context) { + context.enqueueWork(() -> { + if (!(context.player() instanceof ServerPlayer player)) { + return; } - } + if (player.getVehicle() instanceof HerculesBeetleEntity beetle) { + beetle.setRiderJumpPressed(payload.pressing()); + } + }); } - private static void handleImpactShake(HerculesBeetleImpactShakePayload payload) { - HerculesBeetleImpactShakeClientState.trigger(payload.durationTicks()); + private static void handleMountedAttack(HerculesBeetleMountedAttackPayload payload, AntarchyPayloadContext context) { + context.enqueueWork(() -> { + if (!(context.player() instanceof ServerPlayer player)) { + return; + } + if (player.getVehicle() instanceof HerculesBeetleEntity beetle) { + beetle.handleMountedRegularAttack(player); + } + }); + } + + private static void handleFlightToggle(HerculesBeetleFlightTogglePayload payload, AntarchyPayloadContext context) { + context.enqueueWork(() -> { + if (!(context.player() instanceof ServerPlayer player)) { + return; + } + if (player.getVehicle() instanceof HerculesBeetleEntity beetle) { + beetle.toggleMountedFlight(player); + } + }); + } + + private static void handleMountedCharge(HerculesBeetleMountedChargePayload payload, AntarchyPayloadContext context) { + context.enqueueWork(() -> { + if (!(context.player() instanceof ServerPlayer player)) { + return; + } + if (player.getVehicle() instanceof HerculesBeetleEntity beetle) { + if (payload.pressing()) { + beetle.startMountedCharge(player); + } else { + beetle.releaseMountedCharge(player); + } + } + }); + } + + private static void handleImpactShake(HerculesBeetleImpactShakePayload payload, AntarchyPayloadContext context) { + context.enqueueWork(() -> HerculesBeetleImpactShakeClientState.trigger(payload.durationTicks())); } } diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/JumpyBootsNetworking.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/JumpyBootsNetworking.java deleted file mode 100644 index 3df45df5..00000000 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/JumpyBootsNetworking.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.craisinlord.antarchy.forge.network; - -import net.minecraftforge.fml.common.Mod; - -import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.item.JumpyBootsHelper; -import com.craisinlord.antarchy.content.item.JumpyBootsItem; -import com.craisinlord.antarchy.content.network.JumpyBootsLaunchPayload; -import net.minecraft.network.protocol.game.ClientboundSetEntityMotionPacket; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.sounds.SoundEvents; -import net.minecraft.sounds.SoundSource; -import net.minecraft.world.entity.EquipmentSlot; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.phys.Vec3; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.event.entity.living.LivingFallEvent; - -@Mod.EventBusSubscriber(modid = Antarchy.MODID) -public final class JumpyBootsNetworking { - private JumpyBootsNetworking() { - } - - public static void register() { - AntarchyForgeNetworkCore.registerC2S(JumpyBootsLaunchPayload.class, JumpyBootsLaunchPayload.STREAM_CODEC, JumpyBootsNetworking::handleLaunch); - } - - private static void handleLaunch(ServerPlayer player, JumpyBootsLaunchPayload payload) { - { - if (!JumpyBootsItem.isWearingJumpyBoots(player)) return; - if (player.isSpectator() || player.isPassenger()) return; - - ItemStack boots = player.getItemBySlot(EquipmentSlot.FEET); - if (player.getCooldowns().isOnCooldown(boots.getItem())) return; - - int clampedCharge = Math.min(payload.chargeTicks(), JumpyBootsHelper.CHARGE_TICKS_MAX); - if (clampedCharge <= 0) return; - - float verticalBoost = JumpyBootsHelper.verticalBoostFor(clampedCharge); - Vec3 current = player.getDeltaMovement(); - - double newY = verticalBoost; - double newX = current.x; - double newZ = current.z; - - if (payload.sprinting()) { - Vec3 look = player.getLookAngle(); - newX += look.x * JumpyBootsHelper.SPRINT_FORWARD_BOOST; - newZ += look.z * JumpyBootsHelper.SPRINT_FORWARD_BOOST; - } - - player.setDeltaMovement(newX, newY, newZ); - player.setPos(player.getX(), player.getY() + 0.001, player.getZ()); - player.hasImpulse = true; - player.hurtMarked = true; - player.resetFallDistance(); - player.connection.send(new ClientboundSetEntityMotionPacket(player)); - - player.level().playSound(null, player.blockPosition(), SoundEvents.SLIME_JUMP, SoundSource.PLAYERS, 1.0F, 0.6F + (clampedCharge / (float) JumpyBootsHelper.CHARGE_TICKS_MAX) * 0.6F); - - player.getPersistentData().putLong(JumpyBootsHelper.FALL_PROTECTION_NBT_KEY, player.level().getGameTime() + JumpyBootsHelper.FALL_PROTECTION_TICKS); - - player.getCooldowns().addCooldown(boots.getItem(), JumpyBootsHelper.COOLDOWN_TICKS); - } - } - - @SubscribeEvent - public static void onLivingFall(LivingFallEvent event) { - if (!(event.getEntity() instanceof ServerPlayer player)) return; - if (!JumpyBootsItem.isWearingJumpyBoots(player)) return; - long protectionUntil = player.getPersistentData().getLong(JumpyBootsHelper.FALL_PROTECTION_NBT_KEY); - if (player.level().getGameTime() < protectionUntil) { - event.setDamageMultiplier(event.getDamageMultiplier() * 0.25F); - } - } -} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/MultipartNetworking.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/MultipartNetworking.java deleted file mode 100644 index a5d942ee..00000000 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/MultipartNetworking.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.craisinlord.antarchy.forge.network; - -import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner; -import com.craisinlord.antarchy.content.entity.multipart.network.MultipartAttackPayload; -import com.craisinlord.antarchy.content.entity.multipart.network.MultipartInteractPayload; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.entity.Entity; -public final class MultipartNetworking { - private MultipartNetworking() { - } - - public static void register() { - AntarchyForgeNetworkCore.registerC2S(MultipartAttackPayload.class, MultipartAttackPayload.STREAM_CODEC, MultipartNetworking::handleAttack); - AntarchyForgeNetworkCore.registerC2S(MultipartInteractPayload.class, MultipartInteractPayload.STREAM_CODEC, MultipartNetworking::handleInteract); - } - - private static void handleAttack(ServerPlayer serverPlayer, MultipartAttackPayload payload) { - { - Entity entity = serverPlayer.serverLevel().getEntity(payload.parentId()); - if (!(entity instanceof MultipartEntityOwner owner)) { - return; - } - - Entity[] parts = owner.antarchy$getMultipartParts(); - if (parts == null) { - parts = owner.antarchy$createMultipartParts(); - owner.antarchy$setMultipartParts(parts); - owner.antarchy$syncMultipartParts(); - } - - if (payload.partIndex() < 0 || payload.partIndex() >= parts.length) { - return; - } - - Entity part = parts[payload.partIndex()]; - if (part == null || part.isRemoved()) { - return; - } - - if (serverPlayer.distanceToSqr(part) > 10000.0D) { - return; - } - - DamageSource source = serverPlayer.level().damageSources().playerAttack(serverPlayer); - owner.antarchy$hurtMultipartPart(part, source, payload.damage()); - } - } - - private static void handleInteract(ServerPlayer serverPlayer, MultipartInteractPayload payload) { - { - Entity entity = serverPlayer.serverLevel().getEntity(payload.parentId()); - if (!(entity instanceof MultipartEntityOwner owner)) { - return; - } - - Entity[] parts = owner.antarchy$getMultipartParts(); - if (parts == null) { - parts = owner.antarchy$createMultipartParts(); - owner.antarchy$setMultipartParts(parts); - owner.antarchy$syncMultipartParts(); - } - - if (payload.partIndex() < 0 || payload.partIndex() >= parts.length) { - return; - } - - Entity part = parts[payload.partIndex()]; - if (part == null || part.isRemoved()) { - return; - } - - InteractionHand hand = payload.handId() == 0 ? InteractionHand.MAIN_HAND : InteractionHand.OFF_HAND; - owner.antarchy$interactMultipartPart(part, serverPlayer, part.position(), hand); - } - } -} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/SpringyBootsNetworking.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/SpringyBootsNetworking.java new file mode 100644 index 00000000..1a07924c --- /dev/null +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/SpringyBootsNetworking.java @@ -0,0 +1,82 @@ +package com.craisinlord.antarchy.forge.network; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.item.SpringyBootsHelper; +import com.craisinlord.antarchy.content.item.SpringyBootsItem; +import com.craisinlord.antarchy.content.network.SpringyBootsLaunchPayload; +import net.minecraft.network.protocol.game.ClientboundSetEntityMotionPacket; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.phys.Vec3; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.event.entity.living.LivingFallEvent; +import com.craisinlord.antarchy.forge.network.AntarchyPayloadContext; +import com.craisinlord.antarchy.forge.network.AntarchyForgePayloadRegistrar; + +@Mod.EventBusSubscriber(modid = Antarchy.MODID) +public final class SpringyBootsNetworking { + private SpringyBootsNetworking() { + } + + public static void register(AntarchyForgePayloadRegistrar registrar) { + registrar.playToServer( + SpringyBootsLaunchPayload.TYPE, + SpringyBootsLaunchPayload.STREAM_CODEC, + SpringyBootsNetworking::handleLaunch + ); + } + + private static void handleLaunch(SpringyBootsLaunchPayload payload, AntarchyPayloadContext context) { + context.enqueueWork(() -> { + if (!(context.player() instanceof ServerPlayer player)) return; + if (!SpringyBootsItem.isWearingSpringyBoots(player)) return; + if (player.isSpectator() || player.isPassenger()) return; + + ItemStack boots = player.getItemBySlot(EquipmentSlot.FEET); + if (player.getCooldowns().isOnCooldown(boots.getItem())) return; + + int clampedCharge = Math.min(payload.chargeTicks(), SpringyBootsHelper.CHARGE_TICKS_MAX); + if (clampedCharge <= 0) return; + + float verticalBoost = SpringyBootsHelper.verticalBoostFor(clampedCharge); + Vec3 current = player.getDeltaMovement(); + + double newY = verticalBoost; + double newX = current.x; + double newZ = current.z; + + if (payload.sprinting()) { + Vec3 look = player.getLookAngle(); + newX += look.x * SpringyBootsHelper.SPRINT_FORWARD_BOOST; + newZ += look.z * SpringyBootsHelper.SPRINT_FORWARD_BOOST; + } + + player.setDeltaMovement(newX, newY, newZ); + player.setPos(player.getX(), player.getY() + 0.001, player.getZ()); + player.hasImpulse = true; + player.hurtMarked = true; + player.resetFallDistance(); + player.connection.send(new ClientboundSetEntityMotionPacket(player)); + + player.level().playSound(null, player.blockPosition(), SoundEvents.SLIME_JUMP, SoundSource.PLAYERS, 1.0F, 0.6F + (clampedCharge / (float) SpringyBootsHelper.CHARGE_TICKS_MAX) * 0.6F); + + player.getPersistentData().putLong(SpringyBootsHelper.FALL_PROTECTION_NBT_KEY, player.level().getGameTime() + SpringyBootsHelper.FALL_PROTECTION_TICKS); + + player.getCooldowns().addCooldown(boots.getItem(), SpringyBootsHelper.COOLDOWN_TICKS); + }); + } + + @SubscribeEvent + public static void onLivingFall(LivingFallEvent event) { + if (!(event.getEntity() instanceof ServerPlayer player)) return; + if (!SpringyBootsItem.isWearingSpringyBoots(player)) return; + long protectionUntil = player.getPersistentData().getLong(SpringyBootsHelper.FALL_PROTECTION_NBT_KEY); + if (player.level().getGameTime() < protectionUntil) { + event.setDamageMultiplier(event.getDamageMultiplier() * 0.25F); + } + } +} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/ThoraxisWeatherNetworking.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/ThoraxisWeatherNetworking.java deleted file mode 100644 index 918f4264..00000000 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/ThoraxisWeatherNetworking.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.craisinlord.antarchy.forge.network; - -import com.craisinlord.antarchy.content.client.ThoraxisWeatherClientState; -import com.craisinlord.antarchy.content.weather.ThoraxisWeatherKind; -import com.craisinlord.antarchy.content.weather.ThoraxisWeatherSnapshot; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.ServerPlayer; - -public final class ThoraxisWeatherNetworking { - private ThoraxisWeatherNetworking() { - } - - public static void register() { - AntarchyForgeNetworkCore.registerS2C( - com.craisinlord.antarchy.content.network.ThoraxisWeatherPayload.class, - com.craisinlord.antarchy.content.network.ThoraxisWeatherPayload.STREAM_CODEC, - ThoraxisWeatherNetworking::handleWeatherPayload - ); - } - - public static void syncLevel(ServerLevel level, ThoraxisWeatherSnapshot snapshot) { - com.craisinlord.antarchy.content.network.ThoraxisWeatherPayload payload = new com.craisinlord.antarchy.content.network.ThoraxisWeatherPayload( - snapshot.dimension(), - snapshot.kind(), - snapshot.expiresAt(), - snapshot.anchor().getX(), - snapshot.anchor().getY(), - snapshot.anchor().getZ() - ); - - for (ServerPlayer player : level.players()) { - AntarchyForgeNetworkCore.sendToPlayer(player, payload); - } - } - - public static void syncPlayer(ServerPlayer player, ThoraxisWeatherSnapshot snapshot) { - com.craisinlord.antarchy.content.network.ThoraxisWeatherPayload payload = new com.craisinlord.antarchy.content.network.ThoraxisWeatherPayload( - snapshot.dimension(), - snapshot.kind(), - snapshot.expiresAt(), - snapshot.anchor().getX(), - snapshot.anchor().getY(), - snapshot.anchor().getZ() - ); - AntarchyForgeNetworkCore.sendToPlayer(player, payload); - } - - private static void handleWeatherPayload(com.craisinlord.antarchy.content.network.ThoraxisWeatherPayload payload) { - ThoraxisWeatherClientState.apply( - new ResourceLocation(payload.dimensionId()), - ThoraxisWeatherKind.byId(payload.weatherId()), - payload.expiresAt(), - payload.anchorX(), - payload.anchorY(), - payload.anchorZ() - ); - } -} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/TigerEyeNetworking.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/TigerEyeNetworking.java deleted file mode 100644 index 7d54c681..00000000 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/TigerEyeNetworking.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.craisinlord.antarchy.forge.network; - -import com.craisinlord.antarchy.content.item.TigerEyeArmorUtil; -import com.craisinlord.antarchy.content.network.TigerEyeCamouflageStatePayload; -import com.craisinlord.antarchy.content.network.ToggleTigerEyeCamouflagePayload; -import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageController; -import net.minecraft.network.chat.Component; -import net.minecraft.server.level.ServerPlayer; - -public final class TigerEyeNetworking { - private TigerEyeNetworking() { - } - - public static void register() { - AntarchyForgeNetworkCore.registerS2C(TigerEyeCamouflageStatePayload.class, TigerEyeCamouflageStatePayload.STREAM_CODEC, payload -> - com.craisinlord.antarchy.content.client.TigerEyeCamouflageClientState.update(payload.entityId(), payload.active(), payload.blockStateId())); - AntarchyForgeNetworkCore.registerC2S(ToggleTigerEyeCamouflagePayload.class, ToggleTigerEyeCamouflagePayload.STREAM_CODEC, (player, payload) -> handleToggle(player)); - } - - private static void handleToggle(ServerPlayer player) { - TigerEyeCamouflageController.ToggleResult result = TigerEyeCamouflageController.toggle(player); - if (result != TigerEyeCamouflageController.ToggleResult.NO_CHANGE) { - AntarchyForgeNetworkCore.sendToTrackingEntity(player, - com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageSync.payload(player)); - } - String messageKey = switch (result) { - case ACTIVATED -> "message.antarchy.tiger_eye_camouflage.activated"; - case DEACTIVATED -> "message.antarchy.tiger_eye_camouflage.disabled"; - case FULL_SET_REQUIRED -> TigerEyeArmorUtil.countEquippedPieces(player) > 0 - ? "message.antarchy.tiger_eye_camouflage.full_set_required" - : null; - case INVALID_BLOCK -> "message.antarchy.tiger_eye_camouflage.invalid_block"; - case NO_CHANGE -> null; - }; - if (messageKey != null) { - player.displayClientMessage(Component.translatable(messageKey), true); - } - } -} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeBlocks.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeBlocks.java index 7caad1e8..cd609aaa 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeBlocks.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeBlocks.java @@ -6,26 +6,32 @@ import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.block.*; import com.craisinlord.antarchy.content.block.entity.AntNestBlockEntity; import com.craisinlord.antarchy.content.block.entity.CritterCageBlockEntity; +import com.craisinlord.antarchy.content.block.entity.DimensionalTearMarkerBlockEntity; import com.craisinlord.antarchy.content.block.entity.DreamCampfireBlockEntity; import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity; +import com.craisinlord.antarchy.content.block.entity.LucidAnchorBlockEntity; +import com.craisinlord.antarchy.content.block.entity.PortalGunPortalBaseBlockEntity; +import com.craisinlord.antarchy.content.block.entity.PortalGunPortalMasterBlockEntity; import com.craisinlord.antarchy.content.block.entity.PotentNyxiteBlockEntity; +import com.craisinlord.antarchy.content.block.entity.QueenTrailSpawnMarkerBlockEntity; import com.craisinlord.antarchy.content.block.entity.SeashellBlockEntity; import com.craisinlord.antarchy.content.block.entity.UpperBlockEntity; -import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity; import com.craisinlord.antarchy.content.block.entity.UndertrialSpawnerBlockEntity; import com.craisinlord.antarchy.content.block.entity.UnderVaultBlockEntity; -import com.craisinlord.antarchy.content.block.entity.QueenTrailSpawnMarkerBlockEntity; +import com.craisinlord.antarchy.content.block.entity.VortexLensBlockEntity; +import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity; import com.craisinlord.antarchy.content.fluid.BileLiquidBlock; import com.craisinlord.antarchy.content.fluid.LumenLiquidBlock; import com.craisinlord.antarchy.content.portal.PermanentPortalType; import com.craisinlord.antarchy.forge.content.block.WildCornBlock; import com.craisinlord.antarchy.forge.AntarchyWoodTypes; import com.craisinlord.antarchy.forge.content.fluid.AntiwaterFluidType; -import com.mojang.serialization.MapCodec; import net.minecraft.core.Direction; import net.minecraft.core.registries.Registries; +import net.minecraft.sounds.SoundEvent; import net.minecraft.util.valueproviders.UniformInt; import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.item.context.UseOnContext; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockBehaviour; @@ -37,12 +43,23 @@ import net.minecraft.world.level.block.state.properties.WoodType; import net.minecraft.world.level.material.FlowingFluid; import net.minecraft.world.level.material.FluidState; import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.common.ToolAction; +import net.minecraftforge.common.ToolActions; import net.minecraftforge.fluids.ForgeFlowingFluid; import net.minecraftforge.registries.RegistryObject; public final class AntarchyForgeBlocks { private static final DeferredRegister.Blocks BLOCKS = DeferredRegister.createBlocks(Antarchy.MODID); private static final DeferredRegister> BLOCK_ENTITY_TYPES = DeferredRegister.create(Registries.BLOCK_ENTITY_TYPE, Antarchy.MODID); + public static final RegistryObject UNDERTRIAL_SPAWNER = BLOCKS.register("undertrial_spawner", + () -> new UndertrialSpawnerBlock(AntarchyForgeBlocks::undertrialSpawnerBlockEntityType, + BlockBehaviour.Properties.of().mapColor(MapColor.STONE).instrument(net.minecraft.world.level.block.state.properties.NoteBlockInstrument.BASEDRUM).strength(50.0F).noOcclusion().isViewBlocking((state, level, pos) -> false))); + public static final RegistryObject UNDERVAULT = BLOCKS.register("undervault", + () -> new UnderVaultBlock(AntarchyForgeBlocks::underVaultBlockEntityType, + BlockBehaviour.Properties.of().mapColor(MapColor.STONE).instrument(net.minecraft.world.level.block.state.properties.NoteBlockInstrument.BASEDRUM).strength(50.0F).noOcclusion().isViewBlocking((state, level, pos) -> false))); + public static final RegistryObject QUEEN_TRAIL_SPAWN_MARKER = BLOCKS.register("queen_trail_spawn_marker", + () -> new QueenTrailSpawnMarkerBlock(AntarchyForgeBlocks::queenTrailSpawnMarkerBlockEntityType, + BlockBehaviour.Properties.copy(Blocks.BEDROCK).noLootTable())); public static final RegistryObject DUPLICATOR_LOG = BLOCKS.register("duplicator_log", () -> new DuplicatorLogBlock(BlockBehaviour.Properties.copy(Blocks.OAK_LOG).randomTicks())); public static final RegistryObject OURANWOOD_LOG = BLOCKS.register("ouranwood_log", @@ -74,7 +91,7 @@ public final class AntarchyForgeBlocks { public static final RegistryObject OURANWOOD_PRESSURE_PLATE = BLOCKS.register("ouranwood_pressure_plate", () -> new PressurePlateBlock(PressurePlateBlock.Sensitivity.EVERYTHING, BlockBehaviour.Properties.copy(Blocks.JUNGLE_PRESSURE_PLATE), BlockSetType.JUNGLE)); public static final RegistryObject OURANWOOD_BUTTON = BLOCKS.register("ouranwood_button", - () -> new ButtonBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_BUTTON), BlockSetType.JUNGLE, 30, false)); + () -> new ButtonBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_BUTTON), BlockSetType.JUNGLE, 30, true)); public static final RegistryObject OURANWOOD_LEAVES = BLOCKS.register("ouranwood_leaves", () -> new OuranwoodLeavesBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_LEAVES).randomTicks())); public static final RegistryObject OURANWOOD_ACORN_BLOCK = BLOCKS.register("ouranwood_acorn", @@ -85,6 +102,8 @@ public final class AntarchyForgeBlocks { () -> new MilkweedBlock(BlockBehaviour.Properties.copy(Blocks.PEONY))); public static final RegistryObject PINK_MILKWEED = BLOCKS.register("pink_milkweed", () -> new MilkweedBlock(BlockBehaviour.Properties.copy(Blocks.PEONY))); + public static final RegistryObject GLIMMERING_REED = BLOCKS.register("glimmering_reed", + () -> new GlimmeringReedBlock(BlockBehaviour.Properties.copy(Blocks.SUNFLOWER).lightLevel(state -> 8))); public static final RegistryObject CAMELLIA = BLOCKS.register("camellia", () -> new com.craisinlord.antarchy.content.block.CamelliaBlock(BlockBehaviour.Properties.copy(Blocks.PEONY))); public static final RegistryObject SPIDER_LILY = BLOCKS.register("spider_lily", @@ -103,6 +122,14 @@ public final class AntarchyForgeBlocks { () -> new LucidAnchorBlock(BlockBehaviour.Properties.copy(Blocks.BEACON).strength(3.0F))); public static final RegistryObject CRITTER_CAGE_BLOCK = BLOCKS.register("critter_cage_block", () -> new CritterCageBlock(BlockBehaviour.Properties.of().strength(5.0F, 6.0F).sound(net.minecraft.world.level.block.SoundType.METAL).noOcclusion())); + public static final RegistryObject PORTAL_GUN_PORTAL_MASTER = BLOCKS.register("portal_gun_portal_master", + () -> new PortalGunPortalMasterBlock(AntarchyForgeBlocks::portalGunPortalMasterBlockEntityType, portalProperties())); + public static final RegistryObject PORTAL_GUN_PORTAL_BASE = BLOCKS.register("portal_gun_portal_base", + () -> new PortalGunPortalBaseBlock(AntarchyForgeBlocks::portalGunPortalBaseBlockEntityType, portalProperties())); + public static final RegistryObject DIMENSIONAL_TEAR_MARKER = BLOCKS.register("dimensional_tear_marker", + () -> new DimensionalTearMarkerBlock(AntarchyForgeBlocks::dimensionalTearMarkerBlockEntityType, + BlockBehaviour.Properties.of().noCollission().noOcclusion().noLootTable().instabreak() + .pushReaction(net.minecraft.world.level.material.PushReaction.DESTROY))); public static final RegistryObject OURANWOOD_SIGN = BLOCKS.register("ouranwood_sign", () -> new StandingSignBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_SIGN), AntarchyWoodTypes.OURANWOOD)); public static final RegistryObject OURANWOOD_WALL_SIGN = BLOCKS.register("ouranwood_wall_sign", @@ -136,7 +163,7 @@ public final class AntarchyForgeBlocks { public static final RegistryObject PEACH_PRESSURE_PLATE = BLOCKS.register("peach_pressure_plate", () -> new PressurePlateBlock(PressurePlateBlock.Sensitivity.EVERYTHING, BlockBehaviour.Properties.copy(Blocks.JUNGLE_PRESSURE_PLATE), BlockSetType.JUNGLE)); public static final RegistryObject PEACH_BUTTON = BLOCKS.register("peach_button", - () -> new ButtonBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_BUTTON), BlockSetType.JUNGLE, 30, false)); + () -> new ButtonBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_BUTTON), BlockSetType.JUNGLE, 30, true)); public static final RegistryObject PEACH_LEAVES = BLOCKS.register("peach_leaves", () -> new PeachLeavesBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_LEAVES).randomTicks())); public static final RegistryObject PEACH_HANGING_PEACH = BLOCKS.register("hanging_peach", @@ -178,11 +205,11 @@ public final class AntarchyForgeBlocks { public static final RegistryObject NADIR_PRESSURE_PLATE = BLOCKS.register("nadir_pressure_plate", () -> new PressurePlateBlock(PressurePlateBlock.Sensitivity.EVERYTHING, BlockBehaviour.Properties.copy(Blocks.JUNGLE_PRESSURE_PLATE), BlockSetType.JUNGLE)); public static final RegistryObject NADIR_BUTTON = BLOCKS.register("nadir_button", - () -> new ButtonBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_BUTTON), BlockSetType.JUNGLE, 30, false)); - public static final RegistryObject NADIR_VEIL = BLOCKS.register("nadir_veil", - () -> new Block(BlockBehaviour.Properties.copy(Blocks.MANGROVE_LEAVES).noCollission().noOcclusion())); - public static final RegistryObject NADIR_SAPLING = BLOCKS.register("nadir_sapling", - () -> new com.craisinlord.antarchy.content.block.NadirSaplingBlock(BlockBehaviour.Properties.copy(Blocks.OAK_SAPLING).randomTicks().noCollission())); + () -> new ButtonBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_BUTTON), BlockSetType.JUNGLE, 30, true)); + public static final RegistryObject NADIR_VEIL = BLOCKS.register("nadir_veil", + () -> new com.craisinlord.antarchy.content.block.NadirVeilBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_LEAVES).sound(SoundType.SLIME_BLOCK).noOcclusion())); + public static final RegistryObject NADIR_SAPLING = BLOCKS.register("nadir_sapling", + () -> new NadirSaplingBlock(BlockBehaviour.Properties.copy(Blocks.OAK_SAPLING).randomTicks().noCollission())); public static final RegistryObject POTTED_NADIR_SAPLING = BLOCKS.register("potted_nadir_sapling", () -> new FlowerPotBlock(NADIR_SAPLING.get(), BlockBehaviour.Properties.copy(Blocks.POTTED_DANDELION))); public static final RegistryObject NADIR_SIGN = BLOCKS.register("nadir_sign", @@ -195,6 +222,134 @@ public final class AntarchyForgeBlocks { () -> new WallHangingSignBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_WALL_HANGING_SIGN), AntarchyWoodTypes.NADIR)); public static final RegistryObject DUPLICATOR_SAPLING = BLOCKS.register("duplicator_sapling", () -> new DuplicatorSaplingBlock(BlockBehaviour.Properties.copy(Blocks.OAK_SAPLING).randomTicks().noCollission())); + public static final RegistryObject ROYAL_LOG = BLOCKS.register("royal_log", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_LOG))); + public static final RegistryObject ROYAL_WOOD = BLOCKS.register("royal_wood", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_WOOD))); + public static final RegistryObject STRIPPED_ROYAL_LOG = BLOCKS.register("stripped_royal_log", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.copy(Blocks.STRIPPED_JUNGLE_LOG))); + public static final RegistryObject STRIPPED_ROYAL_WOOD = BLOCKS.register("stripped_royal_wood", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.copy(Blocks.STRIPPED_JUNGLE_WOOD))); + public static final RegistryObject ROYAL_PLANKS = BLOCKS.register("royal_planks", + () -> new Block(BlockBehaviour.Properties.copy(Blocks.JUNGLE_PLANKS))); + public static final RegistryObject ROYAL_STAIRS = BLOCKS.register("royal_stairs", + () -> new StairBlock(ROYAL_PLANKS.get().defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.JUNGLE_STAIRS))); + public static final RegistryObject ROYAL_SLAB = BLOCKS.register("royal_slab", + () -> new SlabBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_SLAB))); + public static final RegistryObject ROYAL_FENCE = BLOCKS.register("royal_fence", + () -> new FenceBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_FENCE))); + public static final RegistryObject ROYAL_FENCE_GATE = BLOCKS.register("royal_fence_gate", + () -> new FenceGateBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_FENCE_GATE), WoodType.JUNGLE)); + public static final RegistryObject ROYAL_DOOR = BLOCKS.register("royal_door", + () -> new DoorBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_DOOR), BlockSetType.JUNGLE)); + public static final RegistryObject ROYAL_TRAPDOOR = BLOCKS.register("royal_trapdoor", + () -> new TrapDoorBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_TRAPDOOR), BlockSetType.JUNGLE)); + public static final RegistryObject ROYAL_PRESSURE_PLATE = BLOCKS.register("royal_pressure_plate", + () -> new PressurePlateBlock(PressurePlateBlock.Sensitivity.EVERYTHING, BlockBehaviour.Properties.copy(Blocks.JUNGLE_PRESSURE_PLATE), BlockSetType.JUNGLE)); + public static final RegistryObject ROYAL_BUTTON = BLOCKS.register("royal_button", + () -> new ButtonBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_BUTTON), BlockSetType.JUNGLE, 30, true)); + public static final RegistryObject ROYAL_LEAVES = BLOCKS.register("royal_leaves", + () -> new RoyalLeavesBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_LEAVES).randomTicks())); + public static final RegistryObject ROYAL_FLOWERING_LEAVES = BLOCKS.register("royal_flowering_leaves", + () -> new RoyalLeavesBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_LEAVES).randomTicks().lightLevel(state -> 12))); + public static final RegistryObject ROYAL_SAPLING = BLOCKS.register("royal_sapling", + () -> new RoyalSaplingBlock(BlockBehaviour.Properties.copy(Blocks.OAK_SAPLING).noCollission())); + public static final RegistryObject POTTED_ROYAL_SAPLING = BLOCKS.register("potted_royal_sapling", + () -> new FlowerPotBlock(ROYAL_SAPLING.get(), BlockBehaviour.Properties.copy(Blocks.POTTED_DANDELION))); + public static final RegistryObject ROYAL_SIGN = BLOCKS.register("royal_sign", + () -> new StandingSignBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_SIGN), AntarchyWoodTypes.ROYAL)); + public static final RegistryObject ROYAL_WALL_SIGN = BLOCKS.register("royal_wall_sign", + () -> new WallSignBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_WALL_SIGN), AntarchyWoodTypes.ROYAL)); + public static final RegistryObject ROYAL_HANGING_SIGN = BLOCKS.register("royal_hanging_sign", + () -> new CeilingHangingSignBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_HANGING_SIGN), AntarchyWoodTypes.ROYAL)); + public static final RegistryObject ROYAL_WALL_HANGING_SIGN = BLOCKS.register("royal_wall_hanging_sign", + () -> new WallHangingSignBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_WALL_HANGING_SIGN), AntarchyWoodTypes.ROYAL)); + public static final RegistryObject TRUFFALO_LOG = BLOCKS.register("truffalo_log", + () -> new TruffaloLogBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_LOG)) { + @Override + public BlockState getToolModifiedState(BlockState state, UseOnContext context, ToolAction itemAbility, boolean simulate) { + if (itemAbility == ToolActions.AXE_STRIP) { + return STRIPPED_TRUFFALO_LOG.get().withPropertiesOf(state); + } + return super.getToolModifiedState(state, context, itemAbility, simulate); + } + }); + public static final RegistryObject TRUFFALO_WOOD = BLOCKS.register("truffalo_wood", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_WOOD)) { + @Override + public BlockState getToolModifiedState(BlockState state, UseOnContext context, ToolAction itemAbility, boolean simulate) { + if (itemAbility == ToolActions.AXE_STRIP) { + return STRIPPED_TRUFFALO_WOOD.get().withPropertiesOf(state); + } + return super.getToolModifiedState(state, context, itemAbility, simulate); + } + }); + public static final RegistryObject STRIPPED_TRUFFALO_LOG = BLOCKS.register("stripped_truffalo_log", + () -> new TruffaloLogBlock(BlockBehaviour.Properties.copy(Blocks.STRIPPED_JUNGLE_LOG))); + public static final RegistryObject STRIPPED_TRUFFALO_WOOD = BLOCKS.register("stripped_truffalo_wood", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.copy(Blocks.STRIPPED_JUNGLE_WOOD))); + public static final RegistryObject TRUFFALO_PLANKS = BLOCKS.register("truffalo_planks", + () -> new Block(BlockBehaviour.Properties.copy(Blocks.JUNGLE_PLANKS))); + public static final RegistryObject TRUFFALO_STAIRS = BLOCKS.register("truffalo_stairs", + () -> new StairBlock(TRUFFALO_PLANKS.get().defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.JUNGLE_STAIRS))); + public static final RegistryObject TRUFFALO_SLAB = BLOCKS.register("truffalo_slab", + () -> new SlabBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_SLAB))); + public static final RegistryObject TRUFFALO_FENCE = BLOCKS.register("truffalo_fence", + () -> new FenceBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_FENCE))); + public static final RegistryObject TRUFFALO_FENCE_GATE = BLOCKS.register("truffalo_fence_gate", + () -> new FenceGateBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_FENCE_GATE), WoodType.JUNGLE)); + public static final RegistryObject TRUFFALO_DOOR = BLOCKS.register("truffalo_door", + () -> new DoorBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_DOOR), BlockSetType.JUNGLE)); + public static final RegistryObject TRUFFALO_TRAPDOOR = BLOCKS.register("truffalo_trapdoor", + () -> new TrapDoorBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_TRAPDOOR), BlockSetType.JUNGLE)); + public static final RegistryObject TRUFFALO_PRESSURE_PLATE = BLOCKS.register("truffalo_pressure_plate", + () -> new PressurePlateBlock(PressurePlateBlock.Sensitivity.EVERYTHING, BlockBehaviour.Properties.copy(Blocks.JUNGLE_PRESSURE_PLATE), BlockSetType.JUNGLE)); + public static final RegistryObject TRUFFALO_BUTTON = BLOCKS.register("truffalo_button", + () -> new ButtonBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_BUTTON), BlockSetType.JUNGLE, 30, true)); + public static final RegistryObject TRUFFALO_SAPLING = BLOCKS.register("truffalo_sapling", + () -> new TruffaloSaplingBlock(BlockBehaviour.Properties.copy(Blocks.OAK_SAPLING).randomTicks().noCollission())); + public static final RegistryObject POTTED_TRUFFALO_SAPLING = BLOCKS.register("potted_truffalo_sapling", + () -> new FlowerPotBlock(TRUFFALO_SAPLING.get(), BlockBehaviour.Properties.copy(Blocks.POTTED_DANDELION))); + public static final RegistryObject TRUFFALO_SIGN = BLOCKS.register("truffalo_sign", + () -> new StandingSignBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_SIGN), AntarchyWoodTypes.TRUFFALO)); + public static final RegistryObject TRUFFALO_WALL_SIGN = BLOCKS.register("truffalo_wall_sign", + () -> new WallSignBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_WALL_SIGN), AntarchyWoodTypes.TRUFFALO)); + public static final RegistryObject TRUFFALO_HANGING_SIGN = BLOCKS.register("truffalo_hanging_sign", + () -> new CeilingHangingSignBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_HANGING_SIGN), AntarchyWoodTypes.TRUFFALO)); + public static final RegistryObject TRUFFALO_WALL_HANGING_SIGN = BLOCKS.register("truffalo_wall_hanging_sign", + () -> new WallHangingSignBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_WALL_HANGING_SIGN), AntarchyWoodTypes.TRUFFALO)); + public static final RegistryObject TRUFFALO_TUFT_WHITE = BLOCKS.register("white_truffalo_tuft", + () -> new TruffaloTuftBlock(BlockBehaviour.Properties.copy(Blocks.WHITE_WOOL))); + public static final RegistryObject TRUFFALO_TUFT_ORANGE = BLOCKS.register("orange_truffalo_tuft", + () -> new TruffaloTuftBlock(BlockBehaviour.Properties.copy(Blocks.ORANGE_WOOL))); + public static final RegistryObject TRUFFALO_TUFT_MAGENTA = BLOCKS.register("magenta_truffalo_tuft", + () -> new TruffaloTuftBlock(BlockBehaviour.Properties.copy(Blocks.MAGENTA_WOOL))); + public static final RegistryObject TRUFFALO_TUFT_LIGHT_BLUE = BLOCKS.register("light_blue_truffalo_tuft", + () -> new TruffaloTuftBlock(BlockBehaviour.Properties.copy(Blocks.LIGHT_BLUE_WOOL))); + public static final RegistryObject TRUFFALO_TUFT_YELLOW = BLOCKS.register("yellow_truffalo_tuft", + () -> new TruffaloTuftBlock(BlockBehaviour.Properties.copy(Blocks.YELLOW_WOOL))); + public static final RegistryObject TRUFFALO_TUFT_LIME = BLOCKS.register("lime_truffalo_tuft", + () -> new TruffaloTuftBlock(BlockBehaviour.Properties.copy(Blocks.LIME_WOOL))); + public static final RegistryObject TRUFFALO_TUFT_PINK = BLOCKS.register("pink_truffalo_tuft", + () -> new TruffaloTuftBlock(BlockBehaviour.Properties.copy(Blocks.PINK_WOOL))); + public static final RegistryObject TRUFFALO_TUFT_GRAY = BLOCKS.register("gray_truffalo_tuft", + () -> new TruffaloTuftBlock(BlockBehaviour.Properties.copy(Blocks.GRAY_WOOL))); + public static final RegistryObject TRUFFALO_TUFT_LIGHT_GRAY = BLOCKS.register("light_gray_truffalo_tuft", + () -> new TruffaloTuftBlock(BlockBehaviour.Properties.copy(Blocks.LIGHT_GRAY_WOOL))); + public static final RegistryObject TRUFFALO_TUFT_CYAN = BLOCKS.register("cyan_truffalo_tuft", + () -> new TruffaloTuftBlock(BlockBehaviour.Properties.copy(Blocks.CYAN_WOOL))); + public static final RegistryObject TRUFFALO_TUFT_PURPLE = BLOCKS.register("purple_truffalo_tuft", + () -> new TruffaloTuftBlock(BlockBehaviour.Properties.copy(Blocks.PURPLE_WOOL))); + public static final RegistryObject TRUFFALO_TUFT_BLUE = BLOCKS.register("blue_truffalo_tuft", + () -> new TruffaloTuftBlock(BlockBehaviour.Properties.copy(Blocks.BLUE_WOOL))); + public static final RegistryObject TRUFFALO_TUFT_BROWN = BLOCKS.register("brown_truffalo_tuft", + () -> new TruffaloTuftBlock(BlockBehaviour.Properties.copy(Blocks.BROWN_WOOL))); + public static final RegistryObject TRUFFALO_TUFT_GREEN = BLOCKS.register("green_truffalo_tuft", + () -> new TruffaloTuftBlock(BlockBehaviour.Properties.copy(Blocks.GREEN_WOOL))); + public static final RegistryObject TRUFFALO_TUFT_RED = BLOCKS.register("red_truffalo_tuft", + () -> new TruffaloTuftBlock(BlockBehaviour.Properties.copy(Blocks.RED_WOOL))); + public static final RegistryObject TRUFFALO_TUFT_BLACK = BLOCKS.register("black_truffalo_tuft", + () -> new TruffaloTuftBlock(BlockBehaviour.Properties.copy(Blocks.BLACK_WOOL))); public static final RegistryObject DUCT_TAPE = BLOCKS.register("duct_tape", () -> new DuctTapeBlock(BlockBehaviour.Properties.of() .strength(0.2F) @@ -213,6 +368,8 @@ public final class AntarchyForgeBlocks { () -> new Block(nyxiteProperties())); public static final RegistryObject NYXITE_BRICKS = BLOCKS.register("nyxite_bricks", () -> new Block(nyxiteProperties())); + public static final RegistryObject MOSSY_NYXITE_BRICKS = BLOCKS.register("mossy_nyxite_bricks", + () -> new Block(nyxiteProperties())); public static final RegistryObject NYXITE_STAIRS = BLOCKS.register("nyxite_stairs", () -> new StairBlock(NYXITE.get().defaultBlockState(), nyxiteProperties())); public static final RegistryObject NYXITE_SLAB = BLOCKS.register("nyxite_slab", @@ -228,13 +385,19 @@ public final class AntarchyForgeBlocks { public static final RegistryObject POLISHED_NYXITE_PRESSURE_PLATE = BLOCKS.register("polished_nyxite_pressure_plate", () -> new com.craisinlord.antarchy.content.block.PolishedNyxitePressurePlateBlock(BlockSetType.STONE, BlockBehaviour.Properties.copy(Blocks.STONE_PRESSURE_PLATE))); public static final RegistryObject POLISHED_NYXITE_BUTTON = BLOCKS.register("polished_nyxite_button", - () -> new ButtonBlock(BlockBehaviour.Properties.copy(Blocks.STONE_BUTTON), BlockSetType.STONE, 20, true)); + () -> new ButtonBlock(BlockBehaviour.Properties.copy(Blocks.STONE_BUTTON), BlockSetType.STONE, 20, false)); public static final RegistryObject NYXITE_BRICK_STAIRS = BLOCKS.register("nyxite_brick_stairs", () -> new StairBlock(NYXITE_BRICKS.get().defaultBlockState(), nyxiteProperties())); public static final RegistryObject NYXITE_BRICK_SLAB = BLOCKS.register("nyxite_brick_slab", () -> new SlabBlock(nyxiteProperties())); public static final RegistryObject NYXITE_BRICK_WALL = BLOCKS.register("nyxite_brick_wall", () -> new WallBlock(nyxiteProperties())); + public static final RegistryObject MOSSY_NYXITE_BRICK_STAIRS = BLOCKS.register("mossy_nyxite_brick_stairs", + () -> new StairBlock(MOSSY_NYXITE_BRICKS.get().defaultBlockState(), nyxiteProperties())); + public static final RegistryObject MOSSY_NYXITE_BRICK_SLAB = BLOCKS.register("mossy_nyxite_brick_slab", + () -> new SlabBlock(nyxiteProperties())); + public static final RegistryObject MOSSY_NYXITE_BRICK_WALL = BLOCKS.register("mossy_nyxite_brick_wall", + () -> new WallBlock(nyxiteProperties())); public static final RegistryObject NYXITE_PILLAR = BLOCKS.register("nyxite_pillar", () -> new RotatedPillarBlock(nyxiteProperties())); public static final RegistryObject SHELLSTONE = BLOCKS.register("shellstone", @@ -275,12 +438,12 @@ public final class AntarchyForgeBlocks { () -> new WallBlock(AntarchyObjects.shellstoneProperties())); public static final RegistryObject SHELLSTONE_PILLAR = BLOCKS.register("shellstone_pillar", () -> new RotatedPillarBlock(AntarchyObjects.shellstoneProperties())); - public static final RegistryObject TRIFFID_GOO_BLOCK = BLOCKS.register("flytrap_goo_block", - () -> new com.craisinlord.antarchy.content.block.TriffidGooBlock(BlockBehaviour.Properties.copy(Blocks.SLIME_BLOCK).noOcclusion().isViewBlocking((s, l, p) -> false).isSuffocating((s, l, p) -> false))); + public static final RegistryObject FLYTRAP_GOO_BLOCK = BLOCKS.register("flytrap_goo_block", + () -> new com.craisinlord.antarchy.content.block.FlytrapGooBlock(BlockBehaviour.Properties.copy(Blocks.SLIME_BLOCK).noOcclusion().isViewBlocking((s, l, p) -> false).isSuffocating((s, l, p) -> false))); public static final RegistryObject CLOUD_BLOCK = BLOCKS.register("cloud_block", () -> new com.craisinlord.antarchy.content.block.CloudBlock( AntarchyForgeItems::cloudBucketItem, - BlockBehaviour.Properties.copy(Blocks.POWDER_SNOW).noLootTable().noOcclusion() + BlockBehaviour.Properties.copy(Blocks.POWDER_SNOW).noLootTable().noOcclusion().emissiveRendering((state, level, pos) -> true) )); public static final RegistryObject ELYTHIA_PORTAL = BLOCKS.register("elythia_portal", () -> new AntDimensionPortalBlock(PermanentPortalType.ELYTHIA, portalProperties())); @@ -301,6 +464,40 @@ public final class AntarchyForgeBlocks { )); public static final RegistryObject MYRMITE = BLOCKS.register("myrmite", () -> new Block(nyxiteProperties())); + public static final RegistryObject MYRMITE_STAIRS = BLOCKS.register("myrmite_stairs", + () -> new StairBlock(MYRMITE.get().defaultBlockState(), nyxiteProperties())); + public static final RegistryObject MYRMITE_SLAB = BLOCKS.register("myrmite_slab", + () -> new SlabBlock(nyxiteProperties())); + public static final RegistryObject MYRMITE_WALL = BLOCKS.register("myrmite_wall", + () -> new WallBlock(nyxiteProperties())); + public static final RegistryObject POLISHED_MYRMITE = BLOCKS.register("polished_myrmite", + () -> new Block(nyxiteProperties())); + public static final RegistryObject POLISHED_MYRMITE_STAIRS = BLOCKS.register("polished_myrmite_stairs", + () -> new StairBlock(POLISHED_MYRMITE.get().defaultBlockState(), nyxiteProperties())); + public static final RegistryObject POLISHED_MYRMITE_SLAB = BLOCKS.register("polished_myrmite_slab", + () -> new SlabBlock(nyxiteProperties())); + public static final RegistryObject POLISHED_MYRMITE_WALL = BLOCKS.register("polished_myrmite_wall", + () -> new WallBlock(nyxiteProperties())); + public static final RegistryObject CHISELED_MYRMITE = BLOCKS.register("chiseled_myrmite", + () -> new Block(nyxiteProperties())); + public static final RegistryObject MYRMITE_BRICKS = BLOCKS.register("myrmite_bricks", + () -> new Block(nyxiteProperties())); + public static final RegistryObject MYRMITE_BRICK_STAIRS = BLOCKS.register("myrmite_brick_stairs", + () -> new StairBlock(MYRMITE_BRICKS.get().defaultBlockState(), nyxiteProperties())); + public static final RegistryObject MYRMITE_BRICK_SLAB = BLOCKS.register("myrmite_brick_slab", + () -> new SlabBlock(nyxiteProperties())); + public static final RegistryObject MYRMITE_BRICK_WALL = BLOCKS.register("myrmite_brick_wall", + () -> new WallBlock(nyxiteProperties())); + public static final RegistryObject MOSSY_MYRMITE_BRICKS = BLOCKS.register("mossy_myrmite_bricks", + () -> new Block(nyxiteProperties())); + public static final RegistryObject MOSSY_MYRMITE_BRICK_STAIRS = BLOCKS.register("mossy_myrmite_brick_stairs", + () -> new StairBlock(MOSSY_MYRMITE_BRICKS.get().defaultBlockState(), nyxiteProperties())); + public static final RegistryObject MOSSY_MYRMITE_BRICK_SLAB = BLOCKS.register("mossy_myrmite_brick_slab", + () -> new SlabBlock(nyxiteProperties())); + public static final RegistryObject MOSSY_MYRMITE_BRICK_WALL = BLOCKS.register("mossy_myrmite_brick_wall", + () -> new WallBlock(nyxiteProperties())); + public static final RegistryObject MYRMITE_PILLAR = BLOCKS.register("myrmite_pillar", + () -> new RotatedPillarBlock(nyxiteProperties())); public static final RegistryObject BIOMITE = BLOCKS.register("biomite", () -> new Block(BlockBehaviour.Properties.copy(Blocks.NETHERRACK))); public static final RegistryObject BIOMITE_TURF = BLOCKS.register("biomite_turf", @@ -319,6 +516,8 @@ public final class AntarchyForgeBlocks { () -> new Block(broodstoneProperties())); public static final RegistryObject BROODSTONE_BRICKS = BLOCKS.register("broodstone_bricks", () -> new Block(broodstoneProperties())); + public static final RegistryObject MOSSY_BROODSTONE_BRICKS = BLOCKS.register("mossy_broodstone_bricks", + () -> new Block(broodstoneProperties())); public static final RegistryObject BROODSTONE_STAIRS = BLOCKS.register("broodstone_stairs", () -> new StairBlock(BROODSTONE.get().defaultBlockState(), broodstoneProperties())); public static final RegistryObject BROODSTONE_SLAB = BLOCKS.register("broodstone_slab", @@ -337,12 +536,18 @@ public final class AntarchyForgeBlocks { () -> new SlabBlock(broodstoneProperties())); public static final RegistryObject BROODSTONE_BRICK_WALL = BLOCKS.register("broodstone_brick_wall", () -> new WallBlock(broodstoneProperties())); + public static final RegistryObject MOSSY_BROODSTONE_BRICK_STAIRS = BLOCKS.register("mossy_broodstone_brick_stairs", + () -> new StairBlock(MOSSY_BROODSTONE_BRICKS.get().defaultBlockState(), broodstoneProperties())); + public static final RegistryObject MOSSY_BROODSTONE_BRICK_SLAB = BLOCKS.register("mossy_broodstone_brick_slab", + () -> new SlabBlock(broodstoneProperties())); + public static final RegistryObject MOSSY_BROODSTONE_BRICK_WALL = BLOCKS.register("mossy_broodstone_brick_wall", + () -> new WallBlock(broodstoneProperties())); + public static final RegistryObject BROODSTONE_PILLAR = BLOCKS.register("broodstone_pillar", + () -> new RotatedPillarBlock(broodstoneProperties())); public static final RegistryObject BROODSTONE_URANIUM_ORE = BLOCKS.register("broodstone_uranium_ore", () -> createOre(Blocks.DEEPSLATE_EMERALD_ORE, 4, 8, MapColor.COLOR_YELLOW)); public static final RegistryObject BROODSTONE_TITANIUM_ORE = BLOCKS.register("broodstone_titanium_ore", () -> createOre(Blocks.DEEPSLATE_DIAMOND_ORE, 4, 8, MapColor.COLOR_LIGHT_BLUE)); - public static final RegistryObject BROODSTONE_PILLAR = BLOCKS.register("broodstone_pillar", - () -> new RotatedPillarBlock(broodstoneProperties())); public static final RegistryObject CHITIN_BLOCK = BLOCKS.register("chitin_block", () -> new RotatedPillarBlock(BlockBehaviour.Properties.copy(Blocks.BONE_BLOCK).requiresCorrectToolForDrops())); public static final RegistryObject UMBRAL_MOSS_BLOCK = BLOCKS.register("umbral_moss_block", @@ -385,16 +590,20 @@ public final class AntarchyForgeBlocks { .noOcclusion() .noCollission() .replaceable())); - public static final RegistryObject CREEPING_HORROR_EGG = BLOCKS.register("crawling_blight_egg", - () -> new CreepingHorrorEggBlock(BlockBehaviour.Properties.copy(Blocks.TURTLE_EGG))); - public static final RegistryObject JUMPY_BUG_EGG = BLOCKS.register("springbug_egg", - () -> new JumpyBugEggBlock(BlockBehaviour.Properties.copy(Blocks.TURTLE_EGG))); + public static final RegistryObject CRAWLING_BLIGHT_EGG = BLOCKS.register("crawling_blight_egg", + () -> new CrawlingBlightEggBlock(BlockBehaviour.Properties.copy(Blocks.TURTLE_EGG))); + public static final RegistryObject PRINCE_EGG = BLOCKS.register("prince_egg", + () -> new com.craisinlord.antarchy.content.block.PrinceEggBlock(BlockBehaviour.Properties.copy(Blocks.DRAGON_EGG).randomTicks().noOcclusion())); + public static final RegistryObject PRINCESS_EGG = BLOCKS.register("princess_egg", + () -> new com.craisinlord.antarchy.content.block.PrincessEggBlock(BlockBehaviour.Properties.copy(Blocks.DRAGON_EGG).randomTicks().noOcclusion())); + public static final RegistryObject SPRINGBUG_EGG = BLOCKS.register("springbug_egg", + () -> new SpringbugEggBlock(BlockBehaviour.Properties.copy(Blocks.TURTLE_EGG))); public static final RegistryObject SPIT_BUG_EGG = BLOCKS.register("spit_bug_egg", () -> new SpitBugEggBlock(BlockBehaviour.Properties.copy(Blocks.TURTLE_EGG))); public static final RegistryObject JERRY_EGG = BLOCKS.register("jerry_egg", () -> new JerryEggBlock(BlockBehaviour.Properties.copy(Blocks.TURTLE_EGG).randomTicks())); - public static final RegistryObject LURKING_TERROR_EGG = BLOCKS.register("skulking_fright_egg", - () -> new LurkingTerrorEggBlock(BlockBehaviour.Properties.copy(Blocks.TURTLE_EGG))); + public static final RegistryObject SKULKING_FRIGHT_EGG = BLOCKS.register("skulking_fright_egg", + () -> new SkulkingFrightEggBlock(BlockBehaviour.Properties.copy(Blocks.TURTLE_EGG))); static { BiowartBlock.bindTendrils(BIOWART_TENDRILS); @@ -438,6 +647,11 @@ public final class AntarchyForgeBlocks { () -> new AntNestBlock(AntarchyForgeEntites.RAINBOW_ANT, AntarchyForgeItems::antNestBlockEntityType, BlockBehaviour.Properties.copy(Blocks.DIRT).noLootTable())); public static final RegistryObject TERMITE_NEST = BLOCKS.register("termite_nest", () -> new AntNestBlock(AntarchyForgeEntites.TERMITE, AntarchyForgeItems::antNestBlockEntityType, BlockBehaviour.Properties.copy(Blocks.DIRT).noLootTable())); + + public static final RegistryObject ANT_TRAP = BLOCKS.register("ant_trap", + () -> new com.craisinlord.antarchy.content.block.AntTrapBlock( + () -> java.util.List.of(AntarchyForgeEntites.RED_ANT.get(), AntarchyForgeEntites.BROWN_ANT.get(), AntarchyForgeEntites.RAINBOW_ANT.get(), AntarchyForgeEntites.TERMITE.get()), + AntarchyForgeItems::antNestBlockEntityType, BlockBehaviour.Properties.copy(Blocks.OAK_PRESSURE_PLATE).noOcclusion())); public static final RegistryObject URANIUM_ORE = BLOCKS.register("uranium_ore", () -> createOre(Blocks.EMERALD_ORE, 4, 8, MapColor.COLOR_YELLOW)); public static final RegistryObject DEEPSLATE_URANIUM_ORE = BLOCKS.register("deepslate_uranium_ore", @@ -452,6 +666,9 @@ public final class AntarchyForgeBlocks { () -> new BluestoneWireBlock(BlockBehaviour.Properties.copy(Blocks.REDSTONE_WIRE).mapColor(MapColor.COLOR_BLUE).noCollission().instabreak())); public static final RegistryObject BLUESTONE_BLOCK = BLOCKS.register("bluestone_block", () -> new BluestoneBlock(BlockBehaviour.Properties.copy(Blocks.REDSTONE_BLOCK).mapColor(MapColor.COLOR_BLUE))); + public static final RegistryObject VORTEX_LENS = BLOCKS.register("vortex_lens", + () -> new VortexLensBlock(AntarchyForgeBlocks::vortexLensBlockEntityType, + BlockBehaviour.Properties.copy(Blocks.COPPER_BLOCK).mapColor(MapColor.COLOR_GREEN).strength(3.0F, 6.0F).requiresCorrectToolForDrops().noOcclusion())); public static final RegistryObject BLUESTONE_REPEATER = BLOCKS.register("bluestone_repeater", () -> new BluestoneRepeaterBlock(BlockBehaviour.Properties.copy(Blocks.REPEATER).mapColor(MapColor.COLOR_BLUE).noCollission())); public static final RegistryObject BLUESTONE_COMPARATOR = BLOCKS.register("bluestone_comparator", @@ -460,6 +677,8 @@ public final class AntarchyForgeBlocks { () -> new BluestoneTorchBlock(BlockBehaviour.Properties.copy(Blocks.REDSTONE_TORCH).mapColor(MapColor.COLOR_BLUE).lightLevel(state -> state.getValue(BluestoneTorchBlock.LIT) ? 7 : 0).noCollission().instabreak())); public static final RegistryObject BLUESTONE_LAMP = BLOCKS.register("bluestone_lamp", () -> new BluestoneLampBlock(BlockBehaviour.Properties.copy(Blocks.REDSTONE_LAMP).mapColor(MapColor.COLOR_BLUE))); + public static final RegistryObject TIGERS_EYE_BLOCK = BLOCKS.register("tigers_eye_block", + () -> createStorageBlock(Blocks.EMERALD_BLOCK, MapColor.COLOR_ORANGE)); public static final RegistryObject URANIUM_BLOCK = BLOCKS.register("uranium_block", () -> createStorageBlock(Blocks.EMERALD_BLOCK, MapColor.COLOR_YELLOW)); public static final RegistryObject TITANIUM_BLOCK = BLOCKS.register("titanium_block", @@ -481,13 +700,13 @@ public final class AntarchyForgeBlocks { public static final RegistryObject CUT_TITANIUM_STAIRS = BLOCKS.register("cut_titanium_stairs", () -> new StairBlock(CUT_TITANIUM.get().defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.CUT_COPPER_STAIRS).mapColor(MapColor.COLOR_LIGHT_BLUE))); public static final RegistryObject CHISELED_URANIUM = BLOCKS.register("chiseled_uranium", - () -> createHorizontalFacingStorageBlock(Blocks.CHISELED_STONE_BRICKS, MapColor.COLOR_YELLOW)); + () -> createHorizontalFacingStorageBlock(Blocks.COPPER_BLOCK, MapColor.COLOR_YELLOW)); public static final RegistryObject CHISELED_TITANIUM = BLOCKS.register("chiseled_titanium", - () -> createHorizontalFacingStorageBlock(Blocks.CHISELED_STONE_BRICKS, MapColor.COLOR_LIGHT_BLUE)); + () -> createHorizontalFacingStorageBlock(Blocks.COPPER_BLOCK, MapColor.COLOR_LIGHT_BLUE)); public static final RegistryObject URANIUM_BULB = BLOCKS.register("uranium_bulb", - () -> new SignalSavingBulbBlock(BlockBehaviour.Properties.copy(Blocks.REDSTONE_LAMP).mapColor(MapColor.COLOR_YELLOW))); + () -> new SignalSavingBulbBlock(BlockBehaviour.Properties.copy(Blocks.COPPER_BLOCK).isRedstoneConductor((state, level, pos) -> false).mapColor(MapColor.COLOR_YELLOW))); public static final RegistryObject TITANIUM_BULB = BLOCKS.register("titanium_bulb", - () -> new SignalSavingBulbBlock(BlockBehaviour.Properties.copy(Blocks.REDSTONE_LAMP).mapColor(MapColor.COLOR_LIGHT_BLUE))); + () -> new SignalSavingBulbBlock(BlockBehaviour.Properties.copy(Blocks.COPPER_BLOCK).isRedstoneConductor((state, level, pos) -> false).mapColor(MapColor.COLOR_LIGHT_BLUE))); public static final RegistryObject URANIUM_DOOR = BLOCKS.register("uranium_door", () -> new DoorBlock(BlockBehaviour.Properties.copy(Blocks.IRON_DOOR).mapColor(MapColor.COLOR_YELLOW), BlockSetType.IRON)); public static final RegistryObject TITANIUM_DOOR = BLOCKS.register("titanium_door", @@ -501,19 +720,19 @@ public final class AntarchyForgeBlocks { public static final RegistryObject TITANIUM_BARS = BLOCKS.register("titanium_bars", () -> new IronBarsBlock(BlockBehaviour.Properties.copy(Blocks.IRON_BARS).mapColor(MapColor.COLOR_LIGHT_BLUE))); public static final RegistryObject ANTIMETAL = BLOCKS.register("antimetal", - () -> new RotatedPillarBlock(BlockBehaviour.Properties.copy(Blocks.BASALT))); + () -> new RotatedPillarBlock(BlockBehaviour.Properties.copy(Blocks.BASALT).sound(antimetalSoundType()))); public static final RegistryObject POLISHED_ANTIMETAL = BLOCKS.register("polished_antimetal", - () -> new RotatedPillarBlock(BlockBehaviour.Properties.copy(Blocks.POLISHED_BASALT))); + () -> new RotatedPillarBlock(BlockBehaviour.Properties.copy(Blocks.POLISHED_BASALT).sound(antimetalSoundType()))); public static final RegistryObject ANTIMETAL_STAIRS = BLOCKS.register("antimetal_stairs", - () -> new StairBlock(ANTIMETAL.get().defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.BASALT))); + () -> new StairBlock(ANTIMETAL.get().defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.BASALT).sound(antimetalSoundType()))); public static final RegistryObject ANTIMETAL_SLAB = BLOCKS.register("antimetal_slab", - () -> new SlabBlock(BlockBehaviour.Properties.copy(Blocks.BASALT))); + () -> new SlabBlock(BlockBehaviour.Properties.copy(Blocks.BASALT).sound(antimetalSoundType()))); public static final RegistryObject POLISHED_ANTIMETAL_STAIRS = BLOCKS.register("polished_antimetal_stairs", - () -> new StairBlock(POLISHED_ANTIMETAL.get().defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.POLISHED_BASALT))); + () -> new StairBlock(POLISHED_ANTIMETAL.get().defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.POLISHED_BASALT).sound(antimetalSoundType()))); public static final RegistryObject POLISHED_ANTIMETAL_SLAB = BLOCKS.register("polished_antimetal_slab", - () -> new SlabBlock(BlockBehaviour.Properties.copy(Blocks.POLISHED_BASALT))); + () -> new SlabBlock(BlockBehaviour.Properties.copy(Blocks.POLISHED_BASALT).sound(antimetalSoundType()))); public static final RegistryObject ANTIMETAL_SCAFFOLDING = BLOCKS.register("antimetal_scaffolding", - () -> new com.craisinlord.antarchy.content.block.AntimetalScaffoldingBlock(BlockBehaviour.Properties.copy(Blocks.SCAFFOLDING))); + () -> new com.craisinlord.antarchy.content.block.AntimetalScaffoldingBlock(BlockBehaviour.Properties.copy(Blocks.SCAFFOLDING).sound(antimetalScaffoldingSoundType()))); public static final RegistryObject ANTIMETAL_RAIL = BLOCKS.register("antimetal_rail", () -> new com.craisinlord.antarchy.content.block.AntimetalRailBlock(BlockBehaviour.Properties.copy(Blocks.RAIL))); public static final RegistryObject UPPER = BLOCKS.register("upper", @@ -567,10 +786,22 @@ public final class AntarchyForgeBlocks { () -> new AntigravelBlock(BlockBehaviour.Properties.copy(Blocks.GRAVEL))); public static final RegistryObject LOAM = BLOCKS.register("loam", () -> new Block(BlockBehaviour.Properties.copy(Blocks.MUD))); + public static final RegistryObject PACKED_LOAM = BLOCKS.register("packed_loam", + () -> new Block(BlockBehaviour.Properties.copy(Blocks.PACKED_MUD))); + public static final RegistryObject LOAM_BRICKS = BLOCKS.register("loam_bricks", + () -> new Block(BlockBehaviour.Properties.copy(Blocks.MUD_BRICKS))); + public static final RegistryObject LOAM_BRICK_STAIRS = BLOCKS.register("loam_brick_stairs", + () -> new StairBlock(LOAM_BRICKS.get().defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.MUD_BRICK_STAIRS))); + public static final RegistryObject LOAM_BRICK_SLAB = BLOCKS.register("loam_brick_slab", + () -> new SlabBlock(BlockBehaviour.Properties.copy(Blocks.MUD_BRICK_SLAB))); + public static final RegistryObject LOAM_BRICK_WALL = BLOCKS.register("loam_brick_wall", + () -> new WallBlock(BlockBehaviour.Properties.copy(Blocks.MUD_BRICK_WALL))); + public static final RegistryObject CHISELED_LOAM_BRICKS = BLOCKS.register("chiseled_loam_bricks", + () -> new Block(BlockBehaviour.Properties.copy(Blocks.MUD_BRICKS))); public static final RegistryObject MUCUS = BLOCKS.register("mucus", - () -> new MucusBlock(BlockBehaviour.Properties.copy(Blocks.GLOW_LICHEN).friction(0.98F).lightLevel(state -> 0).sound(net.minecraft.world.level.block.SoundType.SLIME_BLOCK))); - public static final RegistryObject DREAM_SANDSTONE = BLOCKS.register("dream_sandstone", - () -> new Block(BlockBehaviour.Properties.copy(Blocks.SANDSTONE))); + () -> new MucusBlock(BlockBehaviour.Properties.copy(Blocks.GLOW_LICHEN).friction(0.995F).lightLevel(state -> 0).sound(SoundType.SLIME_BLOCK))); + public static final RegistryObject DREAM_SANDSTONE = BLOCKS.register("dream_sandstone", + () -> new DreamSandstoneBlock(BlockBehaviour.Properties.copy(Blocks.SANDSTONE))); public static final RegistryObject CHISELED_DREAM_SANDSTONE = BLOCKS.register("chiseled_dream_sandstone", () -> new Block(BlockBehaviour.Properties.copy(Blocks.CHISELED_SANDSTONE))); public static final RegistryObject CUT_DREAM_SANDSTONE = BLOCKS.register("cut_dream_sandstone", @@ -589,6 +820,58 @@ public final class AntarchyForgeBlocks { () -> new SlabBlock(BlockBehaviour.Properties.copy(Blocks.SMOOTH_SANDSTONE_SLAB))); public static final RegistryObject CUT_DREAM_SANDSTONE_SLAB = BLOCKS.register("cut_dream_sandstone_slab", () -> new SlabBlock(BlockBehaviour.Properties.copy(Blocks.CUT_SANDSTONE_SLAB))); + public static final RegistryObject TYPHONITE = BLOCKS.register("typhonite", + () -> new Block(BlockBehaviour.Properties.copy(Blocks.BLACKSTONE))); + public static final RegistryObject NADIR_NYXIUM = BLOCKS.register("nadir_nyxium", + () -> new DirectionalNyxiumBlock(nyxiteProperties(), DirectionalNyxiumBlock.Type.NADIR)); + public static final RegistryObject VERDANT_NYXIUM = BLOCKS.register("verdant_nyxium", + () -> new DirectionalNyxiumBlock(nyxiteProperties(), DirectionalNyxiumBlock.Type.VERDANT)); + public static final RegistryObject TYPHONITE_PILLAR = BLOCKS.register("typhonite_pillar", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.copy(Blocks.BLACKSTONE))); + public static final RegistryObject TYPHONITE_BRICKS = BLOCKS.register("typhonite_bricks", + () -> new Block(BlockBehaviour.Properties.copy(Blocks.BLACKSTONE))); + public static final RegistryObject CHISELED_TYPHONITE = BLOCKS.register("chiseled_typhonite", + () -> new Block(BlockBehaviour.Properties.copy(Blocks.BLACKSTONE))); + public static final RegistryObject POLISHED_TYPHONITE = BLOCKS.register("polished_typhonite", + () -> new Block(BlockBehaviour.Properties.copy(Blocks.BLACKSTONE))); + public static final RegistryObject VEINED_TYPHONITE = BLOCKS.register("veined_typhonite", + () -> new Block(BlockBehaviour.Properties.copy(Blocks.BLACKSTONE).lightLevel(state -> 8))); + public static final RegistryObject TYPHONITE_SPIKE = BLOCKS.register("typhonite_spike", + () -> new TyphoniteSpikeBlock(BlockBehaviour.Properties.copy(Blocks.POINTED_DRIPSTONE))); + public static final RegistryObject TYPHONITE_STAIRS = BLOCKS.register("typhonite_stairs", + () -> new StairBlock(TYPHONITE.get().defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.BLACKSTONE_STAIRS))); + public static final RegistryObject TYPHONITE_SLAB = BLOCKS.register("typhonite_slab", + () -> new SlabBlock(BlockBehaviour.Properties.copy(Blocks.BLACKSTONE_SLAB))); + public static final RegistryObject TYPHONITE_WALL = BLOCKS.register("typhonite_wall", + () -> new WallBlock(BlockBehaviour.Properties.copy(Blocks.BLACKSTONE_WALL))); + public static final RegistryObject TYPHONITE_BRICK_STAIRS = BLOCKS.register("typhonite_brick_stairs", + () -> new StairBlock(TYPHONITE_BRICKS.get().defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.BLACKSTONE_STAIRS))); + public static final RegistryObject TYPHONITE_BRICK_SLAB = BLOCKS.register("typhonite_brick_slab", + () -> new SlabBlock(BlockBehaviour.Properties.copy(Blocks.BLACKSTONE_SLAB))); + public static final RegistryObject TYPHONITE_BRICK_WALL = BLOCKS.register("typhonite_brick_wall", + () -> new WallBlock(BlockBehaviour.Properties.copy(Blocks.BLACKSTONE_WALL))); + public static final RegistryObject POLISHED_TYPHONITE_STAIRS = BLOCKS.register("polished_typhonite_stairs", + () -> new StairBlock(POLISHED_TYPHONITE.get().defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.BLACKSTONE_STAIRS))); + public static final RegistryObject POLISHED_TYPHONITE_SLAB = BLOCKS.register("polished_typhonite_slab", + () -> new SlabBlock(BlockBehaviour.Properties.copy(Blocks.BLACKSTONE_SLAB))); + public static final RegistryObject POLISHED_TYPHONITE_WALL = BLOCKS.register("polished_typhonite_wall", + () -> new WallBlock(BlockBehaviour.Properties.copy(Blocks.BLACKSTONE_WALL))); + public static final RegistryObject SPIRALING_VINES = BLOCKS.register("spiraling_vines", + () -> new SpiralingVinesBlock(BlockBehaviour.Properties.copy(Blocks.TWISTING_VINES))); + public static final RegistryObject GOREVINE = BLOCKS.register("gorevine", + () -> new GorevineBlock(BlockBehaviour.Properties.copy(Blocks.WEEPING_VINES).lightLevel(state -> 4))); + public static final RegistryObject WHIRLFLOWER = BLOCKS.register("whirlflower", + () -> new WhirlflowerBlock(BlockBehaviour.Properties.copy(Blocks.ALLIUM))); + public static final RegistryObject NADIR_FERN = BLOCKS.register("nadir_fern", + () -> new NadirFernBlock(BlockBehaviour.Properties.copy(Blocks.FERN))); + public static final RegistryObject LARGE_NADIR_FERN = BLOCKS.register("large_nadir_fern", + () -> new LargeNadirFernBlock(BlockBehaviour.Properties.copy(Blocks.LARGE_FERN).noCollission())); + public static final RegistryObject DUSKBELL = BLOCKS.register("duskbell", + () -> new DirectionalThoraxisFlowerBlock(BlockBehaviour.Properties.copy(Blocks.ALLIUM).lightLevel(state -> 4))); + public static final RegistryObject NADIR_ROOTS = BLOCKS.register("nadir_roots", + () -> new DirectionalThoraxisFlowerBlock(BlockBehaviour.Properties.copy(Blocks.CRIMSON_ROOTS))); + public static final RegistryObject VERDANT_ROOTS = BLOCKS.register("verdant_roots", + () -> new DirectionalThoraxisFlowerBlock(BlockBehaviour.Properties.copy(Blocks.WARPED_ROOTS))); public static final RegistryObject DEAD_STAR_CORAL_BLOCK = BLOCKS.register("dead_star_coral_block", () -> new Block(BlockBehaviour.Properties.copy(Blocks.TUBE_CORAL_BLOCK))); public static final RegistryObject DEAD_STAR_CORAL = BLOCKS.register("dead_star_coral", @@ -606,24 +889,20 @@ public final class AntarchyForgeBlocks { public static final RegistryObject STAR_CORAL_WALL_FAN = BLOCKS.register("star_coral_wall_fan", () -> new com.craisinlord.antarchy.content.block.StarCoralWallFanBlock(DEAD_STAR_CORAL_WALL_FAN.get(), BlockBehaviour.Properties.copy(Blocks.TUBE_CORAL_WALL_FAN).lightLevel(state -> 8))); - public static final RegistryObject UNDERTRIAL_SPAWNER = BLOCKS.register("undertrial_spawner", - () -> new UndertrialSpawnerBlock(AntarchyForgeBlocks::undertrialSpawnerBlockEntityType, - BlockBehaviour.Properties.copy(Blocks.OBSIDIAN).noOcclusion())); - public static final RegistryObject UNDERVAULT = BLOCKS.register("undervault", - () -> new UnderVaultBlock(AntarchyForgeBlocks::underVaultBlockEntityType, - BlockBehaviour.Properties.copy(Blocks.OBSIDIAN).noOcclusion())); - public static final RegistryObject QUEEN_TRAIL_SPAWN_MARKER = BLOCKS.register("queen_trail_spawn_marker", - () -> new QueenTrailSpawnMarkerBlock(AntarchyForgeBlocks::queenTrailSpawnMarkerBlockEntityType, - BlockBehaviour.Properties.of().noCollission().noOcclusion().noLootTable().strength(-1.0F))); - - // Block entity types + public static final RegistryObject> ROYAL_EGG_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("royal_egg", + () -> BlockEntityType.Builder.of( + com.craisinlord.antarchy.content.block.entity.RoyalEggBlockEntity::new, + PRINCE_EGG.get(), + PRINCESS_EGG.get() + ).build(null)); public static final RegistryObject> ANT_NEST_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("ant_nest", () -> BlockEntityType.Builder.of( AntNestBlockEntity::new, RED_ANT_NEST.get(), BROWN_ANT_NEST.get(), RAINBOW_ANT_NEST.get(), - TERMITE_NEST.get() + TERMITE_NEST.get(), + ANT_TRAP.get() ).build(null)); public static final RegistryObject> DREAM_CAMPFIRE_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("dream_campfire", () -> BlockEntityType.Builder.of( @@ -650,9 +929,9 @@ public final class AntarchyForgeBlocks { SeashellBlockEntity::new, SEASHELL.get() ).build(null)); - public static final RegistryObject> LUCID_ANCHOR_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("lucid_anchor", + public static final RegistryObject> LUCID_ANCHOR_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("lucid_anchor", () -> BlockEntityType.Builder.of( - com.craisinlord.antarchy.content.block.entity.LucidAnchorBlockEntity::new, + LucidAnchorBlockEntity::new, LUCID_ANCHOR.get() ).build(null)); public static final RegistryObject> CRITTER_CAGE_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("critter_cage_block", @@ -670,15 +949,37 @@ public final class AntarchyForgeBlocks { (pos, state) -> new UpperBlockEntity(pos, state, AntarchyForgeBlocks::upperBlockEntityType), UPPER.get() ).build(null)); - public static final RegistryObject> UNDERTRIAL_SPAWNER_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("undertrial_spawner", - () -> BlockEntityType.Builder.of((pos, state) -> new UndertrialSpawnerBlockEntity(pos, state, AntarchyForgeBlocks::undertrialSpawnerBlockEntityType), - UNDERTRIAL_SPAWNER.get()).build(null)); - public static final RegistryObject> UNDERVAULT_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("undervault", - () -> BlockEntityType.Builder.of((pos, state) -> new UnderVaultBlockEntity(pos, state, AntarchyForgeBlocks::underVaultBlockEntityType), - UNDERVAULT.get()).build(null)); + public static final RegistryObject> VORTEX_LENS_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("vortex_lens", + () -> BlockEntityType.Builder.of( + (pos, state) -> new VortexLensBlockEntity(pos, state, AntarchyForgeBlocks::vortexLensBlockEntityType), + VORTEX_LENS.get() + ).build(null)); + public static final RegistryObject> PORTAL_GUN_PORTAL_MASTER_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("portal_gun_portal_master", + () -> BlockEntityType.Builder.of( + (pos, state) -> new PortalGunPortalMasterBlockEntity(pos, state, AntarchyForgeBlocks::portalGunPortalMasterBlockEntityType), + PORTAL_GUN_PORTAL_MASTER.get() + ).build(null)); + public static final RegistryObject> PORTAL_GUN_PORTAL_BASE_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("portal_gun_portal_base", + () -> BlockEntityType.Builder.of( + (pos, state) -> new PortalGunPortalBaseBlockEntity(pos, state, AntarchyForgeBlocks::portalGunPortalBaseBlockEntityType), + PORTAL_GUN_PORTAL_BASE.get() + ).build(null)); + public static final RegistryObject> DIMENSIONAL_TEAR_MARKER_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("dimensional_tear_marker", + () -> BlockEntityType.Builder.of( + (pos, state) -> new DimensionalTearMarkerBlockEntity(pos, state, AntarchyForgeBlocks::dimensionalTearMarkerBlockEntityType), + DIMENSIONAL_TEAR_MARKER.get() + ).build(null)); public static final RegistryObject> QUEEN_TRAIL_SPAWN_MARKER_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("queen_trail_spawn_marker", - () -> BlockEntityType.Builder.of((pos, state) -> new QueenTrailSpawnMarkerBlockEntity(pos, state, AntarchyForgeBlocks::queenTrailSpawnMarkerBlockEntityType), - QUEEN_TRAIL_SPAWN_MARKER.get()).build(null)); + () -> BlockEntityType.Builder.of( + (pos, state) -> new QueenTrailSpawnMarkerBlockEntity(pos, state, AntarchyForgeBlocks::queenTrailSpawnMarkerBlockEntityType), + QUEEN_TRAIL_SPAWN_MARKER.get() + ).build(null)); + public static final RegistryObject> UNDERTRIAL_SPAWNER_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("undertrial_spawner", + () -> BlockEntityType.Builder.of((pos, state) -> new UndertrialSpawnerBlockEntity(pos, state, AntarchyForgeBlocks::undertrialSpawnerBlockEntityType), UNDERTRIAL_SPAWNER.get()).build(null)); + public static final RegistryObject> UNDERVAULT_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("undervault", + () -> BlockEntityType.Builder.of((pos, state) -> new UnderVaultBlockEntity(pos, state, AntarchyForgeBlocks::underVaultBlockEntityType), UNDERVAULT.get()).build(null)); + + private AntarchyForgeBlocks() {} private static BlockEntityType undertrialSpawnerBlockEntityType() { return UNDERTRIAL_SPAWNER_BLOCK_ENTITY.get(); @@ -688,12 +989,6 @@ public final class AntarchyForgeBlocks { return UNDERVAULT_BLOCK_ENTITY.get(); } - private static BlockEntityType queenTrailSpawnMarkerBlockEntityType() { - return QUEEN_TRAIL_SPAWN_MARKER_BLOCK_ENTITY.get(); - } - - private AntarchyForgeBlocks() {} - public static void register(IEventBus modEventBus) { BLOCKS.register(modEventBus); BLOCK_ENTITY_TYPES.register(modEventBus); @@ -734,6 +1029,20 @@ public final class AntarchyForgeBlocks { return new Block(BlockBehaviour.Properties.copy(copyFrom).mapColor(mapColor).requiresCorrectToolForDrops()); } + private static SoundType antimetalSoundType() { + return new SoundType(1.0F, 1.0F, + AntarchyForgeSounds.ANTIMETAL_PLACE.get(), + AntarchyForgeSounds.ANTIMETAL_STEP.get(), + AntarchyForgeSounds.ANTIMETAL_PLACE.get(), + AntarchyForgeSounds.ANTIMETAL_STEP.get(), + AntarchyForgeSounds.ANTIMETAL_PLACE.get()); + } + + private static SoundType antimetalScaffoldingSoundType() { + SoundEvent scaffold = AntarchyForgeSounds.ANTIMETAL_SCAFFOLD.get(); + return new SoundType(1.0F, 1.0F, scaffold, scaffold, scaffold, scaffold, scaffold); + } + private static Block smallBloodCrystalBudBlock() { return SMALL_BLOOD_CRYSTAL_BUD.get(); } @@ -758,8 +1067,28 @@ public final class AntarchyForgeBlocks { return UPPER_BLOCK_ENTITY.get(); } + private static BlockEntityType vortexLensBlockEntityType() { + return VORTEX_LENS_BLOCK_ENTITY.get(); + } + + private static BlockEntityType portalGunPortalMasterBlockEntityType() { + return PORTAL_GUN_PORTAL_MASTER_BLOCK_ENTITY.get(); + } + + private static BlockEntityType portalGunPortalBaseBlockEntityType() { + return PORTAL_GUN_PORTAL_BASE_BLOCK_ENTITY.get(); + } + + private static BlockEntityType dimensionalTearMarkerBlockEntityType() { + return DIMENSIONAL_TEAR_MARKER_BLOCK_ENTITY.get(); + } + + private static BlockEntityType queenTrailSpawnMarkerBlockEntityType() { + return QUEEN_TRAIL_SPAWN_MARKER_BLOCK_ENTITY.get(); + } private static final class SimpleHorizontalFacingBlock extends HorizontalDirectionalBlock { + private SimpleHorizontalFacingBlock(BlockBehaviour.Properties properties) { super(properties); registerDefaultState(stateDefinition.any().setValue(FACING, Direction.NORTH)); diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeCreativeModeTabs.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeCreativeModeTabs.java index 63482d2b..60dbd97d 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeCreativeModeTabs.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeCreativeModeTabs.java @@ -1,6 +1,5 @@ package com.craisinlord.antarchy.forge.registry; -import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.creative.CreativeTabContents; import net.minecraft.core.registries.Registries; import net.minecraft.world.item.*; @@ -9,9 +8,11 @@ import net.minecraftforge.event.BuildCreativeModeTabContentsEvent; import net.minecraftforge.registries.RegistryObject; public class AntarchyForgeCreativeModeTabs { + private static final String MODID = "antarchy"; + private AntarchyForgeCreativeModeTabs() {} - private static final DeferredRegister CREATIVE_MODE_TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, Antarchy.MODID); + private static final DeferredRegister CREATIVE_MODE_TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, MODID); public static void register(IEventBus modEventBus) { CREATIVE_MODE_TABS.register(modEventBus); diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeEntites.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeEntites.java index ed54ed7b..cace11d3 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeEntites.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeEntites.java @@ -4,7 +4,7 @@ import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.AppleCow; import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.EnchantedGoldenAppleCow; import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.GoldenAppleCow; -import com.craisinlord.antarchy.content.entity.cloud_shark.CloudSharkEntity; +import com.craisinlord.antarchy.content.entity.stratoshark.StratosharkEntity; import com.craisinlord.antarchy.content.entity.BedBugEntity; import com.craisinlord.antarchy.content.entity.BomberEntity; import com.craisinlord.antarchy.content.entity.ButterflyEntity; @@ -18,9 +18,11 @@ import com.craisinlord.antarchy.content.entity.OuranwoodDeerEntity; import com.craisinlord.antarchy.content.entity.glimmer.GlimmerEntity; import com.craisinlord.antarchy.content.entity.HushProjectileEntity; import com.craisinlord.antarchy.content.entity.CritterCageProjectileEntity; +import com.craisinlord.antarchy.content.entity.WormHookProjectileEntity; import com.craisinlord.antarchy.content.entity.HerculesBeetleEntity; +import com.craisinlord.antarchy.content.entity.HoverboardEntity; import com.craisinlord.antarchy.content.entity.JerryEntity; -import com.craisinlord.antarchy.content.entity.JumpyBugEntity; +import com.craisinlord.antarchy.content.entity.SpringbugEntity; import com.craisinlord.antarchy.content.entity.AlphaMantisEntity; import com.craisinlord.antarchy.content.entity.RollyPollyEntity; import com.craisinlord.antarchy.content.entity.MantisEntity; @@ -28,10 +30,15 @@ import com.craisinlord.antarchy.content.entity.MissileSquidEntity; import com.craisinlord.antarchy.content.entity.OctopusBombEntity; import com.craisinlord.antarchy.content.entity.MolevoreEntity; import com.craisinlord.antarchy.content.entity.MolewormEntity; +import com.craisinlord.antarchy.content.entity.WormEntity; import com.craisinlord.antarchy.content.entity.OuranwoodBoatEntity; import com.craisinlord.antarchy.content.entity.OuranwoodChestBoatEntity; import com.craisinlord.antarchy.content.entity.NadirBoatEntity; import com.craisinlord.antarchy.content.entity.NadirChestBoatEntity; +import com.craisinlord.antarchy.content.entity.RoyalBoatEntity; +import com.craisinlord.antarchy.content.entity.RoyalChestBoatEntity; +import com.craisinlord.antarchy.content.entity.TruffaloBoatEntity; +import com.craisinlord.antarchy.content.entity.TruffaloChestBoatEntity; import com.craisinlord.antarchy.content.entity.PeachBoatEntity; import com.craisinlord.antarchy.content.entity.PeachChestBoatEntity; import com.craisinlord.antarchy.content.entity.ReverieEntity; @@ -40,7 +47,7 @@ import com.craisinlord.antarchy.content.entity.SizeRayProjectileEntity; import com.craisinlord.antarchy.content.entity.SpitBugEntity; import com.craisinlord.antarchy.content.entity.SpitBugProjectileEntity; import com.craisinlord.antarchy.content.entity.StinkBugEntity; -import com.craisinlord.antarchy.content.entity.TriffidEntity; +import com.craisinlord.antarchy.content.entity.FlytrapEntity; import com.craisinlord.antarchy.content.entity.UpwardFallingBlockEntity; import com.craisinlord.antarchy.content.entity.WaspEntity; import com.craisinlord.antarchy.content.entity.ant.BaseAntEntity; @@ -58,17 +65,22 @@ import com.craisinlord.antarchy.content.entity.kraken.TentacleEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidBoltEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidEyeProjectileEntity; +import com.craisinlord.antarchy.content.entity.vortex.VortexChargeProjectileEntity; +import com.craisinlord.antarchy.content.entity.vortex.VortexEntity; +import com.craisinlord.antarchy.content.entity.vortex.WindVortexEntity; import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity; -import com.craisinlord.antarchy.content.entity.nightmare.NightmareBiteEntity; import com.craisinlord.antarchy.content.entity.nightmare.NightmarePortalEntity; +import com.craisinlord.antarchy.content.entity.nightmare.NightmareBiteEntity; import com.craisinlord.antarchy.content.entity.portal.DimensionalTearEntity; -import com.craisinlord.antarchy.content.time.TimeDilationFieldEntity; import com.craisinlord.antarchy.content.entity.CheepEntity; -import com.craisinlord.antarchy.content.entity.CreepingHorrorEntity; +import com.craisinlord.antarchy.content.entity.CrawlingBlightEntity; import com.craisinlord.antarchy.content.entity.DorrieEntity; -import com.craisinlord.antarchy.content.entity.LurkingTerrorEntity; +import com.craisinlord.antarchy.content.entity.SkulkingFrightEntity; +import com.craisinlord.antarchy.content.entity.ManticoreEntity; import com.craisinlord.antarchy.content.entity.ToreterrorEntity; import com.craisinlord.antarchy.content.entity.WaterBombEntity; +import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; +import com.craisinlord.antarchy.content.portalgun.PortalGunProjectileEntity; import net.minecraft.core.registries.Registries; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.MobCategory; @@ -103,6 +115,11 @@ public final class AntarchyForgeEntites { .sized(0.4F, 0.3F) .clientTrackingRange(8) .build("moleworm")); + public static final RegistryObject> WORM = ENTITY_TYPES.register("worm", + () -> EntityType.Builder.of(WormEntity::new, MobCategory.MONSTER) + .sized(1.35F, 2.75F) + .clientTrackingRange(10) + .build("worm")); public static final RegistryObject> MANTIS = ENTITY_TYPES.register("mantis", () -> EntityType.Builder.of(MantisEntity::new, MobCategory.MONSTER) .sized(3.125F, 2.5F) @@ -154,13 +171,42 @@ public final class AntarchyForgeEntites { .clientTrackingRange(10) .updateInterval(10) .build("nadir_chest_boat")); + public static final RegistryObject> ROYAL_BOAT_ENTITY = ENTITY_TYPES.register("royal_boat", + () -> EntityType.Builder.of(RoyalBoatEntity::new, MobCategory.MISC) + .sized(1.375F, 0.5625F) + .clientTrackingRange(10) + .updateInterval(10) + .build("royal_boat")); + public static final RegistryObject> ROYAL_CHEST_BOAT_ENTITY = ENTITY_TYPES.register("royal_chest_boat", + () -> EntityType.Builder.of(RoyalChestBoatEntity::new, MobCategory.MISC) + .sized(1.375F, 0.5625F) + .clientTrackingRange(10) + .updateInterval(10) + .build("royal_chest_boat")); + public static final RegistryObject> TRUFFALO_BOAT_ENTITY = ENTITY_TYPES.register("truffalo_boat", + () -> EntityType.Builder.of(TruffaloBoatEntity::new, MobCategory.MISC) + .sized(1.375F, 0.5625F) + .clientTrackingRange(10) + .updateInterval(10) + .build("truffalo_boat")); + public static final RegistryObject> TRUFFALO_CHEST_BOAT_ENTITY = ENTITY_TYPES.register("truffalo_chest_boat", + () -> EntityType.Builder.of(TruffaloChestBoatEntity::new, MobCategory.MISC) + .sized(1.375F, 0.5625F) + .clientTrackingRange(10) + .updateInterval(10) + .build("truffalo_chest_boat")); + public static final RegistryObject> HOVERBOARD = ENTITY_TYPES.register("hoverboard", + () -> EntityType.Builder.of(HoverboardEntity::new, MobCategory.MISC) + .sized(1.5F, 0.6875F) + .clientTrackingRange(10) + .build("hoverboard")); public static final RegistryObject> MOLEVORE = ENTITY_TYPES.register("molevore", () -> EntityType.Builder.of(MolevoreEntity::new, MobCategory.MONSTER) .sized(1.95F, 1.1F) .clientTrackingRange(10) .build("molevore")); - public static final RegistryObject> TRIFFID = ENTITY_TYPES.register("flytrap", - () -> EntityType.Builder.of(TriffidEntity::new, MobCategory.MONSTER) + public static final RegistryObject> FLYTRAP = ENTITY_TYPES.register("flytrap", + () -> EntityType.Builder.of(FlytrapEntity::new, MobCategory.MONSTER) .sized(2.0F, 5.0F) .clientTrackingRange(10) .build("flytrap")); @@ -184,8 +230,8 @@ public final class AntarchyForgeEntites { .sized(0.55F, 0.75F) .clientTrackingRange(8) .build("bomber")); - public static final RegistryObject> JUMPY_BUG = ENTITY_TYPES.register("springbug", - () -> EntityType.Builder.of(JumpyBugEntity::new, MobCategory.MONSTER) + public static final RegistryObject> SPRINGBUG = ENTITY_TYPES.register("springbug", + () -> EntityType.Builder.of(SpringbugEntity::new, MobCategory.MONSTER) .sized(3.0F, 6.0F) .clientTrackingRange(8) .build("springbug")); @@ -258,8 +304,8 @@ public final class AntarchyForgeEntites { .sized(0.6F, 1.95F) .clientTrackingRange(10) .build("dr_trayaurus")); - public static final RegistryObject> CLOUD_SHARK = ENTITY_TYPES.register("stratoshark", - () -> EntityType.Builder.of(CloudSharkEntity::new, MobCategory.MONSTER) + public static final RegistryObject> STRATOSHARK = ENTITY_TYPES.register("stratoshark", + () -> EntityType.Builder.of(StratosharkEntity::new, MobCategory.MONSTER) .sized(2.4F, 0.9F) .clientTrackingRange(10) .build("stratoshark")); @@ -289,6 +335,25 @@ public final class AntarchyForgeEntites { .clientTrackingRange(10) .updateInterval(1) .build("nightmare_portal")); + public static final RegistryObject> DIMENSIONAL_TEAR = ENTITY_TYPES.register("dimensional_tear", + () -> EntityType.Builder.of(DimensionalTearEntity::new, MobCategory.MISC) + .sized(2.8F, 3.2F) + .clientTrackingRange(12) + .updateInterval(1) + .build("dimensional_tear")); + public static final RegistryObject> PORTAL_GUN_PORTAL = ENTITY_TYPES.register("portal_gun_portal", + () -> EntityType.Builder.of(PortalGunPortalEntity::new, MobCategory.MISC) + .sized(1.0F, 2.0F) + .clientTrackingRange(10) + .updateInterval(1) + .build("portal_gun_portal")); + + public static final RegistryObject> PORTAL_GUN_PROJECTILE = ENTITY_TYPES.register("portal_gun_projectile", + () -> EntityType.Builder.of(PortalGunProjectileEntity::new, MobCategory.MISC) + .sized(0.25F, 0.25F) + .clientTrackingRange(8) + .updateInterval(1) + .build("portal_gun_projectile")); public static final RegistryObject> NIGHTMARE_BITE = ENTITY_TYPES.register("nightmare_bite", () -> EntityType.Builder.of(NightmareBiteEntity::new, MobCategory.MISC) .sized(2.5F, 2.0F) @@ -300,6 +365,33 @@ public final class AntarchyForgeEntites { .sized(2.0F, 2.0F) .clientTrackingRange(10) .build("lucid")); + public static final RegistryObject> VORTEX = ENTITY_TYPES.register("vortex", + () -> EntityType.Builder.of(VortexEntity::new, MobCategory.MONSTER) + .sized(2.0F, 2.0F) + .clientTrackingRange(10) + .fireImmune() + .build("vortex")); + public static final RegistryObject> WIND_VORTEX = ENTITY_TYPES.register("wind_vortex", + () -> EntityType.Builder.of(WindVortexEntity::new, MobCategory.MISC) + .sized(3.0F, 5.0F) + .clientTrackingRange(10) + .updateInterval(1) + .fireImmune() + .build("wind_vortex")); + public static final RegistryObject> ROYAL_BLACK_HOLE = ENTITY_TYPES.register("royal_black_hole", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.royal.RoyalBlackHoleEntity::new, MobCategory.MISC) + .sized(1.0F, 1.0F) + .clientTrackingRange(16) + .updateInterval(2) + .fireImmune() + .build("royal_black_hole")); + public static final RegistryObject> ROYAL_ASSAILANT_BLACK_HOLE = ENTITY_TYPES.register("royal_assailant_black_hole", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.royal.RoyalAssailantBlackHoleEntity::new, MobCategory.MISC) + .sized(1.0F, 1.0F) + .clientTrackingRange(16) + .updateInterval(2) + .fireImmune() + .build("royal_assailant_black_hole")); public static final RegistryObject> LUCID_BOLT = ENTITY_TYPES.register("lucid_bolt", () -> EntityType.Builder.of(LucidBoltEntity::new, MobCategory.MISC) .sized(0.3F, 0.3F) @@ -325,6 +417,7 @@ public final class AntarchyForgeEntites { () -> EntityType.Builder.of(ScorpionEntity::new, MobCategory.MONSTER) .sized(1.5F, 1.0F) .clientTrackingRange(8) + .fireImmune() .build("scorpion")); public static final RegistryObject> BASILISK = ENTITY_TYPES.register("basilisk", () -> EntityType.Builder.of(BasiliskEntity::new, MobCategory.MONSTER) @@ -335,6 +428,7 @@ public final class AntarchyForgeEntites { () -> EntityType.Builder.of(EmperorScorpionEntity::new, MobCategory.MONSTER) .sized(6.0F, 3.0F) .clientTrackingRange(12) + .fireImmune() .build("emperor_scorpion")); public static final RegistryObject> LUCID_PEARL_PROJECTILE = ENTITY_TYPES.register("lucid_pearl_projectile", () -> EntityType.Builder.of(LucidEyeProjectileEntity::new, MobCategory.MISC) @@ -342,12 +436,24 @@ public final class AntarchyForgeEntites { .clientTrackingRange(8) .updateInterval(1) .build("lucid_pearl_projectile")); + public static final RegistryObject> VORTEX_CHARGE_PROJECTILE = ENTITY_TYPES.register("vortex_charge_projectile", + () -> EntityType.Builder.of(VortexChargeProjectileEntity::new, MobCategory.MISC) + .sized(0.25F, 0.25F) + .clientTrackingRange(8) + .updateInterval(1) + .build("vortex_charge_projectile")); public static final RegistryObject> CRITTER_CAGE_PROJECTILE = ENTITY_TYPES.register("critter_cage_projectile", () -> EntityType.Builder.of(CritterCageProjectileEntity::new, MobCategory.MISC) .sized(0.25F, 0.25F) .clientTrackingRange(8) .updateInterval(1) .build("critter_cage_projectile")); + public static final RegistryObject> WORM_HOOK_PROJECTILE = ENTITY_TYPES.register("worm_hook_projectile", + () -> EntityType.Builder.of(WormHookProjectileEntity::new, MobCategory.MISC) + .sized(0.25F, 0.25F) + .clientTrackingRange(10) + .updateInterval(1) + .build("worm_hook_projectile")); public static final RegistryObject> HUSH_PROJECTILE = ENTITY_TYPES.register("hush_projectile", () -> EntityType.Builder.of(HushProjectileEntity::new, MobCategory.MISC) .sized(0.35F, 0.35F) @@ -371,16 +477,22 @@ public final class AntarchyForgeEntites { .clientTrackingRange(8) .updateInterval(1) .build("water_bomb")); - public static final RegistryObject> CREEPING_HORROR = ENTITY_TYPES.register("crawling_blight", - () -> EntityType.Builder.of(CreepingHorrorEntity::new, MobCategory.MONSTER) + public static final RegistryObject> CRAWLING_BLIGHT = ENTITY_TYPES.register("crawling_blight", + () -> EntityType.Builder.of(CrawlingBlightEntity::new, MobCategory.MONSTER) .sized(1.3F, 1.5F) .clientTrackingRange(10) .build("crawling_blight")); - public static final RegistryObject> LURKING_TERROR = ENTITY_TYPES.register("skulking_fright", - () -> EntityType.Builder.of(LurkingTerrorEntity::new, MobCategory.MONSTER) + public static final RegistryObject> SKULKING_FRIGHT = ENTITY_TYPES.register("skulking_fright", + () -> EntityType.Builder.of(SkulkingFrightEntity::new, MobCategory.MONSTER) .sized(1.3F, 1.5F) .clientTrackingRange(10) .build("skulking_fright")); + public static final RegistryObject> MANTICORE = ENTITY_TYPES.register("manticore", + () -> EntityType.Builder.of(ManticoreEntity::new, MobCategory.MONSTER) + .sized(1.95F, 2.75F) + .clientTrackingRange(10) + .fireImmune() + .build("manticore")); public static final RegistryObject> JERRY = ENTITY_TYPES.register("jerry", () -> EntityType.Builder.of(JerryEntity::new, MobCategory.MONSTER) .sized(1.4F, 1.4F) @@ -401,6 +513,35 @@ public final class AntarchyForgeEntites { .sized(3.0F, 4.0F) .clientTrackingRange(12) .build("hercules_beetle")); + public static final RegistryObject> PRINCE = ENTITY_TYPES.register("prince", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.royal.PrinceEntity::new, MobCategory.CREATURE) + .sized(2.2F, 1.5F).clientTrackingRange(10).updateInterval(3).fireImmune().build("prince")); + public static final RegistryObject> PRINCESS = ENTITY_TYPES.register("princess", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.royal.PrincessEntity::new, MobCategory.CREATURE) + .sized(2.2F, 1.5F).clientTrackingRange(10).updateInterval(3).fireImmune().build("princess")); + public static final RegistryObject> KING = ENTITY_TYPES.register("king", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.royal.KingEntity::new, MobCategory.MONSTER) + .sized(com.craisinlord.antarchy.content.entity.royal.RoyalBossEntity.GAMEPLAY_WIDTH, com.craisinlord.antarchy.content.entity.royal.RoyalBossEntity.GAMEPLAY_HEIGHT) + .clientTrackingRange(16) + .updateInterval(3) + .fireImmune() + .build("king")); + public static final RegistryObject> QUEEN = ENTITY_TYPES.register("queen", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.royal.QueenEntity::new, MobCategory.MONSTER) + .sized(com.craisinlord.antarchy.content.entity.royal.RoyalBossEntity.GAMEPLAY_WIDTH, com.craisinlord.antarchy.content.entity.royal.RoyalBossEntity.GAMEPLAY_HEIGHT) + .clientTrackingRange(16) + .updateInterval(3) + .fireImmune() + .build("queen")); + public static final RegistryObject> ROYAL_BOLT = ENTITY_TYPES.register("royal_bolt", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.royal.RoyalBoltEntity::new, MobCategory.MISC) + .sized(0.4F, 0.4F).clientTrackingRange(8).updateInterval(1).fireImmune().build("royal_bolt")); + public static final RegistryObject> ROYAL_ELEMENTAL_PROJECTILE = ENTITY_TYPES.register("royal_elemental_projectile", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.royal.RoyalElementalProjectileEntity::new, MobCategory.MISC) + .sized(1.0F, 1.0F).clientTrackingRange(16).updateInterval(1).fireImmune().build("royal_elemental_projectile")); + public static final RegistryObject> ROYAL_ICE_SPIKE = ENTITY_TYPES.register("royal_ice_spike", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.royal.RoyalIceSpikeEntity::new, MobCategory.MISC) + .sized(2.0F, 4.0F).clientTrackingRange(16).updateInterval(1).fireImmune().build("royal_ice_spike")); public static final RegistryObject> OURANWOOD_DEER = ENTITY_TYPES.register("ouranwood_deer", () -> EntityType.Builder.of(OuranwoodDeerEntity::new, MobCategory.CREATURE) .sized(1.125F, 1.75F) @@ -423,25 +564,6 @@ public final class AntarchyForgeEntites { .clientTrackingRange(10) .updateInterval(1) .build("upward_falling_block")); - public static final RegistryObject> DIMENSIONAL_TEAR = ENTITY_TYPES.register("dimensional_tear", - () -> EntityType.Builder.of(DimensionalTearEntity::new, MobCategory.MISC) - .sized(1.0F, 2.75F) - .clientTrackingRange(12) - .updateInterval(2) - .build("dimensional_tear")); - public static final RegistryObject> TIME_DILATION_FIELD = ENTITY_TYPES.register("time_dilation_field", - () -> EntityType.Builder.of(TimeDilationFieldEntity::new, MobCategory.MISC) - .sized(0.5F, 0.5F) - .clientTrackingRange(16) - .updateInterval(20) - .build("time_dilation_field")); - public static final RegistryObject> ROYAL_ASSAILANT_BLACK_HOLE = ENTITY_TYPES.register("royal_assailant_black_hole", - () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.royal.RoyalAssailantBlackHoleEntity::new, MobCategory.MISC) - .sized(1.0F, 1.0F) - .clientTrackingRange(16) - .updateInterval(2) - .fireImmune() - .build("royal_assailant_black_hole")); private AntarchyForgeEntites() {} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeEntityAttributes.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeEntityAttributes.java index b469c0b0..4ec7c724 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeEntityAttributes.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeEntityAttributes.java @@ -2,11 +2,12 @@ package com.craisinlord.antarchy.forge.registry; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.entity.*; -import com.craisinlord.antarchy.content.entity.CreepingHorrorEntity; -import com.craisinlord.antarchy.content.entity.LurkingTerrorEntity; +import com.craisinlord.antarchy.content.entity.CrawlingBlightEntity; +import com.craisinlord.antarchy.content.entity.SkulkingFrightEntity; +import com.craisinlord.antarchy.content.entity.ManticoreEntity; import com.craisinlord.antarchy.content.entity.basilisk.BasiliskEntity; import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; -import com.craisinlord.antarchy.content.entity.cloud_shark.CloudSharkEntity; +import com.craisinlord.antarchy.content.entity.stratoshark.StratosharkEntity; import com.craisinlord.antarchy.content.entity.flying_squirrel.FlyingSquirrelEntity; import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; import com.craisinlord.antarchy.content.entity.kraken.TentacleEntity; @@ -48,7 +49,7 @@ public class AntarchyForgeEntityAttributes { ).build()); event.put(AntarchyForgeEntites.ROLLY_POLLY.get(), RollyPollyEntity.createAttributes().build()); event.put(AntarchyForgeEntites.DR_TRAYAURUS.get(), Villager.createAttributes().build()); - event.put(AntarchyForgeEntites.CLOUD_SHARK.get(), CloudSharkEntity.createAttributes().build()); + event.put(AntarchyForgeEntites.STRATOSHARK.get(), StratosharkEntity.createAttributes().build()); event.put(AntarchyForgeEntites.KRAKEN.get(), KrakenEntity.createAttributes().build()); event.put(AntarchyForgeEntites.MISSILE_SQUID.get(), MissileSquidEntity.createAttributes().build()); event.put(AntarchyForgeEntites.OCTOPUS_BOMB.get(), OctopusBombEntity.createAttributes().build()); @@ -58,18 +59,20 @@ public class AntarchyForgeEntityAttributes { event.put(AntarchyForgeEntites.STINK_BUG.get(), StinkBugEntity.createAttributes().build()); event.put(AntarchyForgeEntites.WASP.get(), WaspEntity.createAttributes().build()); event.put(AntarchyForgeEntites.BOMBER.get(), BomberEntity.createAttributes().build()); - event.put(AntarchyForgeEntites.JUMPY_BUG.get(), JumpyBugEntity.createAttributes().build()); + event.put(AntarchyForgeEntites.SPRINGBUG.get(), SpringbugEntity.createAttributes().build()); event.put(AntarchyForgeEntites.SPIT_BUG.get(), SpitBugEntity.createAttributes().build()); event.put(AntarchyForgeEntites.MANTIS.get(), MantisEntity.createAttributes().build()); event.put(AntarchyForgeEntites.ALPHA_MANTIS.get(), AlphaMantisEntity.createAttributes().build()); - event.put(AntarchyForgeEntites.TRIFFID.get(), TriffidEntity.createAttributes().build()); + event.put(AntarchyForgeEntites.FLYTRAP.get(), FlytrapEntity.createAttributes().build()); event.put(AntarchyForgeEntites.LUCID.get(), LucidEntity.createAttributes().build()); + event.put(AntarchyForgeEntites.VORTEX.get(), com.craisinlord.antarchy.content.entity.vortex.VortexEntity.createAttributes().build()); event.put(AntarchyForgeEntites.SCORPION.get(), ScorpionEntity.createAttributes().build()); event.put(AntarchyForgeEntites.BASILISK.get(), BasiliskEntity.createAttributes().build()); event.put(AntarchyForgeEntites.EMPEROR_SCORPION.get(), EmperorScorpionEntity.createAttributes().build()); event.put(AntarchyForgeEntites.TORETERROR.get(), ToreterrorEntity.createAttributes().build()); - event.put(AntarchyForgeEntites.CREEPING_HORROR.get(), CreepingHorrorEntity.createAttributes().build()); - event.put(AntarchyForgeEntites.LURKING_TERROR.get(), LurkingTerrorEntity.createAttributes().build()); + event.put(AntarchyForgeEntites.CRAWLING_BLIGHT.get(), CrawlingBlightEntity.createAttributes().build()); + event.put(AntarchyForgeEntites.SKULKING_FRIGHT.get(), SkulkingFrightEntity.createAttributes().build()); + event.put(AntarchyForgeEntites.MANTICORE.get(), ManticoreEntity.createAttributes().build()); event.put(AntarchyForgeEntites.JERRY.get(), JerryEntity.createAttributes().build()); AttributeSupplier redAntAttributes = buildAntAttributes(AntarchySettings.redAntHealth(), AntarchySettings.redAntMovementSpeed(), AntarchySettings.redAntAttackDamage()).build(); @@ -79,13 +82,19 @@ public class AntarchyForgeEntityAttributes { event.put(AntarchyForgeEntites.BROWN_ANT.get(), brownAntAttributes); event.put(AntarchyForgeEntites.RAINBOW_ANT.get(), rainbowAntAttributes); event.put(AntarchyForgeEntites.MOLEWORM.get(), MolewormEntity.createAttributes().build()); + event.put(AntarchyForgeEntites.WORM.get(), WormEntity.createAttributes().build()); event.put(AntarchyForgeEntites.MOLEVORE.get(), MolevoreEntity.createAttributes().build()); event.put(AntarchyForgeEntites.CHEEP.get(), com.craisinlord.antarchy.content.entity.CheepEntity.createAttributes().build()); event.put(AntarchyForgeEntites.DORRIE.get(), com.craisinlord.antarchy.content.entity.DorrieEntity.createAttributes().build()); event.put(AntarchyForgeEntites.HERCULES_BEETLE.get(), com.craisinlord.antarchy.content.entity.HerculesBeetleEntity.createAttributes().build()); + event.put(AntarchyForgeEntites.PRINCE.get(), com.craisinlord.antarchy.content.entity.royal.PrinceEntity.createAttributes().build()); + event.put(AntarchyForgeEntites.PRINCESS.get(), com.craisinlord.antarchy.content.entity.royal.PrincessEntity.createAttributes().build()); + event.put(AntarchyForgeEntites.KING.get(), com.craisinlord.antarchy.content.entity.royal.KingEntity.createAttributes().build()); + event.put(AntarchyForgeEntites.QUEEN.get(), com.craisinlord.antarchy.content.entity.royal.QueenEntity.createAttributes().build()); event.put(AntarchyForgeEntites.OURANWOOD_DEER.get(), com.craisinlord.antarchy.content.entity.OuranwoodDeerEntity.createAttributes().build()); event.put(AntarchyForgeEntites.GLIMMER.get(), com.craisinlord.antarchy.content.entity.glimmer.GlimmerEntity.createAttributes().build()); event.put(AntarchyForgeEntites.ELKA.get(), ElkaEntity.createAttributes().build()); + event.put(AntarchyForgeEntites.HOVERBOARD.get(), com.craisinlord.antarchy.content.entity.HoverboardEntity.createAttributes().build()); } private static AttributeSupplier.Builder buildAntAttributes(double health, double speed, double attackDamage) { diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeEvents.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeEvents.java index 37b5f587..764bb01f 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeEvents.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeEvents.java @@ -1,13 +1,14 @@ package com.craisinlord.antarchy.forge.registry; +import com.craisinlord.anthology.effect.AnthologyEffects; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.recipe.CustomBrewingRecipes; -import com.craisinlord.antarchy.content.block.DuctTapeBlock; import com.craisinlord.antarchy.content.dispenser.RpoLauncherDispenseBehavior; import com.craisinlord.antarchy.content.dispenser.SizeRayDispenseBehavior; +import com.craisinlord.antarchy.content.dispenser.BugSprayDispenseBehavior; import com.craisinlord.antarchy.content.dispenser.SquidzookaDispenseBehavior; import com.craisinlord.antarchy.content.dispenser.WaterCannonDispenseBehavior; import com.craisinlord.antarchy.content.dispenser.AntimetalMinecartDispenseBehavior; @@ -19,18 +20,25 @@ import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidBoltEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidEyeProjectileEntity; -import com.craisinlord.antarchy.content.entity.multipart.MultipartFramework; +import com.craisinlord.antarchy.content.entity.vortex.VortexChargeProjectileEntity; +import com.craisinlord.antarchy.content.entity.vortex.VortexEntity; import com.craisinlord.antarchy.content.entity.trades.DrTrayaurusTradeManager; import com.craisinlord.antarchy.content.horde.CavarynHordeManager; import com.craisinlord.antarchy.content.item.*; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; import com.craisinlord.antarchy.content.item.ultimate.UltimateGearHelper; -import com.craisinlord.antarchy.content.movement.DreamSandLowGravityAccess; import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.antarchy.mixins.PoiTypesAccessor; import com.craisinlord.antarchy.content.portal.PermanentPortalManager; +import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageController; +import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageSync; import com.craisinlord.antarchy.forge.AntarchyForgeFluidTypes; -import com.craisinlord.antarchy.forge.entity.multipart.MultipartPartEntity; -import com.craisinlord.antarchy.forge.network.AntarchyGravityNetworking; import net.minecraft.core.BlockPos; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionResult; @@ -57,6 +65,8 @@ import net.minecraftforge.common.ToolActions; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.ForgeMod; import net.minecraft.world.entity.npc.VillagerProfession; +import net.minecraft.world.entity.ai.village.poi.PoiType; +import net.minecraft.world.level.block.Block; import net.minecraft.world.entity.npc.VillagerTrades; import net.minecraft.world.item.trading.MerchantOffer; import net.minecraftforge.event.AddReloadListenerEvent; @@ -67,14 +77,17 @@ import net.minecraftforge.event.entity.player.PlayerEvent; import net.minecraftforge.event.entity.player.PlayerInteractEvent; import net.minecraftforge.event.level.BlockEvent; import net.minecraftforge.event.entity.living.LivingEvent; -import net.minecraftforge.event.TickEvent; import net.minecraftforge.event.village.VillagerTradesEvent; import net.minecraftforge.event.village.WandererTradesEvent; +import net.minecraftforge.event.TickEvent; import net.minecraftforge.fluids.FluidInteractionRegistry; import com.craisinlord.antarchy.forge.network.AntarchyForgeNetworkCore; -import com.craisinlord.antarchy.content.time.TimeDilationManager; public final class AntarchyForgeEvents { + private static final double OVERHEAD_INVERSION_WARN_MS = 10.0D; + private static final long OVERHEAD_INVERSION_WARN_INTERVAL_TICKS = 100L; + private static long lastOverheadInversionWarnTick = Long.MIN_VALUE / 2L; + private AntarchyForgeEvents() {} public static void register(IEventBus modEventBus) { @@ -90,26 +103,27 @@ public final class AntarchyForgeEvents { MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleUltimateBowDamage); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleUltimateCrossbowDamage); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleNightmareArmorDoubleDamage); + MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleBossMagicBurstMitigation); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleScorpionWhipAttackEntity); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleAttitudeAdjusterAttackEntity); + MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handlePortalGunAttackEntity); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleScorpionWhipLeftClickBlock); + MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handlePortalGunLeftClickBlock); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleScorpionWhipRightClickBlock); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleScorpionWhipRightClickItem); + MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleGiantFryingPanRightClickItem); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleParalyzedAttackEntity); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleParalyzedLeftClickBlock); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleParalyzedRightClickBlock); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleParalyzedRightClickItem); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleParalyzedEntityInteract); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleParalyzedEntityInteractSpecific); - MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleDreamSandJump); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::tickDreadAndIchor); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::tickScorpionWhips); - MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::tickDreamSandLowGravity); + MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::tickWormHooks); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::tickAttitudeAdjusterSlams); - MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::tickTimeDilation); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleAntiwaterDamage); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleAntiwaterFall); - MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleDreamSandFall); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleBloodCrystalBootsFall); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleBloodglassShield); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleBloodCrystalArmorEquip); @@ -117,24 +131,24 @@ public final class AntarchyForgeEvents { MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleBloodglassWardRemoved); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleBloodglassWardExpired); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::tickBloodglassRecharge); + MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::tickAntArrivals); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleBloodglassPlayerDeath); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleBloodglassRespawn); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleBloodglassLogin); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleCavarynHordeKill); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleCavarynHordeBlockBreak); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::tickCavarynHordes); + MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::tickThoraxisUnderside); modEventBus.addListener(AntarchyForgeEvents::modifyEntityAttributes); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::tickOverheadInversion); - MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::tickDuctTapeStickiness); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleDreadDeath); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleFallenKingCrownKill); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleDreadBedSleep); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleStartTracking); - MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleDreamSandLogout); - MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleTigerEyeLogin); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleTigerEyeLogout); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleTigerEyeDeath); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleTigerEyeRespawn); + MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleTigerEyeLogin); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::handleTigerEyeDimensionChange); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::tickTigerEyeCamouflage); MinecraftForge.EVENT_BUS.addListener(AntarchyForgeEvents::registerReloadListeners); @@ -143,7 +157,23 @@ public final class AntarchyForgeEvents { } static void onVillagerTrades(VillagerTradesEvent event) { - if (event.getType() == VillagerProfession.FARMER) { + if (event.getType() == AntarchyForgeMisc.COMPUTER_SCIENTIST.get()) { + int[] slots = com.craisinlord.antarchy.content.entity.trades.ComputerScientistTradeManager.slotsPerLevel(); + for (int level = 1; level <= slots.length; level++) { + for (int index = 0; index < slots[level - 1]; index++) { + event.getTrades().computeIfAbsent(level, ignored -> new java.util.ArrayList<>()) + .add(com.craisinlord.antarchy.content.entity.trades.ComputerScientistTradeManager.listing(level, index)); + } + } + } else if (event.getType() == AntarchyForgeMisc.PEST_CONTROL.get()) { + int[] slots = com.craisinlord.antarchy.content.entity.trades.PestControlTradeManager.slotsPerLevel(); + for (int level = 1; level <= slots.length; level++) { + for (int index = 0; index < slots[level - 1]; index++) { + event.getTrades().computeIfAbsent(level, ignored -> new java.util.ArrayList<>()) + .add(com.craisinlord.antarchy.content.entity.trades.PestControlTradeManager.listing(level, index)); + } + } + } else if (event.getType() == VillagerProfession.FARMER) { event.getTrades().get(1).add(emeraldForItems(AntarchyObjects.CORN.get(), 20, 16, 2)); } else if (event.getType() == VillagerProfession.BUTCHER) { event.getTrades().get(1).add(emeraldForItems(AntarchyObjects.COOKED_CORNDOG.get(), 5, 16, 2)); @@ -206,16 +236,23 @@ public final class AntarchyForgeEvents { for (ServerLevel level : event.getServer().getAllLevels()) { CavarynHordeManager.tick(level); com.craisinlord.antarchy.content.horde.CavarynCreatureSpawner.tick(level); + com.craisinlord.antarchy.content.entity.glimmer.GlimmerNightSpawner.tick(level); + com.craisinlord.antarchy.content.worldgen.elythia.KingsTreeGridFeature.tickPendingSpawns(level); } } - @net.minecraftforge.eventbus.api.SubscribeEvent - static void tickTimeDilation(TickEvent.ServerTickEvent event) { - if (event.phase == TickEvent.Phase.END) { - TimeDilationManager.tickServer(event.getServer()); + static void tickThoraxisUnderside(TickEvent.ServerTickEvent event) { + if (event.phase != TickEvent.Phase.END) return; + for (ServerLevel level : event.getServer().getAllLevels()) { + ThoraxisUndersideManager.tick(level); } } + static void tickAntArrivals(TickEvent.ServerTickEvent event) { + if (event.phase != TickEvent.Phase.END) return; + com.craisinlord.antarchy.content.entity.ant.AntArrivalScheduler.tick(event.getServer()); + } + private static int badOmenLevel(Player player) { MobEffectInstance effect = player.getEffect(MobEffects.BAD_OMEN); return effect != null ? effect.getAmplifier() + 1 : 0; @@ -268,75 +305,56 @@ public final class AntarchyForgeEvents { static void registerReloadListeners(AddReloadListenerEvent event) { event.addListener(new DrTrayaurusTradeManager()); + event.addListener(new com.craisinlord.antarchy.content.entity.trades.ComputerScientistTradeManager()); + event.addListener(new com.craisinlord.antarchy.content.entity.trades.PestControlTradeManager()); } - static void handleDreamSandLogout(PlayerEvent.PlayerLoggedOutEvent event) { - clearDreamSandLowGravity(event.getEntity()); - } - private static void clearDreamSandLowGravity(LivingEntity livingEntity) { - DreamSandLowGravityAccess access = dreamSandAccess(livingEntity); - access.antarchy$setDreamSandLowGravityActive(false); - access.antarchy$setDreamSandLowGravityTicksRemaining(0); - access.antarchy$setDreamSandLandingGraceTicks(0); - } - private static DreamSandLowGravityAccess dreamSandAccess(LivingEntity livingEntity) { - return (DreamSandLowGravityAccess) livingEntity; - } - static void handleStartTracking(PlayerEvent.StartTracking event) { if (event.getTarget().level().isClientSide()) { return; } - AntarchyGravityNetworking.syncEntity(event.getTarget()); - if (event.getTarget() instanceof com.craisinlord.antarchy.content.time.TimeDilationEntityAccess access - && event.getEntity() instanceof ServerPlayer trackingPlayer) { - com.craisinlord.antarchy.forge.network.AntarchyTimeDilationNetworking.syncRateToPlayer( - trackingPlayer, event.getTarget(), access.antarchy$getTimeDilationRate() - ); - } if (event.getTarget() instanceof ServerPlayer trackedPlayer && event.getEntity() instanceof ServerPlayer trackingPlayer) { - com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageSync.syncTo(trackingPlayer, trackedPlayer); - } - } - - static void handleTigerEyeLogin(PlayerEvent.PlayerLoggedInEvent event) { - if (event.getEntity() instanceof ServerPlayer player) { - com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageSync.sync(player); + TigerEyeCamouflageSync.syncTo(trackingPlayer, trackedPlayer); } } static void handleTigerEyeLogout(PlayerEvent.PlayerLoggedOutEvent event) { if (event.getEntity() instanceof ServerPlayer player) { - com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageController.deactivate(player, false); + TigerEyeCamouflageController.deactivate(player, false); } } static void handleTigerEyeDeath(LivingDeathEvent event) { if (event.getEntity() instanceof ServerPlayer player) { - com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageController.deactivate(player, false); - com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageSync.sync(player); + TigerEyeCamouflageController.deactivate(player, false); + TigerEyeCamouflageSync.sync(player); } } static void handleTigerEyeRespawn(PlayerEvent.PlayerRespawnEvent event) { if (event.getEntity() instanceof ServerPlayer player) { - com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageController.deactivate(player, false); - com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageSync.sync(player); + TigerEyeCamouflageController.deactivate(player, false); + TigerEyeCamouflageSync.sync(player); + } + } + + static void handleTigerEyeLogin(PlayerEvent.PlayerLoggedInEvent event) { + if (event.getEntity() instanceof ServerPlayer player) { + TigerEyeCamouflageSync.sync(player); } } static void handleTigerEyeDimensionChange(PlayerEvent.PlayerChangedDimensionEvent event) { if (event.getEntity() instanceof ServerPlayer player) { - com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageController.deactivate(player, false); - com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageSync.sync(player); + TigerEyeCamouflageController.deactivate(player, false); + TigerEyeCamouflageSync.sync(player); } } static void tickTigerEyeCamouflage(TickEvent.PlayerTickEvent event) { if (event.phase != TickEvent.Phase.END) return; - if (event.player instanceof ServerPlayer player - && com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageController.validateOrDeactivate(player)) { - com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageSync.sync(player); + if (event.player instanceof ServerPlayer player && TigerEyeCamouflageController.validateOrDeactivate(player)) { + TigerEyeCamouflageSync.sync(player); } } @@ -346,11 +364,13 @@ public final class AntarchyForgeEvents { if (!event.getEntity().hasEffect(AntarchyForgeMisc.DREAD.get())) { return; } - Player player = event.getEntity(); - player.displayClientMessage(net.minecraft.network.chat.Component.translatable("message.antarchy.dread_too_scared_to_sleep"), true); + event.getEntity().displayClientMessage(net.minecraft.network.chat.Component.translatable("message.antarchy.dread_too_scared_to_sleep"), true); event.setResult(net.minecraft.world.entity.player.Player.BedSleepingProblem.OTHER_PROBLEM); - if (!(player.level() instanceof net.minecraft.server.level.ServerLevel level)) return; + if (!(event.getEntity().level() instanceof net.minecraft.server.level.ServerLevel level)) { + return; + } + Player player = event.getEntity(); long gameTime = level.getGameTime(); long nextSpawnTime = player.getPersistentData().getLong(DREAD_BED_BUG_NEXT_SPAWN_KEY); if (nextSpawnTime > gameTime) { @@ -399,15 +419,8 @@ public final class AntarchyForgeEvents { event.setResult(net.minecraftforge.eventbus.api.Event.Result.DENY); } - static void tickDuctTapeStickiness(LivingEvent.LivingTickEvent event) { - if (DuctTapeBlock.shouldTickStuckEntity(event.getEntity())) { - DuctTapeBlock.tickStuckEntity(event.getEntity()); - } - } - static void handleDreadDeath(LivingDeathEvent event) { LivingEntity entity = event.getEntity(); - clearDreamSandLowGravity(entity); if (!entity.hasEffect(AntarchyForgeMisc.DREAD.get())) { return; } @@ -433,6 +446,9 @@ public final class AntarchyForgeEvents { } private static final int ANTIMETAL_INVERTED_REFRESH_TICKS = 20; + private static final int ANTIMETAL_INVERTED_REFRESH_THRESHOLD_TICKS = 12; + private static final int ANTIMETAL_PLAYER_SCAN_INTERVAL_TICKS = 2; + private static final int ANTIMETAL_MOB_SCAN_INTERVAL_TICKS = 10; static void tickOverheadInversion(LivingEvent.LivingTickEvent event) { LivingEntity livingEntity = event.getEntity(); @@ -442,17 +458,47 @@ public final class AntarchyForgeEvents { if (livingEntity instanceof Player player && player.isSpectator()) { return; } - if (!isDirectlyBelowAntimetal(livingEntity)) { + + MobEffectInstance existingInverted = livingEntity.getEffect(AnthologyEffects.inverted()); + long gameTime = livingEntity.level().getGameTime(); + if (!shouldScanOverheadAntimetal(livingEntity, existingInverted, gameTime)) { return; } - MobEffectInstance existingInverted = livingEntity.getEffect(AntarchyForgeMisc.INVERTED.get()); - if (existingInverted == null || existingInverted.getDuration() <= 5) { - livingEntity.addEffect(new MobEffectInstance(AntarchyForgeMisc.INVERTED.get(), ANTIMETAL_INVERTED_REFRESH_TICKS, 0, false, false, false)); + long startNanos = System.nanoTime(); + boolean directlyBelowAntimetal = isDirectlyBelowAntimetal(livingEntity); + double elapsedMs = (System.nanoTime() - startNanos) / 1_000_000.0D; + if (elapsedMs >= OVERHEAD_INVERSION_WARN_MS + && gameTime - lastOverheadInversionWarnTick >= OVERHEAD_INVERSION_WARN_INTERVAL_TICKS) { + lastOverheadInversionWarnTick = gameTime; + Antarchy.LOGGER.warn( + "[antarchy-gravity] slow overhead antimetal scan targetType={} uuid={} pos=({}, {}, {}) dim={} elapsedMs={} inverted={} forced={} gameTime={}", + livingEntity.getType(), livingEntity.getUUID(), livingEntity.getX(), livingEntity.getY(), livingEntity.getZ(), + livingEntity.level().dimension().location(), elapsedMs, + com.craisinlord.anthology.gravity.GravityApi.isGravityInverted(livingEntity), + com.craisinlord.anthology.gravity.GravityApi.isGravityForced(livingEntity), + gameTime + ); + } + if (!directlyBelowAntimetal) { + return; + } + + if (existingInverted == null || existingInverted.getDuration() <= ANTIMETAL_INVERTED_REFRESH_THRESHOLD_TICKS) { + livingEntity.addEffect(new MobEffectInstance(AnthologyEffects.inverted(), ANTIMETAL_INVERTED_REFRESH_TICKS, 0, false, false, false)); spawnAntimetalInversionParticles(livingEntity); } } + private static boolean shouldScanOverheadAntimetal(LivingEntity entity, MobEffectInstance existingInverted, long gameTime) { + if (existingInverted != null && existingInverted.getDuration() <= ANTIMETAL_INVERTED_REFRESH_THRESHOLD_TICKS) { + return true; + } + int interval = entity instanceof Player ? ANTIMETAL_PLAYER_SCAN_INTERVAL_TICKS : ANTIMETAL_MOB_SCAN_INTERVAL_TICKS; + long phase = (long) entity.getUUID().hashCode() + gameTime; + return Math.floorMod(phase, interval) == 0L; + } + private static boolean isInOrBelowAntimetalScaffolding(LivingEntity entity) { AABB bounds = entity.getBoundingBox().deflate(1.0E-3D); int minX = net.minecraft.util.Mth.floor(bounds.minX); @@ -485,18 +531,16 @@ public final class AntarchyForgeEvents { int minX = net.minecraft.util.Mth.floor(bounds.minX); int maxX = net.minecraft.util.Mth.floor(bounds.maxX); - int minY = net.minecraft.util.Mth.floor(bounds.minY); int maxY = net.minecraft.util.Mth.floor(bounds.maxY); int minZ = net.minecraft.util.Mth.floor(bounds.minZ); int maxZ = net.minecraft.util.Mth.floor(bounds.maxZ); + net.minecraft.core.BlockPos.MutableBlockPos crystalPos = new net.minecraft.core.BlockPos.MutableBlockPos(); for (int x = minX; x <= maxX; x++) { - for (int y = minY; y <= maxY; y++) { - for (int z = minZ; z <= maxZ; z++) { - net.minecraft.core.BlockPos crystalPos = new net.minecraft.core.BlockPos(x, y + 1, z); - if (entity.level().getBlockState(crystalPos).is(AntarchyTags.Blocks.ANTIMETAL_INVERSION_BLOCKS)) { - return true; - } + for (int z = minZ; z <= maxZ; z++) { + crystalPos.set(x, maxY + 1, z); + if (entity.level().getBlockState(crystalPos).is(com.craisinlord.antarchy.content.AntarchyTags.Blocks.ANTIMETAL_INVERSION_BLOCKS)) { + return true; } } } @@ -600,9 +644,7 @@ public final class AntarchyForgeEvents { - access.antarchy$getArmorShieldsActive() - access.antarchy$getArmorShieldLostCount()) ); int currentCap = access.antarchy$getAppleShieldsActive() + access.antarchy$getAppleShieldLostCount(); - // Only grant newly-added capacity (e.g. first application, or a higher amplifier). - // A mere duration refresh of an already-active ward must not reset shields that are - // already lost, nor restart their recharge timer. + if (targetCap > currentCap) { access.antarchy$setAppleShieldsActive(access.antarchy$getAppleShieldsActive() + (targetCap - currentCap)); syncBloodglass((ServerPlayer) player); @@ -681,8 +723,8 @@ public final class AntarchyForgeEvents { if (changed && player instanceof ServerPlayer sp) { syncBloodglass(sp); sp.playNotifySound( - net.minecraft.sounds.SoundEvents.AMETHYST_BLOCK_CHIME, - net.minecraft.sounds.SoundSource.PLAYERS, 0.6f, 1.6f); + AntarchySoundEvents.BLOODGLASS_WARD_HEART_REGEN.get(), + net.minecraft.sounds.SoundSource.PLAYERS, 1.0f, 1.0f); } } static void handleBloodCrystalArmorEquip(LivingEquipmentChangeEvent event) { @@ -701,7 +743,7 @@ public final class AntarchyForgeEvents { BloodglassAccess access = (BloodglassAccess) player; if (fromIsBC && !toIsBC) { - // Unequipped BC armor, remove one shield slot + if (access.antarchy$getArmorShieldsActive() > 0) { access.antarchy$setArmorShieldsActive(access.antarchy$getArmorShieldsActive() - 1); } else if (access.antarchy$getArmorShieldLostCount() > 0) { @@ -711,7 +753,7 @@ public final class AntarchyForgeEvents { } } } else if (!fromIsBC && toIsBC) { - // Newly equipped BC armor,only add if not already accounted for (by respawn init) + int bcPieces = countBCArmorPieces(player); int currentTotal = access.antarchy$getArmorShieldsActive() + access.antarchy$getArmorShieldLostCount(); if (currentTotal < bcPieces) { @@ -719,8 +761,7 @@ public final class AntarchyForgeEvents { access.antarchy$setArmorRechargeTimer(AntarchySettings.bloodCrystalArmorShieldRechargeTicks()); } } else if (fromIsBC) { - // BC armor replaced with another BC armor (or same after re-equip sequence) - // Remove old shield, start recharging new one and reset timer + if (access.antarchy$getArmorShieldsActive() > 0) { access.antarchy$setArmorShieldsActive(access.antarchy$getArmorShieldsActive() - 1); } else if (access.antarchy$getArmorShieldLostCount() > 0) { @@ -747,12 +788,12 @@ public final class AntarchyForgeEvents { static void handleBloodCrystalBootsFall(LivingFallEvent event) { if (!(event.getEntity() instanceof Player player)) return; - if (!com.craisinlord.antarchy.content.gravity.AntarchyGravityApi.isGravityInverted(player)) return; - if (!(player.getItemBySlot(net.minecraft.world.entity.EquipmentSlot.FEET).getItem() instanceof BloodCrystalArmorItem)) return; + if (!com.craisinlord.anthology.gravity.GravityApi.isGravityInverted(player)) return; + if (com.craisinlord.antarchy.content.enchantment.AntarchyEnchantments.featherRisingLevel(player) <= 0) return; event.setCanceled(true); } - static void handleBloodglassShield(LivingHurtEvent event) { + static void handleBloodglassShield(LivingAttackEvent event) { if (!(event.getEntity() instanceof Player player)) return; if (player.level().isClientSide()) return; @@ -764,7 +805,6 @@ public final class AntarchyForgeEvents { int totalActive = access.antarchy$getTotalShieldsActive(); if (totalActive <= 0) return; - // Consume apple shields first, then armor shields if (access.antarchy$getAppleShieldsActive() > 0) { access.antarchy$setAppleShieldsActive(access.antarchy$getAppleShieldsActive() - 1); access.antarchy$setAppleShieldLostCount(access.antarchy$getAppleShieldLostCount() + 1); @@ -786,7 +826,7 @@ public final class AntarchyForgeEvents { serverLevel.broadcastEntityEvent(player, (byte) 2); serverLevel.playSound(null, player.blockPosition(), - net.minecraft.sounds.SoundEvents.GLASS_BREAK, + AntarchySoundEvents.BLOODGLASS_WARD_HEART_BREAK.get(), net.minecraft.sounds.SoundSource.PLAYERS, 1.0f, 1.0f); serverLevel.sendParticles( @@ -811,8 +851,6 @@ public final class AntarchyForgeEvents { return; } - // Shared item code now scales arrow base damage directly so attribute and projectile - // modifiers stay in the damage pipeline. Leave non-player hits untouched here. } static void handleUltimateCrossbowDamage(LivingHurtEvent event) { @@ -821,9 +859,8 @@ public final class AntarchyForgeEvents { } } - - static void handleNightmareArmorDoubleDamage(LivingHurtEvent event) { + if (com.craisinlord.antarchy.content.item.RoyalGuardianSwordAbilities.isApplyingSecondaryDamage()) return; net.minecraft.world.damagesource.DamageSource source = event.getSource(); if (!(source.getEntity() instanceof net.minecraft.world.entity.LivingEntity attacker)) return; if (!attacker.getAttributes().hasAttribute(AntarchyForgeMisc.DOUBLE_DAMAGE_CHANCE.get())) return; @@ -844,7 +881,39 @@ public final class AntarchyForgeEvents { } } - static void handleAntiwaterDamage(LivingHurtEvent event) { + static void handleBossMagicBurstMitigation(LivingHurtEvent event) { + LivingEntity boss = event.getEntity(); + if (!boss.getType().is(AntarchyTags.Entities.SPELL_RESISTANT_BOSS)) return; + if (!com.craisinlord.antarchy.content.boss.BossCombatUtil.isMagicBurstSource(event.getSource())) return; + + float maxHealth = boss.getMaxHealth(); + float amount = event.getAmount(); + + float perHitCap = maxHealth * (float) AntarchySettings.bossMagicPerHitCapFraction(); + if (amount > perHitCap) { + amount = perHitCap; + } + + float windowCap = maxHealth * (float) AntarchySettings.bossMagicWindowCapFraction(); + float remainingBudget = com.craisinlord.antarchy.content.boss.BossCombatUtil.remainingWindowBudget(boss, windowCap); + boolean breachedWindow = amount > remainingBudget; + if (breachedWindow) { + amount = Math.max(0.0F, remainingBudget); + } + + com.craisinlord.antarchy.content.boss.BossCombatUtil.trackMagicBurstWindow(boss, amount, AntarchySettings.bossMagicWindowTicks()); + + if (breachedWindow) { + int breaches = com.craisinlord.antarchy.content.boss.BossCombatUtil.recordMagicWindowBreach(boss); + if (breaches >= AntarchySettings.bossMagicWardTriggerBreaches()) { + com.craisinlord.antarchy.content.boss.BossCombatUtil.triggerMagicWard(boss, AntarchySettings.bossMagicWardDurationTicks()); + } + } + + event.setAmount(amount); + } + + static void handleAntiwaterDamage(LivingAttackEvent event) { if (!event.getSource().is(DamageTypes.FALL)) { return; } @@ -884,6 +953,13 @@ public final class AntarchyForgeEvents { AttitudeAdjusterSlamManager.markSpecialHit(player); } + static void handlePortalGunAttackEntity(AttackEntityEvent event) { + if (event.getEntity().getMainHandItem().getItem() instanceof com.craisinlord.antarchy.content.item.PortalGunItem + || event.getEntity().getOffhandItem().getItem() instanceof com.craisinlord.antarchy.content.item.PortalGunItem) { + event.setCanceled(true); + } + } + static void handleScorpionWhipLeftClickBlock(PlayerInteractEvent.LeftClickBlock event) { if (!(event.getEntity() instanceof ServerPlayer player)) { return; @@ -894,6 +970,13 @@ public final class AntarchyForgeEvents { event.setCanceled(true); } + static void handlePortalGunLeftClickBlock(PlayerInteractEvent.LeftClickBlock event) { + if (!(event.getEntity().getMainHandItem().getItem() instanceof com.craisinlord.antarchy.content.item.PortalGunItem)) { + return; + } + event.setCanceled(true); + } + static void handleScorpionWhipRightClickBlock(PlayerInteractEvent.RightClickBlock event) { if (!(event.getEntity() instanceof ServerPlayer player)) { return; @@ -910,6 +993,14 @@ public final class AntarchyForgeEvents { } } + static void handleGiantFryingPanRightClickItem(PlayerInteractEvent.RightClickItem event) { + InteractionResult result = com.craisinlord.antarchy.content.item.GiantFryingPanItem.handleMainHandUse(event.getLevel(), event.getEntity(), event.getHand()); + if (result != InteractionResult.PASS) { + event.setCanceled(true); + event.setCancellationResult(result); + } + } + static void handleScorpionWhipRightClickItem(PlayerInteractEvent.RightClickItem event) { if (!(event.getEntity() instanceof ServerPlayer player)) { return; @@ -970,24 +1061,6 @@ public final class AntarchyForgeEvents { return player.hasEffect(AntarchyForgeMisc.PARALYZED.get()); } - static void handleDreamSandJump(LivingEvent.LivingJumpEvent event) { - LivingEntity livingEntity = event.getEntity(); - if (!AntarchySettings.dreamSandEnabled() || isDreamSandLowGravityBlacklisted(livingEntity)) { - clearDreamSandLowGravity(livingEntity); - } else if (isStandingOnDreamSand(livingEntity)) { - livingEntity.setDeltaMovement( - livingEntity.getDeltaMovement().x, - livingEntity.getDeltaMovement().y * AntarchySettings.dreamSandJumpVelocityMultiplier(), - livingEntity.getDeltaMovement().z - ); - DreamSandLowGravityAccess access = dreamSandAccess(livingEntity); - access.antarchy$setDreamSandLowGravityActive(true); - access.antarchy$setDreamSandLowGravityTicksRemaining((int) Math.max(1L, Math.round(AntarchySettings.dreamSandEffectDurationSeconds() * 20.0D))); - access.antarchy$setDreamSandLandingGraceTicks(0); - } - - } - static void tickDreadAndIchor(TickEvent.PlayerTickEvent event) { if (event.phase != TickEvent.Phase.END) return; Player player = event.player; @@ -1006,6 +1079,13 @@ public final class AntarchyForgeEvents { } } + static void tickWormHooks(TickEvent.PlayerTickEvent event) { + if (event.phase != TickEvent.Phase.END) return; + if (event.player instanceof ServerPlayer player) { + com.craisinlord.antarchy.content.item.WormHookTetherManager.tick(player); + } + } + static void tickAttitudeAdjusterSlams(TickEvent.ServerTickEvent event) { if (event.phase != TickEvent.Phase.END) return; for (ServerLevel level : event.getServer().getAllLevels()) { @@ -1013,49 +1093,6 @@ public final class AntarchyForgeEvents { } } - static void tickDreamSandLowGravity(LivingEvent.LivingTickEvent event) { - LivingEntity livingEntity = event.getEntity(); - - DreamSandLowGravityAccess access = dreamSandAccess(livingEntity); - int landingGraceTicks = access.antarchy$getDreamSandLandingGraceTicks(); - if (landingGraceTicks > 0) { - access.antarchy$setDreamSandLandingGraceTicks(landingGraceTicks - 1); - } - - if (!AntarchySettings.dreamSandEnabled() || isDreamSandLowGravityBlacklisted(livingEntity) || !access.antarchy$isDreamSandLowGravityActive()) { - return; - } - - int remainingTicks = access.antarchy$getDreamSandLowGravityTicksRemaining(); - if (remainingTicks > 0) { - access.antarchy$setDreamSandLowGravityTicksRemaining(remainingTicks - 1); - } - if (access.antarchy$getDreamSandLowGravityTicksRemaining() <= 0) { - clearDreamSandLowGravity(livingEntity); - return; - } - - if (isOnSolidGround(livingEntity)) { - access.antarchy$setDreamSandLowGravityActive(false); - access.antarchy$setDreamSandLowGravityTicksRemaining(0); - access.antarchy$setDreamSandLandingGraceTicks(2); - } else if (!livingEntity.onGround() && livingEntity.getDeltaMovement().y < 0.0D) { - livingEntity.setDeltaMovement( - livingEntity.getDeltaMovement().x, - livingEntity.getDeltaMovement().y * AntarchySettings.dreamSandGravityMultiplier(), - livingEntity.getDeltaMovement().z - ); - } - } - - private static boolean isOnSolidGround(LivingEntity livingEntity) { - return livingEntity.onGround() && livingEntity.getBlockStateOn().blocksMotion(); - } - - private static boolean isStandingOnDreamSand(LivingEntity livingEntity) { - return livingEntity.level().getBlockState(livingEntity.getOnPosLegacy()).is(AntarchyForgeBlocks.DREAM_SAND.get()); - } - static void handleAntiwaterFall(LivingFallEvent event) { LivingEntity livingEntity = event.getEntity(); if (intersectsAntiwater(livingEntity, livingEntity.getBoundingBox().inflate(0.05D))) { @@ -1063,23 +1100,6 @@ public final class AntarchyForgeEvents { } } - static void handleDreamSandFall(LivingFallEvent event) { - LivingEntity livingEntity = event.getEntity(); - DreamSandLowGravityAccess access = dreamSandAccess(livingEntity); - if (!AntarchySettings.dreamSandEnabled() - || isDreamSandLowGravityBlacklisted(livingEntity) - || (!access.antarchy$isDreamSandLowGravityActive() && access.antarchy$getDreamSandLandingGraceTicks() <= 0)) { - return; - } - - event.setCanceled(true); - } - - private static boolean isDreamSandLowGravityBlacklisted(LivingEntity livingEntity) { - return livingEntity.getType().is(AntarchyTags.Entities.DREAM_SAND_LOW_GRAVITY_BLACKLIST); - } - - private static boolean intersectsAntiwater(Entity entity, AABB box) { BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(); BlockPos min = BlockPos.containing(box.minX, box.minY, box.minZ); @@ -1100,10 +1120,10 @@ public final class AntarchyForgeEvents { static void onInvertedEffectExpired(MobEffectEvent.Expired event) { if (event.getEffectInstance() == null) return; - if (event.getEffectInstance().getEffect() != AntarchyForgeMisc.INVERTED.get()) return; + if (event.getEffectInstance().getEffect() != AnthologyEffects.inverted()) return; LivingEntity entity = event.getEntity(); if (!entity.level().isClientSide()) { - com.craisinlord.antarchy.content.gravity.AntarchyMountedGravityHelper.syncConnectedStackIgnoring(entity, entity); + com.craisinlord.anthology.gravity.MountedGravityHelper.syncConnectedStackIgnoring(entity, entity); if (entity instanceof Player player) { notifyNearbyReveriesOfInversionChange(player); } @@ -1120,22 +1140,7 @@ public final class AntarchyForgeEvents { } private static void addPotionMix(net.minecraft.world.item.alchemy.Potion input, Item ingredient, net.minecraft.world.item.alchemy.Potion output) { - net.minecraftforge.common.brewing.BrewingRecipeRegistry.addRecipe(new net.minecraftforge.common.brewing.IBrewingRecipe() { - @Override - public boolean isInput(ItemStack stack) { - return stack.is(Items.POTION) && net.minecraft.world.item.alchemy.PotionUtils.getPotion(stack) == input; - } - - @Override - public boolean isIngredient(ItemStack stack) { - return stack.is(ingredient); - } - - @Override - public ItemStack getOutput(ItemStack input1, ItemStack ingredient1) { - return net.minecraft.world.item.alchemy.PotionUtils.setPotion(new ItemStack(input1.getItem()), output); - } - }); + com.craisinlord.antarchy.mixins.PotionBrewingInvoker.antarchy$addMix(input, ingredient, output); } static void registerBrewingRecipes() { @@ -1191,8 +1196,8 @@ public final class AntarchyForgeEvents { addPotionMix(AntarchyForgeMisc.PARALYSIS.get(), Items.REDSTONE, AntarchyForgeMisc.LONG_PARALYSIS.get()); addPotionMix(Potions.AWKWARD, AntarchyForgeItems.MOLEWORM_ITEM.get(), AntarchyForgeMisc.HASTE.get()); addPotionMix(AntarchyForgeMisc.HASTE.get(), Items.GLOWSTONE_DUST, AntarchyForgeMisc.STRONG_HASTE.get()); - addPotionMix(Potions.AWKWARD, AntarchyForgeItems.CLOUD_SHARK_FIN.get(), Potions.SLOW_FALLING); - addPotionMix(Potions.AWKWARD, AntarchyForgeItems.JUMPY_BUG_LEG.get(), Potions.LEAPING); + addPotionMix(Potions.AWKWARD, AntarchyForgeItems.STRATOSHARK_FIN.get(), Potions.SLOW_FALLING); + addPotionMix(Potions.AWKWARD, AntarchyForgeItems.SPRINGBUG_LEG.get(), Potions.LEAPING); addPotionMix(Potions.AWKWARD, AntarchyForgeItems.CORNEA_EAR.get(), Potions.NIGHT_VISION); addPotionMix(Potions.AWKWARD, AntarchyForgeItems.URANIUM_NUGGET.get(), AntarchyForgeMisc.SHRINKING.get()); addPotionMix(AntarchyForgeMisc.SHRINKING.get(), Items.GLOWSTONE_DUST, AntarchyForgeMisc.STRONG_SHRINKING.get()); @@ -1200,8 +1205,13 @@ public final class AntarchyForgeEvents { addPotionMix(Potions.AWKWARD, AntarchyForgeItems.TITANIUM_NUGGET.get(), AntarchyForgeMisc.GROWING.get()); addPotionMix(AntarchyForgeMisc.GROWING.get(), Items.GLOWSTONE_DUST, AntarchyForgeMisc.STRONG_GROWING.get()); addPotionMix(AntarchyForgeMisc.STRONG_GROWING.get(), Items.GLOWSTONE_DUST, AntarchyForgeMisc.EXTREME_GROWING.get()); + addPotionMix(Potions.AWKWARD, AntarchyForgeItems.KING_SCALE.get(), AntarchyForgeMisc.COMMAND.get()); + addPotionMix(AntarchyForgeMisc.COMMAND.get(), Items.REDSTONE, AntarchyForgeMisc.LONG_COMMAND.get()); addPotionMix(Potions.AWKWARD, AntarchyForgeItems.QUEEN_SCALE.get(), AntarchyForgeMisc.TIME_DILATION.get()); addPotionMix(AntarchyForgeMisc.TIME_DILATION.get(), Items.GLOWSTONE_DUST, AntarchyForgeMisc.LONG_TIME_DILATION.get()); + addPotionMix(AntarchyForgeMisc.TIME_DILATION.get(), Items.FERMENTED_SPIDER_EYE, AntarchyForgeMisc.TIME_CONTRACTION.get()); + addPotionMix(AntarchyForgeMisc.TIME_CONTRACTION.get(), Items.GLOWSTONE_DUST, AntarchyForgeMisc.LONG_TIME_CONTRACTION.get()); + } static void onMobEffectApplicable(MobEffectEvent.Applicable event) { @@ -1215,7 +1225,7 @@ public final class AntarchyForgeEvents { } if (event.getEntity().getType().is(AntarchyTags.Entities.INVERTED_IMMUNE) - && event.getEffectInstance().getEffect() == AntarchyForgeMisc.INVERTED.get()) { + && event.getEffectInstance().getEffect() == AnthologyEffects.inverted()) { event.setResult(net.minecraftforge.eventbus.api.Event.Result.DENY); return; } @@ -1233,18 +1243,17 @@ public final class AntarchyForgeEvents { } if (event.getEntity() instanceof Player player - && event.getEffectInstance().getEffect() == AntarchyForgeMisc.INVERTED.get() - && !player.hasEffect(AntarchyForgeMisc.INVERTED.get())) { + && event.getEffectInstance().getEffect() == AnthologyEffects.inverted() + && !player.hasEffect(AnthologyEffects.inverted())) { notifyNearbyReveriesOfInversionChange(player); } } - static void onInvertedEffectRemoved(MobEffectEvent.Remove event) { - if (event.getEffect() != AntarchyForgeMisc.INVERTED.get()) return; + if (event.getEffect() != AnthologyEffects.inverted()) return; LivingEntity entity = event.getEntity(); if (!entity.level().isClientSide()) { - com.craisinlord.antarchy.content.gravity.AntarchyMountedGravityHelper.syncConnectedStackIgnoring(entity, entity); + com.craisinlord.anthology.gravity.MountedGravityHelper.syncConnectedStackIgnoring(entity, entity); if (entity instanceof Player player) { notifyNearbyReveriesOfInversionChange(player); } @@ -1252,7 +1261,7 @@ public final class AntarchyForgeEvents { } static void handleBlockToolModification(BlockEvent.BlockToolModificationEvent event) { - if (event.getToolAction() != net.minecraftforge.common.ToolActions.AXE_STRIP) { + if (event.getToolAction() != ToolActions.AXE_STRIP) { return; } @@ -1288,18 +1297,52 @@ public final class AntarchyForgeEvents { if (state.is(AntarchyForgeBlocks.PEACH_WOOD.get())) { event.setFinalState(AntarchyForgeBlocks.STRIPPED_PEACH_WOOD.get().defaultBlockState().setValue(RotatedPillarBlock.AXIS, state.getValue(RotatedPillarBlock.AXIS))); + return; + } + + if (state.is(AntarchyForgeBlocks.NADIR_LOG.get())) { + event.setFinalState(AntarchyForgeBlocks.STRIPPED_NADIR_LOG.get().defaultBlockState().setValue(RotatedPillarBlock.AXIS, state.getValue(RotatedPillarBlock.AXIS))); + return; + } + + if (state.is(AntarchyForgeBlocks.NADIR_WOOD.get())) { + event.setFinalState(AntarchyForgeBlocks.STRIPPED_NADIR_WOOD.get().defaultBlockState().setValue(RotatedPillarBlock.AXIS, state.getValue(RotatedPillarBlock.AXIS))); + return; + } + + if (state.is(AntarchyForgeBlocks.ROYAL_LOG.get())) { + event.setFinalState(AntarchyForgeBlocks.STRIPPED_ROYAL_LOG.get().defaultBlockState().setValue(RotatedPillarBlock.AXIS, state.getValue(RotatedPillarBlock.AXIS))); + return; + } + + if (state.is(AntarchyForgeBlocks.ROYAL_WOOD.get())) { + event.setFinalState(AntarchyForgeBlocks.STRIPPED_ROYAL_WOOD.get().defaultBlockState().setValue(RotatedPillarBlock.AXIS, state.getValue(RotatedPillarBlock.AXIS))); } } static void onCommonSetup(FMLCommonSetupEvent event) { BloodCrystalShardItem.SYNC_BLOODGLASS = AntarchyForgeEvents::syncBloodglass; + if (com.craisinlord.antarchy.compat.infinity.InfinityCompat.get().isAvailable()) { + com.craisinlord.antarchy.compat.infinity.InfinityConfigRefresh.refreshIfStale(net.minecraftforge.fml.loading.FMLPaths.CONFIGDIR.get()); + } event.enqueueWork(() -> { + Holder computerPoi = BuiltInRegistries.POINT_OF_INTEREST_TYPE.getHolderOrThrow( + net.minecraft.resources.ResourceKey.create(Registries.POINT_OF_INTEREST_TYPE, + new net.minecraft.resources.ResourceLocation(Antarchy.MODID, "computer"))); + net.minecraft.world.level.block.Block computerBlock = com.craisinlord.antos.forge.AntOSForgeContent.COMPUTER.get(); + for (net.minecraft.world.level.block.state.BlockState state : computerBlock.getStateDefinition().getPossibleStates()) { + PoiTypesAccessor.antarchy$getTypeByState().put(state, computerPoi); + } + registerBrewingRecipes(); DispenserBlock.registerBehavior(AntarchyForgeItems.SHRINK_RAY.get(), new SizeRayDispenseBehavior()); DispenserBlock.registerBehavior(AntarchyForgeItems.GROWTH_RAY.get(), new SizeRayDispenseBehavior()); DispenserBlock.registerBehavior(AntarchyForgeItems.SQUIDZOOKA.get(), new SquidzookaDispenseBehavior()); DispenserBlock.registerBehavior(AntarchyForgeItems.RPO_LAUNCHER.get(), new RpoLauncherDispenseBehavior()); DispenserBlock.registerBehavior(AntarchyForgeItems.WATER_CANNON.get(), new WaterCannonDispenseBehavior()); + DispenserBlock.registerBehavior(AntarchyForgeItems.VORTEX_CHARGE.get(), new com.craisinlord.antarchy.content.dispenser.VortexChargeDispenseBehavior()); + DispenserBlock.registerBehavior(AntarchyForgeItems.EYE_OF_THE_STORM.get(), new com.craisinlord.antarchy.content.dispenser.EyeOfTheStormDispenseBehavior()); + DispenserBlock.registerBehavior(AntarchyForgeItems.BUG_SPRAY.get(), new BugSprayDispenseBehavior()); AntimetalMinecartDispenseBehavior antimetalMinecartDispenseBehavior = new AntimetalMinecartDispenseBehavior(); DispenserBlock.registerBehavior(Items.MINECART, antimetalMinecartDispenseBehavior); DispenserBlock.registerBehavior(Items.CHEST_MINECART, antimetalMinecartDispenseBehavior); @@ -1308,7 +1351,7 @@ public final class AntarchyForgeEvents { DispenserBlock.registerBehavior(Items.HOPPER_MINECART, antimetalMinecartDispenseBehavior); DispenserBlock.registerBehavior(Items.COMMAND_BLOCK_MINECART, antimetalMinecartDispenseBehavior); LucidEyeProjectileEntity.defaultItemSupplier = () -> AntarchyForgeItems.LUCID_PEARL.get(); - LucidEntity.invertedEffectSupplier = () -> AntarchyForgeMisc.INVERTED.get(); + LucidEntity.invertedEffectSupplier = AnthologyEffects::inverted; FluidInteractionRegistry.addInteraction( AntarchyForgeFluidTypes.ANTIWATER_TYPE.get(), new FluidInteractionRegistry.InteractionInformation( @@ -1319,26 +1362,12 @@ public final class AntarchyForgeEvents { ) ); LucidEntity.boltEntityTypeSupplier = () -> AntarchyForgeEntites.LUCID_BOLT.get(); - LucidBoltEntity.invertedEffectSupplier = () -> AntarchyForgeMisc.INVERTED.get(); - LucidEyeProjectileEntity.invertedEffectSupplier = () -> AntarchyForgeMisc.INVERTED.get(); - MultipartFramework.bootstrap( - (owner, partIndex, spec) -> new MultipartPartEntity((Entity) owner, owner, partIndex, spec), - new MultipartFramework.NetworkBridge() { - @Override - public void sendAttack(java.util.UUID parentId, int partIndex, float damage) { - AntarchyForgeNetworkCore.sendToServer( - new com.craisinlord.antarchy.content.entity.multipart.network.MultipartAttackPayload(parentId, partIndex, damage) - ); - } - - @Override - public void sendInteract(java.util.UUID parentId, int partIndex, int handId) { - AntarchyForgeNetworkCore.sendToServer( - new com.craisinlord.antarchy.content.entity.multipart.network.MultipartInteractPayload(parentId, partIndex, handId) - ); - } - } - ); + LucidBoltEntity.invertedEffectSupplier = AnthologyEffects::inverted; + LucidEyeProjectileEntity.invertedEffectSupplier = AnthologyEffects::inverted; + VortexEntity.windVortexTypeSupplier = () -> AntarchyForgeEntites.WIND_VORTEX.get(); + VortexChargeProjectileEntity.defaultItemSupplier = () -> AntarchyForgeItems.VORTEX_CHARGE.get(); + VortexChargeProjectileEntity.projectileTypeSupplier = () -> AntarchyForgeEntites.VORTEX_CHARGE_PROJECTILE.get(); + VortexChargeProjectileEntity.windVortexTypeSupplier = () -> AntarchyForgeEntites.WIND_VORTEX.get(); ComposterBlock.COMPOSTABLES.put(AntarchyForgeBlocks.UMBRAL_MOSS_BLOCK.get().asItem(), 0.65f); ComposterBlock.COMPOSTABLES.put(AntarchyForgeBlocks.UMBRAL_MOSS_CARPET.get().asItem(), 0.3f); ComposterBlock.COMPOSTABLES.put(AntarchyForgeBlocks.BLUSH_MOSS_BLOCK.get().asItem(), 0.65f); @@ -1348,6 +1377,11 @@ public final class AntarchyForgeEvents { ComposterBlock.COMPOSTABLES.put(AntarchyForgeBlocks.PEACH_LEAVES.get().asItem(), 0.3f); ComposterBlock.COMPOSTABLES.put(AntarchyForgeItems.PEACH_SAPLING_ITEM.get(), 0.3f); ComposterBlock.COMPOSTABLES.put(AntarchyForgeItems.NADIR_SAPLING_ITEM.get(), 0.3f); + ComposterBlock.COMPOSTABLES.put(AntarchyForgeItems.NADIR_FERN_ITEM.get(), 0.3f); + ComposterBlock.COMPOSTABLES.put(AntarchyForgeItems.LARGE_NADIR_FERN_ITEM.get(), 0.5f); + ComposterBlock.COMPOSTABLES.put(AntarchyForgeItems.DUSKBELL_ITEM.get(), 0.65f); + ComposterBlock.COMPOSTABLES.put(AntarchyForgeItems.WHIRLFLOWER_ITEM.get(), 0.65f); + ComposterBlock.COMPOSTABLES.put(AntarchyForgeItems.GOREVINE_ITEM.get(), 0.5f); ComposterBlock.COMPOSTABLES.put(AntarchyForgeItems.CORN.get(), 0.65f); ComposterBlock.COMPOSTABLES.put(AntarchyForgeItems.CORN_SEEDS.get(), 0.3f); ComposterBlock.COMPOSTABLES.put(AntarchyForgeItems.PEACH.get(), 0.65f); diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeItems.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeItems.java index 9bcf022b..b7307c71 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeItems.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeItems.java @@ -14,7 +14,7 @@ import com.craisinlord.antarchy.content.item.BloodCrystalShardItem; import com.craisinlord.antarchy.content.item.ultimate.*; import com.craisinlord.antarchy.content.item.NightmareArmorItem; import com.craisinlord.antarchy.content.item.PrimordialArmorItem; -import com.craisinlord.antarchy.content.item.JumpyBootsItem; +import com.craisinlord.antarchy.content.item.SpringyBootsItem; import com.craisinlord.antarchy.content.item.WaterCannonItem; import com.craisinlord.antarchy.content.item.NightmareSwordItem; import com.craisinlord.antarchy.content.item.LucidEyeItem; @@ -24,6 +24,7 @@ import com.craisinlord.antarchy.content.item.OuranwoodChestBoatItem; import com.craisinlord.antarchy.content.item.RainbowSugarItem; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffects; @@ -44,71 +45,6 @@ import java.util.List; public final class AntarchyForgeItems { static final DeferredRegister.Items ITEMS = DeferredRegister.createItems(Antarchy.MODID); - private static final java.util.Map BASE_DURABILITY = java.util.Map.of( - ArmorItem.Type.BOOTS, 13, - ArmorItem.Type.LEGGINGS, 15, - ArmorItem.Type.CHESTPLATE, 16, - ArmorItem.Type.HELMET, 11 - ); - - private static int armorDurability(ArmorItem.Type type, int multiplier) { - return BASE_DURABILITY.get(type) * multiplier; - } - - private static ArmorMaterial armorMaterial( - int durabilityMultiplier, - java.util.Map defense, - int enchantmentValue, - net.minecraft.sounds.SoundEvent equipSound, - java.util.function.Supplier repairIngredient, - float toughness, - float knockbackResistance, - String name - ) { - return new ArmorMaterial() { - @Override - public int getDurabilityForType(ArmorItem.Type type) { - return BASE_DURABILITY.get(type) * durabilityMultiplier; - } - - @Override - public int getDefenseForType(ArmorItem.Type type) { - return defense.getOrDefault(type, 0); - } - - @Override - public int getEnchantmentValue() { - return enchantmentValue; - } - - @Override - public net.minecraft.sounds.SoundEvent getEquipSound() { - return equipSound; - } - - @Override - public Ingredient getRepairIngredient() { - return repairIngredient.get(); - } - - @Override - public String getName() { - return new ResourceLocation(Antarchy.MODID, name).toString(); - } - - @Override - public float getToughness() { - return toughness; - } - - @Override - public float getKnockbackResistance() { - return knockbackResistance; - } - }; - } - - // Tier constants public static final Tier ULTIMATE_TIER = new SimpleToolTier( 3072, 10.5F, @@ -134,38 +70,131 @@ public final class AntarchyForgeItems { () -> Ingredient.of(AntarchyForgeItems.HERCULES_HORN.get()) ); + public static final Tier ROYAL_GUARDIAN_TIER = new SimpleToolTier( + AntarchySettings.royalWeaponDurability(), + 12.0F, + 0.0F, + Tiers.NETHERITE.getLevel(), + AntarchySettings.royalWeaponEnchantability(), + () -> Ingredient.of(AntarchyForgeItems.KING_SCALE.get()) + ); + + public static final Tier ROYAL_ASSAILANT_TIER = new SimpleToolTier( + AntarchySettings.royalWeaponDurability(), + 12.0F, + 0.0F, + Tiers.NETHERITE.getLevel(), + AntarchySettings.royalWeaponEnchantability(), + () -> Ingredient.of(AntarchyForgeItems.QUEEN_SCALE.get()) + ); + public static final RegistryObject NIGHTMARE_SCALE = ITEMS.registerSimpleItem("nightmare_scale", new Item.Properties().rarity(Rarity.RARE).fireResistant()); + public static final RegistryObject MUSIC_DISC_UNDERSIDE = ITEMS.register("music_disc_underside", + () -> new RecordItem(13, AntarchyForgeSounds.MUSIC_DISC_UNDERSIDE, new Item.Properties().stacksTo(1).rarity(Rarity.RARE), 4500)); + + public static final RegistryObject MUSIC_DISC_THE_QUEEN = ITEMS.register("music_disc_the_queen", + () -> new RecordItem(13, AntarchyForgeSounds.THE_QUEEN, new Item.Properties().stacksTo(1).rarity(Rarity.RARE), 3600)); + + public static final RegistryObject MUSIC_DISC_VERDANCE = ITEMS.register("music_disc_verdance", + () -> new RecordItem(13, AntarchyForgeSounds.MUSIC_DISC_VERDANCE, new Item.Properties().stacksTo(1).rarity(Rarity.RARE), 2720)); + + public static final RegistryObject MUSIC_DISC_GROTESQUE = ITEMS.register("music_disc_grotesque", + () -> new RecordItem(13, AntarchyForgeSounds.MUSIC_DISC_GROTESQUE, new Item.Properties().stacksTo(1).rarity(Rarity.RARE), 4140)); + private static final ArmorMaterial ULTIMATE_ARMOR_MATERIAL = armorMaterial( - 40, createUltimateArmorDefense(), 10, SoundEvents.ARMOR_EQUIP_DIAMOND, - AntarchyForgeItems::ultimateRepairIngredient, 2.0F, - (float) AntarchySettings.ultimateArmorKnockbackResistance(), "ultimate_armor"); + createUltimateArmorDefense(), + 10, + SoundEvents.ARMOR_EQUIP_DIAMOND, + AntarchyForgeItems::ultimateRepairIngredient, + 2.0F, + (float) AntarchySettings.ultimateArmorKnockbackResistance(), + "ultimate_armor" + ); private static final ArmorMaterial NIGHTMARE_ARMOR_MATERIAL = armorMaterial( - 37, createNightmareArmorDefense(), 10, SoundEvents.ARMOR_EQUIP_NETHERITE, - () -> Ingredient.of(NIGHTMARE_SCALE.get()), 3.0F, - (float) AntarchySettings.nightmareArmorKnockbackResistance(), "nightmare_armor"); + createNightmareArmorDefense(), + 10, + SoundEvents.ARMOR_EQUIP_NETHERITE, + () -> Ingredient.of(NIGHTMARE_SCALE.get()), + 3.0F, + (float) AntarchySettings.nightmareArmorKnockbackResistance(), + "nightmare_armor" + ); + private static final ArmorMaterial ROYAL_GUARDIAN_ARMOR_MATERIAL = armorMaterial( + new EnumMap<>(ArmorItem.Type.class), + AntarchySettings.royalArmorEnchantability(), + SoundEvents.ARMOR_EQUIP_NETHERITE, + () -> Ingredient.of(AntarchyForgeItems.KING_SCALE.get()), + 0.0F, + 0.0F, + "royal_guardian" + ); + private static final ArmorMaterial ROYAL_ASSAILANT_ARMOR_MATERIAL = armorMaterial( + new EnumMap<>(ArmorItem.Type.class), + AntarchySettings.royalArmorEnchantability(), + SoundEvents.ARMOR_EQUIP_NETHERITE, + () -> Ingredient.of(AntarchyForgeItems.QUEEN_SCALE.get()), + 0.0F, + 0.0F, + "royal_assailant" + ); private static final ArmorMaterial BLOOD_CRYSTAL_ARMOR_MATERIAL = armorMaterial( - 33, createBloodCrystalArmorDefense(), 30, SoundEvents.ARMOR_EQUIP_DIAMOND, - AntarchyForgeItems::bloodCrystalRepairIngredient, 0.0F, 0.0F, "blood_crystal"); + createBloodCrystalArmorDefense(), + 30, + AntarchyForgeSounds.BLOOD_CRYSTAL_ARMOR_EQUIP::get, + AntarchyForgeItems::bloodCrystalRepairIngredient, + 0.0F, + 0.0F, + "blood_crystal" + ); + private static final ArmorMaterial TIGERS_EYE_ARMOR_MATERIAL = armorMaterial( + createDiamondArmorDefense(), + 18, + SoundEvents.ARMOR_EQUIP_GOLD, + () -> Ingredient.of(BuiltInRegistries.ITEM.getOptional(new ResourceLocation(Antarchy.MODID, "tigers_eye")).orElse(Items.AIR)), + 2.0F, + 0.0F, + "tigers_eye" + ); private static final ArmorMaterial MOGGLES_ARMOR_MATERIAL = armorMaterial( - 25, createMogglesArmorDefense(), 12, SoundEvents.ARMOR_EQUIP_GOLD, - () -> Ingredient.of(Items.GOLD_INGOT), 0.0F, 0.0F, "moggles"); + createMogglesArmorDefense(), + 12, + SoundEvents.ARMOR_EQUIP_GOLD, + () -> Ingredient.of(Items.GOLD_INGOT), + 0.0F, + 0.0F, + "moggles" + ); public static final RegistryObject PRIMORDIAL_SCUTE = ITEMS.registerSimpleItem("primordial_scute", new Item.Properties().rarity(Rarity.UNCOMMON)); private static final ArmorMaterial PRIMORDIAL_ARMOR_MATERIAL = armorMaterial( - 33, createPrimordialArmorDefense(), 15, SoundEvents.ARMOR_EQUIP_NETHERITE, - () -> Ingredient.of(PRIMORDIAL_SCUTE.get()), 3.0F, 0.1F, "primordial"); - private static final ArmorMaterial JUMPY_BOOTS_ARMOR_MATERIAL = armorMaterial( - 37, createJumpyBootsDefense(), 15, SoundEvents.ARMOR_EQUIP_NETHERITE, - () -> Ingredient.of(Items.NETHERITE_BOOTS), 3.0F, 0.1F, "springy_boots"); + createPrimordialArmorDefense(), + 15, + SoundEvents.ARMOR_EQUIP_NETHERITE, + () -> Ingredient.of(PRIMORDIAL_SCUTE.get()), + 3.5F, + 0.1F, + "primordial" + ); + private static final ArmorMaterial SPRINGY_BOOTS_ARMOR_MATERIAL = armorMaterial( + createSpringyBootsDefense(), + 15, + SoundEvents.ARMOR_EQUIP_NETHERITE, + () -> Ingredient.of(Items.NETHERITE_BOOTS), + 3.0F, + 0.1F, + "springy_boots" + ); private static final ArmorMaterial FALLEN_KING_CROWN_ARMOR_MATERIAL = armorMaterial( - 25, createFallenKingCrownDefense(), 25, SoundEvents.ARMOR_EQUIP_GOLD, - () -> Ingredient.of(Items.GOLD_INGOT), 0.0F, 0.0F, "fallen_king_crown"); - private static final ArmorMaterial TIGERS_EYE_ARMOR_MATERIAL = armorMaterial( - 18, createDiamondArmorDefense(), 18, SoundEvents.ARMOR_EQUIP_GOLD, - () -> Ingredient.of(AntarchyForgeItems.TIGERS_EYE.get()), 2.0F, 0.0F, "tigers_eye"); + createFallenKingCrownDefense(), + 25, + SoundEvents.ARMOR_EQUIP_GOLD, + () -> Ingredient.of(Items.GOLD_INGOT), + 0.0F, + 0.0F, + "fallen_king_crown" + ); - // Block items public static final RegistryObject DUPLICATOR_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.DUPLICATOR_LOG); public static final RegistryObject OURANWOOD_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.OURANWOOD_LOG); public static final RegistryObject OURANWOOD_WOOD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.OURANWOOD_WOOD); @@ -216,6 +245,7 @@ public final class AntarchyForgeItems { public static final RegistryObject NADIR_SAPLING_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.NADIR_SAPLING); public static final RegistryObject ORANGE_MILKWEED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.ORANGE_MILKWEED); public static final RegistryObject PINK_MILKWEED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.PINK_MILKWEED); + public static final RegistryObject GLIMMERING_REED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.GLIMMERING_REED); public static final RegistryObject CAMELLIA_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.CAMELLIA); public static final RegistryObject SPIDER_LILY_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.SPIDER_LILY); public static final RegistryObject GIANT_LILY_PAD_ITEM = ITEMS.register("giant_lily_pad", @@ -223,6 +253,9 @@ public final class AntarchyForgeItems { public static final RegistryObject SEASHELL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.SEASHELL); public static final RegistryObject LUCID_ANCHOR_ITEM = ITEMS.register("lucid_anchor", () -> new LucidAnchorBlockItem(AntarchyForgeBlocks.LUCID_ANCHOR.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final RegistryObject UNDERTRIAL_SPAWNER_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.UNDERTRIAL_SPAWNER); + public static final RegistryObject UNDERVAULT_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.UNDERVAULT); + public static final RegistryObject UNDERTRIAL_KEY = ITEMS.register("undertrial_key", () -> new Item(new Item.Properties())); public static final RegistryObject LOTUS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.LOTUS); public static final RegistryObject OURANWOOD_SIGN_ITEM = ITEMS.register("ouranwood_sign", () -> new net.minecraft.world.item.SignItem(new Item.Properties().stacksTo(16), AntarchyForgeBlocks.OURANWOOD_SIGN.get(), AntarchyForgeBlocks.OURANWOOD_WALL_SIGN.get())); @@ -232,6 +265,40 @@ public final class AntarchyForgeItems { () -> new OuranwoodBoatOnlyItem(AntarchyForgeEntites.OURANWOOD_BOAT_ENTITY, new Item.Properties().stacksTo(1))); public static final RegistryObject OURANWOOD_CHEST_BOAT = ITEMS.register("ouranwood_chest_boat", () -> new OuranwoodChestBoatItem(AntarchyForgeEntites.OURANWOOD_CHEST_BOAT_ENTITY, new Item.Properties().stacksTo(1))); + public static final RegistryObject HOVERBOARD = ITEMS.register("hoverboard", + () -> new HoverboardItem(AntarchyForgeEntites.HOVERBOARD, null, new Item.Properties().stacksTo(1))); + public static final RegistryObject HOVERBOARD_WHITE = ITEMS.register("hoverboard_white", + () -> new HoverboardItem(AntarchyForgeEntites.HOVERBOARD, DyeColor.WHITE, new Item.Properties().stacksTo(1))); + public static final RegistryObject HOVERBOARD_ORANGE = ITEMS.register("hoverboard_orange", + () -> new HoverboardItem(AntarchyForgeEntites.HOVERBOARD, DyeColor.ORANGE, new Item.Properties().stacksTo(1))); + public static final RegistryObject HOVERBOARD_MAGENTA = ITEMS.register("hoverboard_magenta", + () -> new HoverboardItem(AntarchyForgeEntites.HOVERBOARD, DyeColor.MAGENTA, new Item.Properties().stacksTo(1))); + public static final RegistryObject HOVERBOARD_LIGHT_BLUE = ITEMS.register("hoverboard_light_blue", + () -> new HoverboardItem(AntarchyForgeEntites.HOVERBOARD, DyeColor.LIGHT_BLUE, new Item.Properties().stacksTo(1))); + public static final RegistryObject HOVERBOARD_YELLOW = ITEMS.register("hoverboard_yellow", + () -> new HoverboardItem(AntarchyForgeEntites.HOVERBOARD, DyeColor.YELLOW, new Item.Properties().stacksTo(1))); + public static final RegistryObject HOVERBOARD_LIME = ITEMS.register("hoverboard_lime", + () -> new HoverboardItem(AntarchyForgeEntites.HOVERBOARD, DyeColor.LIME, new Item.Properties().stacksTo(1))); + public static final RegistryObject HOVERBOARD_PINK = ITEMS.register("hoverboard_pink", + () -> new HoverboardItem(AntarchyForgeEntites.HOVERBOARD, DyeColor.PINK, new Item.Properties().stacksTo(1))); + public static final RegistryObject HOVERBOARD_GRAY = ITEMS.register("hoverboard_gray", + () -> new HoverboardItem(AntarchyForgeEntites.HOVERBOARD, DyeColor.GRAY, new Item.Properties().stacksTo(1))); + public static final RegistryObject HOVERBOARD_LIGHT_GRAY = ITEMS.register("hoverboard_light_gray", + () -> new HoverboardItem(AntarchyForgeEntites.HOVERBOARD, DyeColor.LIGHT_GRAY, new Item.Properties().stacksTo(1))); + public static final RegistryObject HOVERBOARD_CYAN = ITEMS.register("hoverboard_cyan", + () -> new HoverboardItem(AntarchyForgeEntites.HOVERBOARD, DyeColor.CYAN, new Item.Properties().stacksTo(1))); + public static final RegistryObject HOVERBOARD_PURPLE = ITEMS.register("hoverboard_purple", + () -> new HoverboardItem(AntarchyForgeEntites.HOVERBOARD, DyeColor.PURPLE, new Item.Properties().stacksTo(1))); + public static final RegistryObject HOVERBOARD_BLUE = ITEMS.register("hoverboard_blue", + () -> new HoverboardItem(AntarchyForgeEntites.HOVERBOARD, DyeColor.BLUE, new Item.Properties().stacksTo(1))); + public static final RegistryObject HOVERBOARD_BROWN = ITEMS.register("hoverboard_brown", + () -> new HoverboardItem(AntarchyForgeEntites.HOVERBOARD, DyeColor.BROWN, new Item.Properties().stacksTo(1))); + public static final RegistryObject HOVERBOARD_GREEN = ITEMS.register("hoverboard_green", + () -> new HoverboardItem(AntarchyForgeEntites.HOVERBOARD, DyeColor.GREEN, new Item.Properties().stacksTo(1))); + public static final RegistryObject HOVERBOARD_RED = ITEMS.register("hoverboard_red", + () -> new HoverboardItem(AntarchyForgeEntites.HOVERBOARD, DyeColor.RED, new Item.Properties().stacksTo(1))); + public static final RegistryObject HOVERBOARD_BLACK = ITEMS.register("hoverboard_black", + () -> new HoverboardItem(AntarchyForgeEntites.HOVERBOARD, DyeColor.BLACK, new Item.Properties().stacksTo(1))); public static final RegistryObject PEACH_SIGN_ITEM = ITEMS.register("peach_sign", () -> new net.minecraft.world.item.SignItem(new Item.Properties().stacksTo(16), AntarchyForgeBlocks.PEACH_SIGN.get(), AntarchyForgeBlocks.PEACH_WALL_SIGN.get())); public static final RegistryObject PEACH_HANGING_SIGN_ITEM = ITEMS.register("peach_hanging_sign", @@ -248,6 +315,68 @@ public final class AntarchyForgeItems { () -> new NadirBoatOnlyItem(AntarchyForgeEntites.NADIR_BOAT_ENTITY, new Item.Properties().stacksTo(1))); public static final RegistryObject NADIR_CHEST_BOAT = ITEMS.register("nadir_chest_boat", () -> new NadirChestBoatItem(AntarchyForgeEntites.NADIR_CHEST_BOAT_ENTITY, new Item.Properties().stacksTo(1))); + public static final RegistryObject ROYAL_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.ROYAL_LOG); + public static final RegistryObject ROYAL_WOOD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.ROYAL_WOOD); + public static final RegistryObject STRIPPED_ROYAL_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.STRIPPED_ROYAL_LOG); + public static final RegistryObject STRIPPED_ROYAL_WOOD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.STRIPPED_ROYAL_WOOD); + public static final RegistryObject ROYAL_PLANKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.ROYAL_PLANKS); + public static final RegistryObject ROYAL_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.ROYAL_STAIRS); + public static final RegistryObject ROYAL_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.ROYAL_SLAB); + public static final RegistryObject ROYAL_FENCE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.ROYAL_FENCE); + public static final RegistryObject ROYAL_FENCE_GATE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.ROYAL_FENCE_GATE); + public static final RegistryObject ROYAL_DOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.ROYAL_DOOR); + public static final RegistryObject ROYAL_TRAPDOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.ROYAL_TRAPDOOR); + public static final RegistryObject ROYAL_PRESSURE_PLATE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.ROYAL_PRESSURE_PLATE); + public static final RegistryObject ROYAL_BUTTON_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.ROYAL_BUTTON); + public static final RegistryObject ROYAL_LEAVES_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.ROYAL_LEAVES); + public static final RegistryObject ROYAL_FLOWERING_LEAVES_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.ROYAL_FLOWERING_LEAVES); + public static final RegistryObject ROYAL_SAPLING_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.ROYAL_SAPLING); + public static final RegistryObject ROYAL_SIGN_ITEM = ITEMS.register("royal_sign", + () -> new net.minecraft.world.item.SignItem(new Item.Properties().stacksTo(16), AntarchyForgeBlocks.ROYAL_SIGN.get(), AntarchyForgeBlocks.ROYAL_WALL_SIGN.get())); + public static final RegistryObject ROYAL_HANGING_SIGN_ITEM = ITEMS.register("royal_hanging_sign", + () -> new net.minecraft.world.item.HangingSignItem(AntarchyForgeBlocks.ROYAL_HANGING_SIGN.get(), AntarchyForgeBlocks.ROYAL_WALL_HANGING_SIGN.get(), new Item.Properties().stacksTo(16))); + public static final RegistryObject ROYAL_BOAT = ITEMS.register("royal_boat", + () -> new RoyalBoatOnlyItem(AntarchyForgeEntites.ROYAL_BOAT_ENTITY, new Item.Properties().stacksTo(1))); + public static final RegistryObject ROYAL_CHEST_BOAT = ITEMS.register("royal_chest_boat", + () -> new RoyalChestBoatItem(AntarchyForgeEntites.ROYAL_CHEST_BOAT_ENTITY, new Item.Properties().stacksTo(1))); + public static final RegistryObject TRUFFALO_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.TRUFFALO_LOG); + public static final RegistryObject TRUFFALO_WOOD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.TRUFFALO_WOOD); + public static final RegistryObject STRIPPED_TRUFFALO_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.STRIPPED_TRUFFALO_LOG); + public static final RegistryObject STRIPPED_TRUFFALO_WOOD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.STRIPPED_TRUFFALO_WOOD); + public static final RegistryObject TRUFFALO_PLANKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.TRUFFALO_PLANKS); + public static final RegistryObject TRUFFALO_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.TRUFFALO_STAIRS); + public static final RegistryObject TRUFFALO_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.TRUFFALO_SLAB); + public static final RegistryObject TRUFFALO_FENCE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.TRUFFALO_FENCE); + public static final RegistryObject TRUFFALO_FENCE_GATE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.TRUFFALO_FENCE_GATE); + public static final RegistryObject TRUFFALO_DOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.TRUFFALO_DOOR); + public static final RegistryObject TRUFFALO_TRAPDOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.TRUFFALO_TRAPDOOR); + public static final RegistryObject TRUFFALO_PRESSURE_PLATE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.TRUFFALO_PRESSURE_PLATE); + public static final RegistryObject TRUFFALO_BUTTON_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.TRUFFALO_BUTTON); + public static final RegistryObject TRUFFALO_SAPLING_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.TRUFFALO_SAPLING); + public static final RegistryObject TRUFFALO_SIGN_ITEM = ITEMS.register("truffalo_sign", + () -> new SignItem(new Item.Properties().stacksTo(16), AntarchyForgeBlocks.TRUFFALO_SIGN.get(), AntarchyForgeBlocks.TRUFFALO_WALL_SIGN.get())); + public static final RegistryObject TRUFFALO_HANGING_SIGN_ITEM = ITEMS.register("truffalo_hanging_sign", + () -> new HangingSignItem(AntarchyForgeBlocks.TRUFFALO_HANGING_SIGN.get(), AntarchyForgeBlocks.TRUFFALO_WALL_HANGING_SIGN.get(), new Item.Properties().stacksTo(16))); + public static final RegistryObject TRUFFALO_BOAT = ITEMS.register("truffalo_boat", + () -> new TruffaloBoatOnlyItem(AntarchyForgeEntites.TRUFFALO_BOAT_ENTITY, new Item.Properties().stacksTo(1))); + public static final RegistryObject TRUFFALO_CHEST_BOAT = ITEMS.register("truffalo_chest_boat", + () -> new TruffaloChestBoatItem(AntarchyForgeEntites.TRUFFALO_CHEST_BOAT_ENTITY, new Item.Properties().stacksTo(1))); + public static final RegistryObject TRUFFALO_TUFT_WHITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.TRUFFALO_TUFT_WHITE); + public static final RegistryObject TRUFFALO_TUFT_ORANGE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.TRUFFALO_TUFT_ORANGE); + public static final RegistryObject TRUFFALO_TUFT_MAGENTA_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.TRUFFALO_TUFT_MAGENTA); + public static final RegistryObject TRUFFALO_TUFT_LIGHT_BLUE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.TRUFFALO_TUFT_LIGHT_BLUE); + public static final RegistryObject TRUFFALO_TUFT_YELLOW_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.TRUFFALO_TUFT_YELLOW); + public static final RegistryObject TRUFFALO_TUFT_LIME_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.TRUFFALO_TUFT_LIME); + public static final RegistryObject TRUFFALO_TUFT_PINK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.TRUFFALO_TUFT_PINK); + public static final RegistryObject TRUFFALO_TUFT_GRAY_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.TRUFFALO_TUFT_GRAY); + public static final RegistryObject TRUFFALO_TUFT_LIGHT_GRAY_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.TRUFFALO_TUFT_LIGHT_GRAY); + public static final RegistryObject TRUFFALO_TUFT_CYAN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.TRUFFALO_TUFT_CYAN); + public static final RegistryObject TRUFFALO_TUFT_PURPLE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.TRUFFALO_TUFT_PURPLE); + public static final RegistryObject TRUFFALO_TUFT_BLUE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.TRUFFALO_TUFT_BLUE); + public static final RegistryObject TRUFFALO_TUFT_BROWN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.TRUFFALO_TUFT_BROWN); + public static final RegistryObject TRUFFALO_TUFT_GREEN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.TRUFFALO_TUFT_GREEN); + public static final RegistryObject TRUFFALO_TUFT_RED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.TRUFFALO_TUFT_RED); + public static final RegistryObject TRUFFALO_TUFT_BLACK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.TRUFFALO_TUFT_BLACK); public static final RegistryObject CRITTER_CAGE = ITEMS.register("critter_cage", () -> new CritterCageItem(new Item.Properties().stacksTo(16))); public static final RegistryObject DUPLICATOR_SAPLING_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.DUPLICATOR_SAPLING); @@ -255,6 +384,11 @@ public final class AntarchyForgeItems { public static final RegistryObject BROWN_ANT_NEST_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.BROWN_ANT_NEST); public static final RegistryObject RAINBOW_ANT_NEST_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.RAINBOW_ANT_NEST); public static final RegistryObject TERMITE_NEST_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.TERMITE_NEST); + + public static final RegistryObject ANT_TRAP_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.ANT_TRAP); + + public static final RegistryObject BUG_SPRAY = ITEMS.register("bug_spray", + () -> new com.craisinlord.antarchy.content.item.BugSprayItem(new Item.Properties().durability(128))); public static final RegistryObject URANIUM_ORE_ITEM = ITEMS.register("uranium_ore", () -> new net.minecraft.world.item.BlockItem(AntarchyForgeBlocks.URANIUM_ORE.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); public static final RegistryObject DEEPSLATE_URANIUM_ORE_ITEM = ITEMS.register("deepslate_uranium_ore", @@ -269,6 +403,8 @@ public final class AntarchyForgeItems { () -> new net.minecraft.world.item.BlockItem(AntarchyForgeBlocks.BLUESTONE_ORE.get(), new Item.Properties())); public static final RegistryObject BLUESTONE_BLOCK_ITEM = ITEMS.register("bluestone_block", () -> new net.minecraft.world.item.BlockItem(AntarchyForgeBlocks.BLUESTONE_BLOCK.get(), new Item.Properties())); + public static final RegistryObject VORTEX_LENS_ITEM = ITEMS.register("vortex_lens", + () -> new VortexLensBlockItem(AntarchyForgeBlocks.VORTEX_LENS.get(), new Item.Properties())); public static final RegistryObject BLUESTONE_REPEATER_ITEM = ITEMS.register("bluestone_repeater", () -> new CeilingPlacementTooltipBlockItem(AntarchyForgeBlocks.BLUESTONE_REPEATER.get(), new Item.Properties())); public static final RegistryObject BLUESTONE_COMPARATOR_ITEM = ITEMS.register("bluestone_comparator", @@ -276,6 +412,8 @@ public final class AntarchyForgeItems { public static final RegistryObject BLUESTONE_TORCH_ITEM = ITEMS.register("bluestone_torch", () -> new CeilingPlacementTooltipBlockItem(AntarchyForgeBlocks.BLUESTONE_TORCH.get(), new Item.Properties())); public static final RegistryObject BLUESTONE_LAMP_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.BLUESTONE_LAMP); + public static final RegistryObject TIGERS_EYE_BLOCK_ITEM = ITEMS.register("tigers_eye_block", + () -> new net.minecraft.world.item.BlockItem(AntarchyForgeBlocks.TIGERS_EYE_BLOCK.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); public static final RegistryObject URANIUM_BLOCK_ITEM = ITEMS.register("uranium_block", () -> new net.minecraft.world.item.BlockItem(AntarchyForgeBlocks.URANIUM_BLOCK.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); public static final RegistryObject TITANIUM_BLOCK_ITEM = ITEMS.register("titanium_block", @@ -332,13 +470,13 @@ public final class AntarchyForgeItems { () -> new AntimetalScaffoldingItem(AntarchyForgeBlocks.ANTIMETAL_SCAFFOLDING.get(), new Item.Properties())); public static final RegistryObject ANTIMETAL_RAIL_ITEM = ITEMS.register("antimetal_rail", () -> new CeilingPlacementTooltipBlockItem(AntarchyForgeBlocks.ANTIMETAL_RAIL.get(), new Item.Properties())); - public static final RegistryObject UPPER_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.UPPER); public static final RegistryObject ANTIMETAL_POWERED_RAIL_ITEM = ITEMS.register("antimetal_powered_rail", () -> new CeilingPlacementTooltipBlockItem(AntarchyForgeBlocks.ANTIMETAL_POWERED_RAIL.get(), new Item.Properties())); public static final RegistryObject ANTIMETAL_DETECTOR_RAIL_ITEM = ITEMS.register("antimetal_detector_rail", () -> new CeilingPlacementTooltipBlockItem(AntarchyForgeBlocks.ANTIMETAL_DETECTOR_RAIL.get(), new Item.Properties())); public static final RegistryObject ANTIMETAL_ACTIVATOR_RAIL_ITEM = ITEMS.register("antimetal_activator_rail", () -> new CeilingPlacementTooltipBlockItem(AntarchyForgeBlocks.ANTIMETAL_ACTIVATOR_RAIL.get(), new Item.Properties())); + public static final RegistryObject UPPER_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.UPPER); public static final RegistryObject SMALL_BLOOD_CRYSTAL_BUD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.SMALL_BLOOD_CRYSTAL_BUD); public static final RegistryObject MEDIUM_BLOOD_CRYSTAL_BUD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.MEDIUM_BLOOD_CRYSTAL_BUD); public static final RegistryObject LARGE_BLOOD_CRYSTAL_BUD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.LARGE_BLOOD_CRYSTAL_BUD); @@ -349,6 +487,12 @@ public final class AntarchyForgeItems { public static final RegistryObject DREAM_SAND_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.DREAM_SAND); public static final RegistryObject ANTIGRAVEL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.ANTIGRAVEL); public static final RegistryObject LOAM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.LOAM); + public static final RegistryObject PACKED_LOAM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.PACKED_LOAM); + public static final RegistryObject LOAM_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.LOAM_BRICKS); + public static final RegistryObject LOAM_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.LOAM_BRICK_STAIRS); + public static final RegistryObject LOAM_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.LOAM_BRICK_SLAB); + public static final RegistryObject LOAM_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.LOAM_BRICK_WALL); + public static final RegistryObject CHISELED_LOAM_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.CHISELED_LOAM_BRICKS); public static final RegistryObject MUCUS_ITEM = ITEMS.register("mucus", () -> new com.craisinlord.antarchy.content.item.MucusBlockItem(AntarchyForgeBlocks.MUCUS.get(), new Item.Properties())); public static final RegistryObject DREAM_SANDSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.DREAM_SANDSTONE); @@ -361,6 +505,32 @@ public final class AntarchyForgeItems { public static final RegistryObject SMOOTH_DREAM_SANDSTONE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.SMOOTH_DREAM_SANDSTONE_STAIRS); public static final RegistryObject SMOOTH_DREAM_SANDSTONE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.SMOOTH_DREAM_SANDSTONE_SLAB); public static final RegistryObject CUT_DREAM_SANDSTONE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.CUT_DREAM_SANDSTONE_SLAB); + public static final RegistryObject TYPHONITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.TYPHONITE); + public static final RegistryObject NADIR_NYXIUM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.NADIR_NYXIUM); + public static final RegistryObject VERDANT_NYXIUM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.VERDANT_NYXIUM); + public static final RegistryObject TYPHONITE_PILLAR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.TYPHONITE_PILLAR); + public static final RegistryObject TYPHONITE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.TYPHONITE_BRICKS); + public static final RegistryObject CHISELED_TYPHONITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.CHISELED_TYPHONITE); + public static final RegistryObject POLISHED_TYPHONITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.POLISHED_TYPHONITE); + public static final RegistryObject VEINED_TYPHONITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.VEINED_TYPHONITE); + public static final RegistryObject TYPHONITE_SPIKE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.TYPHONITE_SPIKE); + public static final RegistryObject TYPHONITE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.TYPHONITE_STAIRS); + public static final RegistryObject TYPHONITE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.TYPHONITE_SLAB); + public static final RegistryObject TYPHONITE_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.TYPHONITE_WALL); + public static final RegistryObject TYPHONITE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.TYPHONITE_BRICK_STAIRS); + public static final RegistryObject TYPHONITE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.TYPHONITE_BRICK_SLAB); + public static final RegistryObject TYPHONITE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.TYPHONITE_BRICK_WALL); + public static final RegistryObject POLISHED_TYPHONITE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.POLISHED_TYPHONITE_STAIRS); + public static final RegistryObject POLISHED_TYPHONITE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.POLISHED_TYPHONITE_SLAB); + public static final RegistryObject POLISHED_TYPHONITE_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.POLISHED_TYPHONITE_WALL); + public static final RegistryObject SPIRALING_VINES_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.SPIRALING_VINES); + public static final RegistryObject GOREVINE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.GOREVINE); + public static final RegistryObject WHIRLFLOWER_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.WHIRLFLOWER); + public static final RegistryObject NADIR_FERN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.NADIR_FERN); + public static final RegistryObject LARGE_NADIR_FERN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.LARGE_NADIR_FERN); + public static final RegistryObject DUSKBELL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.DUSKBELL); + public static final RegistryObject NADIR_ROOTS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.NADIR_ROOTS); + public static final RegistryObject VERDANT_ROOTS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.VERDANT_ROOTS); public static final RegistryObject DEAD_STAR_CORAL_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.DEAD_STAR_CORAL_BLOCK); public static final RegistryObject DEAD_STAR_CORAL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.DEAD_STAR_CORAL); public static final RegistryObject DEAD_STAR_CORAL_FAN_ITEM = ITEMS.register("dead_star_coral_fan", @@ -375,6 +545,23 @@ public final class AntarchyForgeItems { public static final RegistryObject INFESTED_COARSE_DIRT_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.INFESTED_COARSE_DIRT); public static final RegistryObject NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.NYXITE); public static final RegistryObject MYRMITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.MYRMITE); + public static final RegistryObject MYRMITE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.MYRMITE_STAIRS); + public static final RegistryObject MYRMITE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.MYRMITE_SLAB); + public static final RegistryObject MYRMITE_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.MYRMITE_WALL); + public static final RegistryObject POLISHED_MYRMITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.POLISHED_MYRMITE); + public static final RegistryObject POLISHED_MYRMITE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.POLISHED_MYRMITE_STAIRS); + public static final RegistryObject POLISHED_MYRMITE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.POLISHED_MYRMITE_SLAB); + public static final RegistryObject POLISHED_MYRMITE_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.POLISHED_MYRMITE_WALL); + public static final RegistryObject CHISELED_MYRMITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.CHISELED_MYRMITE); + public static final RegistryObject MYRMITE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.MYRMITE_BRICKS); + public static final RegistryObject MYRMITE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.MYRMITE_BRICK_STAIRS); + public static final RegistryObject MYRMITE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.MYRMITE_BRICK_SLAB); + public static final RegistryObject MYRMITE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.MYRMITE_BRICK_WALL); + public static final RegistryObject MOSSY_MYRMITE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.MOSSY_MYRMITE_BRICKS); + public static final RegistryObject MOSSY_MYRMITE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.MOSSY_MYRMITE_BRICK_STAIRS); + public static final RegistryObject MOSSY_MYRMITE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.MOSSY_MYRMITE_BRICK_SLAB); + public static final RegistryObject MOSSY_MYRMITE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.MOSSY_MYRMITE_BRICK_WALL); + public static final RegistryObject MYRMITE_PILLAR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.MYRMITE_PILLAR); public static final RegistryObject BIOMITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.BIOMITE); public static final RegistryObject BIOMITE_TURF_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.BIOMITE_TURF); public static final RegistryObject BIOWART_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.BIOWART); @@ -383,6 +570,7 @@ public final class AntarchyForgeItems { public static final RegistryObject POLISHED_BROODSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.POLISHED_BROODSTONE); public static final RegistryObject CHISELED_BROODSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.CHISELED_BROODSTONE); public static final RegistryObject BROODSTONE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.BROODSTONE_BRICKS); + public static final RegistryObject MOSSY_BROODSTONE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.MOSSY_BROODSTONE_BRICKS); public static final RegistryObject BROODSTONE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.BROODSTONE_STAIRS); public static final RegistryObject BROODSTONE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.BROODSTONE_SLAB); public static final RegistryObject BROODSTONE_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.BROODSTONE_WALL); @@ -392,6 +580,10 @@ public final class AntarchyForgeItems { public static final RegistryObject BROODSTONE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.BROODSTONE_BRICK_STAIRS); public static final RegistryObject BROODSTONE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.BROODSTONE_BRICK_SLAB); public static final RegistryObject BROODSTONE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.BROODSTONE_BRICK_WALL); + public static final RegistryObject MOSSY_BROODSTONE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.MOSSY_BROODSTONE_BRICK_STAIRS); + public static final RegistryObject MOSSY_BROODSTONE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.MOSSY_BROODSTONE_BRICK_SLAB); + public static final RegistryObject MOSSY_BROODSTONE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.MOSSY_BROODSTONE_BRICK_WALL); + public static final RegistryObject BROODSTONE_PILLAR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.BROODSTONE_PILLAR); public static final RegistryObject MYRMITE_COAL_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.MYRMITE_COAL_ORE); public static final RegistryObject BROODSTONE_URANIUM_ORE_ITEM = ITEMS.register("broodstone_uranium_ore", () -> new net.minecraft.world.item.BlockItem(AntarchyForgeBlocks.BROODSTONE_URANIUM_ORE.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); @@ -400,6 +592,7 @@ public final class AntarchyForgeItems { public static final RegistryObject POLISHED_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.POLISHED_NYXITE); public static final RegistryObject CHISELED_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.CHISELED_NYXITE); public static final RegistryObject NYXITE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.NYXITE_BRICKS); + public static final RegistryObject MOSSY_NYXITE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.MOSSY_NYXITE_BRICKS); public static final RegistryObject CHITIN_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.CHITIN_BLOCK); public static final RegistryObject NYXITE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.NYXITE_STAIRS); public static final RegistryObject NYXITE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.NYXITE_SLAB); @@ -413,6 +606,10 @@ public final class AntarchyForgeItems { public static final RegistryObject NYXITE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.NYXITE_BRICK_STAIRS); public static final RegistryObject NYXITE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.NYXITE_BRICK_SLAB); public static final RegistryObject NYXITE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.NYXITE_BRICK_WALL); + public static final RegistryObject MOSSY_NYXITE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.MOSSY_NYXITE_BRICK_STAIRS); + public static final RegistryObject MOSSY_NYXITE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.MOSSY_NYXITE_BRICK_SLAB); + public static final RegistryObject MOSSY_NYXITE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.MOSSY_NYXITE_BRICK_WALL); + public static final RegistryObject NYXITE_PILLAR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.NYXITE_PILLAR); public static final RegistryObject SHELLSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.SHELLSTONE); public static final RegistryObject POLISHED_SHELLSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.POLISHED_SHELLSTONE); public static final RegistryObject SHELLSTONE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.SHELLSTONE_BRICKS); @@ -431,8 +628,9 @@ public final class AntarchyForgeItems { public static final RegistryObject SHELLSTONE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.SHELLSTONE_BRICK_STAIRS); public static final RegistryObject SHELLSTONE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.SHELLSTONE_BRICK_SLAB); public static final RegistryObject SHELLSTONE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.SHELLSTONE_BRICK_WALL); - public static final RegistryObject TRIFFID_GOO_BLOCK_ITEM = ITEMS.register("flytrap_goo_block", - () -> new com.craisinlord.antarchy.content.item.TriffidGooBlockItem(AntarchyForgeBlocks.TRIFFID_GOO_BLOCK.get(), new Item.Properties())); + public static final RegistryObject SHELLSTONE_PILLAR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.SHELLSTONE_PILLAR); + public static final RegistryObject FLYTRAP_GOO_BLOCK_ITEM = ITEMS.register("flytrap_goo_block", + () -> new com.craisinlord.antarchy.content.item.FlytrapGooBlockItem(AntarchyForgeBlocks.FLYTRAP_GOO_BLOCK.get(), new Item.Properties())); public static final RegistryObject PALE_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.PALE_NYXITE); public static final RegistryObject NYXITE_SPIKE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.NYXITE_SPIKE); public static final RegistryObject CHITIN_SPIKE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.CHITIN_SPIKE); @@ -453,32 +651,35 @@ public final class AntarchyForgeItems { public static final RegistryObject LUMEN_FROGLIGHT_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.LUMEN_FROGLIGHT); public static final RegistryObject ROSEATE_FROGLIGHT_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.ROSEATE_FROGLIGHT); public static final RegistryObject BED_BUG_EGG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.BED_BUG_EGG); - public static final RegistryObject CREEPING_HORROR_EGG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.CREEPING_HORROR_EGG); - public static final RegistryObject JUMPY_BUG_EGG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.JUMPY_BUG_EGG); + public static final RegistryObject CRAWLING_BLIGHT_EGG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.CRAWLING_BLIGHT_EGG); + public static final RegistryObject PRINCE_EGG_ITEM = ITEMS.register("prince_egg", + () -> new net.minecraft.world.item.BlockItem(AntarchyForgeBlocks.PRINCE_EGG.get(), new Item.Properties().rarity(Rarity.EPIC).fireResistant())); + public static final RegistryObject PRINCESS_EGG_ITEM = ITEMS.register("princess_egg", + () -> new net.minecraft.world.item.BlockItem(AntarchyForgeBlocks.PRINCESS_EGG.get(), new Item.Properties().rarity(Rarity.EPIC).fireResistant())); + public static final RegistryObject SPRINGBUG_EGG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.SPRINGBUG_EGG); public static final RegistryObject SPIT_BUG_EGG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.SPIT_BUG_EGG); public static final RegistryObject JERRY_EGG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.JERRY_EGG); - public static final RegistryObject LURKING_TERROR_EGG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.LURKING_TERROR_EGG); + public static final RegistryObject SKULKING_FRIGHT_EGG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.SKULKING_FRIGHT_EGG); public static final RegistryObject WASP_NEST_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.WASP_NEST); public static final RegistryObject HUSHWEED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.HUSHWEED); public static final RegistryObject HANGING_CREEPROOTS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.HANGING_CREEPROOTS); public static final RegistryObject GLOWCAP_MUSHROOM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.GLOWCAP_MUSHROOM); public static final RegistryObject GLOWCAP_MUSHROOM_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.GLOWCAP_MUSHROOM_BLOCK); - public static final RegistryObject UNDERTRIAL_SPAWNER_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.UNDERTRIAL_SPAWNER); - public static final RegistryObject UNDERVAULT_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.UNDERVAULT); - public static final RegistryObject UNDERTRIAL_KEY = ITEMS.registerSimpleItem("undertrial_key", new Item.Properties()); public static final RegistryObject MOLTING_VINES_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.MOLTING_VINES); public static final RegistryObject BILE_BUCKET = ITEMS.register("bile_bucket", - () -> new BucketItem(AntarchyForgeMisc.BILE.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); + () -> new BucketItem(AntarchyForgeMisc.BILE, new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); public static final RegistryObject ICHOR_BUCKET = ITEMS.register("ichor_bucket", - () -> new BucketItem(AntarchyForgeMisc.ICHOR.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); + () -> new BucketItem(AntarchyForgeMisc.ICHOR, new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); public static final RegistryObject ANTIWATER_BUCKET = ITEMS.register("antiwater_bucket", - () -> new BucketItem(AntarchyForgeMisc.ANTIWATER.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); + () -> new BucketItem(AntarchyForgeMisc.ANTIWATER, new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); public static final RegistryObject LUMEN_BUCKET = ITEMS.register("lumen_bucket", - () -> new BucketItem(AntarchyForgeMisc.LUMEN.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); + () -> new BucketItem(AntarchyForgeMisc.LUMEN, new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); public static final RegistryObject CLOUD_BUCKET = ITEMS.register("cloud_bucket", () -> new com.craisinlord.antarchy.content.item.CloudBucketItem(AntarchyForgeBlocks.CLOUD_BLOCK.get(), new Item.Properties().craftRemainder(Items.BUCKET))); public static final RegistryObject BLOOD_CRYSTAL_SHARD = ITEMS.register("blood_crystal_shard", () -> new BloodCrystalShardItem(new Item.Properties())); + public static final RegistryObject TEMPORAL_TUNER = ITEMS.register("temporal_tuner", + () -> new TemporalTunerItem(new Item.Properties().rarity(Rarity.RARE).fireResistant())); public static final RegistryObject BLOOD_CRYSTAL_APPLE = ITEMS.register("blood_crystal_apple", () -> new BloodCrystalAppleItem(new Item.Properties() .rarity(Rarity.RARE) @@ -512,13 +713,18 @@ public final class AntarchyForgeItems { AntarchySettings.bloodCrystalKatanaAttackDamage(), -2.2F )); + public static final RegistryObject BLOOD_GODS_BLADE = ITEMS.register("blood_gods_blade", + () -> new BloodGodsBladeItem( + ULTIMATE_TIER, + new Item.Properties().stacksTo(1).durability(4096).rarity(Rarity.EPIC).fireResistant(), + 24, + -2.4F + )); public static final RegistryObject MANTIS_CLAW = ITEMS.register("mantis_claw", () -> new MantisClawItem(Tiers.IRON, new Item.Properties().stacksTo(1).durability(50).rarity(Rarity.UNCOMMON))); public static final RegistryObject HERCULES_HORN = ITEMS.registerSimpleItem("hercules_horn", new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final RegistryObject KING_SCALE = ITEMS.register("king_scale", - () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); - public static final RegistryObject QUEEN_SCALE = ITEMS.register("queen_scale", - () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); + public static final RegistryObject KING_SCALE = ITEMS.registerSimpleItem("king_scale", new Item.Properties().rarity(Rarity.RARE).fireResistant()); + public static final RegistryObject QUEEN_SCALE = ITEMS.registerSimpleItem("queen_scale", new Item.Properties().rarity(Rarity.RARE).fireResistant()); public static final RegistryObject CHITIN = ITEMS.registerSimpleItem("chitin", new Item.Properties().rarity(Rarity.UNCOMMON)); public static final RegistryObject JERRY_NUCLEUS = ITEMS.register("jerry_nucleus", () -> new com.craisinlord.antarchy.content.item.JerryNucleusItem(new Item.Properties().rarity(Rarity.UNCOMMON) @@ -527,12 +733,15 @@ public final class AntarchyForgeItems { .saturationMod(0.1F) .build()))); public static final RegistryObject STINK_BUG = ITEMS.registerSimpleItem("stink_bug", new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final RegistryObject JUMPY_BUG_LEG = ITEMS.registerSimpleItem("springbug_leg", new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final RegistryObject JUMPY_BOOTS = ITEMS.register("springy_boots", - () -> new JumpyBootsItem(JUMPY_BOOTS_ARMOR_MATERIAL, new Item.Properties().stacksTo(1).rarity(Rarity.UNCOMMON).fireResistant().durability(armorDurability(ArmorItem.Type.BOOTS, 37)))); + public static final RegistryObject SPRINGBUG_LEG = ITEMS.registerSimpleItem("springbug_leg", new Item.Properties().rarity(Rarity.UNCOMMON)); + public static final RegistryObject SPRINGY_BOOTS = ITEMS.register("springy_boots", + () -> new SpringyBootsItem(SPRINGY_BOOTS_ARMOR_MATERIAL, new Item.Properties().stacksTo(1).rarity(Rarity.UNCOMMON).fireResistant().durability(armorDurability(ArmorItem.Type.BOOTS, 37)))); public static final RegistryObject BRUTALFLY_WING = ITEMS.registerSimpleItem("brutalfly_wing", new Item.Properties().rarity(Rarity.UNCOMMON)); public static final RegistryObject BRUTALFLY_ELYTRA = ITEMS.register("brutalfly_elytra", () -> new BrutalflyElytraItem(new Item.Properties().rarity(Rarity.UNCOMMON).durability(480))); + public static final RegistryObject MANTICORE_WING = ITEMS.registerSimpleItem("manticore_wing", new Item.Properties().rarity(Rarity.UNCOMMON)); + public static final RegistryObject MANTICORE_WINGS = ITEMS.register("manticore_wings", + () -> new ManticoreWingsItem(new Item.Properties().rarity(Rarity.RARE).durability(480))); public static final RegistryObject CORNEA_EAR = ITEMS.register("cornea_ear", () -> new CorneaEarItem(new Item.Properties() .rarity(Rarity.UNCOMMON) @@ -560,6 +769,13 @@ public final class AntarchyForgeItems { .nutrition(2) .saturationMod(0.1F) .effect(() -> new MobEffectInstance(MobEffects.DAMAGE_BOOST, 100, 0), 1.0F) + .build()))); + public static final RegistryObject BROODFRUIT_COBBLER = ITEMS.register("broodfruit_cobbler", + () -> new Item(new Item.Properties() + .food(new FoodProperties.Builder() + .nutrition(8) + .saturationMod(0.8F) + .effect(() -> new MobEffectInstance(MobEffects.DAMAGE_BOOST, 20 * 90, 1), 1.0F) .build()))); public static final RegistryObject RAW_BUG_MEAT = ITEMS.register("raw_bug_meat", () -> new Item(new Item.Properties() @@ -634,10 +850,10 @@ public final class AntarchyForgeItems { .effect(() -> new MobEffectInstance(MobEffects.REGENERATION, 100, 0), 1.0F) .alwaysEat() .build()))); - public static final RegistryObject TRIFFID_GOO = ITEMS.registerSimpleItem("flytrap_goo", + public static final RegistryObject FLYTRAP_GOO = ITEMS.registerSimpleItem("flytrap_goo", new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final RegistryObject VORTEX_EYE = ITEMS.register("vortex_eye", - () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); + public static final RegistryObject VORTEX_CHARGE = ITEMS.register("vortex_charge", + () -> new VortexChargeItem(new Item.Properties().stacksTo(64).rarity(Rarity.RARE), AntarchyForgeEntites.VORTEX_CHARGE_PROJECTILE)); public static final RegistryObject RAW_URANIUM_SCRAP = ITEMS.registerSimpleItem("raw_uranium_scrap", new Item.Properties().rarity(Rarity.UNCOMMON)); public static final RegistryObject RAW_TITANIUM_SCRAP = ITEMS.registerSimpleItem("raw_titanium_scrap", new Item.Properties().rarity(Rarity.UNCOMMON)); public static final RegistryObject RAW_URANIUM = ITEMS.registerSimpleItem("raw_uranium", new Item.Properties().rarity(Rarity.UNCOMMON)); @@ -665,9 +881,13 @@ public final class AntarchyForgeItems { .saturationMod(0.0F) .effect(() -> new MobEffectInstance(MobEffects.HUNGER, 600), 0.8F) .build()))); - public static final RegistryObject CLOUD_SHARK_FIN = ITEMS.registerSimpleItem("stratoshark_fin", new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final RegistryObject CLOUD_SHARK_FIN_SOUP = ITEMS.register("stratoshark_fin_soup", - () -> new CloudSharkFinSoupItem(new Item.Properties() + public static final RegistryObject WORM_TOOTH = ITEMS.register("worm_tooth", + () -> new Item(new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final RegistryObject WORM_HOOK = ITEMS.register("worm_hook", + () -> new WormHookItem(new Item.Properties().stacksTo(1).durability(256).rarity(Rarity.UNCOMMON))); + public static final RegistryObject STRATOSHARK_FIN = ITEMS.registerSimpleItem("stratoshark_fin", new Item.Properties().rarity(Rarity.UNCOMMON)); + public static final RegistryObject STRATOSHARK_FIN_SOUP = ITEMS.register("stratoshark_fin_soup", + () -> new StratosharkFinSoupItem(new Item.Properties() .stacksTo(1) .craftRemainder(Items.BOWL) .food(new FoodProperties.Builder() @@ -693,16 +913,16 @@ public final class AntarchyForgeItems { )); public static final RegistryObject ULTIMATE_HELMET = ITEMS.register("ultimate_helmet", () -> new UltimateArmorItem(ULTIMATE_ARMOR_MATERIAL, ArmorItem.Type.HELMET, - new Item.Properties().rarity(Rarity.EPIC).fireResistant().durability(armorDurability(ArmorItem.Type.HELMET, 41)))); + new Item.Properties().rarity(Rarity.EPIC).fireResistant().durability(armorDurability(ArmorItem.Type.HELMET, 62)))); public static final RegistryObject ULTIMATE_CHESTPLATE = ITEMS.register("ultimate_chestplate", () -> new UltimateArmorItem(ULTIMATE_ARMOR_MATERIAL, ArmorItem.Type.CHESTPLATE, - new Item.Properties().rarity(Rarity.EPIC).fireResistant().durability(armorDurability(ArmorItem.Type.CHESTPLATE, 41)))); + new Item.Properties().rarity(Rarity.EPIC).fireResistant().durability(armorDurability(ArmorItem.Type.CHESTPLATE, 62)))); public static final RegistryObject ULTIMATE_LEGGINGS = ITEMS.register("ultimate_leggings", () -> new UltimateArmorItem(ULTIMATE_ARMOR_MATERIAL, ArmorItem.Type.LEGGINGS, - new Item.Properties().rarity(Rarity.EPIC).fireResistant().durability(armorDurability(ArmorItem.Type.LEGGINGS, 41)))); + new Item.Properties().rarity(Rarity.EPIC).fireResistant().durability(armorDurability(ArmorItem.Type.LEGGINGS, 62)))); public static final RegistryObject ULTIMATE_BOOTS = ITEMS.register("ultimate_boots", () -> new UltimateArmorItem(ULTIMATE_ARMOR_MATERIAL, ArmorItem.Type.BOOTS, - new Item.Properties().rarity(Rarity.EPIC).fireResistant().durability(armorDurability(ArmorItem.Type.BOOTS, 41)))); + new Item.Properties().rarity(Rarity.EPIC).fireResistant().durability(armorDurability(ArmorItem.Type.BOOTS, 62)))); public static final RegistryObject ULTIMATE_SWORD = ITEMS.register("ultimate_sword", () -> new UltimateSwordItem(ULTIMATE_TIER, new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant(), @@ -742,6 +962,45 @@ public final class AntarchyForgeItems { public static final RegistryObject NIGHTMARE_SWORD = ITEMS.register("nightmare_sword", () -> new NightmareSwordItem(ULTIMATE_TIER, new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant(), -2.4F)); + + public static final RegistryObject ROYAL_GUARDIAN_HELMET = ITEMS.register("royal_guardian_helmet", + () -> new RoyalGuardianArmorItem(ROYAL_GUARDIAN_ARMOR_MATERIAL, ArmorItem.Type.HELMET, new Item.Properties().rarity(Rarity.EPIC).fireResistant())); + public static final RegistryObject ROYAL_GUARDIAN_CHESTPLATE = ITEMS.register("royal_guardian_chestplate", + () -> new RoyalGuardianArmorItem(ROYAL_GUARDIAN_ARMOR_MATERIAL, ArmorItem.Type.CHESTPLATE, new Item.Properties().rarity(Rarity.EPIC).fireResistant())); + public static final RegistryObject ROYAL_GUARDIAN_LEGGINGS = ITEMS.register("royal_guardian_leggings", + () -> new RoyalGuardianArmorItem(ROYAL_GUARDIAN_ARMOR_MATERIAL, ArmorItem.Type.LEGGINGS, new Item.Properties().rarity(Rarity.EPIC).fireResistant())); + public static final RegistryObject ROYAL_GUARDIAN_BOOTS = ITEMS.register("royal_guardian_boots", + () -> new RoyalGuardianArmorItem(ROYAL_GUARDIAN_ARMOR_MATERIAL, ArmorItem.Type.BOOTS, new Item.Properties().rarity(Rarity.EPIC).fireResistant())); + + public static final RegistryObject ROYAL_ASSAILANT_HELMET = ITEMS.register("royal_assailant_helmet", + () -> new RoyalAssailantArmorItem(ROYAL_ASSAILANT_ARMOR_MATERIAL, ArmorItem.Type.HELMET, new Item.Properties().rarity(Rarity.EPIC).fireResistant())); + public static final RegistryObject ROYAL_ASSAILANT_CHESTPLATE = ITEMS.register("royal_assailant_chestplate", + () -> new RoyalAssailantArmorItem(ROYAL_ASSAILANT_ARMOR_MATERIAL, ArmorItem.Type.CHESTPLATE, new Item.Properties().rarity(Rarity.EPIC).fireResistant())); + public static final RegistryObject ROYAL_ASSAILANT_LEGGINGS = ITEMS.register("royal_assailant_leggings", + () -> new RoyalAssailantArmorItem(ROYAL_ASSAILANT_ARMOR_MATERIAL, ArmorItem.Type.LEGGINGS, new Item.Properties().rarity(Rarity.EPIC).fireResistant())); + public static final RegistryObject ROYAL_ASSAILANT_BOOTS = ITEMS.register("royal_assailant_boots", + () -> new RoyalAssailantArmorItem(ROYAL_ASSAILANT_ARMOR_MATERIAL, ArmorItem.Type.BOOTS, new Item.Properties().rarity(Rarity.EPIC).fireResistant())); + + public static final RegistryObject ROYAL_GUARDIAN_SWORD = ITEMS.register("royal_guardian_sword", + () -> new RoyalGuardianSwordItem(ROYAL_GUARDIAN_TIER, new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant()) { + @Override + public void initializeClient(java.util.function.Consumer consumer) { + consumer.accept(AntarchyGeoItemExtensions.plain(this)); + } + }); + public static final RegistryObject GIANT_FRYING_PAN = ITEMS.register("giant_frying_pan", + () -> new GiantFryingPanItem(ROYAL_GUARDIAN_TIER, new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant()) { + @Override + public void initializeClient(java.util.function.Consumer consumer) { + consumer.accept(AntarchyGeoItemExtensions.plain(this)); + } + }); + public static final RegistryObject ROYAL_ASSAILANT_BATTLEAXE = ITEMS.register("royal_assailant_battleaxe", + () -> new RoyalAssailantBattleAxeItem(ROYAL_ASSAILANT_TIER, new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant())); + public static final RegistryObject ROYAL_GUARDIAN_SHIELD = ITEMS.register("royal_guardian_shield", + () -> new RoyalGuardianShieldItem( + new Item.Properties().durability(AntarchySettings.royalGuardianShieldDurability()).rarity(Rarity.EPIC).fireResistant(), + () -> Ingredient.of(KING_SCALE.get()))); public static final RegistryObject SHRINK_RAY = ITEMS.register("shrink_ray", () -> new SizeRayItem( new Item.Properties().stacksTo(1).durability(512).rarity(Rarity.RARE).fireResistant(), @@ -779,6 +1038,78 @@ public final class AntarchyForgeItems { consumer.accept(AntarchyGeoItemExtensions.crossbowHold(this)); } }); + public static final RegistryObject PORTAL_GUN = ITEMS.register("portal_gun", + () -> new PortalGunItem( + new Item.Properties().stacksTo(1).durability(256).rarity(Rarity.RARE), + AntarchyForgeEntites.PORTAL_GUN_PORTAL, + AntarchyForgeEntites.PORTAL_GUN_PROJECTILE, + AntarchyForgeBlocks.PORTAL_GUN_PORTAL_MASTER, + AntarchyForgeBlocks.PORTAL_GUN_PORTAL_BASE, + com.craisinlord.antarchy.content.portalgun.PortalGunVariant.DEFAULT + ) { + @Override + public void initializeClient(java.util.function.Consumer consumer) { + consumer.accept(AntarchyGeoItemExtensions.crossbowHold(this)); + } + }); + public static final RegistryObject PORTAL_GUN_ATLAS = ITEMS.register("portal_gun_atlas", + () -> new PortalGunItem( + new Item.Properties().stacksTo(1).durability(256).rarity(Rarity.RARE), + AntarchyForgeEntites.PORTAL_GUN_PORTAL, + AntarchyForgeEntites.PORTAL_GUN_PROJECTILE, + AntarchyForgeBlocks.PORTAL_GUN_PORTAL_MASTER, + AntarchyForgeBlocks.PORTAL_GUN_PORTAL_BASE, + com.craisinlord.antarchy.content.portalgun.PortalGunVariant.ATLAS + ) { + @Override + public void initializeClient(java.util.function.Consumer consumer) { + consumer.accept(AntarchyGeoItemExtensions.crossbowHold(this)); + } + }); + public static final RegistryObject PORTAL_GUN_P_BODY = ITEMS.register("portal_gun_p_body", + () -> new PortalGunItem( + new Item.Properties().stacksTo(1).durability(256).rarity(Rarity.RARE), + AntarchyForgeEntites.PORTAL_GUN_PORTAL, + AntarchyForgeEntites.PORTAL_GUN_PROJECTILE, + AntarchyForgeBlocks.PORTAL_GUN_PORTAL_MASTER, + AntarchyForgeBlocks.PORTAL_GUN_PORTAL_BASE, + com.craisinlord.antarchy.content.portalgun.PortalGunVariant.P_BODY + ) { + @Override + public void initializeClient(java.util.function.Consumer consumer) { + consumer.accept(AntarchyGeoItemExtensions.crossbowHold(this)); + } + }); + public static final RegistryObject PORTAL_GUN_CRAISIN = ITEMS.register("portal_gun_craisin", + () -> new PortalGunItem( + new Item.Properties().stacksTo(1).durability(256).rarity(Rarity.RARE), + AntarchyForgeEntites.PORTAL_GUN_PORTAL, + AntarchyForgeEntites.PORTAL_GUN_PROJECTILE, + AntarchyForgeBlocks.PORTAL_GUN_PORTAL_MASTER, + AntarchyForgeBlocks.PORTAL_GUN_PORTAL_BASE, + com.craisinlord.antarchy.content.portalgun.PortalGunVariant.CRAISIN + ) { + @Override + public void initializeClient(java.util.function.Consumer consumer) { + consumer.accept(AntarchyGeoItemExtensions.crossbowHold(this)); + } + }); + public static final RegistryObject PORTAL_GUN_LAYNCE = ITEMS.register("portal_gun_laynce", + () -> new PortalGunItem( + new Item.Properties().stacksTo(1).durability(256).rarity(Rarity.RARE), + AntarchyForgeEntites.PORTAL_GUN_PORTAL, + AntarchyForgeEntites.PORTAL_GUN_PROJECTILE, + AntarchyForgeBlocks.PORTAL_GUN_PORTAL_MASTER, + AntarchyForgeBlocks.PORTAL_GUN_PORTAL_BASE, + com.craisinlord.antarchy.content.portalgun.PortalGunVariant.LAYNCE + ) { + @Override + public void initializeClient(java.util.function.Consumer consumer) { + consumer.accept(AntarchyGeoItemExtensions.crossbowHold(this)); + } + }); + public static final RegistryObject EYE_OF_THE_STORM = ITEMS.register("eye_of_the_storm", + () -> new EyeOfTheStormItem(new Item.Properties().stacksTo(1).durability(384).rarity(Rarity.EPIC))); public static final RegistryObject SQUIDZOOKA = ITEMS.register("squidzooka", () -> new SquidzookaItem(new Item.Properties().stacksTo(1).durability(384).rarity(Rarity.RARE)) { @Override @@ -824,6 +1155,8 @@ public final class AntarchyForgeItems { } }); + public static final RegistryObject KRAKEN_TENTACLE = ITEMS.registerSimpleItem("kraken_tentacle", + new Item.Properties().rarity(Rarity.RARE)); public static final RegistryObject KRAKEN_KALAMARI = ITEMS.register("kraken_kalamari", () -> new Item(new Item.Properties() .rarity(Rarity.EPIC) @@ -832,14 +1165,11 @@ public final class AntarchyForgeItems { .saturationMod(1.2F) .alwaysEat() .build()))); - public static final RegistryObject KRAKEN_TENTACLE = ITEMS.registerSimpleItem("kraken_tentacle", - new Item.Properties().rarity(Rarity.RARE)); public static final RegistryObject KRAKENS_GRASP = ITEMS.register("krakens_grasp", () -> new KrakensGraspItem( new Item.Properties().stacksTo(1).durability(250).rarity(Rarity.EPIC).fireResistant())); - // Spawn eggs public static final RegistryObject EASTER_BUNNY_SPAWN_EGG = ITEMS.register("easter_bunny_spawn_egg", () -> new ForgeSpawnEggItem(AntarchyForgeEntites.EASTER_BUNNY, 0xFFF2B2, 0xFF85B5, new Item.Properties())); public static final RegistryObject DORRIE_SPAWN_EGG = ITEMS.register("dorrie_spawn_egg", @@ -855,6 +1185,7 @@ public final class AntarchyForgeItems { .food(new FoodProperties.Builder() .nutrition(4) .saturationMod(0.3F) + .alwaysEat() .build()))); public static final RegistryObject GLIMMER_BOTTLE = ITEMS.register("glimmer_bottle", com.craisinlord.antarchy.content.item.GlimmerBottleItem::new); @@ -868,6 +1199,14 @@ public final class AntarchyForgeItems { () -> new ForgeSpawnEggItem(AntarchyForgeEntites.REVERIE, 0xF2F2F2, 0xBFC3C7, new Item.Properties())); public static final RegistryObject BRUTALFLY_SPAWN_EGG = ITEMS.register("brutalfly_spawn_egg", () -> new ForgeSpawnEggItem(AntarchyForgeEntites.BRUTALFLY, 0x4A2214, 0xFF8A1D, new Item.Properties().rarity(Rarity.EPIC))); + public static final RegistryObject KING_SPAWN_EGG = ITEMS.register("king_spawn_egg", + () -> new ForgeSpawnEggItem(AntarchyForgeEntites.KING, 0xFFFFFF, 0xD4AF37, new Item.Properties().rarity(Rarity.EPIC).fireResistant())); + public static final RegistryObject QUEEN_SPAWN_EGG = ITEMS.register("queen_spawn_egg", + () -> new ForgeSpawnEggItem(AntarchyForgeEntites.QUEEN, 0x080608, 0xB11226, new Item.Properties().rarity(Rarity.EPIC).fireResistant())); + public static final RegistryObject PRINCE_SPAWN_EGG = ITEMS.register("prince_spawn_egg", + () -> new ForgeSpawnEggItem(AntarchyForgeEntites.PRINCE, 0xFFFFFF, 0xD4AF37, new Item.Properties().rarity(Rarity.EPIC).fireResistant())); + public static final RegistryObject PRINCESS_SPAWN_EGG = ITEMS.register("princess_spawn_egg", + () -> new ForgeSpawnEggItem(AntarchyForgeEntites.PRINCESS, 0x3B0A45, 0xB11226, new Item.Properties().rarity(Rarity.EPIC).fireResistant())); public static final RegistryObject RED_ANT_SPAWN_EGG = ITEMS.register("red_ant_spawn_egg", () -> new ForgeSpawnEggItem(AntarchyForgeEntites.RED_ANT, 0xA31818, 0x2B0909, new Item.Properties())); public static final RegistryObject BROWN_ANT_SPAWN_EGG = ITEMS.register("brown_ant_spawn_egg", @@ -878,6 +1217,8 @@ public final class AntarchyForgeItems { () -> new ForgeSpawnEggItem(AntarchyForgeEntites.TERMITE, 0xD4B96A, 0xFF6B1A, new Item.Properties())); public static final RegistryObject MOLEWORM_SPAWN_EGG = ITEMS.register("moleworm_spawn_egg", () -> new ForgeSpawnEggItem(AntarchyForgeEntites.MOLEWORM, 0xB8B8B8, 0x8A623A, new Item.Properties())); + public static final RegistryObject WORM_SPAWN_EGG = ITEMS.register("worm_spawn_egg", + () -> new ForgeSpawnEggItem(AntarchyForgeEntites.WORM, 0x7A5742, 0xE4D2A6, new Item.Properties())); public static final RegistryObject MANTIS_SPAWN_EGG = ITEMS.register("mantis_spawn_egg", () -> new ForgeSpawnEggItem(AntarchyForgeEntites.MANTIS, 0xF8F8F2, 0x63B44A, new Item.Properties())); public static final RegistryObject ALPHA_MANTIS_SPAWN_EGG = ITEMS.register("alpha_mantis_spawn_egg", @@ -886,8 +1227,8 @@ public final class AntarchyForgeItems { () -> new ForgeSpawnEggItem(AntarchyForgeEntites.ROLLY_POLLY, 0x7284A3, 0xBCC8DB, new Item.Properties())); public static final RegistryObject MOLEVORE_SPAWN_EGG = ITEMS.register("molevore_spawn_egg", () -> new ForgeSpawnEggItem(AntarchyForgeEntites.MOLEVORE, 0x4A4A4A, 0x6B4A2B, new Item.Properties().rarity(Rarity.UNCOMMON))); - public static final RegistryObject TRIFFID_SPAWN_EGG = ITEMS.register("flytrap_spawn_egg", - () -> new ForgeSpawnEggItem(AntarchyForgeEntites.TRIFFID, 0x4C8F3A, 0xFF2FB3, new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final RegistryObject FLYTRAP_SPAWN_EGG = ITEMS.register("flytrap_spawn_egg", + () -> new ForgeSpawnEggItem(AntarchyForgeEntites.FLYTRAP, 0x4C8F3A, 0xFF2FB3, new Item.Properties().rarity(Rarity.UNCOMMON))); public static final RegistryObject APPLE_COW_SPAWN_EGG = ITEMS.register("apple_cow_spawn_egg", () -> new ForgeSpawnEggItem(AntarchyForgeEntites.APPLE_COW, 0xFF1A1A, 0x32FF32, new Item.Properties())); public static final RegistryObject GOLDEN_APPLE_COW_SPAWN_EGG = ITEMS.register("golden_apple_cow_spawn_egg", @@ -900,14 +1241,14 @@ public final class AntarchyForgeItems { () -> new ForgeSpawnEggItem(AntarchyForgeEntites.WASP, 0x111111, 0xF1D800, new Item.Properties())); public static final RegistryObject BOMBER_SPAWN_EGG = ITEMS.register("bomber_spawn_egg", () -> new ForgeSpawnEggItem(AntarchyForgeEntites.BOMBER, 0x7A7A7A, 0xB32020, new Item.Properties())); - public static final RegistryObject JUMPY_BUG_SPAWN_EGG = ITEMS.register("springbug_spawn_egg", - () -> new ForgeSpawnEggItem(AntarchyForgeEntites.JUMPY_BUG, 0x0A1636, 0x8A3E00, new Item.Properties())); + public static final RegistryObject SPRINGBUG_SPAWN_EGG = ITEMS.register("springbug_spawn_egg", + () -> new ForgeSpawnEggItem(AntarchyForgeEntites.SPRINGBUG, 0x0A1636, 0x8A3E00, new Item.Properties())); public static final RegistryObject SPIT_BUG_SPAWN_EGG = ITEMS.register("spit_bug_spawn_egg", () -> new ForgeSpawnEggItem(AntarchyForgeEntites.SPIT_BUG, 0x6B4A2B, 0x7ED957, new Item.Properties())); public static final RegistryObject STINK_BUG_SPAWN_EGG = ITEMS.register("stink_bug_spawn_egg", () -> new ForgeSpawnEggItem(AntarchyForgeEntites.STINK_BUG, 0x111111, 0xFF7A00, new Item.Properties())); - public static final RegistryObject CLOUD_SHARK_SPAWN_EGG = ITEMS.register("stratoshark_spawn_egg", - () -> new ForgeSpawnEggItem(AntarchyForgeEntites.CLOUD_SHARK, 0xDDEAF4, 0x7F96A8, new Item.Properties())); + public static final RegistryObject STRATOSHARK_SPAWN_EGG = ITEMS.register("stratoshark_spawn_egg", + () -> new ForgeSpawnEggItem(AntarchyForgeEntites.STRATOSHARK, 0xDDEAF4, 0x7F96A8, new Item.Properties())); public static final RegistryObject KRAKEN_SPAWN_EGG = ITEMS.register("kraken_spawn_egg", () -> new ForgeSpawnEggItem(AntarchyForgeEntites.KRAKEN, 0x163C53, 0x4F8E99, new Item.Properties().rarity(Rarity.EPIC))); public static final RegistryObject MISSILE_SQUID_SPAWN_EGG = ITEMS.register("missile_squid_spawn_egg", @@ -920,6 +1261,8 @@ public final class AntarchyForgeItems { () -> new ForgeSpawnEggItem(AntarchyForgeEntites.BED_BUG, 0x3B2218, 0x611111, new Item.Properties())); public static final RegistryObject LUCID_SPAWN_EGG = ITEMS.register("lucid_spawn_egg", () -> new ForgeSpawnEggItem(AntarchyForgeEntites.LUCID, 0xE53935, 0xF4D03F, new Item.Properties().rarity(Rarity.RARE))); + public static final RegistryObject VORTEX_SPAWN_EGG = ITEMS.register("vortex_spawn_egg", + () -> new ForgeSpawnEggItem(AntarchyForgeEntites.VORTEX, 0x36FF6A, 0x0A5C2A, new Item.Properties().rarity(Rarity.RARE))); public static final RegistryObject SCORPION_SPAWN_EGG = ITEMS.register("scorpion_spawn_egg", () -> new ForgeSpawnEggItem(AntarchyForgeEntites.SCORPION, 0xA8D8FF, 0xE04B5A, new Item.Properties())); public static final RegistryObject BASILISK_SPAWN_EGG = ITEMS.register("basilisk_spawn_egg", @@ -933,6 +1276,8 @@ public final class AntarchyForgeItems { new Item.Properties().stacksTo(16).rarity(Rarity.UNCOMMON), AntarchyForgeEntites.LUCID_PEARL_PROJECTILE )); + public static final RegistryObject ROYAL_ASSAILANT_STAFF = ITEMS.register("royal_assailant_staff", + () -> new RoyalAssailantStaffItem(new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant())); public static final RegistryObject WATER_CANNON = ITEMS.register("water_cannon", () -> new WaterCannonItem(new Item.Properties().stacksTo(1).durability(192).rarity(Rarity.RARE)) { @Override @@ -948,10 +1293,12 @@ public final class AntarchyForgeItems { () -> new PrimordialArmorItem(PRIMORDIAL_ARMOR_MATERIAL, ArmorItem.Type.LEGGINGS, new Item.Properties().stacksTo(1).rarity(Rarity.RARE).fireResistant())); public static final RegistryObject PRIMORDIAL_BOOTS = ITEMS.register("primordial_boots", () -> new PrimordialArmorItem(PRIMORDIAL_ARMOR_MATERIAL, ArmorItem.Type.BOOTS, new Item.Properties().stacksTo(1).rarity(Rarity.RARE).fireResistant())); - public static final RegistryObject CREEPING_HORROR_SPAWN_EGG = ITEMS.register("crawling_blight_spawn_egg", - () -> new ForgeSpawnEggItem(AntarchyForgeEntites.CREEPING_HORROR, 0x6B3A1F, 0x6B0000, new Item.Properties())); - public static final RegistryObject LURKING_TERROR_SPAWN_EGG = ITEMS.register("skulking_fright_spawn_egg", - () -> new ForgeSpawnEggItem(AntarchyForgeEntites.LURKING_TERROR, 0x2D5A1B, 0x8B0000, new Item.Properties())); + public static final RegistryObject CRAWLING_BLIGHT_SPAWN_EGG = ITEMS.register("crawling_blight_spawn_egg", + () -> new ForgeSpawnEggItem(AntarchyForgeEntites.CRAWLING_BLIGHT, 0x6B3A1F, 0x6B0000, new Item.Properties())); + public static final RegistryObject SKULKING_FRIGHT_SPAWN_EGG = ITEMS.register("skulking_fright_spawn_egg", + () -> new ForgeSpawnEggItem(AntarchyForgeEntites.SKULKING_FRIGHT, 0x2D5A1B, 0x8B0000, new Item.Properties())); + public static final RegistryObject MANTICORE_SPAWN_EGG = ITEMS.register("manticore_spawn_egg", + () -> new ForgeSpawnEggItem(AntarchyForgeEntites.MANTICORE, 0xA3AEE9, 0x956570, new Item.Properties())); public static final RegistryObject HERCULES_BEETLE_SPAWN_EGG = ITEMS.register("hercules_beetle_spawn_egg", () -> new ForgeSpawnEggItem(AntarchyForgeEntites.HERCULES_BEETLE, 0x6B1F2A, 0xD4AF37, new Item.Properties().rarity(Rarity.RARE))); public static final RegistryObject JERRY_SPAWN_EGG = ITEMS.register("jerry_spawn_egg", @@ -966,8 +1313,91 @@ public final class AntarchyForgeItems { .nutrition(2) .saturationMod(0.1F) .build()))); + public static final RegistryObject COOKED_CHEEP = ITEMS.register("cooked_cheep", + () -> new Item(new Item.Properties() + .food(new FoodProperties.Builder() + .nutrition(5) + .saturationMod(0.6F) + .build()))); + public static final RegistryObject CHEEP_BUCKET = ITEMS.register("cheep_bucket", + () -> new MobBucketItem(AntarchyForgeEntites.CHEEP, () -> net.minecraft.world.level.material.Fluids.WATER, () -> SoundEvents.BUCKET_EMPTY_FISH, new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); private AntarchyForgeItems() {} + private static final java.util.Map BASE_DURABILITY = java.util.Map.of( + ArmorItem.Type.BOOTS, 13, + ArmorItem.Type.LEGGINGS, 15, + ArmorItem.Type.CHESTPLATE, 16, + ArmorItem.Type.HELMET, 11 + ); + + private static int armorDurability(ArmorItem.Type type, int multiplier) { + return BASE_DURABILITY.get(type) * multiplier; + } + + private static ArmorMaterial armorMaterial( + java.util.Map defense, + int enchantmentValue, + net.minecraft.sounds.SoundEvent equipSound, + java.util.function.Supplier repairIngredient, + float toughness, + float knockbackResistance, + String name + ) { + return armorMaterial(defense, enchantmentValue, () -> equipSound, repairIngredient, toughness, knockbackResistance, name); + } + + private static ArmorMaterial armorMaterial( + java.util.Map defense, + int enchantmentValue, + java.util.function.Supplier equipSound, + java.util.function.Supplier repairIngredient, + float toughness, + float knockbackResistance, + String name + ) { + return new ArmorMaterial() { + @Override + public int getDurabilityForType(ArmorItem.Type type) { + return 0; + } + + @Override + public int getDefenseForType(ArmorItem.Type type) { + return defense.getOrDefault(type, 0); + } + + @Override + public int getEnchantmentValue() { + return enchantmentValue; + } + + @Override + public net.minecraft.sounds.SoundEvent getEquipSound() { + return equipSound.get(); + } + + @Override + public Ingredient getRepairIngredient() { + return repairIngredient.get(); + } + + @Override + public String getName() { + return new ResourceLocation(Antarchy.MODID, name).toString(); + } + + @Override + public float getToughness() { + return toughness; + } + + @Override + public float getKnockbackResistance() { + return knockbackResistance; + } + }; + } + public static Collection> getItemEntries() { return ITEMS.getEntries(); } @@ -1023,15 +1453,6 @@ public final class AntarchyForgeItems { return defense; } - private static EnumMap createDiamondArmorDefense() { - EnumMap defense = new EnumMap<>(ArmorItem.Type.class); - defense.put(ArmorItem.Type.BOOTS, 3); - defense.put(ArmorItem.Type.LEGGINGS, 6); - defense.put(ArmorItem.Type.CHESTPLATE, 8); - defense.put(ArmorItem.Type.HELMET, 3); - return defense; - } - private static EnumMap createBloodCrystalArmorDefense() { EnumMap defense = new EnumMap<>(ArmorItem.Type.class); defense.put(ArmorItem.Type.BOOTS, 2); @@ -1041,6 +1462,15 @@ public final class AntarchyForgeItems { return defense; } + private static EnumMap createDiamondArmorDefense() { + EnumMap defense = new EnumMap<>(ArmorItem.Type.class); + defense.put(ArmorItem.Type.BOOTS, 3); + defense.put(ArmorItem.Type.LEGGINGS, 6); + defense.put(ArmorItem.Type.CHESTPLATE, 8); + defense.put(ArmorItem.Type.HELMET, 3); + return defense; + } + private static EnumMap createMogglesArmorDefense() { EnumMap defense = new EnumMap<>(ArmorItem.Type.class); defense.put(ArmorItem.Type.BOOTS, 0); @@ -1068,7 +1498,7 @@ public final class AntarchyForgeItems { return defense; } - private static EnumMap createJumpyBootsDefense() { + private static EnumMap createSpringyBootsDefense() { EnumMap defense = new EnumMap<>(ArmorItem.Type.class); defense.put(ArmorItem.Type.BOOTS, 3); defense.put(ArmorItem.Type.LEGGINGS, 0); diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeMisc.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeMisc.java index d95f7080..5444605a 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeMisc.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeMisc.java @@ -1,19 +1,18 @@ package com.craisinlord.antarchy.forge.registry; +import com.craisinlord.anthology.effect.AnthologyEffects; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.client.particle.InvertedGeyserBaseParticleOptions; import com.craisinlord.antarchy.content.client.particle.InvertedGeyserParticleOptions; import com.craisinlord.antarchy.content.effect.DreadMobEffect; +import com.craisinlord.antarchy.content.effect.BleedingMobEffect; +import com.craisinlord.antarchy.content.effect.BloodMoonMobEffect; import com.craisinlord.antarchy.content.effect.GoopedMobEffect; import com.craisinlord.antarchy.content.effect.GrowthMobEffect; -import com.craisinlord.antarchy.content.effect.InvertedMobEffect; +import com.craisinlord.antarchy.content.effect.CommandedMobEffect; import com.craisinlord.antarchy.content.effect.ParalyzedMobEffect; import com.craisinlord.antarchy.content.effect.ShrinkMobEffect; import com.craisinlord.antarchy.content.effect.StinkyMobEffect; -import com.craisinlord.antarchy.content.effect.DilatedMobEffect; -import com.craisinlord.antarchy.content.effect.ContractedMobEffect; -import com.craisinlord.antarchy.content.enchantment.ChronosphereEnchantment; -import com.craisinlord.antarchy.content.enchantment.FeatherRisingEnchantment; import com.craisinlord.antarchy.content.recipe.AmericanizeRecipe; import com.craisinlord.antarchy.content.worldgen.ants.BrownAntNestFeature; import com.craisinlord.antarchy.content.worldgen.ants.RainbowAntNestFeature; @@ -33,18 +32,21 @@ import com.craisinlord.antarchy.content.worldgen.elythia.*; import com.craisinlord.antarchy.forge.worldgen.CornPatchFeature; import com.craisinlord.antarchy.forge.worldgen.LumenLilyPadFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.*; +import com.craisinlord.antarchy.content.worldgen.truffalo.*; +import com.craisinlord.antarchy.content.worldgen.royal.*; import com.craisinlord.antarchy.forge.content.fluid.AntiwaterFluid; import net.minecraft.core.Holder; import net.minecraft.core.particles.ParticleType; -import net.minecraft.core.particles.SimpleParticleType; import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.particles.SimpleParticleType; import net.minecraft.core.registries.Registries; import net.minecraft.world.flag.FeatureFlags; import net.minecraft.world.effect.MobEffect; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffects; import net.minecraft.world.entity.ai.attributes.Attribute; -import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.ai.village.poi.PoiType; +import net.minecraft.world.entity.npc.VillagerProfession; import net.minecraft.world.inventory.MenuType; import net.minecraft.world.item.alchemy.Potion; import net.minecraft.world.item.enchantment.Enchantment; @@ -61,6 +63,39 @@ import net.minecraftforge.registries.RegistryObject; import net.minecraftforge.registries.ForgeRegistries; public final class AntarchyForgeMisc { + private static final DeferredRegister POI_TYPES = DeferredRegister.create(Registries.POINT_OF_INTEREST_TYPE, Antarchy.MODID); + private static final DeferredRegister VILLAGER_PROFESSIONS = DeferredRegister.create(Registries.VILLAGER_PROFESSION, Antarchy.MODID); + + public static final RegistryObject COMPUTER_POI = POI_TYPES.register("computer", + () -> new PoiType( + java.util.Set.copyOf(com.craisinlord.antos.forge.AntOSForgeContent.COMPUTER.get().getStateDefinition().getPossibleStates()), + 1, + 1)); + + public static final RegistryObject COMPUTER_SCIENTIST = VILLAGER_PROFESSIONS.register("computer_scientist", + () -> new VillagerProfession( + "computer_scientist", + holder -> holder.value() == COMPUTER_POI.get(), + holder -> holder.value() == COMPUTER_POI.get(), + com.google.common.collect.ImmutableSet.of(), + com.google.common.collect.ImmutableSet.of(), + net.minecraft.sounds.SoundEvents.VILLAGER_WORK_LIBRARIAN)); + + public static final RegistryObject PEST_CONTROL_POI = POI_TYPES.register("pest_control", + () -> new PoiType(java.util.Set.copyOf(AntarchyForgeBlocks.ANT_TRAP.get().getStateDefinition().getPossibleStates()), 1, 1)); + + public static final RegistryObject ELYTHIA_PORTAL_POI = POI_TYPES.register("elythia_portal", + () -> new PoiType(java.util.Set.copyOf(AntarchyForgeBlocks.ELYTHIA_PORTAL.get().getStateDefinition().getPossibleStates()), 0, 1)); + + public static final RegistryObject THORAXIS_PORTAL_POI = POI_TYPES.register("thoraxis_portal", + () -> new PoiType(java.util.Set.copyOf(AntarchyForgeBlocks.THORAXIS_PORTAL.get().getStateDefinition().getPossibleStates()), 0, 1)); + + public static final RegistryObject CAVARYN_PORTAL_POI = POI_TYPES.register("cavaryn_portal", + () -> new PoiType(java.util.Set.copyOf(AntarchyForgeBlocks.CAVARYN_PORTAL.get().getStateDefinition().getPossibleStates()), 0, 1)); + + public static final RegistryObject PEST_CONTROL = VILLAGER_PROFESSIONS.register("pest_control", + () -> new VillagerProfession("pest_control", holder -> holder.value() == PEST_CONTROL_POI.get(), + holder -> holder.value() == PEST_CONTROL_POI.get(), com.google.common.collect.ImmutableSet.of(), com.google.common.collect.ImmutableSet.of(), net.minecraft.sounds.SoundEvents.VILLAGER_WORK_FLETCHER)); private static final DeferredRegister MOB_EFFECTS = DeferredRegister.create(Registries.MOB_EFFECT, Antarchy.MODID); private static final DeferredRegister POTIONS = DeferredRegister.create(Registries.POTION, Antarchy.MODID); private static final DeferredRegister FLUID_TYPES = DeferredRegister.create(ForgeRegistries.Keys.FLUID_TYPES, Antarchy.MODID); @@ -73,9 +108,9 @@ public final class AntarchyForgeMisc { private static final DeferredRegister> MENU_TYPES = DeferredRegister.create(Registries.MENU, Antarchy.MODID); private static final DeferredRegister ENCHANTMENTS = DeferredRegister.create(Registries.ENCHANTMENT, Antarchy.MODID); public static final RegistryObject FEATHER_RISING = ENCHANTMENTS.register("feather_rising", - () -> new FeatherRisingEnchantment(Enchantment.Rarity.RARE, EquipmentSlot.FEET)); + () -> new com.craisinlord.antarchy.content.enchantment.FeatherRisingEnchantment()); public static final RegistryObject CHRONOSPHERE = ENCHANTMENTS.register("chronosphere", - () -> new ChronosphereEnchantment(Enchantment.Rarity.RARE, EquipmentSlot.CHEST)); + () -> new com.craisinlord.antarchy.content.enchantment.ChronosphereEnchantment()); private static final DeferredRegister FROG_VARIANTS = DeferredRegister.create(Registries.FROG_VARIANT, Antarchy.MODID); public static final RegistryObject ELYTHIA_FROG_VARIANT = FROG_VARIANTS.register( @@ -87,11 +122,9 @@ public final class AntarchyForgeMisc { public static final RegistryObject> AMERICANIZE_SERIALIZER = RECIPE_SERIALIZERS.register("americanize", () -> AmericanizeRecipe.SERIALIZER); + public static final RegistryObject> PORTAL_GUN_VARIANT_SERIALIZER = + RECIPE_SERIALIZERS.register("portal_gun_variant", () -> com.craisinlord.antarchy.content.recipe.PortalGunVariantRecipe.SERIALIZER); - public static final RegistryObject SCALE = ATTRIBUTES.register( - "scale", - () -> new net.minecraft.world.entity.ai.attributes.RangedAttribute("attribute.antarchy.scale", 1.0, 0.0625, 16.0).setSyncable(true) - ); public static final RegistryObject DOUBLE_DAMAGE_CHANCE = ATTRIBUTES.register( "double_damage_chance", () -> new net.minecraft.world.entity.ai.attributes.RangedAttribute("attribute.antarchy.double_damage_chance", 0.0, 0.0, 1.0).setSyncable(true) @@ -104,55 +137,70 @@ public final class AntarchyForgeMisc { "dorrie_inventory", () -> new MenuType<>(com.craisinlord.antarchy.content.menu.DorrieInventoryMenu::new, FeatureFlags.DEFAULT_FLAGS) ); + public static final RegistryObject> ROYAL_JUDGMENT_MENU = MENU_TYPES.register( + "royal_judgment", + () -> new MenuType<>(com.craisinlord.antarchy.content.menu.RoyalJudgmentMenu::new, FeatureFlags.DEFAULT_FLAGS) + ); + public static final RegistryObject> GIANT_FRYING_PAN_MENU = MENU_TYPES.register( + "giant_frying_pan", + () -> new MenuType<>(com.craisinlord.antarchy.content.menu.GiantFryingPanMenu::new, FeatureFlags.DEFAULT_FLAGS) + ); - // Mob effects public static final RegistryObject DREAD = MOB_EFFECTS.register("dread", DreadMobEffect::new); + public static final RegistryObject BLEEDING = MOB_EFFECTS.register("bleeding", BleedingMobEffect::new); + public static final RegistryObject BLOOD_MOON = MOB_EFFECTS.register("blood_moon", BloodMoonMobEffect::new); public static final RegistryObject PARALYZED = MOB_EFFECTS.register("paralyzed", ParalyzedMobEffect::new); - public static final RegistryObject INVERTED = MOB_EFFECTS.register("inverted", InvertedMobEffect::new); - public static final RegistryObject DILATED = MOB_EFFECTS.register("dilated", DilatedMobEffect::new); - public static final RegistryObject CONTRACTED = MOB_EFFECTS.register("contracted", ContractedMobEffect::new); + public static final RegistryObject COMMANDED = MOB_EFFECTS.register("commanded", CommandedMobEffect::new); public static final RegistryObject STINKY = MOB_EFFECTS.register("stinky", StinkyMobEffect::new); public static final RegistryObject GOOPED = MOB_EFFECTS.register("gooped", GoopedMobEffect::new); public static final RegistryObject BLOODGLASS_WARD = MOB_EFFECTS.register("bloodglass_ward", com.craisinlord.antarchy.content.effect.BloodglassWardEffect::new); + + public static final RegistryObject GLIMMERING = MOB_EFFECTS.register("glimmering", com.craisinlord.antarchy.content.effect.GlimmeringMobEffect::new); + public static final RegistryObject ROYAL_VITALITY_PENALTY = MOB_EFFECTS.register("royal_vitality_penalty", com.craisinlord.antarchy.content.effect.RoyalVitalityPenaltyEffect::new); public static final RegistryObject SHRINKING_EFFECT = MOB_EFFECTS.register("shrinking", ShrinkMobEffect::new); public static final RegistryObject GROWTH_EFFECT = MOB_EFFECTS.register("growth", GrowthMobEffect::new); - public static final RegistryObject GLIMMERING = MOB_EFFECTS.register("glimmering", com.craisinlord.antarchy.content.effect.GlimmeringMobEffect::new); - // Potions public static final RegistryObject INVERSION = POTIONS.register("inversion", - () -> new Potion(new MobEffectInstance(mobEffectHolder(INVERTED), 600))); + () -> new Potion(new MobEffectInstance(AnthologyEffects.inverted(), 600))); public static final RegistryObject LONG_INVERSION = POTIONS.register("long_inversion", - () -> new Potion("inversion", new MobEffectInstance(mobEffectHolder(INVERTED), 2400))); + () -> new Potion("inversion", new MobEffectInstance(AnthologyEffects.inverted(), 2400))); + public static final RegistryObject COMMAND = POTIONS.register("command", + () -> new Potion(new MobEffectInstance(COMMANDED.get(), 600))); + public static final RegistryObject LONG_COMMAND = POTIONS.register("long_command", + () -> new Potion("command", new MobEffectInstance(COMMANDED.get(), 1200))); public static final RegistryObject TIME_DILATION = POTIONS.register("time_dilation", - () -> new Potion(new MobEffectInstance(mobEffectHolder(DILATED), 1200))); + () -> new Potion(new MobEffectInstance(AnthologyEffects.dilated(), 1200))); public static final RegistryObject LONG_TIME_DILATION = POTIONS.register("long_time_dilation", - () -> new Potion("time_dilation", new MobEffectInstance(mobEffectHolder(DILATED), 1200, 1))); + () -> new Potion("time_dilation", new MobEffectInstance(AnthologyEffects.dilated(), 1200, 1))); + public static final RegistryObject TIME_CONTRACTION = POTIONS.register("time_contraction", + () -> new Potion(new MobEffectInstance(AnthologyEffects.contracted(), 1200))); + public static final RegistryObject LONG_TIME_CONTRACTION = POTIONS.register("long_time_contraction", + () -> new Potion("time_contraction", new MobEffectInstance(AnthologyEffects.contracted(), 1200, 1))); public static final RegistryObject STINKY_POTION = POTIONS.register("stinky", - () -> new Potion(new MobEffectInstance(mobEffectHolder(STINKY), 1200))); + () -> new Potion(new MobEffectInstance(STINKY.get(), 1200))); public static final RegistryObject LONG_STINKY = POTIONS.register("long_stinky", - () -> new Potion("stinky", new MobEffectInstance(mobEffectHolder(STINKY), 2400))); + () -> new Potion("stinky", new MobEffectInstance(STINKY.get(), 2400))); public static final RegistryObject PARALYSIS = POTIONS.register("paralysis", - () -> new Potion(new MobEffectInstance(mobEffectHolder(PARALYZED), 200))); + () -> new Potion(new MobEffectInstance(PARALYZED.get(), 200))); public static final RegistryObject LONG_PARALYSIS = POTIONS.register("long_paralysis", - () -> new Potion("paralysis", new MobEffectInstance(mobEffectHolder(PARALYZED), 400))); + () -> new Potion("paralysis", new MobEffectInstance(PARALYZED.get(), 400))); public static final RegistryObject HASTE = POTIONS.register("haste", () -> new Potion(new MobEffectInstance(MobEffects.DIG_SPEED, 1200, 0))); public static final RegistryObject STRONG_HASTE = POTIONS.register("strong_haste", () -> new Potion("haste", new MobEffectInstance(MobEffects.DIG_SPEED, 600, 1))); public static final RegistryObject SHRINKING = POTIONS.register("shrinking", - () -> new Potion(new MobEffectInstance(mobEffectHolder(SHRINKING_EFFECT), 1200, 0))); + () -> new Potion(new MobEffectInstance(SHRINKING_EFFECT.get(), 1200, 0))); public static final RegistryObject STRONG_SHRINKING = POTIONS.register("strong_shrinking", - () -> new Potion("shrinking", new MobEffectInstance(mobEffectHolder(SHRINKING_EFFECT), 900, 1))); + () -> new Potion("shrinking", new MobEffectInstance(SHRINKING_EFFECT.get(), 900, 1))); public static final RegistryObject EXTREME_SHRINKING = POTIONS.register("extreme_shrinking", - () -> new Potion("shrinking", new MobEffectInstance(mobEffectHolder(SHRINKING_EFFECT), 600, 2))); + () -> new Potion("shrinking", new MobEffectInstance(SHRINKING_EFFECT.get(), 600, 2))); public static final RegistryObject GROWING = POTIONS.register("growing", - () -> new Potion(new MobEffectInstance(mobEffectHolder(GROWTH_EFFECT), 1200, 0))); + () -> new Potion(new MobEffectInstance(GROWTH_EFFECT.get(), 1200, 0))); public static final RegistryObject STRONG_GROWING = POTIONS.register("strong_growing", - () -> new Potion("growing", new MobEffectInstance(mobEffectHolder(GROWTH_EFFECT), 900, 1))); + () -> new Potion("growing", new MobEffectInstance(GROWTH_EFFECT.get(), 900, 1))); public static final RegistryObject EXTREME_GROWING = POTIONS.register("extreme_growing", - () -> new Potion("growing", new MobEffectInstance(mobEffectHolder(GROWTH_EFFECT), 600, 2))); + () -> new Potion("growing", new MobEffectInstance(GROWTH_EFFECT.get(), 600, 2))); - // Fluids public static final RegistryObject BILE = FLUIDS.register("bile", () -> new ForgeFlowingFluid.Source(bileProperties())); public static final RegistryObject FLOWING_BILE = FLUIDS.register("flowing_bile", @@ -170,41 +218,42 @@ public final class AntarchyForgeMisc { public static final RegistryObject FLOWING_LUMEN = FLUIDS.register("flowing_lumen", () -> new ForgeFlowingFluid.Flowing(lumenProperties())); - // Particle types public static final RegistryObject DREAM_FIRE_FLAME = PARTICLE_TYPES.register("dream_fire_flame", - AntarchyForgeMisc::simpleParticleType); + () -> new SimpleParticleType(true)); + public static final RegistryObject BUG_SPRAY_PARTICLE = PARTICLE_TYPES.register("bug_spray", + () -> new SimpleParticleType(true)); public static final RegistryObject NIGHTMARE_FIRE_FLAME = PARTICLE_TYPES.register("nightmare_fire_flame", - AntarchyForgeMisc::simpleParticleType); + () -> new SimpleParticleType(true)); public static final RegistryObject STINKY_GAS = PARTICLE_TYPES.register("stinky_gas", - AntarchyForgeMisc::simpleParticleType); + () -> new SimpleParticleType(true)); public static final RegistryObject STINKY_FLY = PARTICLE_TYPES.register("stinky_fly", - AntarchyForgeMisc::simpleParticleType); + () -> new SimpleParticleType(true)); public static final RegistryObject PEACH_LEAVES_PARTICLE = PARTICLE_TYPES.register("peach_leaves_particle", - AntarchyForgeMisc::simpleParticleType); + () -> new SimpleParticleType(true)); public static final RegistryObject LOTUS_POLLEN = PARTICLE_TYPES.register("lotus_pollen", - AntarchyForgeMisc::simpleParticleType); + () -> new SimpleParticleType(true)); public static final RegistryObject HYPNOTIC_GAS = PARTICLE_TYPES.register("hypnotic_gas", - AntarchyForgeMisc::simpleParticleType); + () -> new SimpleParticleType(true)); public static final RegistryObject HYPNOTIC_GAS_CLOUD = PARTICLE_TYPES.register("hypnotic_gas_cloud", - AntarchyForgeMisc::simpleParticleType); + () -> new SimpleParticleType(true)); public static final RegistryObject HYPNOTIC_GAS_DOWN = PARTICLE_TYPES.register("hypnotic_gas_down", - AntarchyForgeMisc::simpleParticleType); + () -> new SimpleParticleType(true)); public static final RegistryObject HYPNOTIC_GAS_CLOUD_DOWN = PARTICLE_TYPES.register("hypnotic_gas_cloud_down", - AntarchyForgeMisc::simpleParticleType); + () -> new SimpleParticleType(true)); public static final RegistryObject FIREFLY = PARTICLE_TYPES.register("firefly", - AntarchyForgeMisc::simpleParticleType); + () -> new SimpleParticleType(true)); public static final RegistryObject ORANGE_ASH = PARTICLE_TYPES.register("orange_ash", - AntarchyForgeMisc::simpleParticleType); + () -> new SimpleParticleType(true)); public static final RegistryObject LUCID_BOLT_IMPACT_SMALL = PARTICLE_TYPES.register("lucid_bolt_impact_small", - AntarchyForgeMisc::simpleParticleType); + () -> new SimpleParticleType(true)); public static final RegistryObject LUCID_BOLT_IMPACT_LARGE = PARTICLE_TYPES.register("lucid_bolt_impact_large", - AntarchyForgeMisc::simpleParticleType); + () -> new SimpleParticleType(true)); public static final RegistryObject UNDERTRIAL_SPAWNER_DETECTION = PARTICLE_TYPES.register("undertrial_spawner_detection", - AntarchyForgeMisc::simpleParticleType); + () -> new SimpleParticleType(true)); public static final RegistryObject UNDERTRIAL_OMEN = PARTICLE_TYPES.register("undertrial_omen", - AntarchyForgeMisc::simpleParticleType); + () -> new SimpleParticleType(true)); public static final RegistryObject UNDERVAULT_CONNECTION = PARTICLE_TYPES.register("undervault_connection", - AntarchyForgeMisc::simpleParticleType); + () -> new SimpleParticleType(true)); public static final RegistryObject> INVERTED_GEYSER_BASE = PARTICLE_TYPES.register("inverted_geyser_base", () -> particleType(InvertedGeyserBaseParticleOptions.deserializer())); public static final RegistryObject> INVERTED_GEYSER_PLUME = PARTICLE_TYPES.register("inverted_geyser_plume", @@ -214,7 +263,6 @@ public final class AntarchyForgeMisc { public static final RegistryObject> INVERTED_GEYSER_ERUPTION = PARTICLE_TYPES.register("inverted_geyser_eruption", () -> particleType(InvertedGeyserParticleOptions.deserializer())); - // Features public static final RegistryObject RED_ANT_NEST_FEATURE = FEATURES.register("red_ant_nest", () -> new RedAntNestFeature(SimpleBlockConfiguration.CODEC)); public static final RegistryObject BROWN_ANT_NEST_FEATURE = FEATURES.register("brown_ant_nest", @@ -235,11 +283,16 @@ public final class AntarchyForgeMisc { () -> new PeachTreeFeature(PeachTreeConfiguration.CODEC)); public static final RegistryObject PEACH_LARGE_TREE_FEATURE = FEATURES.register("peach_large_tree", () -> new PeachTreeFeature(PeachTreeConfiguration.CODEC)); - public static final RegistryObject ELYTHIA_FOREST_FLORA = FEATURES.register("elythia_forest_flora", - () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.FOREST)); - + public static final RegistryObject NADIR_TREE_FEATURE = FEATURES.register("nadir_tree", + () -> new NadirTreeFeature(NadirTreeConfiguration.CODEC)); + public static final RegistryObject TRUFFALO_TREE_FEATURE = FEATURES.register("truffalo_tree", + () -> new TruffaloTreeFeature(TruffaloTreeConfiguration.CODEC)); + public static final RegistryObject ROYAL_TREE_FEATURE = FEATURES.register("royal_tree", + () -> new RoyalTreeFeature(RoyalTreeConfiguration.CODEC)); public static final RegistryObject KINGS_TREE_GRID = FEATURES.register("kings_tree_grid", () -> new KingsTreeGridFeature(NoneFeatureConfiguration.CODEC)); + public static final RegistryObject ELYTHIA_FOREST_FLORA = FEATURES.register("elythia_forest_flora", + () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.FOREST)); public static final RegistryObject ELYTHIA_MEADOW_FLORA = FEATURES.register("elythia_meadow_flora", () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.MEADOW)); public static final RegistryObject PEACH_FOREST_FLORA = FEATURES.register("peach_forest_flora", @@ -268,14 +321,20 @@ public final class AntarchyForgeMisc { () -> new MolewormWarrensFeature(NoneFeatureConfiguration.CODEC)); public static final RegistryObject ELYTHIA_MOLEWORM_SURFACE_MOUNDS = FEATURES.register("elythia_moleworm_surface_mounds", () -> new MolewormSurfaceMoundsFeature(NoneFeatureConfiguration.CODEC)); - public static final RegistryObject TRIFFID_PATCH = FEATURES.register("flytrap_patch", - () -> new TriffidPatchFeature(NoneFeatureConfiguration.CODEC)); + public static final RegistryObject FLYTRAP_PATCH = FEATURES.register("flytrap_patch", + () -> new FlytrapPatchFeature(NoneFeatureConfiguration.CODEC)); public static final RegistryObject ELYTHIA_POND = FEATURES.register("elythia_pond", () -> new ElythiaPondFeature(NoneFeatureConfiguration.CODEC)); public static final RegistryObject LUMEN_POOL = FEATURES.register("lumen_pools", () -> new LumenPoolFeature(NoneFeatureConfiguration.CODEC)); public static final RegistryObject LUMEN_LILY_PADS = FEATURES.register("lumen_lily_pads", () -> new LumenLilyPadFeature(NoneFeatureConfiguration.CODEC)); + public static final RegistryObject GLIMMERING_REEDS = FEATURES.register("glimmering_reeds", + () -> new com.craisinlord.antarchy.content.worldgen.elythia.GlimmeringReedFeature(NoneFeatureConfiguration.CODEC)); + public static final RegistryObject SPIRALING_VINES = FEATURES.register("spiraling_vines", + () -> new NaturalDirectionalVineFeature(NoneFeatureConfiguration.CODEC, "spiraling_vines", net.minecraft.core.Direction.UP, 4, 12)); + public static final RegistryObject GOREVINE = FEATURES.register("gorevine", + () -> new NaturalDirectionalVineFeature(NoneFeatureConfiguration.CODEC, "gorevine", net.minecraft.core.Direction.DOWN, 8, 16)); public static final RegistryObject GIANT_LILY_PAD_PATCH = FEATURES.register("giant_lily_pad_patch", () -> new com.craisinlord.antarchy.content.worldgen.elythia.GiantLilyPadPatchFeature(NoneFeatureConfiguration.CODEC)); public static final RegistryObject GIANT_LILY_PAD_PATCH_PEACH_FOREST = FEATURES.register("giant_lily_pad_patch_peach_forest", @@ -294,24 +353,26 @@ public final class AntarchyForgeMisc { () -> new PeachForestPondFeature(PeachForestPondConfiguration.CODEC)); public static final RegistryObject ELYTHIA_CORAL_SPIKE = FEATURES.register("elythia_coral_spike", () -> new CoralSpikeFeature(NoneFeatureConfiguration.CODEC)); - public static final RegistryObject DIMENSIONAL_TEAR = FEATURES.register("dimensional_tear", - () -> new DimensionalTearFeature(NoneFeatureConfiguration.CODEC)); - public static final RegistryObject FALLEN_OURANWOOD_TREE = FEATURES.register("fallen_ouranwood_tree", - () -> new com.craisinlord.antarchy.content.worldgen.elythia.FallenOuranwoodFeature(NoneFeatureConfiguration.CODEC)); - public static final RegistryObject FUNGAL_MUSHROOM = FEATURES.register("fungal_mushroom", - () -> new com.craisinlord.antarchy.content.worldgen.elythia.FungalMushroomFeature(NoneFeatureConfiguration.CODEC)); + public static final RegistryObject FALLEN_OURANWOOD_TREE = FEATURES.register("fallen_ouranwood_tree", + () -> new FallenOuranwoodFeature(NoneFeatureConfiguration.CODEC)); + public static final RegistryObject FUNGAL_MUSHROOM = FEATURES.register("fungal_mushroom", + () -> new FungalMushroomFeature(NoneFeatureConfiguration.CODEC)); public static final RegistryObject THORAXIS_FISSURE = FEATURES.register("thoraxis_fissure", () -> new ThoraxisFissureFeature(ThoraxisFissureConfiguration.CODEC)); - public static final RegistryObject QUEEN_HAVOC_TRAIL = FEATURES.register("queen_havoc_trail", - QueenHavocTrailFeature::new); public static final RegistryObject THORAXIS_TRANSITION_THROAT = FEATURES.register("thoraxis_transition_throat", ThoraxisTransitionThroatFeature::new); + public static final RegistryObject QUEEN_HAVOC_TRAIL = FEATURES.register("queen_havoc_trail", + QueenHavocTrailFeature::new); public static final RegistryObject THORAXIS_RIB_COLUMNS = FEATURES.register("thoraxis_rib_columns", () -> new ThoraxisRibColumnsFeature(ThoraxisRibColumnsConfiguration.CODEC)); public static final RegistryObject THORAXIS_SPIKE = FEATURES.register("thoraxis_spike", () -> new ThoraxisSpikeFeature(ThoraxisSpikeConfiguration.CODEC)); public static final RegistryObject NYXITE_SPIKES = FEATURES.register("nyxite_spikes", () -> new NyxiteSpikeFeature(NyxiteSpikeConfiguration.CODEC)); + public static final RegistryObject TYPHONITE_SPIKES = FEATURES.register("typhonite_spikes", + () -> new TyphoniteSpikeFeature(TyphoniteSpikeConfiguration.CODEC)); + public static final RegistryObject TYPHONITE_SWIRLS = FEATURES.register("typhonite_swirls", + () -> new TyphoniteSwirlFeature(NoneFeatureConfiguration.CODEC)); public static final RegistryObject CAVARYN_CHITIN_SPIKES = FEATURES.register("cavaryn_chitin_spikes", () -> new ChitinSpikeFeature(ChitinSpikeConfiguration.CODEC)); public static final RegistryObject CAVARYN_BILE_VEINS = FEATURES.register("cavaryn_bile_veins", @@ -320,14 +381,16 @@ public final class AntarchyForgeMisc { () -> new CavarynBileCystFeature(NoneFeatureConfiguration.CODEC)); public static final RegistryObject CAVARYN_CREEPVINE = FEATURES.register("cavaryn_creepvine", () -> new CavarynCreepvineFeature(NoneFeatureConfiguration.CODEC)); + public static final RegistryObject HANGING_CREEPROOTS = FEATURES.register("hanging_creeproots", () -> new HangingCreeprootsFeature(NoneFeatureConfiguration.CODEC)); + public static final RegistryObject MOLTING_VINES = FEATURES.register("molting_vines", () -> new MoltingVinesFeature(NoneFeatureConfiguration.CODEC)); public static final RegistryObject GROUND_MOLTING_VINES = FEATURES.register("ground_molting_vines", () -> new com.craisinlord.antarchy.content.worldgen.cavaryn.GroundMoltingVinesFeature(NoneFeatureConfiguration.CODEC)); - public static final RegistryObject JUMPY_BUG_EGG_CEILING = FEATURES.register("springbug_egg_ceiling", - () -> new com.craisinlord.antarchy.content.worldgen.cavaryn.JumpyBugEggCeilingFeature(NoneFeatureConfiguration.CODEC)); + public static final RegistryObject SPRINGBUG_EGG_CEILING = FEATURES.register("springbug_egg_ceiling", + () -> new com.craisinlord.antarchy.content.worldgen.cavaryn.SpringbugEggCeilingFeature(NoneFeatureConfiguration.CODEC)); public static final RegistryObject SPIT_BUG_EGG_PATCH = FEATURES.register("spit_bug_egg_patch", () -> new com.craisinlord.antarchy.content.worldgen.cavaryn.SpitBugEggPatchFeature(NoneFeatureConfiguration.CODEC)); public static final RegistryObject ROLLY_CAVES_GIANT_CAVERN = FEATURES.register("rolly_caves_giant_cavern", @@ -352,34 +415,29 @@ public final class AntarchyForgeMisc { () -> new com.craisinlord.antarchy.content.worldgen.mushroom.GlowcapHugeMushroomFeature(NoneFeatureConfiguration.CODEC)); public static final RegistryObject HUGE_GLOWCAP_MUSHROOM_WORLDGEN = FEATURES.register("huge_glowcap_mushroom_worldgen", () -> new com.craisinlord.antarchy.content.worldgen.mushroom.GlowcapHugeMushroomWorldgenFeature(NoneFeatureConfiguration.CODEC)); - public static final RegistryObject THORAXIS_ANTIWATER_POOL = FEATURES.register("thoraxis_antiwater_pool", - () -> new ThoraxisAntiwaterPoolFeature(ThoraxisAntiwaterPoolConfiguration.CODEC)); public static final RegistryObject LUCID_ANTIWATER_POOL = FEATURES.register("lucid_antiwater_pool", () -> new LucidAntiwaterPoolFeature(ThoraxisAntiwaterPoolConfiguration.CODEC)); public static final RegistryObject THORAXIS_DUNE = FEATURES.register("thoraxis_dune", () -> new ThoraxisDuneFeature(ThoraxisDuneConfiguration.CODEC)); + public static final RegistryObject DIMENSIONAL_TEAR = FEATURES.register("dimensional_tear", + () -> new DimensionalTearFeature(NoneFeatureConfiguration.CODEC)); + + public static final RegistryObject THORAXIS_ICHOR_LAKE = FEATURES.register("thoraxis_ichor_lake", + () -> new ThoraxisIchorLakeFeature(NoneFeatureConfiguration.CODEC)); - // Biome sources public static final RegistryObject> ELYTHIA_BIOME_SOURCE = BIOME_SOURCES.register("elythia_biome_source", () -> ElythiaBiomeSource.CODEC); public static final RegistryObject> THORAXIS_BIOME_SOURCE = BIOME_SOURCES.register("thoraxis_biome_source", () -> ThoraxisBiomeSource.CODEC); - // Density function public static final RegistryObject> ELYTHIA_RIVER_CARVE = DENSITY_FUNCTION_TYPES.register("elythia_river_carve", () -> ElythiaRiverCarveFunction.KEY_CODEC.codec()); private AntarchyForgeMisc() {} - public static MobEffect mobEffectHolder(RegistryObject effect) { - return effect.get(); - } - - public static Holder attributeHolder(RegistryObject attribute) { - return BuiltInRegistries.ATTRIBUTE.wrapAsHolder(attribute.get()); - } - public static void register(IEventBus modEventBus) { + POI_TYPES.register(modEventBus); + VILLAGER_PROFESSIONS.register(modEventBus); MOB_EFFECTS.register(modEventBus); POTIONS.register(modEventBus); FLUID_TYPES.register(modEventBus); @@ -395,7 +453,6 @@ public final class AntarchyForgeMisc { RECIPE_SERIALIZERS.register(modEventBus); } - static ForgeFlowingFluid.Properties ichorProperties() { return new ForgeFlowingFluid.Properties(com.craisinlord.antarchy.forge.AntarchyForgeFluidTypes.ICHOR_TYPE, ICHOR, FLOWING_ICHOR) .bucket(() -> AntarchyForgeItems.ICHOR_BUCKET.get()) @@ -432,11 +489,6 @@ public final class AntarchyForgeMisc { .tickRate(5); } - private static SimpleParticleType simpleParticleType() { - return new SimpleParticleType(true) { - }; - } - private static ParticleType particleType( net.minecraft.core.particles.ParticleOptions.Deserializer deserializer ) { @@ -447,4 +499,8 @@ public final class AntarchyForgeMisc { } }; } + + public static Holder attributeHolder(RegistryObject attribute) { + return BuiltInRegistries.ATTRIBUTE.wrapAsHolder(attribute.get()); + } } diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgePayloadHandlers.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgePayloadHandlers.java index 36a63b1e..2b8fba24 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgePayloadHandlers.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgePayloadHandlers.java @@ -1,46 +1,178 @@ package com.craisinlord.antarchy.forge.registry; import com.craisinlord.antarchy.content.network.BloodCrystalKatanaTrailPayload; -import com.craisinlord.antarchy.forge.network.AntarchyForgeNetworkCore; +import com.craisinlord.antarchy.content.network.ToggleTigerEyeCamouflagePayload; +import com.craisinlord.antarchy.content.item.TigerEyeArmorUtil; +import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageController; import com.craisinlord.antarchy.forge.network.AntarchyGravityNetworking; import com.craisinlord.antarchy.forge.network.BrutalflyElytraNetworking; import com.craisinlord.antarchy.forge.network.DorrieJumpNetworking; import com.craisinlord.antarchy.forge.network.HerculesBeetleNetworking; -import com.craisinlord.antarchy.forge.network.JumpyBootsNetworking; -import com.craisinlord.antarchy.forge.network.MultipartNetworking; -import com.craisinlord.antarchy.forge.network.TigerEyeNetworking; +import com.craisinlord.antarchy.forge.network.SpringyBootsNetworking; +import com.craisinlord.antarchy.forge.network.AntarchyForgePayloadRegistrar; public class AntarchyForgePayloadHandlers { private AntarchyForgePayloadHandlers() {} public static void register() { - AntarchyGravityNetworking.register(); - BrutalflyElytraNetworking.register(); - JumpyBootsNetworking.register(); - DorrieJumpNetworking.register(); - HerculesBeetleNetworking.register(); - TigerEyeNetworking.register(); - AntarchyForgeNetworkCore.registerS2C( - com.craisinlord.antarchy.content.network.BloodglassStatePayload.class, + registerPayloadHandlers(new AntarchyForgePayloadRegistrar()); + } + + static void registerPayloadHandlers(AntarchyForgePayloadRegistrar registrar) { + registrar.playToServer( + com.craisinlord.antarchy.content.network.AntarchyGamePayload.TYPE, + com.craisinlord.antarchy.content.network.AntarchyGamePayload.STREAM_CODEC, + (payload, ctx) -> ctx.enqueueWork(() -> { + if (ctx.player() instanceof net.minecraft.server.level.ServerPlayer player) { + com.craisinlord.antarchy.content.network.AntarchyGameNetworkHandler.handle(player, payload); + } + }) + ); + registrar.playToClient( + com.craisinlord.antarchy.content.network.AntarchyGameResultPayload.TYPE, + com.craisinlord.antarchy.content.network.AntarchyGameResultPayload.STREAM_CODEC, + (payload, ctx) -> ctx.enqueueWork(() -> com.craisinlord.antarchy.content.client.AntarchyGameClientState.update(payload)) + ); + AntarchyGravityNetworking.register(registrar); + BrutalflyElytraNetworking.register(registrar); + SpringyBootsNetworking.register(registrar); + DorrieJumpNetworking.register(registrar); + HerculesBeetleNetworking.register(registrar); + registrar.playToClient( + com.craisinlord.antarchy.content.network.KingJudgmentFlashPayload.TYPE, + com.craisinlord.antarchy.content.network.KingJudgmentFlashPayload.STREAM_CODEC, + (payload, ctx) -> ctx.enqueueWork(() -> + com.craisinlord.antarchy.content.client.KingJudgmentFlashClientState.trigger(payload.durationTicks())) + ); + registrar.playToClient( + com.craisinlord.antarchy.content.network.BloodglassStatePayload.TYPE, com.craisinlord.antarchy.content.network.BloodglassStatePayload.STREAM_CODEC, - payload -> com.craisinlord.antarchy.content.client.BloodglassClientState.update(payload.shieldsActive(), payload.shieldsMax()) + (payload, ctx) -> ctx.enqueueWork(() -> + com.craisinlord.antarchy.content.client.BloodglassClientState.update(payload.shieldsActive(), payload.shieldsMax()) + ) ); - AntarchyForgeNetworkCore.registerS2C( - BloodCrystalKatanaTrailPayload.class, + registrar.playToClient( + com.craisinlord.antarchy.content.network.TigerEyeCamouflageStatePayload.TYPE, + com.craisinlord.antarchy.content.network.TigerEyeCamouflageStatePayload.STREAM_CODEC, + (payload, ctx) -> ctx.enqueueWork(() -> + com.craisinlord.antarchy.content.client.TigerEyeCamouflageClientState.update(payload.entityId(), payload.active(), payload.blockStateId()) + ) + ); + registrar.playToServer( + com.craisinlord.antarchy.content.network.ActivateRoyalBoundaryPayload.TYPE, + com.craisinlord.antarchy.content.network.ActivateRoyalBoundaryPayload.STREAM_CODEC, + (payload, ctx) -> ctx.enqueueWork(() -> { + if (ctx.player() instanceof net.minecraft.server.level.ServerPlayer player) { + com.craisinlord.antarchy.content.effect.RoyalBoundaryManager.activate(player); + } + }) + ); + registrar.playToServer( + com.craisinlord.antarchy.content.network.ToggleRoyalInversionPayload.TYPE, + com.craisinlord.antarchy.content.network.ToggleRoyalInversionPayload.STREAM_CODEC, + (payload, ctx) -> ctx.enqueueWork(() -> { + if (ctx.player() instanceof net.minecraft.server.level.ServerPlayer player) { + com.craisinlord.antarchy.content.item.RoyalAssailantArmorItem.toggleInversion(player); + } + }) + ); + registrar.playToServer( + com.craisinlord.antarchy.content.network.OpenGiantFryingPanPayload.TYPE, + com.craisinlord.antarchy.content.network.OpenGiantFryingPanPayload.STREAM_CODEC, + (payload, ctx) -> ctx.enqueueWork(() -> { + if (ctx.player() instanceof net.minecraft.server.level.ServerPlayer player) { + com.craisinlord.antarchy.content.item.GiantFryingPanItem.openHeldMenu(player); + } + }) + ); + registrar.playToServer( + com.craisinlord.antarchy.content.network.RoyalMountActionPayload.TYPE, + com.craisinlord.antarchy.content.network.RoyalMountActionPayload.STREAM_CODEC, + (payload, ctx) -> ctx.enqueueWork(() -> { + if (ctx.player() instanceof net.minecraft.server.level.ServerPlayer mountingPlayer + && payload.action() == com.craisinlord.antarchy.content.network.RoyalMountActionPayload.MOUNT) { + com.craisinlord.antarchy.content.entity.royal.RoyalMountEntity.tryAssistedMount(mountingPlayer); + return; + } + if (!(ctx.player() instanceof net.minecraft.server.level.ServerPlayer player) + || !(player.getVehicle() instanceof com.craisinlord.antarchy.content.entity.royal.RoyalMountEntity mount)) { + return; + } + switch (payload.action()) { + case com.craisinlord.antarchy.content.network.RoyalMountActionPayload.FLIGHT_TOGGLE -> mount.toggleMountedFlight(player); + case com.craisinlord.antarchy.content.network.RoyalMountActionPayload.BITE -> mount.handleMountedBite(player); + case com.craisinlord.antarchy.content.network.RoyalMountActionPayload.SPIT -> mount.handleMountedSpit(player); + default -> { + } + } + }) + ); + registrar.playToServer( + com.craisinlord.antarchy.content.network.RoyalMountVerticalPayload.TYPE, + com.craisinlord.antarchy.content.network.RoyalMountVerticalPayload.STREAM_CODEC, + (payload, ctx) -> ctx.enqueueWork(() -> { + if (ctx.player() instanceof net.minecraft.server.level.ServerPlayer player + && player.getVehicle() instanceof com.craisinlord.antarchy.content.entity.royal.RoyalMountEntity mount) { + mount.setRiderAscend(payload.ascend()); + mount.setRiderDescend(payload.descend()); + } + }) + ); + registrar.playToServer( + ToggleTigerEyeCamouflagePayload.TYPE, + ToggleTigerEyeCamouflagePayload.STREAM_CODEC, + (payload, ctx) -> ctx.enqueueWork(() -> { + if (!(ctx.player() instanceof net.minecraft.server.level.ServerPlayer player)) { + return; + } + TigerEyeCamouflageController.ToggleResult result = TigerEyeCamouflageController.toggle(player); + if (result != TigerEyeCamouflageController.ToggleResult.NO_CHANGE) { + com.craisinlord.antarchy.forge.network.AntarchyForgeNetworkCore.sendToTrackingEntity( + player, + com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageSync.payload(player) + ); + } + String messageKey = switch (result) { + case ACTIVATED -> "message.antarchy.tiger_eye_camouflage.activated"; + case DEACTIVATED -> "message.antarchy.tiger_eye_camouflage.disabled"; + case FULL_SET_REQUIRED -> TigerEyeArmorUtil.countEquippedPieces(player) > 0 + ? "message.antarchy.tiger_eye_camouflage.full_set_required" + : null; + case INVALID_BLOCK -> "message.antarchy.tiger_eye_camouflage.invalid_block"; + case NO_CHANGE -> null; + }; + if (messageKey != null) { + player.displayClientMessage(net.minecraft.network.chat.Component.translatable(messageKey), true); + } + }) + ); + registrar.playToClient( + BloodCrystalKatanaTrailPayload.TYPE, BloodCrystalKatanaTrailPayload.STREAM_CODEC, - payload -> com.craisinlord.antarchy.content.client.BloodCrystalKatanaTrailClientState.trigger(payload.entityId(), payload.durationTicks()) + (payload, ctx) -> ctx.enqueueWork(() -> + com.craisinlord.antarchy.content.client.BloodCrystalKatanaTrailClientState.trigger(payload.entityId(), payload.durationTicks()) + ) ); - AntarchyForgeNetworkCore.registerS2C( - com.craisinlord.antarchy.content.network.ScorpionWhipTetherPayload.class, + registrar.playToClient( + com.craisinlord.antarchy.content.network.ScorpionWhipTetherPayload.TYPE, com.craisinlord.antarchy.content.network.ScorpionWhipTetherPayload.STREAM_CODEC, - payload -> com.craisinlord.antarchy.content.client.ScorpionWhipTetherClientState.update(payload.playerId(), payload.targetId()) + (payload, ctx) -> ctx.enqueueWork(() -> + com.craisinlord.antarchy.content.client.ScorpionWhipTetherClientState.update(payload.playerId(), payload.targetId()) + ) ); - AntarchyForgeNetworkCore.registerS2C( - com.craisinlord.antarchy.content.network.HordeIntensityPayload.class, + registrar.playToClient( + com.craisinlord.antarchy.content.network.WormHookTetherPayload.TYPE, + com.craisinlord.antarchy.content.network.WormHookTetherPayload.STREAM_CODEC, + (payload, ctx) -> ctx.enqueueWork(() -> + com.craisinlord.antarchy.content.client.WormHookTetherClientState.update(payload.playerId(), payload.hookId()) + ) + ); + registrar.playToClient( + com.craisinlord.antarchy.content.network.HordeIntensityPayload.TYPE, com.craisinlord.antarchy.content.network.HordeIntensityPayload.STREAM_CODEC, - payload -> com.craisinlord.antarchy.content.client.HordeClientState.update(payload.intensity()) + (payload, ctx) -> ctx.enqueueWork(() -> + com.craisinlord.antarchy.content.client.HordeClientState.update(payload.intensity()) + ) ); - MultipartNetworking.register(); - com.craisinlord.antarchy.forge.network.AntarchyTimeDilationNetworking.register(); } } diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeSounds.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeSounds.java index 1f365dd0..1989e36d 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeSounds.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeSounds.java @@ -11,20 +11,24 @@ public final class AntarchyForgeSounds { private static final DeferredRegister SOUND_EVENTS = DeferredRegister.create(Registries.SOUND_EVENT, Antarchy.MODID); public static final RegistryObject SQUIDZOOKA_FIRE = registerSoundEvent("squidzooka_fire"); - public static final RegistryObject SHRINK_RAY_SOUND = registerSoundEvent("shrink_ray"); - public static final RegistryObject GROWTH_RAY_SOUND = registerSoundEvent("growth_ray"); - public static final RegistryObject SIZE_RAY_CHARGE = registerSoundEvent("size_ray_charge"); + public static final RegistryObject SHRINK_RAY_CHARGE = registerSoundEvent("shrink_ray_charge"); + public static final RegistryObject SHRINK_RAY_LOOP = registerSoundEvent("shrink_ray_loop"); + public static final RegistryObject GROWTH_RAY_CHARGE = registerSoundEvent("growth_ray_charge"); + public static final RegistryObject GROWTH_RAY_LOOP = registerSoundEvent("growth_ray_loop"); + public static final RegistryObject SIZE_RAY_WEAKSHOT = registerSoundEvent("size_ray_weakshot"); + public static final RegistryObject SIZE_RAY_MEDIUMSHOT = registerSoundEvent("size_ray_mediumshot"); + public static final RegistryObject SIZE_RAY_CRITSHOT = registerSoundEvent("size_ray_critshot"); public static final RegistryObject ANT_AMBIENT = registerSoundEvent("ant_ambient"); public static final RegistryObject ANT_IDLE = registerSoundEvent("ant_idle"); public static final RegistryObject ANT_HURT = registerSoundEvent("ant_hurt"); public static final RegistryObject ANT_BITE = registerSoundEvent("ant_bite"); public static final RegistryObject ANT_GATHER = registerSoundEvent("ant_gather"); public static final RegistryObject ANT_NEST = registerSoundEvent("ant_nest"); - public static final RegistryObject CLOUD_SHARK_BITE = registerSoundEvent("stratoshark_bite"); - public static final RegistryObject CLOUD_SHARK_IDLE = registerSoundEvent("stratoshark_idle"); - public static final RegistryObject CLOUD_SHARK_HURT = registerSoundEvent("stratoshark_hurt"); - public static final RegistryObject CLOUD_SHARK_DEATH = registerSoundEvent("stratoshark_death"); - public static final RegistryObject CLOUD_SHARK_FLY = registerSoundEvent("stratoshark_fly"); + public static final RegistryObject STRATOSHARK_BITE = registerSoundEvent("stratoshark_bite"); + public static final RegistryObject STRATOSHARK_IDLE = registerSoundEvent("stratoshark_idle"); + public static final RegistryObject STRATOSHARK_HURT = registerSoundEvent("stratoshark_hurt"); + public static final RegistryObject STRATOSHARK_DEATH = registerSoundEvent("stratoshark_death"); + public static final RegistryObject STRATOSHARK_FLY = registerSoundEvent("stratoshark_fly"); public static final RegistryObject CATERPILLAR_IDLE = registerSoundEvent("caterpillar_idle"); public static final RegistryObject CATERPILLAR_HURT = registerSoundEvent("caterpillar_hurt"); public static final RegistryObject CATERPILLAR_CRAWL = registerSoundEvent("caterpillar_crawl"); @@ -63,6 +67,16 @@ public final class AntarchyForgeSounds { public static final RegistryObject THORAXIS_LUCID_POOLS_ADDITIONS = registerSoundEvent("thoraxis_lucid_pools_additions"); public static final RegistryObject THORAXIS_LUCID_POOLS_BIOME_ADDITIONS = registerSoundEvent("thoraxis_lucid_pools_biome_additions"); public static final RegistryObject THORAXIS_LUCID_POOLS_MOOD = registerSoundEvent("thoraxis_lucid_pools_mood"); + public static final RegistryObject LUCID_LULLABY = registerSoundEvent("lucid_lullaby"); + public static final RegistryObject WHISTLING_VOID = registerSoundEvent("whistling_void"); + public static final RegistryObject MUSIC_GAME_THORAXIS = registerSoundEvent("music.game.thoraxis"); + public static final RegistryObject DIMENSIONAL_TEAR_OPEN = registerSoundEvent("dimensional_tear_open"); + public static final RegistryObject DIMENSIONAL_TEAR_IDLE = registerSoundEvent("dimensional_tear_idle"); + public static final RegistryObject DIMENSIONAL_TEAR_CREATURE_LEAVES = registerSoundEvent("dimensional_tear_creature_leaves"); + public static final RegistryObject DIMENSIONAL_TEAR_CLOSE = registerSoundEvent("dimensional_tear_close"); + public static final RegistryObject MUSIC_GAME_CAVARYN = registerSoundEvent("music.game.cavaryn"); + public static final RegistryObject WISTFUL_WANDERINGS = registerSoundEvent("wistful_wanderings"); + public static final RegistryObject MUSIC_GAME_ELYTHIA = registerSoundEvent("music.game.elythia"); public static final RegistryObject LUCID_AMBIENT = registerSoundEvent("lucid_ambient"); public static final RegistryObject LUCID_FLYING = registerSoundEvent("lucid_flying"); public static final RegistryObject LUCID_ATTACK = registerSoundEvent("lucid_attack"); @@ -87,21 +101,34 @@ public final class AntarchyForgeSounds { public static final RegistryObject NIGHTMARE_DEATH = registerSoundEvent("nightmare_death"); public static final RegistryObject NIGHTMARE_BITE = registerSoundEvent("nightmare_bite"); public static final RegistryObject NIGHTMARE_FLAP = registerSoundEvent("nightmare_flap"); - public static final RegistryObject TRIFFID_ATTACK = registerSoundEvent("flytrap_attack"); - public static final RegistryObject TRIFFID_GRAB = registerSoundEvent("flytrap_grab"); - public static final RegistryObject TRIFFID_HURT = registerSoundEvent("flytrap_hurt"); - public static final RegistryObject TRIFFID_DEATH = registerSoundEvent("flytrap_death"); - public static final RegistryObject TRIFFID_HISS = registerSoundEvent("flytrap_hiss"); - public static final RegistryObject TRIFFID_GROWL = registerSoundEvent("flytrap_growl"); + public static final RegistryObject FLYTRAP_ATTACK = registerSoundEvent("flytrap_attack"); + public static final RegistryObject FLYTRAP_GRAB = registerSoundEvent("flytrap_grab"); + public static final RegistryObject FLYTRAP_HURT = registerSoundEvent("flytrap_hurt"); + public static final RegistryObject FLYTRAP_DEATH = registerSoundEvent("flytrap_death"); + public static final RegistryObject FLYTRAP_HISS = registerSoundEvent("flytrap_hiss"); + public static final RegistryObject FLYTRAP_GROWL = registerSoundEvent("flytrap_growl"); public static final RegistryObject MANTIS_AMBIENT = registerSoundEvent("mantis_ambient"); public static final RegistryObject MANTIS_HURT = registerSoundEvent("mantis_hurt"); public static final RegistryObject MANTIS_ATTACK = registerSoundEvent("mantis_attack"); public static final RegistryObject MANTIS_FLY_LOOP = registerSoundEvent("mantis_fly_loop"); + public static final RegistryObject MANTICORE_IDLE = registerSoundEvent("manticore_idle"); + public static final RegistryObject MANTICORE_WALK = registerSoundEvent("manticore_walk"); + public static final RegistryObject MANTICORE_FLY = registerSoundEvent("manticore_fly"); + public static final RegistryObject MANTICORE_BITE = registerSoundEvent("manticore_bite"); public static final RegistryObject GRAVITY_GUN_PICKUP = registerSoundEvent("gravity_gun_pickup"); public static final RegistryObject GRAVITY_GUN_DROP = registerSoundEvent("gravity_gun_drop"); public static final RegistryObject GRAVITY_GUN_HOLD_LOOP = registerSoundEvent("gravity_gun_hold_loop"); public static final RegistryObject GRAVITY_GUN_LAUNCH = registerSoundEvent("gravity_gun_launch"); public static final RegistryObject GRAVITY_GUN_DRYFIRE = registerSoundEvent("gravity_gun_dryfire"); + public static final RegistryObject PORTAL_GUN_FIRE_BLUE = registerSoundEvent("portal_gun_fire_blue"); + public static final RegistryObject PORTAL_GUN_FIRE_ORANGE = registerSoundEvent("portal_gun_fire_orange"); + public static final RegistryObject PORTAL_GUN_INVALID_SURFACE = registerSoundEvent("portal_gun_invalid_surface"); + public static final RegistryObject PORTAL_OPEN_BLUE = registerSoundEvent("portal_open_blue"); + public static final RegistryObject PORTAL_OPEN_ORANGE = registerSoundEvent("portal_open_orange"); + public static final RegistryObject PORTAL_FIZZLE = registerSoundEvent("portal_fizzle"); + public static final RegistryObject PORTAL_ENTER = registerSoundEvent("portal_enter"); + public static final RegistryObject PORTAL_EXIT = registerSoundEvent("portal_exit"); + public static final RegistryObject PORTAL_AMBIENT = registerSoundEvent("portal_ambient"); public static final RegistryObject BED_BUG_AMBIENT = registerSoundEvent("bed_bug_ambient"); public static final RegistryObject BED_BUG_HURT = registerSoundEvent("bed_bug_hurt"); public static final RegistryObject BED_BUG_ATTACK = registerSoundEvent("bed_bug_attack"); @@ -140,27 +167,28 @@ public final class AntarchyForgeSounds { public static final RegistryObject STINK_BUG_FART = registerSoundEvent("stink_bug_fart"); public static final RegistryObject STINK_BUG_IDLE = registerSoundEvent("stink_bug_idle"); public static final RegistryObject CAVARYN_HEARTBEAT = registerSoundEvent("cavaryn_heartbeat"); + public static final RegistryObject VENENATUS = registerSoundEvent("venenatus"); public static final RegistryObject ROLLY_POLLY_IDLE = registerSoundEvent("rolly_polly_idle"); public static final RegistryObject ROLLY_POLLY_WHEEL_MODE = registerSoundEvent("rolly_polly_wheel_mode"); public static final RegistryObject ROLLY_POLLY_NORMAL_MODE = registerSoundEvent("rolly_polly_normal_mode"); public static final RegistryObject ROLLY_POLLY_ROLL = registerSoundEvent("rolly_polly_roll"); - public static final RegistryObject CREEPING_HORROR_GROWL = registerSoundEvent("crawling_blight_growl"); - public static final RegistryObject CREEPING_HORROR_HURT = registerSoundEvent("crawling_blight_hurt"); - public static final RegistryObject CREEPING_HORROR_BITE = registerSoundEvent("crawling_blight_bite"); - public static final RegistryObject LURKING_TERROR_SNARL = registerSoundEvent("skulking_fright_snarl"); - public static final RegistryObject LURKING_TERROR_HURT = registerSoundEvent("skulking_fright_hurt"); - public static final RegistryObject LURKING_TERROR_BITE = registerSoundEvent("skulking_fright_bite"); - public static final RegistryObject LURKING_TERROR_FLY_LOOP = registerSoundEvent("skulking_fright_fly_loop"); + public static final RegistryObject CRAWLING_BLIGHT_GROWL = registerSoundEvent("crawling_blight_growl"); + public static final RegistryObject CRAWLING_BLIGHT_HURT = registerSoundEvent("crawling_blight_hurt"); + public static final RegistryObject CRAWLING_BLIGHT_BITE = registerSoundEvent("crawling_blight_bite"); + public static final RegistryObject SKULKING_FRIGHT_SNARL = registerSoundEvent("skulking_fright_snarl"); + public static final RegistryObject SKULKING_FRIGHT_HURT = registerSoundEvent("skulking_fright_hurt"); + public static final RegistryObject SKULKING_FRIGHT_BITE = registerSoundEvent("skulking_fright_bite"); + public static final RegistryObject SKULKING_FRIGHT_FLY_LOOP = registerSoundEvent("skulking_fright_fly_loop"); public static final RegistryObject HERCULES_BEETLE_IDLE = registerSoundEvent("hercules_beetle_idle"); public static final RegistryObject HERCULES_BEETLE_HURT = registerSoundEvent("hercules_beetle_hurt"); public static final RegistryObject HERCULES_BEETLE_ATTACK = registerSoundEvent("hercules_beetle_attack"); public static final RegistryObject HERCULES_BEETLE_CRY = registerSoundEvent("hercules_beetle_cry"); public static final RegistryObject HERCULES_BEETLE_CHARGE_START = registerSoundEvent("hercules_beetle_charge_start"); public static final RegistryObject HERCULES_BEETLE_KNOCKED_DOWN = registerSoundEvent("hercules_beetle_knocked_down"); - public static final RegistryObject JUMPY_BUG_IDLE = registerSoundEvent("springbug_idle"); + public static final RegistryObject SPRINGBUG_IDLE = registerSoundEvent("springbug_idle"); public static final RegistryObject SPIT_BUG_IDLE = registerSoundEvent("spit_bug_idle"); - public static final RegistryObject JUMPY_BUG_HURT = registerSoundEvent("springbug_hurt"); - public static final RegistryObject JUMPY_BUG_JUMP = registerSoundEvent("springbug_jump"); + public static final RegistryObject SPRINGBUG_HURT = registerSoundEvent("springbug_hurt"); + public static final RegistryObject SPRINGBUG_JUMP = registerSoundEvent("springbug_jump"); public static final RegistryObject SPIT_BUG_HURT = registerSoundEvent("spit_bug_hurt"); public static final RegistryObject SPIT_BUG_SPIT = registerSoundEvent("spit_bug_spit"); public static final RegistryObject BRUTALFLY_SPIT = registerSoundEvent("brutalfly_spit"); @@ -178,6 +206,67 @@ public final class AntarchyForgeSounds { public static final RegistryObject POTENT_NYXITE_GEYSER_ERUPTION_ACTIVE = registerSoundEvent("potent_nyxite_geyser_eruption_active"); public static final RegistryObject POTENT_NYXITE_GEYSER_CONTINUOUS_START = registerSoundEvent("potent_nyxite_geyser_continuous_start"); public static final RegistryObject POTENT_NYXITE_GEYSER_CONTINUOUS_ACTIVE = registerSoundEvent("potent_nyxite_geyser_continuous_active"); + public static final RegistryObject MUSIC_DISC_UNDERSIDE = registerSoundEvent("music_disc_underside"); + public static final RegistryObject THE_QUEEN = registerSoundEvent("the_queen"); + public static final RegistryObject MUSIC_DISC_VERDANCE = registerSoundEvent("music_disc_verdance"); + public static final RegistryObject MUSIC_DISC_GROTESQUE = registerSoundEvent("music_disc_grotesque"); + public static final RegistryObject WORM_HOOK_FLYING = registerSoundEvent("worm_hook_flying"); + public static final RegistryObject BLOOD_CRYSTAL_KATANA_DASH = registerSoundEvent("blood_crystal_katana_dash"); + public static final RegistryObject BLOOD_CRYSTAL_ARMOR_EQUIP = registerSoundEvent("blood_crystal_armor_equip"); + public static final RegistryObject BLOODGLASS_WARD_HEART_BREAK = registerSoundEvent("bloodglass_ward_heart_break"); + public static final RegistryObject BLOODGLASS_WARD_HEART_REGEN = registerSoundEvent("bloodglass_ward_heart_regen"); + public static final RegistryObject ANTIMETAL_PLACE = registerSoundEvent("antimetal_place"); + public static final RegistryObject ANTIMETAL_STEP = registerSoundEvent("antimetal_step"); + public static final RegistryObject ANTIMETAL_SCAFFOLD = registerSoundEvent("antimetal_scaffold"); + public static final RegistryObject UNDERTRIAL_DETECT_PLAYER1 = registerSoundEvent("undertrial_detect_player1"); + public static final RegistryObject UNDERTRIAL_DETECT_PLAYER2 = registerSoundEvent("undertrial_detect_player2"); + + public static final RegistryObject KING_IDLE = registerSoundEvent("king_idle"); + public static final RegistryObject KING_WALK = registerSoundEvent("king_walk"); + public static final RegistryObject KING_FLY_LOOP = registerSoundEvent("king_fly_loop"); + public static final RegistryObject KING_WING_FLAP = registerSoundEvent("king_wing_flap"); + public static final RegistryObject KING_BITE = registerSoundEvent("king_bite"); + public static final RegistryObject KING_STOMP = registerSoundEvent("king_stomp"); + public static final RegistryObject KING_ROAR = registerSoundEvent("king_roar"); + public static final RegistryObject KING_HURT = registerSoundEvent("king_hurt"); + public static final RegistryObject KING_DEATH = registerSoundEvent("king_death"); + public static final RegistryObject KING_BEAM_SHOOT = registerSoundEvent("king_beam_shoot"); + public static final RegistryObject KING_FIREBALL_SHOOT = registerSoundEvent("king_fireball_shoot"); + public static final RegistryObject KING_ICE_SPIKES = registerSoundEvent("king_ice_spikes"); + public static final RegistryObject KING_DECREE_CAST = registerSoundEvent("king_decree_cast"); + public static final RegistryObject KING_DECREE = registerSoundEvent("king_decree"); + public static final RegistryObject KING_SUCCESS = registerSoundEvent("king_success"); + public static final RegistryObject KING_JUDGEMENT = registerSoundEvent("king_judgement"); + + public static final RegistryObject QUEEN_IDLE = registerSoundEvent("queen_idle"); + public static final RegistryObject QUEEN_WALK = registerSoundEvent("queen_walk"); + public static final RegistryObject QUEEN_FLY_LOOP = registerSoundEvent("queen_fly_loop"); + public static final RegistryObject QUEEN_WING_FLAP = registerSoundEvent("queen_wing_flap"); + public static final RegistryObject QUEEN_BITE = registerSoundEvent("queen_bite"); + public static final RegistryObject QUEEN_STOMP = registerSoundEvent("queen_stomp"); + public static final RegistryObject QUEEN_ROAR = registerSoundEvent("queen_roar"); + public static final RegistryObject QUEEN_HURT = registerSoundEvent("queen_hurt"); + public static final RegistryObject QUEEN_DEATH = registerSoundEvent("queen_death"); + public static final RegistryObject QUEEN_BEAM_SHOOT = registerSoundEvent("queen_beam_shoot"); + public static final RegistryObject QUEEN_BEAM_START = registerSoundEvent("queen_beam_start"); + public static final RegistryObject QUEEN_BEAM_LOOP = registerSoundEvent("queen_beam_loop"); + public static final RegistryObject QUEEN_BEAM_END = registerSoundEvent("queen_beam_end"); + public static final RegistryObject QUEEN_BLACK_HOLE_SHOOT = registerSoundEvent("queen_black_hole_shoot"); + public static final RegistryObject QUEEN_CAST_SHOOT = registerSoundEvent("queen_cast_shoot"); + + public static final RegistryObject PRINCE_IDLE = registerSoundEvent("prince_idle"); + public static final RegistryObject PRINCE_BITE = registerSoundEvent("prince_bite"); + public static final RegistryObject PRINCE_SHOOT = registerSoundEvent("prince_shoot"); + public static final RegistryObject PRINCE_FLY = registerSoundEvent("prince_fly"); + public static final RegistryObject PRINCE_STEP = registerSoundEvent("prince_step"); + public static final RegistryObject PRINCESS_IDLE = registerSoundEvent("princess_idle"); + public static final RegistryObject PRINCESS_BITE = registerSoundEvent("princess_bite"); + public static final RegistryObject PRINCESS_SHOOT = registerSoundEvent("princess_shoot"); + public static final RegistryObject PRINCESS_FLY = registerSoundEvent("princess_fly"); + public static final RegistryObject PRINCESS_STEP = registerSoundEvent("princess_step"); + public static final RegistryObject HOVERBOARD_MOUNT = registerSoundEvent("hoverboard_mount"); + public static final RegistryObject HOVERBOARD_DISMOUNT = registerSoundEvent("hoverboard_dismount"); + public static final RegistryObject HOVERBOARD_IDLE = registerSoundEvent("hoverboard_idle"); private AntarchyForgeSounds() {} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeSpawnPlacements.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeSpawnPlacements.java index ada4a3ff..b463db24 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeSpawnPlacements.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeSpawnPlacements.java @@ -3,7 +3,7 @@ package com.craisinlord.antarchy.forge.registry; import com.craisinlord.antarchy.content.entity.*; import net.minecraft.world.entity.animal.AbstractFish; import com.craisinlord.antarchy.content.entity.basilisk.BasiliskEntity; -import com.craisinlord.antarchy.content.entity.cloud_shark.CloudSharkEntity; +import com.craisinlord.antarchy.content.entity.stratoshark.StratosharkEntity; import com.craisinlord.antarchy.content.entity.flying_squirrel.FlyingSquirrelEntity; import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; @@ -30,30 +30,33 @@ public class AntarchyForgeSpawnPlacements { event.register(AntarchyForgeEntites.APPLE_COW.get(), net.minecraft.world.entity.SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Cow::checkAnimalSpawnRules, SpawnPlacementRegisterEvent.Operation.OR); event.register(AntarchyForgeEntites.GOLDEN_APPLE_COW.get(), net.minecraft.world.entity.SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Cow::checkAnimalSpawnRules, SpawnPlacementRegisterEvent.Operation.OR); event.register(AntarchyForgeEntites.ENCHANTED_GOLDEN_APPLE_COW.get(), net.minecraft.world.entity.SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Cow::checkAnimalSpawnRules, SpawnPlacementRegisterEvent.Operation.OR); - event.register(AntarchyForgeEntites.CLOUD_SHARK.get(), net.minecraft.world.entity.SpawnPlacements.Type.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, CloudSharkEntity::canSpawn, SpawnPlacementRegisterEvent.Operation.OR); + event.register(AntarchyForgeEntites.STRATOSHARK.get(), net.minecraft.world.entity.SpawnPlacements.Type.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, StratosharkEntity::canSpawn, SpawnPlacementRegisterEvent.Operation.OR); event.register(AntarchyForgeEntites.WASP.get(), net.minecraft.world.entity.SpawnPlacements.Type.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, WaspEntity::canSpawn, SpawnPlacementRegisterEvent.Operation.OR); event.register(AntarchyForgeEntites.BOMBER.get(), net.minecraft.world.entity.SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BomberEntity::canSpawn, SpawnPlacementRegisterEvent.Operation.OR); - event.register(AntarchyForgeEntites.JUMPY_BUG.get(), net.minecraft.world.entity.SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, JumpyBugEntity::canSpawn, SpawnPlacementRegisterEvent.Operation.OR); + event.register(AntarchyForgeEntites.SPRINGBUG.get(), net.minecraft.world.entity.SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, SpringbugEntity::canSpawn, SpawnPlacementRegisterEvent.Operation.OR); event.register(AntarchyForgeEntites.SPIT_BUG.get(), net.minecraft.world.entity.SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, SpitBugEntity::canSpawn, SpawnPlacementRegisterEvent.Operation.OR); event.register(AntarchyForgeEntites.KRAKEN.get(), net.minecraft.world.entity.SpawnPlacements.Type.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, KrakenEntity::canSpawn, SpawnPlacementRegisterEvent.Operation.OR); event.register(AntarchyForgeEntites.MISSILE_SQUID.get(), net.minecraft.world.entity.SpawnPlacements.Type.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MissileSquidEntity::canSpawn, SpawnPlacementRegisterEvent.Operation.OR); event.register(AntarchyForgeEntites.OCTOPUS_BOMB.get(), net.minecraft.world.entity.SpawnPlacements.Type.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, OctopusBombEntity::canSpawn, SpawnPlacementRegisterEvent.Operation.OR); event.register(AntarchyForgeEntites.NIGHTMARE.get(), net.minecraft.world.entity.SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, NightmareEntity::canSpawn, SpawnPlacementRegisterEvent.Operation.OR); event.register(AntarchyForgeEntites.MOLEWORM.get(), net.minecraft.world.entity.SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MolewormEntity::canSpawn, SpawnPlacementRegisterEvent.Operation.OR); + event.register(AntarchyForgeEntites.WORM.get(), net.minecraft.world.entity.SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, WormEntity::canSpawn, SpawnPlacementRegisterEvent.Operation.OR); event.register(AntarchyForgeEntites.MANTIS.get(), net.minecraft.world.entity.SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MantisEntity::canSpawn, SpawnPlacementRegisterEvent.Operation.OR); event.register(AntarchyForgeEntites.ALPHA_MANTIS.get(), net.minecraft.world.entity.SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, AlphaMantisEntity::checkAlphaMantisSpawnRules, SpawnPlacementRegisterEvent.Operation.OR); event.register(AntarchyForgeEntites.MOLEVORE.get(), net.minecraft.world.entity.SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MolevoreEntity::canSpawn, SpawnPlacementRegisterEvent.Operation.OR); event.register(AntarchyForgeEntites.BED_BUG.get(), net.minecraft.world.entity.SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BedBugEntity::canSpawn, SpawnPlacementRegisterEvent.Operation.OR); - event.register(AntarchyForgeEntites.STINK_BUG.get(), net.minecraft.world.entity.SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, StinkBugEntity::canSpawn, SpawnPlacementRegisterEvent.Operation.OR); + event.register(AntarchyForgeEntites.STINK_BUG.get(), net.minecraft.world.entity.SpawnPlacements.Type.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, StinkBugEntity::canSpawn, SpawnPlacementRegisterEvent.Operation.OR); event.register(AntarchyForgeEntites.LUCID.get(), net.minecraft.world.entity.SpawnPlacements.Type.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, LucidEntity::canSpawn, SpawnPlacementRegisterEvent.Operation.OR); + event.register(AntarchyForgeEntites.VORTEX.get(), net.minecraft.world.entity.SpawnPlacements.Type.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, com.craisinlord.antarchy.content.entity.vortex.VortexEntity::canSpawn, SpawnPlacementRegisterEvent.Operation.OR); event.register(AntarchyForgeEntites.SCORPION.get(), net.minecraft.world.entity.SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, ScorpionEntity::canSpawn, SpawnPlacementRegisterEvent.Operation.OR); event.register(AntarchyForgeEntites.BASILISK.get(), net.minecraft.world.entity.SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BasiliskEntity::canSpawn, SpawnPlacementRegisterEvent.Operation.OR); - event.register(AntarchyForgeEntites.EMPEROR_SCORPION.get(), net.minecraft.world.entity.SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EmperorScorpionEntity::canSpawn, SpawnPlacementRegisterEvent.Operation.OR); - event.register(AntarchyForgeEntites.CREEPING_HORROR.get(), net.minecraft.world.entity.SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, CreepingHorrorEntity::canSpawn, SpawnPlacementRegisterEvent.Operation.OR); - event.register(AntarchyForgeEntites.LURKING_TERROR.get(), net.minecraft.world.entity.SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, LurkingTerrorEntity::canSpawn, SpawnPlacementRegisterEvent.Operation.OR); + event.register(AntarchyForgeEntites.EMPEROR_SCORPION.get(), net.minecraft.world.entity.SpawnPlacements.Type.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EmperorScorpionEntity::canSpawn, SpawnPlacementRegisterEvent.Operation.OR); + event.register(AntarchyForgeEntites.CRAWLING_BLIGHT.get(), net.minecraft.world.entity.SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, CrawlingBlightEntity::canSpawn, SpawnPlacementRegisterEvent.Operation.OR); + event.register(AntarchyForgeEntites.SKULKING_FRIGHT.get(), net.minecraft.world.entity.SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, SkulkingFrightEntity::canSpawn, SpawnPlacementRegisterEvent.Operation.OR); + event.register(AntarchyForgeEntites.MANTICORE.get(), net.minecraft.world.entity.SpawnPlacements.Type.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, com.craisinlord.antarchy.content.entity.ManticoreEntity::canSpawn, SpawnPlacementRegisterEvent.Operation.OR); event.register(AntarchyForgeEntites.JERRY.get(), net.minecraft.world.entity.SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, JerryEntity::canSpawn, SpawnPlacementRegisterEvent.Operation.OR); event.register(AntarchyForgeEntites.TERMITE.get(), net.minecraft.world.entity.SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules, SpawnPlacementRegisterEvent.Operation.OR); - event.register(AntarchyForgeEntites.ROLLY_POLLY.get(), net.minecraft.world.entity.SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, com.craisinlord.antarchy.content.entity.RollyPollyEntity::canSpawn, SpawnPlacementRegisterEvent.Operation.OR); + event.register(AntarchyForgeEntites.ROLLY_POLLY.get(), net.minecraft.world.entity.SpawnPlacements.Type.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, com.craisinlord.antarchy.content.entity.RollyPollyEntity::canSpawn, SpawnPlacementRegisterEvent.Operation.OR); event.register(AntarchyForgeEntites.CHEEP.get(), net.minecraft.world.entity.SpawnPlacements.Type.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, AbstractFish::checkSurfaceWaterAnimalSpawnRules, SpawnPlacementRegisterEvent.Operation.OR); event.register(AntarchyForgeEntites.DORRIE.get(), net.minecraft.world.entity.SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules, SpawnPlacementRegisterEvent.Operation.OR); event.register(AntarchyForgeEntites.OURANWOOD_DEER.get(), net.minecraft.world.entity.SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules, SpawnPlacementRegisterEvent.Operation.OR); diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/PortalGunServerEvents.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/PortalGunServerEvents.java new file mode 100644 index 00000000..a7419f65 --- /dev/null +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/PortalGunServerEvents.java @@ -0,0 +1,27 @@ +package com.craisinlord.antarchy.forge.registry; + +import com.craisinlord.antarchy.Antarchy; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.event.server.ServerStoppingEvent; +import net.minecraftforge.event.entity.player.PlayerEvent; + +@Mod.EventBusSubscriber(modid = Antarchy.MODID) +public final class PortalGunServerEvents { + private PortalGunServerEvents() { + } + + @SubscribeEvent + public static void onServerStopping(ServerStoppingEvent event) { + com.craisinlord.antarchy.content.portalgun.PortalGunResetManager.clear(event.getServer()); + com.craisinlord.antarchy.content.entity.ant.AntArrivalScheduler.clear(); + com.craisinlord.antarchy.content.portalgun.PortalGunMoonAimSync.clear(); + } + + @SubscribeEvent + public static void onPlayerLogin(PlayerEvent.PlayerLoggedInEvent event) { + if (event.getEntity() instanceof net.minecraft.server.level.ServerPlayer player) { + com.craisinlord.antarchy.content.portalgun.PortalGunSavedData.clearMissingGuns(player); + } + } +} diff --git a/forge-1.20.1/src/main/resources/META-INF/mods.toml b/forge-1.20.1/src/main/resources/META-INF/mods.toml index 7f5f4117..c5827025 100644 --- a/forge-1.20.1/src/main/resources/META-INF/mods.toml +++ b/forge-1.20.1/src/main/resources/META-INF/mods.toml @@ -4,27 +4,77 @@ license="${mod_license}" [[mods]] modId="${mod_id}" +logoFile="../assets/antarchy/antarchy_logo.png" + logoBlur=false version="${version}" displayName="${mod_name}" +displayURL="https://www.curseforge.com/minecraft/mc-mods/antarchy" authors="${mod_authors}" description='''${mod_description}''' displayTest="MATCH_VERSION" +[[mixins]] + config="antarchy-common.mixins.json" + +[[mixins]] + config="antarchy-forge.mixins.json" + [[dependencies.${mod_id}]] modId="forge" mandatory=true versionRange="${forge_version_range}" ordering="NONE" side="BOTH" + [[dependencies.${mod_id}]] modId="minecraft" mandatory=true versionRange="${minecraft_version_range}" ordering="NONE" side="BOTH" -# Antarchy already includes Apple Cows. Forge 1.20.1 has no "incompatible" dependency type, -# so this optional dependency uses a version range no release can satisfy: if the standalone -# Apple Cows mod is installed, Forge refuses to load instead of running both copies. + +[[dependencies.${mod_id}]] + modId="anthology" + mandatory=true + versionRange="[1.0.0,)" + ordering="AFTER" + side="BOTH" + +[[dependencies.${mod_id}]] + modId="antos" + mandatory=true + versionRange="[1.4.0,)" + ordering="AFTER" + side="BOTH" + +[[dependencies.${mod_id}]] + modId="integrated_api" + mandatory=true + versionRange="[1.8.1,)" + ordering="AFTER" + side="BOTH" + +[[dependencies.${mod_id}]] + modId="geckolib" + mandatory=true + versionRange="*" + ordering="AFTER" + side="BOTH" + +[[dependencies.${mod_id}]] + modId="sizeable_foliage" + mandatory=true + versionRange="*" + ordering="AFTER" + side="BOTH" + +[[dependencies.${mod_id}]] + modId="pehkui" + mandatory=true + versionRange="*" + ordering="AFTER" + side="BOTH" + [[dependencies.${mod_id}]] modId="apple_cows" mandatory=false @@ -32,8 +82,9 @@ displayTest="MATCH_VERSION" ordering="NONE" side="BOTH" -[[mixins]] - config="antarchy-common.mixins.json" - -[[mixins]] - config="antarchy-forge.mixins.json" +[[dependencies.${mod_id}]] + modId="hoverboards" + mandatory=false + versionRange="(,0)" + ordering="NONE" + side="BOTH" diff --git a/forge-1.20.1/src/main/resources/antarchy-forge.mixins.json b/forge-1.20.1/src/main/resources/antarchy-forge.mixins.json index bdb58de0..6f70ad22 100644 --- a/forge-1.20.1/src/main/resources/antarchy-forge.mixins.json +++ b/forge-1.20.1/src/main/resources/antarchy-forge.mixins.json @@ -4,15 +4,11 @@ "refmap": "antarchy-forge.mixins.refmap.json", "compatibilityLevel": "JAVA_17", "mixins": [ - "entity.MultipartEntityBridgeMixin", - "entity.MultipartEntityLevelRegistryMixin", + "compat.SablePhysicsColliderBlockGetterMixin", + "item.BucketItemThoraxisWaterMixin", "entity.ParalyzedMobFreezeMixin", "infinity.AmendmentRareOresMixin", - "infinity.ConfigGenInvocationMixin", - "item.BucketItemThoraxisWaterMixin", - "level.ClientLevelPartEntitiesAccessor", - "level.LevelStemDiagnosticMixin", - "level.ServerLevelPartEntitiesAccessor" + "infinity.ConfigGenInvocationMixin" ], "client": [ "client.LiquidBlockRendererMixin" diff --git a/forge-1.20.1/src/main/resources/assets/antarchy/models/item/antiwater_bucket.json b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/antiwater_bucket.json index 2e443b8f..a83c036c 100644 --- a/forge-1.20.1/src/main/resources/assets/antarchy/models/item/antiwater_bucket.json +++ b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/antiwater_bucket.json @@ -1,5 +1,5 @@ { - "parent": "neoforge:item/bucket", - "loader": "neoforge:fluid_container", + "parent": "forge:item/bucket", + "loader": "forge:fluid_container", "fluid": "antarchy:antiwater" } diff --git a/forge-1.20.1/src/main/resources/assets/antarchy/models/item/attitude_adjuster.json b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/attitude_adjuster.json index c3811473..b613d39b 100644 --- a/forge-1.20.1/src/main/resources/assets/antarchy/models/item/attitude_adjuster.json +++ b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/attitude_adjuster.json @@ -1,5 +1,5 @@ { - "loader": "neoforge:separate_transforms", + "loader": "forge:separate_transforms", "gui_light": "front", "textures": { "layer0": "antarchy:item/attitude_adjuster/attitude_adjuster_item" diff --git a/forge-1.20.1/src/main/resources/assets/antarchy/models/item/battle_axe.json b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/battle_axe.json index f2037157..49de92ab 100644 --- a/forge-1.20.1/src/main/resources/assets/antarchy/models/item/battle_axe.json +++ b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/battle_axe.json @@ -1,5 +1,5 @@ { - "loader": "neoforge:separate_transforms", + "loader": "forge:separate_transforms", "gui_light": "front", "textures": { "layer0": "antarchy:item/battle_axe/battle_axe_item" diff --git a/forge-1.20.1/src/main/resources/assets/antarchy/models/item/big_bertha.json b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/big_bertha.json index 0654e457..7daf8076 100644 --- a/forge-1.20.1/src/main/resources/assets/antarchy/models/item/big_bertha.json +++ b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/big_bertha.json @@ -1,5 +1,5 @@ { - "loader": "neoforge:separate_transforms", + "loader": "forge:separate_transforms", "gui_light": "front", "textures": { "layer0": "antarchy:item/big_bertha/big_bertha_item" diff --git a/forge-1.20.1/src/main/resources/assets/antarchy/models/item/bile_bucket.json b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/bile_bucket.json index e3943e08..c62a3df4 100644 --- a/forge-1.20.1/src/main/resources/assets/antarchy/models/item/bile_bucket.json +++ b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/bile_bucket.json @@ -1,5 +1,5 @@ { - "parent": "neoforge:item/bucket", - "loader": "neoforge:fluid_container", + "parent": "forge:item/bucket", + "loader": "forge:fluid_container", "fluid": "antarchy:bile" } diff --git a/forge-1.20.1/src/main/resources/assets/antarchy/models/item/eye_of_the_storm.json b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/eye_of_the_storm.json new file mode 100644 index 00000000..41b7f7c8 --- /dev/null +++ b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/eye_of_the_storm.json @@ -0,0 +1,25 @@ +{ + "loader": "forge:separate_transforms", + "gui_light": "front", + "textures": { + "layer0": "antarchy:item/eye_of_the_storm/eye_of_the_storm_item" + }, + "base": { + "parent": "antarchy:item/eye_of_the_storm_held_geo" + }, + "texture_size": [ + 64, + 64 + ], + "perspectives": { + "gui": { + "parent": "antarchy:item/eye_of_the_storm_gui" + }, + "ground": { + "parent": "antarchy:item/eye_of_the_storm_gui" + }, + "fixed": { + "parent": "antarchy:item/eye_of_the_storm_gui" + } + } +} diff --git a/forge-1.20.1/src/main/resources/assets/antarchy/models/item/giant_frying_pan.json b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/giant_frying_pan.json new file mode 100644 index 00000000..9370f947 --- /dev/null +++ b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/giant_frying_pan.json @@ -0,0 +1,25 @@ +{ + "loader": "forge:separate_transforms", + "gui_light": "front", + "textures": { + "layer0": "antarchy:item/giant_frying_pan/giant_frying_pan_in_hand" + }, + "base": { + "parent": "antarchy:item/giant_frying_pan_held" + }, + "texture_size": [ + 128, + 128 + ], + "perspectives": { + "gui": { + "parent": "antarchy:item/giant_frying_pan_gui" + }, + "ground": { + "parent": "antarchy:item/giant_frying_pan_gui" + }, + "fixed": { + "parent": "antarchy:item/giant_frying_pan_gui" + } + } +} diff --git a/forge-1.20.1/src/main/resources/assets/antarchy/models/item/gravity_gun.json b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/gravity_gun.json index f0da5cd5..f76baebc 100644 --- a/forge-1.20.1/src/main/resources/assets/antarchy/models/item/gravity_gun.json +++ b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/gravity_gun.json @@ -1,5 +1,5 @@ { - "loader": "neoforge:separate_transforms", + "loader": "forge:separate_transforms", "gui_light": "front", "base": { "parent": "antarchy:item/gravity_gun_held_geo" diff --git a/forge-1.20.1/src/main/resources/assets/antarchy/models/item/growth_ray.json b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/growth_ray.json index bd6a200a..d74e876c 100644 --- a/forge-1.20.1/src/main/resources/assets/antarchy/models/item/growth_ray.json +++ b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/growth_ray.json @@ -1,5 +1,5 @@ { - "loader": "neoforge:separate_transforms", + "loader": "forge:separate_transforms", "gui_light": "front", "base": { "parent": "antarchy:item/grow_ray_held_geo" diff --git a/forge-1.20.1/src/main/resources/assets/antarchy/models/item/ichor_bucket.json b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/ichor_bucket.json index 895a0ba3..ca00fb01 100644 --- a/forge-1.20.1/src/main/resources/assets/antarchy/models/item/ichor_bucket.json +++ b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/ichor_bucket.json @@ -1,5 +1,5 @@ { - "parent": "neoforge:item/bucket", - "loader": "neoforge:fluid_container", + "parent": "forge:item/bucket", + "loader": "forge:fluid_container", "fluid": "antarchy:ichor" } diff --git a/forge-1.20.1/src/main/resources/assets/antarchy/models/item/krakens_grasp.json b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/krakens_grasp.json index 5331dc07..44988e22 100644 --- a/forge-1.20.1/src/main/resources/assets/antarchy/models/item/krakens_grasp.json +++ b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/krakens_grasp.json @@ -1,5 +1,5 @@ { - "loader": "neoforge:separate_transforms", + "loader": "forge:separate_transforms", "gui_light": "front", "textures": { "layer0": "antarchy:item/krakens_grasp/krakens_grasp_item" diff --git a/forge-1.20.1/src/main/resources/assets/antarchy/models/item/lumen_bucket.json b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/lumen_bucket.json index 49b64eed..b065e7a8 100644 --- a/forge-1.20.1/src/main/resources/assets/antarchy/models/item/lumen_bucket.json +++ b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/lumen_bucket.json @@ -1,5 +1,5 @@ { - "parent": "neoforge:item/bucket", - "loader": "neoforge:fluid_container", + "parent": "forge:item/bucket", + "loader": "forge:fluid_container", "fluid": "antarchy:lumen" } diff --git a/forge-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun.json b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun.json new file mode 100644 index 00000000..52c3f866 --- /dev/null +++ b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun.json @@ -0,0 +1,18 @@ +{ + "loader": "forge:separate_transforms", + "gui_light": "front", + "base": { + "parent": "antarchy:item/portal_gun_held_geo" + }, + "perspectives": { + "gui": { + "parent": "antarchy:item/portal_gun_gui" + }, + "ground": { + "parent": "antarchy:item/portal_gun_gui" + }, + "fixed": { + "parent": "antarchy:item/portal_gun_gui" + } + } +} diff --git a/forge-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun_atlas.json b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun_atlas.json new file mode 100644 index 00000000..7db2fc65 --- /dev/null +++ b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun_atlas.json @@ -0,0 +1,18 @@ +{ + "loader": "forge:separate_transforms", + "gui_light": "front", + "base": { + "parent": "antarchy:item/portal_gun_held_geo" + }, + "perspectives": { + "gui": { + "parent": "antarchy:item/portal_gun_atlas_gui" + }, + "ground": { + "parent": "antarchy:item/portal_gun_atlas_gui" + }, + "fixed": { + "parent": "antarchy:item/portal_gun_atlas_gui" + } + } +} diff --git a/forge-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun_craisin.json b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun_craisin.json new file mode 100644 index 00000000..69f4743e --- /dev/null +++ b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun_craisin.json @@ -0,0 +1,18 @@ +{ + "loader": "forge:separate_transforms", + "gui_light": "front", + "base": { + "parent": "antarchy:item/portal_gun_held_geo" + }, + "perspectives": { + "gui": { + "parent": "antarchy:item/portal_gun_craisin_gui" + }, + "ground": { + "parent": "antarchy:item/portal_gun_craisin_gui" + }, + "fixed": { + "parent": "antarchy:item/portal_gun_craisin_gui" + } + } +} diff --git a/forge-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun_laynce.json b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun_laynce.json new file mode 100644 index 00000000..382a4297 --- /dev/null +++ b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun_laynce.json @@ -0,0 +1,18 @@ +{ + "loader": "forge:separate_transforms", + "gui_light": "front", + "base": { + "parent": "antarchy:item/portal_gun_held_geo" + }, + "perspectives": { + "gui": { + "parent": "antarchy:item/portal_gun_laynce_gui" + }, + "ground": { + "parent": "antarchy:item/portal_gun_laynce_gui" + }, + "fixed": { + "parent": "antarchy:item/portal_gun_laynce_gui" + } + } +} diff --git a/forge-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun_p_body.json b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun_p_body.json new file mode 100644 index 00000000..4326447d --- /dev/null +++ b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun_p_body.json @@ -0,0 +1,18 @@ +{ + "loader": "forge:separate_transforms", + "gui_light": "front", + "base": { + "parent": "antarchy:item/portal_gun_held_geo" + }, + "perspectives": { + "gui": { + "parent": "antarchy:item/portal_gun_p_body_gui" + }, + "ground": { + "parent": "antarchy:item/portal_gun_p_body_gui" + }, + "fixed": { + "parent": "antarchy:item/portal_gun_p_body_gui" + } + } +} diff --git a/forge-1.20.1/src/main/resources/assets/antarchy/models/item/royal_assailant_battleaxe.json b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/royal_assailant_battleaxe.json new file mode 100644 index 00000000..fc73d469 --- /dev/null +++ b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/royal_assailant_battleaxe.json @@ -0,0 +1,25 @@ +{ + "loader": "forge:separate_transforms", + "gui_light": "front", + "textures": { + "layer0": "antarchy:item/royal_assailant/royal_assailant_battleaxe_item" + }, + "base": { + "parent": "antarchy:item/royal_assailant_battleaxe_held" + }, + "texture_size": [ + 64, + 64 + ], + "perspectives": { + "gui": { + "parent": "antarchy:item/royal_assailant_battleaxe_gui" + }, + "ground": { + "parent": "antarchy:item/royal_assailant_battleaxe_gui" + }, + "fixed": { + "parent": "antarchy:item/royal_assailant_battleaxe_gui" + } + } +} diff --git a/forge-1.20.1/src/main/resources/assets/antarchy/models/item/royal_assailant_staff.json b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/royal_assailant_staff.json new file mode 100644 index 00000000..a431f562 --- /dev/null +++ b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/royal_assailant_staff.json @@ -0,0 +1 @@ +{"loader":"forge:separate_transforms","gui_light":"front","base":{"parent":"antarchy:item/royal_assailant_staff_held_geo"},"perspectives":{"gui":{"parent":"minecraft:item/generated","textures":{"layer0":"antarchy:item/royal_assailant_staff_item"}},"ground":{"parent":"minecraft:item/generated","textures":{"layer0":"antarchy:item/royal_assailant_staff_item"}},"fixed":{"parent":"minecraft:item/generated","textures":{"layer0":"antarchy:item/royal_assailant_staff_item"}}}} diff --git a/forge-1.20.1/src/main/resources/assets/antarchy/models/item/royal_guardian_sword.json b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/royal_guardian_sword.json new file mode 100644 index 00000000..5d8ddf2a --- /dev/null +++ b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/royal_guardian_sword.json @@ -0,0 +1,25 @@ +{ + "loader": "forge:separate_transforms", + "gui_light": "front", + "textures": { + "layer0": "antarchy:item/royal_guardian/royal_guardian_sword_item" + }, + "base": { + "parent": "antarchy:item/royal_guardian_sword_held" + }, + "texture_size": [ + 64, + 64 + ], + "perspectives": { + "gui": { + "parent": "antarchy:item/royal_guardian_sword_gui" + }, + "ground": { + "parent": "antarchy:item/royal_guardian_sword_gui" + }, + "fixed": { + "parent": "antarchy:item/royal_guardian_sword_gui" + } + } +} diff --git a/forge-1.20.1/src/main/resources/assets/antarchy/models/item/rpo_launcher.json b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/rpo_launcher.json index 5d625dfa..c6bbc4b6 100644 --- a/forge-1.20.1/src/main/resources/assets/antarchy/models/item/rpo_launcher.json +++ b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/rpo_launcher.json @@ -1,5 +1,5 @@ { - "loader": "neoforge:separate_transforms", + "loader": "forge:separate_transforms", "gui_light": "front", "base": { "parent": "antarchy:item/rpo_launcher_held_geo" diff --git a/forge-1.20.1/src/main/resources/assets/antarchy/models/item/shrink_ray.json b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/shrink_ray.json index 204d65b1..50e888da 100644 --- a/forge-1.20.1/src/main/resources/assets/antarchy/models/item/shrink_ray.json +++ b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/shrink_ray.json @@ -1,5 +1,5 @@ { - "loader": "neoforge:separate_transforms", + "loader": "forge:separate_transforms", "gui_light": "front", "base": { "parent": "antarchy:item/shrink_ray_held_geo" diff --git a/forge-1.20.1/src/main/resources/assets/antarchy/models/item/squidzooka.json b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/squidzooka.json index e09e56ac..98cebd77 100644 --- a/forge-1.20.1/src/main/resources/assets/antarchy/models/item/squidzooka.json +++ b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/squidzooka.json @@ -1,5 +1,5 @@ { - "loader": "neoforge:separate_transforms", + "loader": "forge:separate_transforms", "gui_light": "front", "base": { "parent": "antarchy:item/squidzooka_held_geo" diff --git a/forge-1.20.1/src/main/resources/assets/antarchy/models/item/water_cannon.json b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/water_cannon.json index b260121f..5f2e1150 100644 --- a/forge-1.20.1/src/main/resources/assets/antarchy/models/item/water_cannon.json +++ b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/water_cannon.json @@ -1,5 +1,5 @@ { - "loader": "neoforge:separate_transforms", + "loader": "forge:separate_transforms", "gui_light": "front", "base": { "parent": "antarchy:item/water_cannon_held_geo" diff --git a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/ant_nests_in_forests.json b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/ant_nests_in_forests.json index 684bd2ee..b5ca5aa4 100644 --- a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/ant_nests_in_forests.json +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/ant_nests_in_forests.json @@ -1,5 +1,5 @@ { - "type": "neoforge:add_features", + "type": "forge:add_features", "biomes": "#antarchy:overworld_ant_nest_spawn_biomes", "features": [ "antarchy:brown_ant_nest", diff --git a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/apple_cow_spawns.json b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/apple_cow_spawns.json index 56d37a76..05af225f 100644 --- a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/apple_cow_spawns.json +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/apple_cow_spawns.json @@ -1,5 +1,5 @@ { - "type": "neoforge:add_spawns", + "type": "forge:add_spawns", "biomes": "#antarchy:apple_cow_spawn_biomes", "spawners": [ { diff --git a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/corn_patch_in_spawn_biomes.json b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/corn_patch_in_spawn_biomes.json index 84d1b78c..198d2f76 100644 --- a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/corn_patch_in_spawn_biomes.json +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/corn_patch_in_spawn_biomes.json @@ -1,5 +1,5 @@ { - "type": "neoforge:add_features", + "type": "forge:add_features", "biomes": "#antarchy:wild_corn_spawn_biomes", "features": [ "antarchy:corn_patch" diff --git a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/dorrie_elythia_spawns.json b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/dorrie_elythia_spawns.json index 9baade84..90f7c4c2 100644 --- a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/dorrie_elythia_spawns.json +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/dorrie_elythia_spawns.json @@ -1,5 +1,5 @@ { - "type": "neoforge:add_spawns", + "type": "forge:add_spawns", "biomes": "#antarchy:dorrie_elythia_spawn_biomes", "spawners": [ { diff --git a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/dorrie_overworld_spawns.json b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/dorrie_overworld_spawns.json index da128713..6ed30e30 100644 --- a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/dorrie_overworld_spawns.json +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/dorrie_overworld_spawns.json @@ -1,5 +1,5 @@ { - "type": "neoforge:add_spawns", + "type": "forge:add_spawns", "biomes": "#antarchy:dorrie_overworld_spawn_biomes", "spawners": [ { diff --git a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/flower_forest_butterfly_spawns.json b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/flower_forest_butterfly_spawns.json index d33716ff..fd906613 100644 --- a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/flower_forest_butterfly_spawns.json +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/flower_forest_butterfly_spawns.json @@ -1,5 +1,5 @@ { - "type": "neoforge:add_spawns", + "type": "forge:add_spawns", "biomes": "#antarchy:flower_forest_butterfly_spawn_biomes", "spawners": [ { diff --git a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/flower_forest_caterpillar_spawns.json b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/flower_forest_caterpillar_spawns.json index 11677bc2..902c1c08 100644 --- a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/flower_forest_caterpillar_spawns.json +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/flower_forest_caterpillar_spawns.json @@ -1,5 +1,5 @@ { - "type": "neoforge:add_spawns", + "type": "forge:add_spawns", "biomes": "#antarchy:flower_forest_caterpillar_spawn_biomes", "spawners": [ { diff --git a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/flying_squirrel_spawns.json b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/flying_squirrel_spawns.json index a507b07b..2b9cdead 100644 --- a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/flying_squirrel_spawns.json +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/flying_squirrel_spawns.json @@ -1,5 +1,5 @@ { - "type": "neoforge:add_spawns", + "type": "forge:add_spawns", "biomes": "#antarchy:flying_squirrel_spawn_biomes", "spawners": [ { diff --git a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/golden_apple_cow_spawns.json b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/golden_apple_cow_spawns.json index fae16f0e..7b9dfe1b 100644 --- a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/golden_apple_cow_spawns.json +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/golden_apple_cow_spawns.json @@ -1,5 +1,5 @@ { - "type": "neoforge:add_spawns", + "type": "forge:add_spawns", "biomes": "#antarchy:golden_apple_cow_spawn_biomes", "spawners": [ { diff --git a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/kings_tree_grid_in_elythia.json b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/kings_tree_grid_in_elythia.json new file mode 100644 index 00000000..6440f818 --- /dev/null +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/kings_tree_grid_in_elythia.json @@ -0,0 +1,8 @@ +{ + "type": "forge:add_features", + "biomes": "#antarchy:is_elythia", + "features": [ + "antarchy:kings_tree_grid" + ], + "step": "vegetal_decoration" +} diff --git a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/mantis_spawns.json b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/mantis_spawns.json index 961e3cd9..7ca5ca2b 100644 --- a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/mantis_spawns.json +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/mantis_spawns.json @@ -1,5 +1,5 @@ { - "type": "neoforge:add_spawns", + "type": "forge:add_spawns", "biomes": "#antarchy:mantis_overworld_spawn_biomes", "spawners": [ { diff --git a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/milkweed_in_flower_forests.json b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/milkweed_in_flower_forests.json index 041b3378..f90bfcbb 100644 --- a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/milkweed_in_flower_forests.json +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/milkweed_in_flower_forests.json @@ -1,5 +1,5 @@ { - "type": "neoforge:add_features", + "type": "forge:add_features", "biomes": "#antarchy:milkweed_spawn_biomes", "features": [ "antarchy:flower_forest_milkweed" diff --git a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/missile_squid_spawns.json b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/missile_squid_spawns.json index 218b4c94..69b79475 100644 --- a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/missile_squid_spawns.json +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/missile_squid_spawns.json @@ -1,5 +1,5 @@ { - "type": "neoforge:add_spawns", + "type": "forge:add_spawns", "biomes": "#antarchy:missile_squid_spawn_biomes", "spawners": [ { diff --git a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/octopus_bomb_spawns.json b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/octopus_bomb_spawns.json deleted file mode 100644 index 8faeead3..00000000 --- a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/octopus_bomb_spawns.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "neoforge:add_spawns", - "biomes": [ - "minecraft:deep_ocean", - "minecraft:deep_cold_ocean", - "minecraft:deep_lukewarm_ocean", - "minecraft:deep_frozen_ocean" - ], - "spawners": [ - { - "type": "antarchy:octopus_bomb", - "weight": 2, - "minCount": 1, - "maxCount": 2 - } - ] -} diff --git a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/ores_in_elythia.json b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/ores_in_elythia.json index dca3e3bb..b7a05858 100644 --- a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/ores_in_elythia.json +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/ores_in_elythia.json @@ -1,5 +1,5 @@ { - "type": "neoforge:add_features", + "type": "forge:add_features", "biomes": "#antarchy:is_elythia", "features": [ "antarchy:uranium_ore", diff --git a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/ores_in_overworld.json b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/ores_in_overworld.json index e5406487..1659c498 100644 --- a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/ores_in_overworld.json +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/ores_in_overworld.json @@ -1,5 +1,5 @@ { - "type": "neoforge:add_features", + "type": "forge:add_features", "biomes": "#minecraft:is_overworld", "features": [ "antarchy:uranium_ore", diff --git a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/red_ant_nests_in_nether.json b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/red_ant_nests_in_nether.json index c9981ced..9b081a2a 100644 --- a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/red_ant_nests_in_nether.json +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/red_ant_nests_in_nether.json @@ -1,5 +1,5 @@ { - "type": "neoforge:add_features", + "type": "forge:add_features", "biomes": "#antarchy:red_ant_nest_spawn_biomes", "features": [ "antarchy:red_ant_nest" diff --git a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/remove_glow_lichen_from_cavaryn.json b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/remove_glow_lichen_from_cavaryn.json index 206947e6..9c877785 100644 --- a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/remove_glow_lichen_from_cavaryn.json +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/remove_glow_lichen_from_cavaryn.json @@ -1,5 +1,5 @@ { - "type": "neoforge:remove_features", + "type": "forge:remove_features", "biomes": "#antarchy:is_cavaryn", "features": [ "minecraft:glow_lichen" diff --git a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/seashell_in_oceans.json b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/seashell_in_oceans.json index f6cd05f7..3541e8ef 100644 --- a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/seashell_in_oceans.json +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/seashell_in_oceans.json @@ -1,5 +1,5 @@ { - "type": "neoforge:add_features", + "type": "forge:add_features", "biomes": "#antarchy:has_seashell", "features": ["antarchy:seashell_patch"], "step": "vegetal_decoration" diff --git a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/seashell_in_warm_oceans.json b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/seashell_in_warm_oceans.json index 660adf03..538fd7b1 100644 --- a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/seashell_in_warm_oceans.json +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/seashell_in_warm_oceans.json @@ -1,5 +1,5 @@ { - "type": "neoforge:add_features", + "type": "forge:add_features", "biomes": "#antarchy:has_rare_seashell", "features": ["antarchy:seashell_patch_rare"], "step": "vegetal_decoration" diff --git a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/shellstone_in_oceans_and_beaches.json b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/shellstone_in_oceans_and_beaches.json index 4f737bfc..bfeeeb07 100644 --- a/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/shellstone_in_oceans_and_beaches.json +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/shellstone_in_oceans_and_beaches.json @@ -1,5 +1,5 @@ { - "type": "neoforge:add_features", + "type": "forge:add_features", "biomes": "#antarchy:has_shellstone", "features": [ "antarchy:shellstone_upper", diff --git a/integrated_api_jars/integrated_api-fabric-1.20.1-1.9.1.jar b/integrated_api_jars/integrated_api-fabric-1.20.1-1.9.1.jar new file mode 100644 index 00000000..21573b0c Binary files /dev/null and b/integrated_api_jars/integrated_api-fabric-1.20.1-1.9.1.jar differ diff --git a/integrated_api_jars/integrated_api-forge-1.20.1-1.9.1-dev-shadow.jar b/integrated_api_jars/integrated_api-forge-1.20.1-1.9.1-dev-shadow.jar new file mode 100644 index 00000000..5f02a504 Binary files /dev/null and b/integrated_api_jars/integrated_api-forge-1.20.1-1.9.1-dev-shadow.jar differ diff --git a/integrated_api_jars/integrated_api-forge-1.20.1-1.9.1.jar b/integrated_api_jars/integrated_api-forge-1.20.1-1.9.1.jar new file mode 100644 index 00000000..43407b1b Binary files /dev/null and b/integrated_api_jars/integrated_api-forge-1.20.1-1.9.1.jar differ diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java index 962822bd..fc5b0670 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java @@ -601,7 +601,6 @@ public final class AntarchyConfigModuleNeoforge { AntarchySettings.setShrinkingPotionDelta(AntarchyToolsConfig.shrinkingPotionDelta()); AntarchySettings.setGrowthPotionDelta(AntarchyToolsConfig.growthPotionDelta()); - AntarchySettings.setInvertProjectilesFromInvertedPlayers(AntarchyToolsConfig.invertProjectilesFromInvertedPlayers()); AntarchySettings.setGravityGunEnabled(AntarchyToolsConfig.gravityGunEnabled()); AntarchySettings.setGravityGunBlocksEnabled(AntarchyToolsConfig.gravityGunBlocksEnabled()); diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyToolsConfig.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyToolsConfig.java index eac2a651..0fb6941f 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyToolsConfig.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyToolsConfig.java @@ -264,7 +264,6 @@ public final class AntarchyToolsConfig { private static final ModConfigSpec.DoubleValue DUCT_TAPE_REPAIR_PERCENT_PER_USE; private static final ModConfigSpec.DoubleValue POTENT_NYXITE_INVERTED_DURATION_SECONDS; - private static final ModConfigSpec.BooleanValue INVERT_PROJECTILES_FROM_INVERTED_PLAYERS; private static final ModConfigSpec.IntValue CORNEA_EAR_NIGHT_VISION_SECONDS; private static final ModConfigSpec.BooleanValue AMERICAN_ENABLED; private static final ModConfigSpec.IntValue AMERICAN_BONUS_NUTRITION; @@ -579,18 +578,6 @@ public final class AntarchyToolsConfig { b.pop(); - // Gravity - - b.push("gravity"); - INVERT_PROJECTILES_FROM_INVERTED_PLAYERS = b - .comment( - "If true, projectiles fired by inverted players keep their inverted launch and gravity.", - "Affects bows, crossbows, throwables, and firework boosts." - ) - .define("invertProjectilesFromInvertedPlayers", false); - b.pop(); - - // Gravity Gun b.push("gravityGun"); @@ -804,7 +791,6 @@ public final class AntarchyToolsConfig { static double shrinkingPotionDelta() { return SHRINKING_POTION_DELTA.get(); } static double growthPotionDelta() { return GROWTH_POTION_DELTA.get(); } - static boolean invertProjectilesFromInvertedPlayers() { return INVERT_PROJECTILES_FROM_INVERTED_PLAYERS.get(); } static boolean gravityGunEnabled() { return GRAVITY_GUN_ENABLED.get(); } static boolean gravityGunBlocksEnabled() { return GRAVITY_GUN_BLOCKS_ENABLED.get(); } diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/InfinityBlockEntityScanGuard.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/InfinityBlockEntityScanGuard.java new file mode 100644 index 00000000..7f1dab02 --- /dev/null +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/InfinityBlockEntityScanGuard.java @@ -0,0 +1,21 @@ +package com.craisinlord.antarchy.neoforge; + +import java.util.Set; +import java.util.function.BiConsumer; +import java.util.function.Consumer; + +public final class InfinityBlockEntityScanGuard { + private InfinityBlockEntityScanGuard() { + } + + public static void forEach(Set entries, Consumer scan, + BiConsumer reportFailure) { + entries.forEach(entry -> { + try { + scan.accept(entry); + } catch (LinkageError error) { + reportFailure.accept(entry, error); + } + }); + } +} diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/mixins/infinity/ConfigGeneratorMixin.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/mixins/infinity/ConfigGeneratorMixin.java new file mode 100644 index 00000000..2fe25b4b --- /dev/null +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/mixins/infinity/ConfigGeneratorMixin.java @@ -0,0 +1,31 @@ +package com.craisinlord.antarchy.neoforge.mixins.infinity; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.neoforge.InfinityBlockEntityScanGuard; +import java.util.Set; +import java.util.function.Consumer; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.level.block.entity.BlockEntityType; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Pseudo; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Pseudo +@Mixin(targets = "net.codexarchonic.infinity.util.config.ConfigGenerator", remap = false) +public interface ConfigGeneratorMixin { + @Redirect( + method = "generateBEs()V", + at = @At(value = "INVOKE", target = "Ljava/util/Set;forEach(Ljava/util/function/Consumer;)V", ordinal = 0), + remap = false, + require = 0 + ) + static void antarchy$skipBrokenBlockEntityFactories( + Set>> entries, + Consumer>> scan) { + InfinityBlockEntityScanGuard.forEach(entries, scan, (entry, error) -> + Antarchy.LOGGER.warn( + "[Antarchy] Skipping block entity {} in Infinite Dimensions' config scan because its factory has a linkage error. Check the owning mod's dependency versions; normal block placement is still affected.", + entry.location(), error)); + } +} diff --git a/neoforge-1.21.1/src/main/resources/antarchy-neoforge.mixins.json b/neoforge-1.21.1/src/main/resources/antarchy-neoforge.mixins.json index 8a32de93..12f078df 100644 --- a/neoforge-1.21.1/src/main/resources/antarchy-neoforge.mixins.json +++ b/neoforge-1.21.1/src/main/resources/antarchy-neoforge.mixins.json @@ -9,6 +9,7 @@ "entity.ParalyzedMobFreezeMixin", "infinity.AmendmentRareOresMixin", "infinity.ConfigGenInvocationMixin", + "infinity.ConfigGeneratorMixin", "infinity.PortalCreatorMixin", "infinity.PortalCreatorInvoker", "infinity.WarpLogicMixin"